什么是具有ECDiffieHellmanCng兼容实现的C ++库?

我正在寻找.NET应用程序和嵌入式设备之间的密钥交换解决方案。两个端点具有共享密钥,使得椭圆曲线Diffie-Hellman(ECDH)算法非常适合于安全地交换会话的主密钥。 有一个很好的C ++库,crypto ++,它实现了ECDH,适用于嵌入式设备。然而,它的ECDH实现不同于Mirosoft的ECDiffieHellmanCng实现(如FAQ中所提到的)。我们希望保持与.NET安全算法的兼容性,以便我们可以坚持使用PC应用程序的托管代码(现在,或者如果我们使用CNG,当我们有一天丢弃XP时)。 有没有人看到除了微软之外的一个与微软兼容的实现?或者,.NET代码和嵌入式C ++代码之间是否有其他良好的密钥交换解决方案可用于预共享密钥? 更新2010-01-27:为了澄清,我正在尝试使用ECDH在两个不相互信任的ad-hock端点之间执行双向身份验证和密钥交换,直到他们看到它们共享相同的秘密。这类似于蓝牙配对场景,其中共享秘密在带外交换(在我的情况下,设备可能不在彼此附近)。     
已邀请:
对于互操作性,您最好使用RSA。由于专利雷区,您将找不到许多ECC的免费实施。 如何让一方生成一个随机密钥,用另一方的公钥对其进行加密,并用自己的私钥对其进行签名。然后另一方可以验证签名并解密共享密钥。 如果你担心重播攻击(注意你计划使用的ECDH方案没有防止这些 - 除非你打算使用临时密钥),你可以让双方生成一个随机密钥,用另一方加密它公钥,然后以某种方式组合这两个键。 更好的可能是使用一些标准协议:考虑使用客户端证书验证的TLS。您可以硬编码客户端和服务器证书。     
您引用的常见问题解答中没有任何内容以这种或那种方式引用CNG实现。我认为FAQ中的陈述通常是正确的,尤其是专利情况。但是,有一些标准,特别是美国NIST已经公布了一些标准。参见例如使用离散对数密码学的双智能密钥建立方案的建议书。     
OpensSSL具有Visual Studio的端口     

要回复问题请先登录注册