【问题标题】:Is it possible to query a GlobalPlatform smart card for its remaining persistent memory?是否可以查询 GlobalPlatform 智能卡的剩余持久内存?
【发布时间】:2014-01-23 18:03:00
【问题描述】:

我有一个 JavaCard,可以调用 JCSystem.getAvailableMemory(MEMORY_TYPE_PERSISTENT) 并从我的小程序中返回它,但如果它超过 32767 字节,我想要一个准确的值。

【问题讨论】:

    标签: smartcard javacard


    【解决方案1】:

    支持 GP 2.2 + ETSI 的 Javacard

    如果您的卡支持 Global Platform 2.2 和 ETSI,您可以使用 GET DATA 命令。

    GP 卡规范 2.2 第 11.3 节指出

    Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226.
    

    在 ETSI 102.226 第 8.2.1.7.2 节中:

    在成功执行命令后,GET DATA 响应数据字段应按照 GlobalPlatform [4] 中的定义进行编码。命令消息的参考控制参数P1和P2中引用的TLV编码数据对象的值是:

    Length Description                            Value
      1    Number of installed application tag    '81'
      1    Number of installed application length  X
      X    Number of installed application
      1    Free non volatile memory tag           '82'
      1    Free non volatile memory length         Y
      Y    Free non volatile memory
      1    Free volatile memory tag               '83'
      1    Free volatile memory length             Z
      Z    Free volatile memory
    

    此命令的响应不限于short值,因为它使用的是TLV格式,这意味着您可以检查超过32767字节的空闲内存

    【讨论】:

    • 当我使用 p1p2 作为 'FF21' 发送获取数据命令时,我面临 0x6A88
    【解决方案2】:

    一般来说,使用标准 Java Card API 无法从卡中获取确切的可用内存量。因为大多数 Java Card 甚至都不支持整数,所以您可以从 APIs 方法获得的最大值是 32767(有符号短的上限)。

    如果幸运的话,卡/操作系统制造商可能会提供一些专有的 API 方法。我见过一些来自 NXP JCOP 卡的专有 API,但如果它超过了有符号短路的上限,它们都无法获得可用内存量。

    【讨论】:

    • 我真正想要的是一种通过 GlobalPlatform 界面询问卡片的方法。如果这样的事情不存在,这就是我的答案。
    • 没有这回事,有你的答案。 groissi 提到了专有的 API,GP 2.2 中也有内存配额管理,但是否在任何给定的卡上实现取决于制造商。即使存在,卡也很难为您提供确切的可用内存量——它们肯定会为交易和内部操作保留大量内存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多