【发布时间】:2016-09-25 10:41:36
【问题描述】:
我使用 secp192r1 曲线生成了 ECC 公钥和私钥。我得到 75 的公共和 125 的私有编码密钥数组长度。为什么私钥比公钥长?为什么私钥不比公钥长两倍?为什么私钥不是 192 位 = 24 字节因为 secp192r1?
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
ECNamedCurveParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("secp192r1");
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
KeyPair pair = g.generateKeyPair();
System.out.println(pair.getPublic().getEncoded().length);
System.out.println(pair.getPrivate().getEncoded().length);
【问题讨论】:
-
编码形式包含的不仅仅是裸键。它们是具有附加信息的更复杂 ASN.1 结构的编码版本。此外,椭圆曲线上的点可以用完整的 (X,Y) 对编码,也可以用更短的“压缩”形式编码,只包含 X 坐标加上一个符号位。在您的情况下,这些点使用完整的 (X,Y) 对进行编码。私钥结构包括公钥作为其组件之一。
-
如何获取可以在 C lib micro-ecc 中复用的 24 字节密钥?
-
将私钥转换为ECPrivateKey并调用getS方法。
-
ECPrivateKey privateKey = (ECPrivateKey)pair.getPrivate(); privateKey.getS();返回大整数。有没有办法获取字节数组?
-
如何获取可以在这个库中使用的密钥github.com/kmackay/micro-ecc/blob/master/uECC.h?
标签: bouncycastle private-key public-key elliptic-curve java-security