【问题标题】:Adding a salt to .htpasswd?向.htpasswd 添加盐?
【发布时间】:2011-05-09 17:01:54
【问题描述】:

是否可以在 .hpasswd 文件中的密码中添加盐?我认为不需要,因为服务器需要每个用户的盐来验证密码,我想不出它会如何获取它们,但否则如果要获取列表,它将很容易受到攻击。有解决办法吗?

非常感谢您的帮助, 本

【问题讨论】:

  • SHA 加密(可以指定为 htpasswd 的一个选项)有什么不好的地方,以至于您想对哈希进行加盐处理? Auth Digest 不是一个适合您的选项,其中用户的密码被发送并与 nonces 一起重新散列?
  • 查看我的(更新的)答案 - htpasswd 生成的 SHA 摘要很容易反转。

标签: encryption hash salt .htpasswd


【解决方案1】:

默认情况下,htpasswd 使用标准的 crypt 函数,因此密码已经加盐 - 请注意,在此示例中,两个用户的密码相同,但哈希值不同:

simon@diablo:~$ htpasswd -b -c htpasswd simon abcd 为用户 simon 添加密码 simon@diablo:~$ htpasswd -b htpasswd simon2 abcd 为用户 simon2 添加密码 simon@diablo:~$ cat htpasswd 西蒙:NWvm/LCCxQ64E 西蒙2:2I.LBzsRqULN6

(注意:-b 标志通常不鼓励使用,因为其他用户可以看到您的命令行参数和密码)

哈希的前两个字符是盐;通过再次调用crypt() 来验证密码。输入错误的密码会产生一个不等于散列密码的字符串:

>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'

而正确的密码会产生预期的哈希:

>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'

htpasswd -m 使用基于 MD5 的不同算法并使用更长的盐:

simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd 为用户 simon 添加密码 simon@diablo:~$ cat htpasswd 西蒙:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/

这里,盐是第二个和第三个$之间的8个字符。

htpasswd -s 存储不含盐的 SHA-1 摘要;这似乎是为了与 Netscape/LDIF 兼容:

simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd 为用户 simon 添加密码 simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd 为用户 simon2 添加密码 simon@diablo:~$ cat htpasswd 西蒙:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=

这些可以很容易地反转 - 转换为十六进制摘要:

>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'

然后使用online hash database

【讨论】:

  • 谢谢!我正在使用 SHA-1 来加密密码。你所说的似乎表明MD5比SHA-1更安全?但它也有它的弱点。我正在使用 PHP 编码并将数据写入文件,所以我不知道向 MD5 哈希添加盐是多么容易。
  • 对它有利的另一点是基于 MD5 的算法重复哈希 1000 次(“密钥强化”),这使得暴力破解更加耗时。这个问题有代码声称实现算法:stackoverflow.com/questions/1038791/…
  • 这真是太棒了!我在那里学到了很多东西,而且 PHP 代码运行良好。谢谢!
  • 强制性 cmets:1) 哈希函数(SHA1、MD5、crypt)不加密。他们的工作是创造性地丢弃信息。 2) SHA1 不能(迄今为止)被逆转。也就是说,人们已经转发(使用 SHA1 散列)大量可能的密码,并且可以非常快速地搜索结果(彩虹表)。由于没有盐,很可能任何短密码或不安全密码都在彩虹表中,并且可以从哈希中确定其中一个密码。
  • @SimonJ 在线哈希数据库链接已失效,这是一个很好的替代品:hashkiller.co.uk/sha1-decrypter.aspx
【解决方案2】:

htpasswd 实用程序 already does use salts 在大多数情况下:

crypt() 和 MD5 格式通过预先添加一个随机盐字符串来置换表示,以使针对密码的字典攻击更加困难。

这就是密码文件中盐的(某种)目的。虽然盐必须包含在服务器的.htpasswd 文件中,以便服务器能够检查密码,但盐可能有多种不同的可能性来防御rainbow tables 等攻击技术。

但是,如果您的用户选择了弱密码或普通密码,密码破解无论如何都是一个问题,因为攻击者(假定可以访问密码文件)会首先尝试这些密码,实际上非常快(不受密码速度的限制)服务器和 Internet 连接),通过正常方式猜测。我能给出的最好建议是用户应该始终选择强密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-09-27
    • 2021-04-09
    相关资源
    最近更新 更多