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 似乎没有指定瞬态内存的选项;我都没看到
- 一个合适的
keyType
结合 TYPE_RSA_PUBLIC
和 transcient,就像我们 TYPE_DES_TRANSIENT_DESELECT
;
- 甚至
TYPE_RSA_PRIVATE_TRANSIENT_DESELECT
都没有,可以想象它可以被滥用到 public 密钥中(在没有测试 d 大小的平台上),为此是 Java Card Classic 3 的新颖之处;
- 带有
keyMemoryType
参数的buildKey(byte algorithmicKeyType, byte keyMemoryType, short keyLength, boolean keyEncryption)
,这也是Java卡片经典3的新奇之处。
将我的 RSA public 密钥的所有更改和使用与 beginTransaction()
和 abortTransaction()
括起来是否可以实现我的目标?
我一直在处理完全相同的问题,不得不使用持久内存和磨损均衡(有效)。
甚至有与 beginTransaction()
/abortTransaction()
相同的想法,但卡制造商告诉这行不通(他们说这会使 EEPROM 寿命变得更糟)。 YMMV.
一些备注:
性能足以满足给定的用例(这让我感到惊讶)。
可以很好地估计卡的寿命(前提是您知道持久内存有多少重写周期、块大小、不同 public 密钥使用的频率和磨损均衡开销)。
同时考虑 RSAPublicKey
和 Cipher
对象的磨损均衡。
为对象池使用尽可能多的内存。
可能有一些特定于供应商的 API 允许 RSA 计算(在我们的例子中没有这种可能性)
祝你好运!
我正在设计一个 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 似乎没有指定瞬态内存的选项;我都没看到
- 一个合适的
keyType
结合TYPE_RSA_PUBLIC
和 transcient,就像我们TYPE_DES_TRANSIENT_DESELECT
; - 甚至
TYPE_RSA_PRIVATE_TRANSIENT_DESELECT
都没有,可以想象它可以被滥用到 public 密钥中(在没有测试 d 大小的平台上),为此是 Java Card Classic 3 的新颖之处; - 带有
keyMemoryType
参数的buildKey(byte algorithmicKeyType, byte keyMemoryType, short keyLength, boolean keyEncryption)
,这也是Java卡片经典3的新奇之处。
将我的 RSA public 密钥的所有更改和使用与 beginTransaction()
和 abortTransaction()
括起来是否可以实现我的目标?
我一直在处理完全相同的问题,不得不使用持久内存和磨损均衡(有效)。
甚至有与 beginTransaction()
/abortTransaction()
相同的想法,但卡制造商告诉这行不通(他们说这会使 EEPROM 寿命变得更糟)。 YMMV.
一些备注:
性能足以满足给定的用例(这让我感到惊讶)。
可以很好地估计卡的寿命(前提是您知道持久内存有多少重写周期、块大小、不同 public 密钥使用的频率和磨损均衡开销)。
同时考虑
RSAPublicKey
和Cipher
对象的磨损均衡。为对象池使用尽可能多的内存。
可能有一些特定于供应商的 API 允许 RSA 计算(在我们的例子中没有这种可能性)
祝你好运!