我正在寻找一种方法来为我使用的每张智能卡找到一个唯一的号码。我听说IC卡制造日期,IC序列号和IC批次标识符对于每张卡都是唯一的。
如何从我的卡中获取这些信息?
答案 0 :(得分:3)
当然,每个硬件供应商都会将上述信息集成到芯片中。不幸的是,这留下了以下问题:
总结:如果您需要一个唯一的信息,那么规范必须在最开始时说明这一点,最有可能通过指定的指令来检索它。在多供应商环境中,其他一切都可能失败。唯一剩下的选择是,在您自己的管理下添加一种ID作为用户数据。
亚伯拉罕附上:
由于问题标有javacard
,我们认为您的卡是 GlobalPlatform 兼容卡。
1:对于GP卡,SD(安全域:默认安装在卡上的强制小程序)负责返回卡特定数据,包括IC制造日期,IC序列号和IC批次标识符等。只要您没有在卡和卡外实体之间使用安全通道,您就无法信任SD响应。但为什么?因为任何恶意用户都可以编写一个简单的小程序,其AID等于您的卡SD的AID,它将他/她的任意数据返回到您的命令并将其安装在智能卡上并使其默认选中。在这种情况下,当他/她将卡片放在您的读卡器上时,他的小程序会回答您的卡外应用程序命令,而您无法检测假卡片。
2:正如上面提到的亲爱的guidot,不同的卡可能支持也可能不支持相同的命令来返回这些卡特定的数据。
因此,我建议您在applet中添加一对setSerialNumber()
和getSerialNumber()
方法,并在offcard和applet之间实现安全通道,以确保卡片的唯一性。
答案 1 :(得分:1)
对于大多数用例,PC / SC UID应该足够了。这是一个4到7个字节的标识符,在与卡建立非接触式通信时无论如何都会读取。虽然某些卡可能配置为返回随机UID,但如果您的项目卡片处于受控状态,这不是问题