如何在卡片上获得JavaCard版本



如何从卡中获取java卡版本?是否有任何方法如何从卡中获得JC的版本。或者我应该尝试安装特定于每个JC版本选项的小程序。

确定"白色"智能卡支持的JavaCard API版本的唯一完全可靠的方法是为每个JavaCard版本构建一个单独的CAP文件。

我建议让每个CAP只包含一个扩展javacard.framework.Applet的简单类。你可能希望能够安装简单的applet并与之交换apdu以确保它能够正常工作;据我所知,Java Card虚拟机实现允许上传CAP文件,即使不是所有的导入都被解析,但如果您尝试实际使用api,则应该失败。

一旦生成了一个CAP文件,您就可以通过解析生成的CAP文件中的COMPONENT_Import组件来验证它实际上链接到了预期的JavaCard API包。CAP文件格式在JavaCard虚拟机规范中有描述,您需要的字段是导入JavaCard包的package_info。

我已经包含了AID - package_version_major的列表。Package_version_minor (package_name)信息。列表可能不完整。

Java Card 2.1.1: a0000000620101 - 1.1 (javacardx.crypto)

Java Card 2.1.1: A0000000620101 - 1.0 (javacard.framework)

Java Card 2.1.1: A0000000620001 - 1.0 (java.lang)

Java Card 2.1.1: A0000000620102 - 1.1 (javacard.security)

Java Card 2.2.1: A0000000620201 - 1.2 (javacardx.crypto)

Java Card 2.2.1: A0000000620101 - 1.2 (javacard.framework)

Java Card 2.2.1: A0000000620002 - 1.0 (java.io)

Java Card 2.2.1: A0000000620001 - 1.0 (java.lang)

Java Card 2.2.1: A0000000620003 - 1.0 (java.rmi)

Java Card 2.2.1: A0000000620102 - 1.2 (javacard.security)

Java Card 2.2.1: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 2.2.2: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 2.2.2: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 2.2.2: A0000000620201 - 1.3 (javacardx.crypto)

Java Card 2.2.2: A0000000620203 - 1.0 (javacardx.external)

Java Card 2.2.2: A0000000620101 - 1.3 (javacard.framework)

Java Card 2.2.2: A0000000620002 - 1.0 (java.io)

Java Card 2.2.2: A0000000620001 - 1.0 (java.lang)

Java Card 2.2.2: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 2.2.2: A0000000620003 - 1.0 (java.rmi)

Java Card 2.2.2: A0000000620102 - 1.3 (javacard.security)

Java Card 2.2.2: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 2.2.2: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 2.2.2: A000000062020801 - 1.0 (javacardx.framework.util)

Java Card 3.0.1: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 3.0.1: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 3.0.1: a0000000620101 - 1.4 (javacardx.crypto)

Java Card 3.0.1: A0000000620203 - 1.0 (javacardx.external)

Java Card 3.0.1: A0000000620101 - 1.4 (javacard.framework)

Java Card 3.0.1: A00000006202080101 - 1.0 (javacardx.framework.util.intx)

Java Card 3.0.1: A0000000620002 - 1.0 (java.io)

Java Card 3.0.1: A0000000620001 - 1.0 (java.lang)

Java Card 3.0.1: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 3.0.1: A0000000620003 - 1.0 (java.rmi)

Java Card 3.0.1: A0000000620102 - 1.4 (javacard.security)

Java Card 3.0.1: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 3.0.1: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 3.0.1: A000000062020801 - 1.0 (javacardx.framework.util)

Java Card 3.0.4: A0000000620209 - 1.0 (javacardx.apdu)

Java Card 3.0.4: A0000000620202 - 1.2 (javacardx.biometry)

Java Card 3.0.4: a0000000620101 - 1.4 (javacardx.crypto)

Java Card 3.0.4: A0000000620203 - 1.0 (javacardx.external)

Java Card 3.0.4: A0000000620101 - 1.5 (javacard.framework)

Java Card 3.0.4: A00000006202080101 - 1.0 (javacardx.framework.util.intx)

Java Card 3.0.4: A0000000620002 - 1.0 (java.io)

Java Card 3.0.4: A0000000620001 - 1.0 (java.lang)

Java Card 3.0.4: A000000062020802 - 1.0 (javacardx.framework.math)

Java Card 3.0.4: A0000000620003 - 1.0 (java.rmi)

Java Card 3.0.4: A0000000620102 - 1.5 (javacard.security)

Java Card 3.0.4: A000000062010101 - 1.0 (javacard.framework.service)

Java Card 3.0.4: A000000062020804 - 1.0 (javacardx.framework.string)

Java Card 3.0.4: A000000062020803 - 1.0 (javacardx.framework.tlv)

Java Card 3.0.4: A000000062020801 - 1.0 (javacardx.framework.util)

考虑到以上信息,请允许我指出,迈克尔·罗兰的答案有点误导人。调用JCSystem.getVersion()不能帮助确定是否支持Java Card版本;如果你已经可以调用API了,那么你就已经确定这个版本是被支持的了。
short version = JCSystem.getVersion();

方法getVersion()返回Java Card API的主要和次要版本(每个部分在一个字节中)。没有办法区分子版本(例如2.2.1和2.2.2)。

只知道你的芯片包含Java Card运行时环境,没有办法从芯片中查询更具体的信息。(不过,有些芯片可能会暴露更具体的信息。)一般情况下,您应向制造商/供应商获取此类信息。

我将大胆地提出一些解决这个问题的方法。如果可以加载applet,通常还可以访问Global Platform卡管理器。卡管理器应该支持一个名为GET CPLC (DATA)的命令APDU。这将返回卡生产生命周期数据,其中包括芯片制造商的标识符(数量有限)、操作系统制造商和版本信息。

有了这些信息,您应该能够向操作系统的创建者询问更多信息,例如确切支持的版本,全局平台支持,其他库等。当然,这取决于你是谁,你在哪里,如果他们真的认为你值得支持。

一个小问题是Visa似乎保持了标识符到实际公司的映射。我还没有在网上找到一个明确的清单,但更常见的似乎是已知的。

最新更新