我正在阅读ISO / IEC 7816第4部分标准。不幸的是,对我来说有一些模糊的点,我希望我能在这里得到答案。
第一个模糊点是关于数据对象。定义数据对象生成 Simple-TLV 或 Ber-TLV 类别,并对这些类别进行一些描述。但什么是数据对象本身?它是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在applet的不同字段中,我们不会考虑任何BER-TLV
或Simple-TLV
类别!它们只是一系列十六进制数。
第二个模糊点是关于结构选择部分。我们可以通过以下五种方式进行定义:
模糊的一点是,据我所知,我可以在卡片上选择的唯一内容是小程序而不是别的。对于applet,我可以选择默认值(可以是上面选项的第一种方式,隐式选择)或者通过向Applet AID发送SELECT APDU命令来选择它(以上任何一种方式都没有提到)。
那么这些结构选择方法是什么?
第三个模糊点是 EF Structures 。定义EF-s可以有以下五种结构:
问题是,这些结构是什么?这些是数据存储在内存中的方式吗?如果是这样,为什么它们是在标准中定义的,而它们是关于卡的内在行为?程序员是否需要了解有关它们的任何信息?他/她能否检测/更改他/她卡的EF结构?
最后,所有符合ISO 7816-4标准的卡都支持以上所有项目(因为我在ISO 7816-4中找不到任何提及它们是可选的或其他内容的任何内容)?
所有符合ISO 7816-4的卡是否都需要支持此部分标准中定义的APDU命令?
答案 0 :(得分:4)
首先,ISO / IEC 7816-4描述了基于文件的卡。基于文件的卡可以具有不同的应用程序(使用SELECT by NAME选择)。然而,这些应用程序被认为是基于文件的OS中的不同数据结构和对象。这些应用程序不像Java Card小程序那样提供不同的功能。
7816-3,尤其是4也描述了一般的半双工命令/响应APDU格式,这是对卡符合7816-4的最低要求。 Java Card使用APDU格式,但它不包括以其他方式模拟基于文件的卡的功能。你必须自己实现(或者从某个地方复制它)。
数据对象是具有类型(由标记描述),大小(或长度)和值:TLV的对象。在7816-4中,两个对象都可以存在于卡和传输中的对象中。最后你只对输入输出感兴趣;你如何解释,存储或生成它们并不重要。
支持哪种文件选择和结构取决于卡的制造商。通常,基于文件的卡需要支持所有选择方法,但对于Java Card实现来说并不是那么清楚。许多Java Card小程序不支持PATH的SELECT。 PATH的SELECT通常在Java Card上很麻烦,因为它不是由操作系统处理的,并且它不能由Applet处理(因为Applet实例不能只选择另一个Applet实例)。
是的,外部用户可以看到文件结构。实施的内容取决于。同样,基于文件的卡可能支持所有。例如。当您需要在卡上存储记录时,循环结构很棒。有限的内存可能会提示您删除最旧的记录。例如,您可以想象这用于数字行车记录仪卡。记录允许使用7816兼容的SQL命令进行搜索。
ISO / IEC 7816是最糟糕的标准之一。它确实没有说任何可选的,这可能会让你相信卡片确实应该实现。然而,一些声称符合性的卡只保留在开始时定义的APDU结构。许多卡片并没有实现所有功能,而那些卡片通常会出错。
这只是我的头脑。
基本上,标准更多是一套常用做法。您可以将它作为创建自己的协议或标准的起点,但这就是它。