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

时间:2010-01-25 16:07:42

标签: c++ security cryptography shared-secret

我正在寻找.NET应用程序和嵌入式设备之间的密钥交换解决方案。两个端点具有共享密钥,使得椭圆曲线Diffie-Hellman(ECDH)算法非常适合安全地交换会话的主密钥。

有一个很好的C ++库crypto++,它实现了ECDH,适用于嵌入式设备。但是,它对ECDH的实施不同于Mirosoft的ECDiffieHellmanCng实施(正如其FAQ中提到的那样)。我们希望保持与.NET安全算法的兼容性,以便我们可以坚持使用PC应用程序的托管代码(现在,或者如果我们使用CNG,当我们有一天丢弃XP时)。

有没有人看到除了微软之外的一个与微软兼容的实现?或者,.NET代码和嵌入式C ++代码之间是否有其他良好的密钥交换解决方案可用于预共享密钥?

更新2010-01-27:为了澄清,我正在尝试使用ECDH在两个不相互信任的广告端点之间执行双向身份验证和密钥交换,直到他们看到他们共享同样的秘密。这类似于蓝牙配对方案,其中共享密钥在带外交换(除非在我的情况下,设备可能不在彼此附近)。

3 个答案:

答案 0 :(得分:1)

对于互操作性,您最好使用RSA。由于专利雷区,您将找不到许多ECC的免费实施。

如何让一方生成一个随机密钥,用另一方的公钥对其进行加密,并使用自己的私钥对其进行签名。然后另一方可以验证签名并解密共享密钥。

如果您担心重播攻击(请注意您计划使用的ECDH方案不能防止这些 - 除非您计划使用临时密钥),您可以让双方生成随机密钥,并使用另一方的公钥,然后以某种方式组合这两个键。

更好的方法可能是使用一些标准协议:考虑使用客户端证书验证的TLS。您可以对客户端和服务器证书进行硬编码。

答案 1 :(得分:1)

您引用的常见问题解答中没有任何内容以这种或那种方式引用CNG实现。我认为FAQ中的陈述一般都是正确的,尤其是专利情况。但是,有一些标准,特别是美国NIST已经公布了一些标准。请参阅示例Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography

答案 2 :(得分:0)

OpensSL拥有Visual Studio的端口