通过线路发送密码,更安全:Diffie-Hellman / AES或RSA? (令我困扰的是,AES不会掩盖密码长度)

时间:2010-01-19 13:23:25

标签: security encryption rsa aes

我得到的建议是我怀疑所以我在这里寻求支持回去挑战建议。

我被建议使用Diffie-Helman让双方就密钥达成一致,使用密钥生成AES密钥,然后使用AES加密/解密正在传输的密码。非常类似于示例代码here

使用此方案时,加密密码的长度与未加密密码的长度相同。我应该担心这个吗?

之前,我使用RSA,使用接收者的公钥加密密码。无论密码长度如何,都会导致加密长度为256。那不是更好吗?

3 个答案:

答案 0 :(得分:3)

您可以使用任何数据填充任意长度。它不必是随机的。只要它全部加密。我认为这是你最不担心的事情。

请注意,如果您使用Diffie-Hellman,您仍需要验证发送的参数,您可能需要对RSA进行验证。

替代方案是:

  1. 使用RSA交换加密的密钥,然后使用该密钥加密数据。
  2. 使用Diffie-Hellman交换密钥,然后使用RSA对发送的值进行签名以验证事务。
  3. 如果你做了这一切,那么你还要担心是否重播了交换以使你重用密钥等。

    老实说,如果你需要问这个问题,那么你可能没有资格编写加密协议。他们很难做到正确而不是胆小的人。

    如果您需要流式传输大量数据,建议您使用SSL / TLS进行交换。 PGP / PKCS#7如果您只需要发送一条消息。

答案 1 :(得分:3)

首先:不要发明自己的身份验证协议。期。如果你这样做,即使你使用强加密也会出错。有许多现有的记录良好的认证协议已经由密码学家审查,因此被认为是安全的。不要试图“简化”它们,它们已经被简化了。

第二:恕我直言,你永远不应该在网上发送密码进行身份验证(我不知道任何认证协议,包括可怕的不安全的NTLMv1协议)[1]。

如果您已经开始关注“滚动我自己的身份验证方案”路径,那么我将如何使您在上面描述的方案更安全(警告:我不是密码学家 - 我相信有我在这里所描述的严重缺点:

不是直接发送密码,而是发送密码的单向函数(也称为OWF,通常实现为SHA256或更强的加密哈希)。

换句话说,让服务器向客户端发送salt值,将salt添加到密码中,计算密码的OWF + salt值并将OWF结果发送到服务器。在服务器上,将salt添加到密码中,并执行OWF计算。如果结果相同,则密码有效,如果它们不是无效的。

最后,让真正的密码学家审查你所做的一切。他们在您的实施中发现问题,您将不得不修复它们。他们可能会建议你放弃努力,转而支持现有的已发布协议。

[1] AFAIK,你应该在线路上发送密码的唯一一次是当你更改密码时,你应该将长度填充到块大小的倍数(包括cybertext中的长度)因此,当您解密它时,您可以区分密码和填充。)

答案 2 :(得分:1)

如果可以提供帮助,请不要通过线路发送密码。相反,请使用SRP等方案,该方案使用一个密码对双方进行身份验证。