2010-01-25 2 views
2

.NET 응용 프로그램과 임베디드 장치 간의 주요 교환 솔루션을 찾고 있습니다. 두 종점에는 공유 비밀 키가있어 ECD (Elliptic Curve Diffie-Hellman) 알고리즘이 세션의 마스터 비밀을 안전하게 교환하는 데 탁월합니다.ECDiffieHellmanCng 호환 구현이있는 C++ 라이브러리 란 무엇입니까?

ECDH를 구현하고 내장 된 장치에 적합한 좋은 C++ 라이브러리 crypto++이 있습니다. 그러나 ECDH의 구현은 Mirosoft의 ECDiffieHellmanCng 구현과 다릅니다 (FAQ에서 언급 됨). 우리는 .NET 보안 알고리즘과의 호환성을 유지하여 PC 응용 프로그램의 관리 코드 (현재 또는 언젠가 XP를 떨어 뜨릴 때 CNG를 사용할 경우)를 사용할 수 있습니다.

누군가 Microsoft와 호환되는 구현 외에도 다른 사람이 있습니까? 또는 미리 공유 된 키와 함께 사용할 수있는 .NET 코드와 포함 된 C++ 코드 사이에 다른 좋은 키 교환 솔루션이 있습니까?

업데이트 2010 년 1 월 27 일 : ECDH를 사용하여 공유하는 것을보기 전까지 서로 신뢰하지 않는 두 개의 ad-hock 끝점간에 양방향 인증과 키 교환을 수행하려고합니다. 같은 비밀. 이는 공유 암호가 대역 외로 교환되는 Bluetooth 페어링 시나리오와 유사합니다 (단, 장치가 서로 가까이 있지 않을 수도 있음).

+0

당신이 연결하는 FAQ는 피터 Gutmann의 cryptlib에 대한 FAQ입니다 - crypto ++가 아닙니다. –

+0

좋은 수정. FAQ 항목은 동일한 일반적인 cryto 알고리즘의 두 구현이 서로 작동한다고 가정 할 수없는 일반적인주의 사항으로 가장 좋습니다. 나는 누군가가 어떻게되는지 알기를 바라고있다. –

답변

0

OpensSSL는 RSA를 사용하여 형편이 나은 상호 운용성을위한 Visual Studio를

+0

첫 번째 선택은 .NET Framework에 이미 포함되어있는 것을 사용하는 것입니다. 따라서 이식성이 아니라 상호 운용성에 중점을 둡니다. –

1

에 포트가 있습니다. 특허 지뢰밭 때문에 ECC 무료 구현을 많이 찾을 수 없습니다.

한 쪽에서 임의의 키를 생성하고 다른 쪽의 공개 키로 암호화 한 다음 자체 비공개 키로 서명하는 방법은 어떻습니까? 그런 다음 다른 쪽에서 서명을 확인하고 공유 키를 해독 할 수 있습니다.

재생 공격 (임시 키 사용을 계획하지 않는 한 사용하려고 계획 한 ECDH 체계가이를 보호하지 못했음)에 대해 걱정할 경우 양측이 임의의 키를 생성하고 암호화하도록 할 수 있습니다 다른 쪽의 공개 키로 누른 다음 어떤 식 으로든 두 개의 키를 결합하십시오.

클라이언트 인증서 유효성 검사와 함께 TLS를 고려해보십시오. 표준 프로토콜을 사용하는 것이 더 나을 것입니다. 클라이언트 및 서버 인증서를 하드 코딩 할 수 있습니다.

+0

ECDH 체계는 각 마스터 비밀 교환에 새로운 무작위 재료를 통합하여 재생 공격을 방지합니다. .NET에서 ECDiffieHellmanCng 생성자는 난수를 생성합니다. RSA 아이디어가 마음에 들지만 인증 방법에 대한 질문이 있습니다. 양측은 공유 된 비밀을 가지고 있지만, 다른 쪽은 사기꾼이 아닌 것을 신뢰하지 않습니다. 인증서 기반 인증은 비실용적이라고 생각합니다. 양쪽에 수천 개의 고유 한 인스턴스가있을 수 있기 때문에 신뢰할 수 없습니다. 공유되는 비밀은 제외됩니다. –

관련 문제