[英]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.