Java Card 2.2.2:临时 RSA public 密钥作为临时

Java Card 2.2.2: temporary RSA public key as transient

我正在设计一个 Java 卡(2.2.2 因此是经典)小程序,每次使用时都会收到一个 RSA public 密钥(使用对问题无关紧要的方法进行验证),然后使用该 RSA public 密钥来验证 RSA 签名。

出于性能和设备使用寿命的原因,我如何将 RSA public 密钥保存在 RAM 中(而不是将其写入 EEPROM/Flash)?

我的问题是,在 JC 2.2.2 的 javacard.security.KeyBuilder 中,buildKey(byte keyType, short keyLength, boolean keyEncryption) API 似乎没有指定瞬态内存的选项;我都没看到

将我的 RSA public 密钥的所有更改和使用与 beginTransaction()abortTransaction() 括起来是否可以实现我的目标?

我一直在处理完全相同的问题,不得不使用持久内存和磨损均衡(有效)。

甚至有与 beginTransaction()/abortTransaction() 相同的想法,但卡制造商告诉这行不通(他们说这会使 EEPROM 寿命变得更糟)。 YMMV.

一些备注:

  • 性能足以满足给定的用例(这让我感到惊讶)。

  • 可以很好地估计卡的寿命(前提是您知道持久内存有多少重写周期、块大小、不同 public 密钥使用的频率和磨损均衡开销)。

  • 同时考虑 RSAPublicKeyCipher 对象的磨损均衡。

  • 为对象池使用尽可能多的内存。

可能有一些特定于供应商的 API 允许 RSA 计算(在我们的例子中没有这种可能性)

祝你好运!