簡體   English   中英

使用Java keytool生成ECDSA密鑰對時的曲線選擇

[英]Choosing curve when generating ECDSA keypair with Java keytool

我試圖了解在使用 Java(7) keytool 生成密鑰對時如何選擇 ECDSA 曲線。

它還有助於找出在默認設置下使用的曲線。

這是我使用的命令:

keytool -genkeypair -keyalg EC -alias myAlias -keystore myKeystore.jks -storepass myStorepass -keypass myKeypass -validity 730 -keysize 256 -dname "CN=myCn, OU=myOu, O=myO, C=myC" -v 

Oracle 提供的 Java 7 實現僅使用 SEC 曲線。 這些與 NIST 標准化曲線相同。 在您的情況下,可以肯定使用了 P-256。 然而,在 Java 中使用原始 SEC 名稱: "secp256r1"


所以你可以檢索和編碼私鑰:

KeyStore store = KeyStore.getInstance("JKS");
store.load(new FileInputStream(args[0]), args[1].toCharArray());
ECPrivateKey key = (ECPrivateKey) store.getKey(args[2], args[3].toCharArray());
System.out.println(Base64.getEncoder().encodeToString(key.getEncoded()));

然后ASN.1 解碼內容:

SEQUENCE (3 elem)
  INTEGER 0
  SEQUENCE (2 elem)
    OBJECT IDENTIFIER 1.2.840.10045.2.1
    OBJECT IDENTIFIER 1.2.840.10045.3.1.7
  OCTET STRING (1 elem)
    SEQUENCE (2 elem)
      INTEGER 1
      OCTET STRING (32 byte) E935A4475D495ADA18A791C1222D5A3424CF540BDE42802F588C664082D10808

然后查找第二個 OBJECT IDENTIFIER (OID) 的值:1.2.840.10045.3.1.7:

涵蓋“secp256r1”,即“SEC 2:推薦的橢圓曲線域參數”中列出的橢圓曲線域。 SEC(高效密碼標准)曲線提供橢圓曲線域參數,通常需要安全級別,以供 ECC 標准(如 ANSI X9.62、ANSI X9.63、IEEE P1363 和其他標准)的實施者使用。

對於 EC,您可以使用-keysize來指定曲線!

您還可以編寫一些 Java 代碼以更簡潔的方式完成此操作。

看看https://github.com/alokmenghrajani/ec-keytool 這是一個簡單的工具,可讓您創建具有特定曲線的 JCEKS 條目,或以比 keytool 打印出來的方式略好一點的方式查看它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM