2016-11-09 49 views
1

我正在構建瀏覽器擴展,NodeJS應用程序(服務器)和C#應用程序之間的通信線。我需要使用像Diffie-Hellman或ECDH這樣的方法在每個實例之間交換密鑰,以便我可以開始加密敏感數據。是我可以在NodeJS,CSharp和WebCrypto之間使用DH/ECDH方法嗎?

通信線路如下:

瀏覽器 < - >節點 < - >CSHARP

瀏覽器需要僅與節點通信,並且CSHARP應用程序也只需要與節點進行通信。

我需要找到執行某種像ECDH密鑰交換,在大多數瀏覽器(可browserified節點代碼)的作品和對端的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「中間層」或「polifill」。

至於C# - 微軟的Crypto API支持ECDH(其實就是支持通過CNG,但它不是那麼重要)。

+0

謝謝!墊片的想法應該很好。在進一步挖掘之後,似乎CSharp具有可用於ECDH的曲線規範(https://msdn.microsoft.com/en-us/library/system.security.cryptography.cngalgorithm(v=vs.110).aspx),但我如何將它們與Node節點相匹配?舉例來說,我有一些約定俗成的「ECDiffieHellmanP521」和C#的一面「ECDiffieHellmanP384」,但沒有對節點側類似的跡象,也許除了「secp521r1」和「secp384r1」 ... –

+0

你至少可以嘗試的。這看起來是正確的。 –

+0

我嘗試了C#端的ECDiffieHellmanP256和javascript中的prime256v1曲線。同時使用C#端的公鑰來計算祕密,它會引發錯誤。 (未知)的事件處理程序中的錯誤:錯誤:未知點格式在ShortCurve.decodePoint(background.js) at KeyPair._importPublic(background.js) at new KeyPair(background.js) at Function.fromPublic(background .js:34695:10) at EC.keyFromPublic(background.js:34473:18) at ECDH.computeSecret(background.js:31187:28) –

相關問題