通过类javacard.security.KeyAgreement(Java Card 3.0.1 classic),可以制定一个EC-DH密钥协议。但是没有特定的曲线定义。据我了解,标准的IEEE P1363没有指定域参数。那么Java Card实现中使用了哪条曲线?Java Card:密钥协议的域参数?
4
A
回答
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曲线。充气城堡(核心)内有一大堆曲线。
相关问题
- 1. BouncyCastle ECDH密钥协议失败
- 2. 在HTTP协议中使用api密钥
- 3. 对称密钥认证协议
- 4. openssl使用的密钥协议(或密钥派生)函数是什么?
- 5. 如何在Android中为Diffie-Hellman密钥协议算法生成参数集
- 6. 为Cipurse(Java Card)创建AES会话密钥?
- 7. 轻量级加密密钥交换协议
- 8. 参数密钥库
- 9. Java TL1协议
- 10. 限制从协议继承的协议泛型参数
- 11. Objective-C协议作为另一种协议的参数
- 12. Java密钥 - 密钥图
- 13. IPSec密钥交换协议如何工作?
- 14. Java Socket RPC协议
- 15. java通信协议
- 16. Java URL协议:classpath:/?
- 17. 升级到VPS协议后生效的加密密钥不工作3.00
- 18. wp_register_script与协议无关的源参数
- 19. 作为方法参数的协议
- 20. 使用与原始参数的协议
- 21. java上的mms协议
- 22. Java中的IMAP协议
- 23. 协议的哈希协议
- 24. 子域的Wild Card证书?
- 25. Java密钥
- 26. Java Card Shuffling App
- 27. 确定参数是类还是协议
- 28. SSO - CAS协议 - 更新参数
- 29. 参考所有Swift协议?
- 30. Java:从编码密钥获取密钥
谢谢,非常详细的答案。我不知道这些值可以在关键字中设置。 –
不客气Philip,向Darla致以问候。 –