2016-08-30 9 views
1

내가 권고에 따라 여기, 모란 : 직렬화 ECDH 개인

Botan::EC_Group ecgroup("brainpool512r1"); 
    Botan::ECDH_PrivateKey privKey(CBotanInitEx::RNG(), ecgroup); 

을 사용하여 새 키 쌍

으로 PKCS # 8을 사용하여 직렬화하려고 만든 키 (RSA에 비해, 즉 빨리가!) :

PK algo ECDH has no defined OIDs 
01 :

https://botan.randombit.net/manual/pubkey.html#serializing-public-keys

datPubKey = Botan::X509::BER_encode(privKey); 
    txtPubKey = Botan::X509::PEM_encode(privKey); 

    datPrivKey = Botan::PKCS8::BER_encode(privKey, CBotanInitEx::RNG(), pwd); 
    txtPrivKey = Botan::PKCS8::PEM_encode(privKey, CBotanInitEx::RNG(), pwd); 
나는 예외가

add_oid(config, "1.3.36.3.3.2.8.1.1.13", "brainpool512r1"); 

가 어떻게이 ECDH_PrivateKey를 직렬화 않습니다 모란 초기화가이 라인을 통과 않더라도 23,516,

?

+0

커브의 OID가 키 유형의 OID와 다릅니다. 왜 ECDH 키를 직렬화해야합니까? 정적 DH는 그렇게 많이 사용되지 않습니다. 아니면 ECDSA (다른 알고리즘, 동일한 키 유형)에 사용합니까? –

+0

내가 실제로하는 일을 읽을 필요가있다 - 모든 TLA ..FLA가 내 머리를 돌린다. 나는 기존의 RSA 공개 키 "예"에서 오는 중이며, 여기서 키는 끝점 간의 교환을 위해 일련 화됩니다. – peterchen

답변

1

RSA - 이전 알고리즘 - 인증/서명에 사용되므로 여기서는 ECDSA라고 가정합니다. 이 경우 ECDH_PrivateKey 대신 ECDSA_PrivateKey을 사용해야합니다. ECDH는 인증 및 서명에 사용될 수 있으며 ECDH는 주요 계약에 사용됩니다.

Diffie-Hellman 키 계약은 일반적으로 정적 키 쌍없이 수행됩니다 (ECDHE의 E 및 SSL/TLS 암호 세트의 DHE는 임시 프로토콜을 나타냄). 그래서 키 합의를 위해 개인 키를 직렬화/저장해야 할 이유가 없어야합니다.

어떤면에서 직렬화가 필요하면 미리 생각하고 질문해야합니다. 직렬화가 필요하지 않으면 키 (특히 개인 키)를 직렬화하면 안됩니다. 대신에 객체 핸들을 전달할 수 있습니다.

+0

고마워요! 방금 내 질문에 잘못이 있음을 깨달았습니다. 신뢰할 수있는 장치에 비밀 무작위 "신원"을 작성하고이를 공개 키로 암호화하여 안전하게 전송합니다. 따라서 키는 적어도 장치 개정마다 영구적입니다. 장치에 대한 성능 요구 사항이 적기 때문에 EC가 RSA보다 선호됩니다. 나는 이제 ECDH가 "단지"핵심 합의라고 생각했지만 서명 한 ECDH (E)와 ECDSA를 제공하는 라이브러리 (ECM)는 EC 공개 키 암호화로 간주되지만, 내가 확인한 라이브러리는 그 이름). – peterchen

+1

@peterchen ECIES의 경우 ** 수신기의 DH 개인 키를 저장해야합니다 (라이브러리 함수 내에서만). 그러나 Botan과 ECIES에 대한 검색은 나에게도 (결과를 알려주지 않기 전에) 제로 결과를 반환했습니다. 아마도 ElGamal 암호화를 체크 아웃 할 수 있지만 RSA 공개 키를 사용하는 RSA 암호화는 비교적 효율적입니다 * RSA 암호 해독 (물론 키 생성)이므로 시간이 오래 걸립니다. –