2016-11-09 3 views
1

브라우저 확장, NodeJS 응용 프로그램 (서버) 및 C# 응용 프로그램 간의 통신 라인을 구축하고 있습니다. 민감한 데이터를 암호화하기 위해 Diffie-Hellman 또는 ECDH와 같은 메소드를 사용하여 각 인스턴스간에 키를 교환해야합니다. 다음 커뮤니케이션의NodeJS, CSharp 및 WebCrypto간에 사용할 수있는 DH/ECDH 방법이 있습니까?

의 선은 다음과 같습니다

브라우저 < ->노드 < ->CSHARP

브라우저는 노드와 통신해야 하고 CSHARP 앱은 노드과 통신해야합니다.

대부분의 브라우저에서 작동하는 ECDH와 같은 일종의 키 교환을 수행하는 방법을 찾아야합니다 (브라우저 화 된 노드 코드 일 수 있음). NodeJS 측에서 호환되는 구현이 있습니다. NodeJS와 C# 사이에서 동일한 작업을 수행 할 다른 방법을 찾아야합니다.

C#에서 ECDH를 사용하는 예제가 많이 있는데 (예 : https://blogs.msdn.microsoft.com/shawnfa/2007/01/22/elliptic-curve-diffie-hellman/), Node와 같이 ECDH 커브에 대한 언급은 볼 수 없습니다. 이 플랫폼간에 키 교환을 수행하는 일반적인 방법이 있습니까?

답변

0

사실 WebCrypto는 DH를 지원하지 않습니다. 최신 버전의 표준에서는 제외되었습니다. 따라서 유일한 옵션은 ECDH입니다.

예를 들어 this link을 확인할 수 있습니다. 또한 동일한 코드 here의 "실제 예"가 있습니다. 현재 PKI.js는 WebCrypto를 사용하고 CMS 암호화에 필요한 유일한 라이브러리입니다.

Node.js와 마찬가지로 동일한 PKI.js 라이브러리와 WebCrypto "shim"또는 "polifill"을 사용할 수 있습니다.

C#의 경우 - Microsoft Crypto API는 ECDH를 지원합니다 (실제로 지원은 CNG를 통해 이루어 지지만 그다지 중요하지 않습니다).

+0

감사합니다. shims 아이디어는 잘 작동합니다. CSharp가 ECDH (https://msdn.microsoft.com/en-us/library/system.security.cryptography.cngalgorithm(v=vs.110).aspx)에서 사용할 수있는 곡선 사양을 가지고있는 것처럼 더 파고 들었지만 Node 노드에 어떻게 대응시킬 수 있습니까? 예를 들어 C# 측에 "ECDiffieHellmanP521"및 "ECDiffieHellmanP384"와 같은 코드가 있지만 "secp521r1"및 "secp384r1"을 제외하고 Node 측에서 비슷한 부호가 없습니다. –

+0

적어도 시도해 볼 수 있습니다. 그것은 옳은 것처럼 보일 것입니다. –

+0

나는 C# 쪽에서 ECDiffieHellmanP256을 시도하고 javascript에서 prime256v1을 곡선 처리했다. C# 측에서 공개 키를 사용하여 비밀 키를 계산하는 동안 오류가 발생합니다. 오류 : (알 수없는)에 대한 이벤트 처리기에서 오류 Function.fromPublic 알 수없는 포인트 형식 ShortCurve.decodePoint (background.js)에서 KeyPair._importPublic (background.js)에서 새로운 된 KeyPair (background.js)에서 (배경 .js : 34695 : 10) at EC.keyFromPublic (background.js : 34473 : 18) at ECDH.computeSecret (background.js : 31187 : 28) –