假设Java Card applet中有一个bug :一个临时字节数组存储在EEPROM中,而不是RAM中。此外,假设这个字节数组被每个APDU覆盖。
这个错误迟早会损坏卡片。
我们能预料到什么症状?数组中没有任何显式警告或错误的不正确值?访问此数组时引发的一些异常?小程序是不可选的?整张卡片完全没有反应?
是否应该“一劳永逸”地损坏这张卡,还是会越来越频繁地发生这些故障?
在我的实验(J2E145)中,在5000例APDU后出现了首次失败,症状是卡根本没有发送R,只是死亡。但是,下一个APDU再次正常,然后10000中大约有一个APDU失败(随着频率的增加),最后在510万个APDU之后,卡永远停止通信。
是否有标准规定在EEPROM损坏时应发生什么情况?(我在找,但没有找到。)
我知道这个问题很广泛,它可能取决于特定的芯片(我对NXP芯片特别感兴趣),但我认为您的评论、答案和经验可以帮助许多Java Card开发人员,他们在部署后发现了代码中的错误。
发布于 2015-06-05 08:17:54
我想找到一些非NDA信息的最佳方法是特定平台的公共标准安全目标。
来自NXP的硬件平台示例:NXP安全智能卡控制器P5Cx128V0A/P5Cx145V0A,MSO (BSI-DSZ-CC-0645)
因此,该硬件平台能够检测EEPROM信元故障,甚至可以自动纠正每个字节内的1位错误。对于所有其他检测到的错误,它将引发一个可由软件处理的异常。
这适用于硬件平台(没有OS / JCRE)。因此,让我们看看JCOP的安全目标告诉我们什么。我选择了NXP J3A128和J3A095安全智能卡控制器修订版3 (BSI-DSZ-CC-0731)。
- Throw an exception
- Terminate the card (Life cycle state: TERMINATED)
- Reinitialize the Java Card System (warm reset)
- [...] The EEPROM is able to correct a 1-bit error within each byte. [...] The EEPROM corrects errors automatically without user interaction [...]
- Lock the card session (simply stops processing; escape with reset the session/Card tearing)基于这些类型的响应/反应,上面列出的事件将具有以下映射:
- EEPROM failure audited through exceptions in the read/write operations and consistency/integrity check: **Lock card session**
- self test mechanism on start-up: **Lock card session**
- Corruption of check-summed objects: **Lock card session**因此,该软件平台能够(再次)检测EEPROM信元故障,甚至可以自动纠正每个字节内的1位错误。对于所有其他检测到的EEPROM错误,它将“锁定卡会话”,这意味着它只是停止处理和执行重置。这似乎符合你的观察“症状是卡根本没有发送R,只是死了”。
发布于 2015-06-04 20:39:31
这里是来自本机操作系统的图片:当向非易失性内存写入新值时,硬件例程会自行检查该值是否可以正确写入,否则返回错误状态。这被转换为65 81的SW1/SW2。受影响的文件或对象被标记为已损坏,以后访问它的尝试将被彻底拒绝。如果它对应用程序是必要的,这将不再能够工作。
如果我没记错的话,我们的硬件(非NXP)甚至会发出预先警告,表明虽然这一次可以正确地写入值,但内存单元即将达到其极限。
https://stackoverflow.com/questions/30636485
复制相似问题