登录协议

时间:2009-03-04 11:52:02

标签: .net security login

我应该如何设计一个更安全的登录协议,就像我现在拥有的那样

  1. 客户端连接并发送其用户名
  2. 服务器为用户发送盐(总是相同的)
  3. 客户端将盐添加到密码哈希并将其发送到服务器
  4. 这样一来,密码一直处于隐藏状态,但是如果他能够过来并在收到密码后发送密码,它就不会阻止黑客复制哈希...

4 个答案:

答案 0 :(得分:5)

将安全性保留在更高级别的协议(SSH,SSL)上并保持简单。

答案 1 :(得分:2)

如果服务器只接受最初使用该盐攻击的连接上的盐渍密码,则黑客必须保持连接,直到他获得与他看到哈希相同的盐。我不是说这是理想的(并且Diffie-Hellman密钥交换后跟完全加密的身份验证可能更安全,尽管仍然容易受到中间人攻击,除非你小心)但我认为简单的调整至少是有益的。

然后,我不是安全专家,你可以说不应该接受任何非专家的安全建议。

答案 2 :(得分:1)

安全很难。

不要使用自己的登录协议,使用existing proven one或通过加密(SSH,SSL ...)连接执行简单而强大的操作。那里有许多经过验证的协议的强大实施,以及由于轮子重新发明而导致系统失败的许多例子 - 如果登录正在保护任何重要的东西,那么根本没有任何借口。

那就是说,如果你的目的是学习设计这样的算法,我强烈推荐Bruce Schneier的“Applied Cryptography”。

答案 3 :(得分:0)

步骤2似乎是更大的弱点。如果你可以确保服务器发送一个“足够大”的盐和从不相同的盐,两次(我怀疑一小部分体面的随机数,加上一个递增的计数器,然后散列可能就够了,但我不能证明它是),这可能就足够了。或者,遵循ssg的主要内容并将整个内容封装在SSL会话中。