2015-09-29 50 views
4

通过类javacard.security.KeyAgreement(Java Card 3.0.1 classic),可以制定一个EC-DH密钥协议。但是没有特定的曲线定义。据我了解,标准的IEEE P1363没有指定域参数。那么Java Card实现中使用了哪条曲线?Java Card:密钥协议的域参数?

回答

8

很简单:没有。你必须设定你自己的参数。这取决于卡片支持哪种参数。密钥大小也是一样。对于JCOP(在具有不对称协处理器的芯片上),可以合理确定例如支持最大密钥大小为320位的F(p)上的曲线。

因此,您应该检查Java Card运行时环境的用户手册(或任何其他手册),支持哪些曲线。之后,您需要使用各种设置器(除setW之外)为ECPublicKey自己设置域参数值,然后生成(临时)密钥对并执行ECDH密钥协议。显然你也可以设置全部这些参数,包括公钥/私钥值,而不是生成新的密钥对。

在JCOP的情况下,您可能需要在生成密钥对之前将域参数复制到ECPrivateKey


在3.0.1,你只能选择将私钥短暂的,这意味着所有的域参数需要被存储在RAM为好。公钥必须在永久存储器中(EEPROM或闪存)。在3.0.5中,可以在EEPROM /闪存中创建单独的域参数,然后使用KeyBuilder.buildKeyWithSharedDomain方法创建密钥。这允许参数保留在EEPROM中,而实际的键可以存储在(瞬态)存储器中。


您可以查看您的用户手册以查看是否有任何曲线存储在ROM内。但是域参数需要相当多的空间,所以这可能不是全部。我个人比较喜欢Brainpool曲线,比如BrainpoolP256r1,但是也可以使用P-256等NIST曲线。充气城堡(核心)内有一大堆曲线。

+0

谢谢,非常详细的答案。我不知道这些值可以在关键字中设置。 –

+1

不客气Philip,向Darla致以问候。 –