我正在建立浏览器扩展,NodeJS应用程序(服务器)和C#应用程序之间的通信线路。我需要使用Diffie-Hellman或ECDH之类的方法在每个实例之间交换密钥,以便可以开始加密敏感数据。
沟通渠道如下:
浏览器节点 CSharp
浏览器仅需要与Node通信,而CSharp应用程序也仅需要与Node通信。
我需要找到一种执行类似于ECDH的密钥交换的方法,该方法可在大多数浏览器中使用(可以被浏览器化的Node代码),并且在NodeJS端具有兼容的实现。我需要找到另一种在NodeJS和C#之间执行相同操作的方法。
我可以看到在C#中使用ECDH的例子很多(例如:https://blogs.msdn.microsoft.com/shawnfa/2007/01/22/elliptic-curve-diffie-hellman/),但是我看不到像Node那样的ECDH曲线。在这些平台之间执行密钥交换是否有一些通用方法?
最佳答案
实际上,WebCrypto不支持DH-它已从标准的最新版本中排除。因此,唯一的选择是ECDH。
作为示例,您可以检查this link。还有一个使用相同代码here的“实时示例”。请注意,目前PKI.js是唯一使用WebCrypto并具有CMS加密所需的所有库。
至于Node.js,您可以使用相同的PKI.js库和任何WebCrypto的“ shim”或“ polifill”。
至于C#,Microsoft Crypto API支持ECDH(实际上,该支持是通过CNG进行的,但并不那么重要)。