假设我有一个用户(客户)数据库。其中一些客户已通过门户网站登录,其中一些客户端尚未存在且仅存在于数据库中以便管理员进行客户管理。在以后,客户可能决定开始使用门户网站,此时需要提供密码。
假设随机化方法相当安全,是否存在与盐生成的时间相关的安全隐患?
ie:是否更好,更糟或无关于尽可能早地对所有帐户进行腌制,而不是仅在创建密码时进行腌制?
答案 0 :(得分:-1)
salt背后的主要思想是提供对彩虹表的保护,彩虹表是包含预先散列密码的数据库。使用不同的盐盐化每个密码可以让您最大限度地降低这种风险,因为现在(理论上)应该没有包含密码的彩虹表。
只要您使用加密安全的伪随机数生成器(CSPRNG)生成盐,就不应该尽早腌制密码(如果您使用它会更好)使用已经包含在大多数现代实现中的盐析机制)。毕竟,你只关心总是产生不同的哈希。盐甚至不是秘密值,如果您的数据库遭到入侵,攻击者将已经拥有哈希密码和盐(它们通常存储为盐$ base64HashedPassword,或者它们只有盐的列),而盐则是不像密码块链接(CBC)中的IV,攻击者可以利用可预测的IV。在这里你只关心总是产生一个不同的哈希,所以只要你这样做,一切都应该没问题。
编辑:现在我对某些事感到好奇。你在谈论将来某天腌制密码......这是否意味着你在腌制它之前将其存储为纯文本或以可恢复的方式存储?因为现在这将是一个不好的做法。你需要尽快加盐,因为你不应该知道任何关于用户密码的信息。