【问题标题】:hash salt complexity哈希盐复杂度
【发布时间】:2011-01-29 08:17:50
【问题描述】:

使用有什么好处:

sha1($long_unpredictable_randomly_generated_salt.$password.$global_salt)

超过

sha1(sha1($username).$password.$global_salt)

唯一的盐显然存储在数据库中,而全局盐在服务器上的配置文件中。

我知道盐的目的只是为了唯一,并防止预先计算的哈希表..所以我认为sha1($username) 生成的长哈希没有理由不够好.. 但安全性非常重要,我想我会在这里向可能更了解的人寻求信息建议:-)

【问题讨论】:

    标签: php security hash salt


    【解决方案1】:

    缺点是用户名大多是已知的,所以当有人知道你编的这个'公式'时,他可以计算sha1(user_to_hack),这部分不会有任何额外的好处。事实上,在这种情况下,使用sha1(username) 还是只使用username 并没有多大关系。

    在另一种情况下,您使用的是未公开的值,因此即使有人知道您的公式(现在每个人都知道),他仍然需要该独特盐的值,然后才能用于他们,所以他们需要访问您的数据库。我假设您正在为每个用户制作独特的盐?

    您可能无论如何都需要获取数据,因此唯一盐可能也更快,因为您不需要计算用户名的哈希值。

    但无论如何,两者都非常安全,但前提是你很好地实现了实际的登录过程。我不会担心现在使用哪一个。

    【讨论】:

    • 我认为如果服务器和数据库都被黑客入侵,用户名和 sha1(用户名)之间的区别很重要。例如,如果生成了长度为 15 的所有字符组合的彩虹表(附加了全局盐),那么这可能会解决用户名+密码的总长度为 15 或更少的所有哈希。但是,如果我使用 sha1(用户名),这将无法正常工作,他们必须为所有组合生成一个彩虹表,长度不超过 30+(需要更长的时间)
    • 使用密码将盐保存在数据库中实际上是相当普遍的,使用盐作为查找表的对冲而不是额外的熵位。就个人而言,我认为静态保存的哈希与公共知识一样多,并且无论如何都不依赖它来获取熵......
    • 用户名的哈希值并不是真正随机的,除非用户名是秘密的。
    • 约瑟夫,我同意。您能否查看我上面关于 sha1(username) 优于仅用户名的优点的评论,是否正确?
    • @Sil:不,我不相信有任何实际意义。任何想要攻击“软件猴子”的人都可以轻松地为 sha1(“软件猴子”) 构建一个预计算表。
    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 2011-05-27
    • 2020-11-19
    • 1970-01-01
    • 2012-08-21
    • 2011-04-26
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多