我可以在 NodeJS、CSharp 和 WebCrypto 之间使用 DH/ECDH 方法吗?

Is there a DH/ECDH method I can use between NodeJS, CSharp and WebCrypto?

我正在浏览器扩展、NodeJS 应用程序(服务器)和 C# 应用程序之间建立通信线路。我需要使用 Diffie-Hellman 或 ECDH 等方法在每个实例之间交换密钥,以便我可以开始加密敏感数据。

通讯线路如下:

浏览器 <--> 节点 <--> CSharp

浏览器只需要和Node通信,CSharp app也只需要和Node通信.

我需要找到一种执行某种密钥交换的方法,如 ECDH,它适用于大多数浏览器(可以浏览器化 Node 代码)并且在 NodeJS 端具有兼容的实现。我需要找到另一种方法来在 NodeJS 和 C# 之间做同样的事情。

我可以看到在 C# 中有很多使用 ECDH 的示例(例如:https://blogs.msdn.microsoft.com/shawnfa/2007/01/22/elliptic-curve-diffie-hellman/),但我看不到像 Node.js 那样提到 ECDH 曲线。这些平台之间是否有一些通用的密钥交换方式?

事实上 WebCrypto 不支持 DH - 它被排除在最新版本的标准之外。因此唯一的选择是ECDH。

作为示例,您可以检查 this link. Also there is a "live example" of the same code here。请注意,目前 PKI.js 是唯一使用 WebCrypto 并拥有 CMS 加密所需的一切的库。

至于 Node.js - 您可以使用相同的 PKI.js 库和任何 WebCrypto "shim" 或 "polifill".

至于 C# - Microsoft Crypto API 支持 ECDH(实际上支持是通过 CNG,但并不那么重要)。