2015-09-29 85 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致以問候。 –