【问题标题】:Javacard - power loss during garbage collectionJavacard - 垃圾收集期间断电
【发布时间】:2015-01-26 09:35:38
【问题描述】:

我注意到我的智能卡(带有 Omnikey 5121 读卡器的 NXP J2E145、J3A081、J3C145)上有一些非常奇怪的行为:调用 JavaCard 方法后立即断电

JCSystem.requestObjectDeletion()

可能会损坏卡:大约 10% 的此类断电后,ATR 命令非常慢(1000 毫秒),并且我对任何其他 APDU(小程序选择、卡管理器身份验证等)都没有响应。

我知道 requestObjectDeletion() 的行为取决于供应商特定的实现,所以我的问题非常广泛和开放......

垃圾收集是否“通常”在单个事务中处理?

是否有任何“官方”建议不要在可能断电的情况下调用 requestObjectDeletion()?

您对 NXP 的卡片有类似的体验吗?

编辑:

  • JCSystem.isObjectDeletionSupported() == true 在我所有的智能卡上。
  • 当尝试连接损坏卡的卡管理器小程序时,Eclipse IDE 中的 JCOP shell 会报告:

    ATR:3BFB9600008131FE454F4450204D41502053414D3E

    ATR: T = 1
    jcshell:终端的未知问题。 最后一个终端错误:由于 I/O 设备错误,无法执行请求。

【问题讨论】:

  • 你检查布尔 JCSystem.isObjectDeletionSupported() 了吗?
  • 我实际上并没有,但是垃圾收集器通常工作正常并且它不会抛出任何异常。在调用 requestObjectDeletion(读卡器上的灯闪烁)大约 5 秒钟后,卡正在做某事,并且 EEPROM 被清理(我检查过)。唯一的问题是当我在这个过程的中间从读卡器中拉出卡片时。有时,这张卡似乎坏了。
  • 亲爱的 vojta,我可以知道你的电子邮件地址吗?我也在研究 NXP 智能卡。我相信你可以帮助我很多,但我不能在这里提出问题,因为有些问题是离题的。
  • 能否请您与我们分享您在卡上上传的程序和您在计算机中运行的程序?
  • 对不起,我的小程序很复杂,是商业安全项目的关键部分,所以我真的不能和你分享任何代码。如果您有任何问题,请使用 Stack Overflow。

标签: transactions garbage-collection smartcard javacard


【解决方案1】:

我认为这可能是一个实现错误。一般来说,垃圾收集既不需要也不需要在智能卡上使用。

您应该通过良好的小程序设计在任何情况下避免垃圾收集。这样你就永远不会遇到内存问题。小程序通常在其生命周期中只安装一次,并且应该在卡的剩余生命周期中都可用。

对于正常使用情况,垃圾收集通常需要很长时间。也许这就是为什么 Java Card 或底层系统库的程序员不希望它发生在安全环境之外的原因。

【讨论】:

  • 我在小程序的整个生命周期中只调用一次垃圾收集器。这对我来说不是关键问题,我可以很容易地避免它。另一方面,我认为所有提供的功能都应该是安全且有效的。智能卡首先用作安全令牌。如果 NXP 卡中存在这样的错误,则必须在其所有文档的首页上用巨大的红色字母进行描述。没人知道,在这样一次不成功的垃圾收集之后,EEPROM 发生了什么!我问了恩智浦,我会在我得到答案的那一刻发布他们的答案。谢谢你的回答,保罗!
  • @vojta 他们真的证实了吗?所以我们不能打电话给requestObjectDeletion(),以防可能断电?
  • @Abraham 由于保密协议,我无法告诉你任何细节,抱歉。但是,我接受了保罗的回答,所以他们很可能证实了这一点:-)
  • 在某些生产环境中甚至需要很长时间 :) 也就是说,如果有它的位置,那么它应该在个性化之后。即使这样,您最好在将卡发送到现场之前重置并启动卡......
  • @paul-bastian 你有没有关于让垃圾收集变得不必要的小程序设计的书籍或网站上的建议?我在哪里可以了解注意事项?
猜你喜欢
  • 2012-06-28
  • 2011-01-21
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多