我最近在考虑密码哈希(可能是由PHC进程引起的)。
我开始更多地思考这个问题,然后陷入了这个问题:
密码散列相关盐类实际上需要哪些安全属性?
我认为它们必须是全球独一无二的(这就是我通常构建它们的方式)。这意味着同样的盐不应该被任何人使用两次。这将意味着我必须选择我的盐,以抗碰撞,导致512位长和CSPRNG的一代。
这是过度杀伤力还是较短和较少的防御解决方案也是安全的?
(这基本上是与粗体相同的问题)
如果您需要对这些方案进行假设,则应该假定标准方案(不含胡椒),如bcrypt、scrypt、Argon2、PBKDF2。
发布于 2015-08-30 12:21:06
512位甚至对于全局唯一性来说都是过分的。256位就足够了,有一个很好的随机数发生器:即使地球上的每个人每毫秒产生一位,也需要一百万年的时间才能达到生日的极限。
然而,我同意全球独特性是一个好主意。如果任何地方的任何人使用相同的salt和密码哈希(或其他使用盐的算法),理论上攻击者可以在更短的时间内攻击这些哈希。
如果您有一个特定于应用程序的独特胡椒(所有用户共享的附加盐),您可以安全地使用仅在本地唯一的盐类,例如来自计数器的输出。在某些情况下,这可能有助于节省空间。
发布于 2015-09-01 00:43:21
考虑到还没有人展示SHA-1碰撞,160位可能足以确保全局唯一性。尤其是食盐是由防守者而不是攻击者选择的。
此外,鉴于salt的目的仅仅是使字典攻击需要不可行的存储量,那么80位可能就足够了。
https://crypto.stackexchange.com/questions/27827
复制相似问题