【问题标题】:Password + Salt + SecretSauce? Helpful, or just a little obscurity?密码 + 盐 + SecretSauce?有帮助,还是有点晦涩?
【发布时间】:2011-06-15 14:43:43
【问题描述】:

标准密码安全性涉及为每个用户生成一个随机盐,以某种方式将该盐与他们的密码组合并将它们散列在一起,然后将散列和盐存储在数据库中。

如果您不仅添加了hash($salt . $password),还添加了另一个密码短语,该密码仅存储在您的源代码或服务器配置文件中:

$secret_sauce = 'tehB%l1yG*@t$G2uFf'; // perhaps imported from config file
$hash = hash($salt . $secret_sauce . $password);

这是否增加了任何额外的好处,或者它只是通过应用在顶部的默默无闻的薄薄的安全层?

【问题讨论】:

    标签: hash password-protection salt


    【解决方案1】:

    对于密码文件,它只是在顶部添加了一点晦涩。

    但是,此方案称为“密钥哈希”,可用于对称(共享秘密)签名:如果您有这样的哈希和输入数据,那么您可以确定签名是由一个也知道额外秘密的人。当然,与公钥签名不同的是,如果不知道密钥,您就无法验证这一点。

    【讨论】:

      【解决方案2】:

      我无法找到几年前阅读的那篇论文,该论文表明通过部分计算散列部分很容易生成数千个散列结果。 (例如,通过开始计算“foo”的哈希值,您可以更轻松地为“foo1”、“foo2”、“foo3”、“foo4”等生成哈希值,这比单独生成每个哈希值要便宜得多。 )

      我认为它会争论在密码前后加盐。

      但请记住,如果攻击者可以读取密码数据库,他们也可能会从您的二进制文件或配置文件中读取盐值;这取决于您的设计。

      【讨论】:

      • 关于你的最后一段:我已经阅读了几个地方,但我不明白为什么。我想我真的不知道如何攻击者通常首先获得对数据库的访问权限。 (我想到了诸如 SQL 注入之类的东西,其中可以访问数据库,但不能访问服务器上的文件)。
      • @keithjgrant,如果这是您最大的威胁,那么额外加盐是有道理的。 :)
      • 呵呵。触摸。那么,对于攻击者想办法通过 ssh 进入服务器并获得对数据库、文件和所有内容的访问权限之类的事情,人们普遍关心吗? 为什么我可以假设如果他们可以读取数据库,他们可以读取文件?不可能总是这样,不是吗?
      • @keithjgrant,你是对的,暴露数据库的漏洞并不总是暴露程序。我肯定不想依赖隐藏的程序二进制文件作为一项重要的安全功能,但因为这只是为了使密码暴力搜索复杂化(或查找具有相同密码的服务,如果相同的密码和盐用于两个受损系统!)我认为这不仅仅是合理的“纵深防御”技术。
      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多