传输前哈希密码? (网站)

时间:2010-06-09 19:06:25

标签: passwords

我正在阅读关于密码安全的Ars article,并且它提到有些网站“在传输之前对密码进行哈希处理”?

现在,假设这不使用SSL连接(HTTPS),a。这实际上是安全的吗?如果你在一个安全的庄园里怎么做?

编辑1 :(基于前几个答案的一些想法)

℃。如果您在传输之前对密码进行哈希处理,那么如果您只在用户凭据数据库中存储密码的盐渍哈希版本,那么如何使用密码?

d。只是要检查,如果您使用的是HTTPS安全连接,那么这是否必要?

3 个答案:

答案 0 :(得分:5)

只有在服务器发送不可重用的盐时(当然,如果您使用安全散列),这才是安全的。

否则,攻击者可以简单地嗅探用户哈希,然后重放哈希以用户身份登录。

请注意,登录很容易受到中间人攻击。

答案 1 :(得分:1)

我不会称之为安全,但总比没有好。如果您让服务器在每次用户登录时选择哈希盐,那么将防止重放。但是,在登录时,没有任何东西可以保护用户免受中间人攻击。

当用户登录时,您必须将生成的盐存储在服务器上。如果这是一个问题,您可以使用另一个(固定)盐哈希值,将结果用作校验和并添加两者将您的登录表单作为隐藏字段。

周围有一些JavaScript SHA-1 implementations应该可以解决问题。如果可以帮助,请不要使用MD5。

答案 2 :(得分:1)

您可以使用salted数据库哈希生成用于对称加密的密钥来保护此方案免受中间人攻击。

它会像这样工作:

  • 服务器在数据库 H D 中查找密码哈希以及salt S D
  • 服务器选择随机盐 S R
  • 服务器通过使用 S R
  • 散列数据库哈希来生成密钥 K
  • 服务器将 S D S R 发送到客户端

  • 客户端通过使用 S D
  • 散列用户密码来计算 H D
  • 客户端通过散列 H D 并使用 S P 来计算 K
  • 客户端使用 K
  • 加密所有服务器通信

此方案根据用户密码创建随机会话密钥 K 如果不知道用户的密码(或 H D ,必须保密),中间的人将无法派生 K ,因此无法冒充服务器。