通過類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致以問候。 –