有关哈希盐的综合信息

Posted

技术标签:

【中文标题】有关哈希盐的综合信息【英文标题】:Comprehensive information about hash salts 【发布时间】:2010-12-17 05:41:29 【问题描述】:

有很多关于盐和最佳实践的问题,但其中大多数只是回答非常具体的问题。我有几个问题相互影响。

假设数据库遭到破坏,每个用户的 salt 会阻止使用通用彩虹表来破解密码。必须为每个拥有唯一盐的用户生成一个单独的彩虹表才能获得他们的密码。这将是一个耗时的过程,而这正是使盐有效的原因。这对抵抗字典或暴力攻击没有多大帮助。

这导致了一些问题:

    虽然盐并不意味着security through obscurity,但将盐放在单独的表中不是更安全吗? 这样,即使“用户”表被破坏,盐也不会受到影响。 第二个硬编码应用范围的盐会增加大量的安全性吗? 这样,即使数据库遭到破坏,实际应用程序也必须受到破坏,否则盐和哈希都将完全无用。 盐的最佳长度是多少?显然越长越好,但是随着用户数量的增加,数据库大小确实会成为一个问题,那么有效盐的最小长度是多少? 真的需要为“真正的随机盐”(random.org、random.irb.hr)使用第 3 方来源吗? 我知道使用基于服务器时间的盐在某种程度上是“可猜测的”,但是采用 sha1'd 随机字符串的随机子字符串似乎是一种有效的盐方法。

提前谢谢你。

【问题讨论】:

【参考方案1】:

    如果黑客可以访问您的数据库系统,那么您就是 fsckd。您的系统必须有权访问这两个表才能运行,因此向已经入侵系统的黑客“隐藏”一个表的可能性几乎为零。在我看来,不值得额外的复杂性。

    为每个密码添加一个“nonce”(另外)到一个盐中并没有很大的帮助,但也不会真正伤害任何东西。

    如果操作正确,即使 16 位盐通常也足以使密码破解变得不可行。我可能会使用 64 位或 128 位,为什么不呢?

    您应该使用“好的”随机性来源,但它不需要是完美的。如果攻击者以某种方式可以看到随机值,那么他们可能能够找到一种方法来预测下一个随机值,但他们必须在创建密码时这样做,并且只会获得一个密码。

简而言之,您需要每个用户的 salt 和良好的散列函数。 MD5 很糟糕,SHA-1 不再“好”。您应该使用像 bcrypt 这样的系统来强制攻击者在每个散列上花费相当多的几分之一秒。每次密码检查 0.1 秒对您来说可能没什么大不了的,但对于任何类型的暴力破解来说都是毁灭性的。

对于任何实施密码安全方案的人来说,这是必读的:

http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

【讨论】:

【参考方案2】:

关于#1,您可能会假设如果users 表被破坏,他们可能也会破坏salt 表,即使您以某种方式更好地保护它。它只会让他们慢一点,就像减速带一样。

关于 #2,硬编码的 salt 值通常很容易通过反编译或运行时内存检查进行逆向工程,即使有适度的代码混淆也是如此。这只会在您的应用程序被严格托管并且没有人能够掌握您编译的应用程序的情况下有助于提高安全性。

关于#3:What is the optimal length for a password hash?(SO 链接)- 16 很好!

关于#4,实现“更真实”的随机数并不多,具体取决于您使用的平台。例如,如果您可以tradeoff some performance 生成您的种子/随机数,您可能会更轻松地了解盐的真正随机性。

【讨论】:

【参考方案3】:

    没有。正确使用盐将使攻击者破解数据库中所有密码所需的时间增加数百万倍。将盐放在另一个表中也会使攻击者获取盐的时间增加 30 秒。

    是的。同时使用全局密钥和每个用户的盐并不是一个坏主意。

    盐是或应该是加密密钥。让它长而随机。数据库大小不是问题。与任何加密密钥一样,salt 可以是 128 位或 16 字节(以十六进制格式存储时为 32 字节)。

    您的计算机应该具有加密性强的伪 RNG。检查您的语言的安全或加密 API。

【讨论】:

【参考方案4】:

1) 不会。攻击者可能会倾倒您系统上的所有内容并最终找到盐分(尽管这会很烦人)。

2) 是的,有一个小好处 - 如果另一个系统使用与您相同的哈希方案,并且您的一些盐重叠,这将涵盖您。

3) 盐的唯一要求是每个用户都是唯一的。长度与安全性无关 - 盐不是密钥,尽管存在广泛的混淆。 64 位随机盐永远不会重复。您也可以使用 32 位计数器,或者仅使用唯一的用户 ID。

4) 盐甚至需要随机性(如果您使用随机盐)的唯一原因是确保唯一性。这是统计随机性,而不是密码随机性(猜测的可能性)。所以任何随机数库都可以。

【讨论】:

以上是关于有关哈希盐的综合信息的主要内容,如果未能解决你的问题,请参考以下文章

综合

综合

信息机房的综合布线系统维护

综合参考 sqoop.properties 和版本

WebGis技术在智慧城管综合信息平台方面的研究

学生综合信息管理系统