【发布时间】:2016-03-10 20:04:09
【问题描述】:
我正在设计一个 Java Card(2.2.2 因此是 Classic)小程序,它在每次使用时都会接收一个 RSA 公钥(使用对问题无关紧要的方式进行验证),然后使用该 RSA 公钥来验证一个 RSA签名。
出于性能和设备寿命的原因,我如何将 RSA 公钥保存在 RAM 中(而不是将其写入 EEPROM/闪存)?
我的问题是,在 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都不会被滥用成公钥(在没有测试 d 大小的平台上),因为这是 Java Card Classic 3 的新奇事物;李> - 带有
keyMemoryType参数的buildKey(byte algorithmicKeyType, byte keyMemoryType, short keyLength, boolean keyEncryption),这也是Java Card Classic 3的一个新奇事物。
用beginTransaction() 和abortTransaction() 括住我的RSA 公钥的所有更改和使用是否能实现我的目标?
【问题讨论】:
-
@MaartenBodewes:作为 Java Card 常驻专家,请将此问题标记为引起您的注意。
-
这个“标记”不起作用...
-
我猜 java 卡对 RSA 密钥对没有 TRANSIENT 功能,因为 RSA 长密钥大小对于 RAM 限制来说太大了。 (单个 RSA 2048 公钥至少需要 2K 内存!)