2

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

有一个很好的 C++ 库crypto++,它实现了 ECDH 并且适用于嵌入式设备。但是,它的 ECDH 实现与 Mirosoft 的ECDiffieHellmanCng实现不同(如其常见问题解答中所述)。我们希望与 .NET 安全算法保持兼容,以便我们可以坚持使用 PC 应用程序的托管代码(现在,或者如果我们使用 CNG,当我们有一天会放弃 XP 时)。

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

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

4

3 回答 3

1

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

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

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

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

于 2010-01-25T22:00:45.310 回答
1

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

于 2010-01-26T00:02:11.557 回答
0

OpensSSL 具有到 Visual Studio 的端口

于 2010-01-25T16:15:05.283 回答