1

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

  1. 客户端连接并发送他的用户名
  2. 服务器为用户发送盐(总是相同的)
  3. 客户端将盐添加到密码哈希中并将其发送到服务器

这样密码一直被隐藏,但它并不能阻止黑客复制哈希,如果他可以过来并在他收到密码后发送它......

4

4 回答 4

5

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

于 2009-03-04T12:00:41.473 回答
2

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

再说一次,我不是安全专家,可以说你不应该听取任何非专家的安全建议。

于 2009-03-04T11:56:41.933 回答
1

安全很难。

不要推出自己的登录协议,要么使用现有的经过验证的协议,要么通过加密(SSH、SSL ......)连接做一些简单而强大的事情。那里有很多可靠的协议的强大的插入式实现,以及由于轮子的有缺陷的重新发明而导致系统失败的许多例子——如果登录保护了任何重要的东西,那就没有任何借口了。

也就是说,如果您的目的是学习设计此类算法,我强烈推荐 Bruce Schneier 的“应用密码学”。

于 2009-03-04T12:28:10.657 回答
0

第 2 步似乎是更大的弱点。如果您可以确保服务器发送“足够大”的盐并且永远不会发送相同的盐,两次(我怀疑一小部分像样的随机数,加上一个递增的计数器,那么散列可能就足够了,但我无法证明它是),这可能就足够了。或者,按照 ssg 的指导,将整个事情封装在 SSL 会话中。

于 2009-03-04T12:08:13.327 回答