Cryptography Java卡:密钥协议的域参数?

Cryptography Java卡:密钥协议的域参数?,cryptography,smartcard,javacard,Cryptography,Smartcard,Javacard,通过类javacard.security.keyagregation(Java Card 3.0.1 classic),可以建立EC-DH密钥协议。但是没有定义具体的曲线。据我所知,标准IEEE P1363没有指定域参数。那么Java卡实现中使用了什么样的曲线呢?很简单:无。您必须设置自己的参数。这取决于支持哪种参数的卡。关键尺寸也是如此。例如,对于JCOP(在具有非对称协处理器的芯片上),您可以合理地确定支持最大密钥大小为320位的F(p)上的曲线 因此,您应该查看Java卡运行时环境的用户手

通过类javacard.security.keyagregation(Java Card 3.0.1 classic),可以建立EC-DH密钥协议。但是没有定义具体的曲线。据我所知,标准IEEE P1363没有指定域参数。那么Java卡实现中使用了什么样的曲线呢?

很简单:无。您必须设置自己的参数。这取决于支持哪种参数的卡。关键尺寸也是如此。例如,对于JCOP(在具有非对称协处理器的芯片上),您可以合理地确定支持最大密钥大小为320位的F(p)上的曲线

因此,您应该查看Java卡运行时环境的用户手册(或任何其他手册),其中支持哪些曲线。之后,您需要使用各种setter(除了
setW
)为自己设置域参数值,然后生成(临时)密钥对并执行ECDH密钥协商。显然,您还可以设置所有参数,包括公钥/私钥值,而不是生成新的密钥对

对于JCOP,在生成密钥对之前,您可能还需要将域参数复制到
ECPrivateKey


在3.0.1中,您只能选择使私钥暂时化,这意味着所有域参数也需要存储在RAM中。公钥必须位于永久存储器(EEPROM或闪存)中。在3.0.5中,可以在EEPROM/flash中创建单独的域参数,然后使用该方法创建密钥。这允许参数保留在EEPROM中,而实际钥匙可存储在(瞬态)存储器中



您可以查看用户手册,查看ROM中是否存储了任何曲线。但是域参数占用了相当多的空间,所以这不太可能。我个人最喜欢Brainpool曲线,如BrainpoolP256r1,但也可以使用NIST曲线,如P-256。Bouncy Castle(核心)内部有一大堆曲线。

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