【问题标题】:How to get JavaCard version on card如何在卡上获取 JavaCard 版本
【发布时间】:2014-09-30 22:16:26
【问题描述】:

如何从卡中获取java卡版本? 有什么方法可以从卡中获取 JC 的版本。 或者我应该尝试为每个 JC 版本选项安装特定的小程序。

【问题讨论】:

  • 不要忘记跟进您的问题。
  • 我还发现了有用的项目AlgTest。它有助于确定卡支持哪些加密算法。此信息还有助于确定 JC 版本。

标签: version javacard


【解决方案1】:

确定“白色”智能卡支持的 JavaCard API 版本的唯一全面验证方法是为每个 JavaCard 版本构建单独的 CAP 文件。

我建议你让每个 CAP 只包含一个扩展 javacard.framework.Applet 的简单类。您可能希望能够实际安装您的简单小程序并与它实际交换 APDU,以确保它确实有效;据我所知,即使并非所有导入都已解决,Java Card 虚拟机实现也允许上传 CAP 文件,但如果您尝试实际使用 API,则应该会失败。

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

我已经包含了一个 AID 列表 - package_version_major.package_version_minor (package_name) 信息。该列表可能不完整。

Java Card 2.1.1:A0000000620201 - 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:A0000000620201 - 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:A0000000620201 - 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)

考虑到上述信息,请允许我指出 Michael Roland 的回答有点误导。调用JCSystem.getVersion() 无助于确定是否支持Java Card 版本;如果您已经到了可以实际调用 API 的程度,那么您已经确定该版本是受支持的。

【讨论】:

  • 那么Android应用TagInfo不是完全证明的吗?它可以通过点击卡片告诉我 Java Card 的版本。
【解决方案2】:
short version = JCSystem.getVersion();

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

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

【讨论】:

    【解决方案3】:

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

    有了这些信息,您应该能够向操作系统的创建者询问更多信息,例如完全支持哪个版本、全球平台支持、其他库等。当然这取决于如果他们真的认为您值得支持,请了解您的身份和位置。

    一个小问题是,Visa 似乎维护了标识符到实际公司的映射。我还没有在互联网上找到一个明确的列表,但更常见的似乎是已知的。

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多