탄력성을 사용하여 ECDSA 키를 생성하려고합니다. 이 코드는 Java 관점에서 잘 작동하는 것 같습니다. 하지만 파일을 덤프하고 데이터 유효성 검사를 시도 할 때 OpenSSL은 데이터 형식을 좋아하지 않습니다.ECDSA 생성하기 탄력성이있는 개인 키가 공개 키를 반환합니다.
약간의 연구 끝에, 탄력성이 공개 키로 개인 키를 인코딩하고 있다고 생각했습니다. 여기
내 자바 코드 :public class Test {
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
System.out.println("Starting...");
String name = "prime256v1";
try {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDSA", BouncyCastleProvider.PROVIDER_NAME);
kpg.initialize(new ECGenParameterSpec(name));
KeyPair keyPair = kpg.generateKeyPair();
FileOutputStream writer = new FileOutputStream("private.key");
writer.write(keyPair.getPrivate().getEncoded());
writer.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
private.key
이 유효 DER 형식으로 생성되는 파일; 난은 OpenSSL을 사용하여 ECDSA 키를 생성하려면 다음 명령을 실행하면, 나는 다음과 같은 ASN.1을 얻을, 비교를 위해
$ openssl asn1parse -inform DER -in /my/path/private.key
0:d=0 hl=3 l= 147 cons: SEQUENCE
3:d=1 hl=2 l= 1 prim: INTEGER :00
6:d=1 hl=2 l= 19 cons: SEQUENCE
8:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
17:d=2 hl=2 l= 8 prim: OBJECT :prime256v1
27:d=1 hl=2 l= 121 prim: OCTET STRING [HEX DUMP]: <hex data>
: 나는 다음과 같은 명령을 실행할 때, 키의 ASN.1 구조를 볼 수 있습니다 구조 :
$ openssl ecparam -name prime256v1 -genkey -noout -outform DER -out private.key
$ openssl asn1parse -inform DER -in private.key
0:d=0 hl=2 l= 119 cons: SEQUENCE
2:d=1 hl=2 l= 1 prim: INTEGER :01
5:d=1 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]: <hex data>
39:d=1 hl=2 l= 10 cons: cont [ 0 ]
41:d=2 hl=2 l= 8 prim: OBJECT :prime256v1
51:d=1 hl=2 l= 68 cons: cont [ 1 ]
53:d=2 hl=2 l= 66 prim: BIT STRING
그래서, 내가 놓친 게 있나요 내 질문
- 추측?
- 또는 알려진 버그입니까?
- 어쨌든 주변을 둘러 볼 수 있습니까?
"OpenSSL은 데이터 형식이 마음에 들지 않습니다." 당신이 정교 할 수 있니? 어떤 조치가 실패합니까? – jay
@ 예,'$ openssl ec -inform DER -in/my/path/private.key'는 실패합니다. – Rodolfo
버그는 없으며 Java가 openssl 명령에서 예상하지 않는 PKCS8 형식을 출력합니다. –