`Signature.init()` 会重写持久内存吗?

Does `Signature.init()` rewrite persistent memory?

Java 卡片 API 2.2.1 中的一些引述:

Signature class 描述:

A tear or card reset event resets an initialized Signature object to the state it was in when previously initialized via a call to init(). For algorithms which support keys with transient key data sets, such as DES, triple DES, AES, and Korean SEED the Signature object key becomes uninitialized on clear events associated with the Key object used to initialize the Signature object.

Signature.init(...) 描述:

For optimal performance, when the theKey parameter is a transient key, the implementation should, whenever possible, use transient space for internal storage.

是不是有算法每次调用Signature.init(...)都要重写持久内存?如果是,这种不愉快的行为是否有任何原因?

我问这个问题是因为我的小程序出现了奇怪的行为。它计算 ECDSA 签名。在大约 100 000 个签名之后,卡(NXP 的 J2E145)似乎坏了(我不能再 select 小程序了)。持久内存损坏可能是原因,因为我每次收到输入数据时都会调用 Signature.init(...)Signature.init(...) 可能是这种行为的原因吗?

是的,Signature.init()将对密钥对象的引用存储在持久内存中。但是,我相信 API 必须使用 "wear leveling" 的特性来实现,在这种情况下应该保持 EEPROM 的耐久性。

我建议你在检查Cipher.init()的行为后得出结论,该卡是否继续其类似行为。