【发布时间】:2011-08-13 04:09:17
【问题描述】:
我最近试图找出一种方法来保护单服务器多客户端系统中服务器和客户端之间的通信。在密码学领域没有做太多工作,我希望人们能提供有价值的意见或反馈,以防我错过了一些重要的事情。
如果重要,将使用 .NET Framework 4.0。 现在进入有趣的部分:
客户端建立到服务器的不安全连接(很可能是 RESTful 调用),请求服务器的公钥(以防它未知)和(伪随机)初始化向量。此时,如果之前未知,客户端也会提交他的公钥。
双方使用椭圆曲线 Diffie-Hellman(基于哈希或基于 hmac 的密钥派生函数,我还不是 100% 确定;想法?)生成密钥(使用 System.Security.Cryptography.ECDiffieHellmanCng)
双方计算派生的初始化向量 - 例如通过使用客户端的加盐密码哈希作为密钥应用keyed hash。
-
客户端使用对称加密(AES 或 Rijndael?)恢复通信,使用 (2) 期间生成的密钥和 (3) 中修改的初始化向量,希望确保会话安全。
李>
现在我想知道:
- 这种方法是否过于复杂?
- 是否存在需要改进的弱点?如果有,您有解决方案吗?
【问题讨论】:
-
对于#4,在 .NET 中,AES 和 Rijndael 是一回事。 AesManaged 和 RijdaelManaged 类是相同的。
AesManaged只是RijndaelManaged的包装。 -
我真的建议使用 SSL 而不是重新发明它。
-
@vcsjones:在每个框架中都是正确的 - Rijndael 是 AES(高级加密标准)。
-
@vcsjones 和@Noon Silk:不一定正确,.NET 也不一定正确。 AES 是限制为 128 位块大小和 128、192 和 256 位密钥大小的 Rijndael 算法。 Rijndael 本身和 .NET 的 Rijndael 实现支持其他块大小。
标签: .net cryptography