【问题标题】:Same salt or Different salt?相同的盐还是不同的盐?
【发布时间】:2015-06-29 10:36:26
【问题描述】:

我有一个超旧版本的 php(请不要告诉我升级,因为在我们的例子中它永远不是一个选项),我需要存储密码。我看过像this 这样的帖子,还有很多说,使用php 的crypt()。我只是对一件事感到困惑:

我的问题是存储密码的正确方法;对不同用户的所有密码使用一个相同的 SALT,还是对用户的每个密码使用不同的随机生成的 SALT?

我的问题出现了,因为根据我的经验,我没有看到每行都有盐的数据库/表,有些在配置文件中有一个盐,它被用于对所有密码进行加盐。另外,我认为在每个用户中存储不同的盐仅仅意味着要存储更多的字节。

谢谢大家♥

【问题讨论】:

  • 你怎么知道它的重复?您还没有阅读我的问题,因为您在我发布此内容 10 秒后发表了评论
  • @Fred-ii- 老实说,不,即使我指出他在这个问题上的最大资源,我不认为他爱我很长时间
  • 让函数负责加盐。您以后可能会遇到并发症。 password_hash()crypt() 已将它们内置到哈希中,为什么要让事情复杂化?
  • @Fred-ii- - 当然,password_hash()crypt() 这两个函数都会在生成的哈希中包含盐,但也应该提到,虽然 password_hash() 函数会生成一个安全的盐, crypt() 函数将

标签: php passwords salt crypt


【解决方案1】:

为每个密码创建一个唯一的盐,这是唯一安全的方法。如何计算哈希值取决于您的 PHP 版本实际使用了多长时间:

5.5 版 PHP 将内置支持 BCrypt、函数password_hash()password_verify()。此函数将自行生成一个安全的盐并将其包含在生成的哈希值中。

对于 PHP 5.3.7 及更高版本,存在一个 compatibility pack,来自创建 password_hash() 函数的同一作者。然后您就可以使用 password_hash() 函数,并且如果您切换到较新的 PHP 版本,您无需更改代码。

对于 5.3.7 之前的 PHP 版本,不支持带有 2y 的 crypt(),这是一种 unicode 安全的 BCrypt 算法。可以使用兼容包并将其替换为 2a,这是早期 PHP 版本的最佳替代方案。

对于 5.3 之前的 PHP 版本,根本不支持 BCrypt。那么你最好的选择可能是phpass framework

请注意,crypt() 函数将不会自行创建安全盐,尽管它会将其包含在生成的哈希值中。为了验证,它将从那里提取它。

【讨论】:

    【解决方案2】:

    对每个哈希使用单个盐将始终防止彩虹表攻击,除非使用您正在使用的盐生成专门生成的彩虹表,除非您的盐是单个字符或事先已知,否则这在天文上是不可能的。

    对每个散列使用相同的盐对可以访问您的 SQL 数据库但不能访问您的后端代码的黑客也很有帮助。

    但是,如果黑客可以访问您的静态盐,那么对于蛮力攻击的速度来说,它几乎毫无用处,而为每个用户设置一个盐就可以缓解这种情况。

    您应该同时使用硬编码的静态盐和动态盐来防止彩虹表攻击并减轻暴力攻击。

    【讨论】:

    • 这意味着两者都超级安全,但为每个用户存储不同的盐比另一种方式超级安全?
    • 它们都提供不同类型的保护,但同时使用它们会比只使用其中任何一个更安全,因为你会同时获得两者的好处。
    【解决方案3】:

    您想使用不同的盐。这个想法是盐会影响生成的哈希。

    当“黑客”已经暴露的密码时,恶意的人会使用“彩虹表”。这些本质上是一种反向查找,用于查找散列到给定值的字符串。也可以为常用密码生成彩虹表。

    如果您使用一种盐,黑客只需生成一张彩虹表。如果您为每个密码使用新的盐,黑客必须为他们希望破解的每个密码生成彩虹表。

    为现代散列库(如 bcrypt)升级您的 PHP 是相关的。但是,我强烈推荐旧版本的 PHP 的后向端口。密码的散列函数设计为计算量很大,因此密码需要时间来验证。这个想法是您无法在任何合理的短时间内验证 1000 种不同的密码可能性。

    【讨论】:

    • 我明白了,但是为什么 laravel 使用 application/config/application.php 中定义的盐(“应用程序密钥”)?抱歉真的很困惑
    • 那是为了加密,不是散列。不同的东西。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2011-08-15
    • 2015-01-17
    • 2023-03-13
    相关资源
    最近更新 更多