我正在寻找一种方法来为我工作的每一张智能卡找到一个唯一的号码。我听说每一张卡都有独特的IC制作日期、IC序列号和IC批处理标识符。
我怎样才能从我的卡片上得到这些信息?
发布于 2016-09-22 09:51:42
当然,每一家硬件供应商都会将上述信息集成到芯片中。不幸的是,这留下了以下问题:
摘要:如果您需要一个唯一的信息,规范必须在一开始就说明了这一点,很可能是通过指定的指令来检索它。在一个多供应商的环境中,其他一切都可能失败。剩下的唯一选择是在您自己的管理下添加一种ID作为用户数据。
由亚伯拉罕附加:
由于问题被标记为javacard,我们得出结论,您的卡是http://www.globalplatform.org/specificationscard.asp兼容卡。
1:对于GP卡,SD (安全域:默认安装在卡上的强制小程序)负责返回卡特定数据,包括IC制作日期、IC序列号和IC批处理标识符等。只要您不使用卡与非卡实体之间的安全通道,您就不能信任SD响应。但是为什么呢?因为任何恶意用户都可以使用与您的卡SD的AID相等的AID编写一个简单的applet,它将他/她的任意数据返回给您的命令,并将其安装在智能卡上,并使其默认选择。在这种情况下,当他/她将卡片放在你的读取器上时,他/她的applet回答了你的非卡片应用程序命令,而你无法检测到假卡。
2:如上文所述,不同的卡可能支持或不支持相同的命令来返回这些卡的特定数据。
因此,我建议您在applet中添加一对setSerialNumber()和getSerialNumber()方法,并在您的离卡和applet之间实现一个安全通道,以确保您的卡片的唯一性。
发布于 2016-09-21 08:02:45
对于大多数使用程序,PC/ should应该足够了。这是一个4到7字节的标识符,在与卡构建非接触式通信时无论如何都是读取的。虽然有些卡可能被配置为返回随机UID,但是如果您控制了项目的卡片,这并不是一个问题。
https://stackoverflow.com/questions/39609445
复制相似问题