【问题标题】:Java Card applet EEPROM vs RAM testingJava Card 小程序 EEPROM 与 RAM 测试
【发布时间】:2015-08-27 07:30:30
【问题描述】:

Java Card 小程序中的一个典型错误是使用持久内存来存储本应在 RAM 中的临时变量。

这些错误会减慢小程序并导致一些严重的问题(例如Symptoms of EEPROM damage)。

单元测试很难发现这些错误。单元测试将小程序作为黑盒访问,它们所能做的就是检查给定输入的输出。当然,它们可以测量时间并报告异常缓慢的命令,但覆盖持久内存中的单个字节所花费的时间几乎与覆盖 RAM 中的单个字节所花费的时间相同。

有什么方法可以消除这些错误(除了在编码时要小心)?我能否以某种方式检测 EEPROM 更改以及在处理特定 APDU 时完成了多少?

当然,一个好的模拟器可以完成这项工作。但是,JCardSim (www.jcardsim.org) 和 NXP JCOP 工具似乎都无法报告 EEPROM 使用统计数据。

您知道任何其他可能对我有帮助的工具或测试技术吗?

【问题讨论】:

  • 在模拟器中看到这将是一个有趣的功能。也就是说,我到现在都没见过。不过,我看不到所有竞争对手都在做什么 :)
  • @MaartenBodewes 我认为问题在于所有模拟器都将 Java Card 小程序用作普通 Java 对象,并带有替换的 Java Card 包(异常、JCSystem 等)。这就是为什么他们根本不关心 RAM/EEPROM,因为 Java 不知道这个问题。
  • 这不是真的,我遇到的大多数模拟器实际上都实现了 Java Card 系统,包括 Java Card VM(除了它们通常使用不同的硬件采用层和可能不同的加密库)。 JCOP 当然不能在 Java RE 上运行。请注意,在涉及瞬态字节数组等方面,在 Java 中实现 Java Card 是很棘手的。
  • @MaartenBodewes 静态源代码分析呢?你听说过类似的 Java Card 吗?
  • 我没听说过,但我确实有自己的独特想法:)

标签: unit-testing debugging simulation smartcard javacard


【解决方案1】:

可以实现测试命令并添加测试场景,这将返回可用内存。这可以通过getAvailableMemory(byte memoryType); 实现

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多