我对密码安全保持有点困惑。 假设我有用户帐户表的数据库。 这是我保存密码的地方。 这时我正在使用盐渍的沙拉。
我读基于Blowfish的函数比sha1更好,因为它们需要更多时间来处理请求。
有没有理由不使用盐渍sha1,只是将登录尝试次数限制在某个合理的数量(例如每小时50次)作为暴力攻击的“防火墙”?
正在使用此数据库的人不需要强力执行任何操作,因为 他可以通过查询更改记录。
答案 0 :(得分:5)
使用基于blowfish的函数,你肯定意味着 BCrypt 哈希函数。正如您已经说过的那样,BCrypt设计得很慢(需要一些计算时间),这是其他快速哈希函数的唯一优势,但这是至关重要的。
使用现成的GPU,您可以计算每秒大约3 Giga个哈希值,因此您可以在不到 2毫秒。即使SHA-1是安全散列函数,也不适合散列密码。
BCrypt具有成本因素,可以适应未来,因此更快的硬件。成本因子决定了执行散列的迭代次数。最近我写了tutorial about hashing passwords,我会请你看一下。
关于限制登录尝试的观点是有道理的,但是如果攻击者可以访问数据库(SQL注入),散列应该保护密码。当然,您可以限制登录尝试,但这与散列无关,您甚至可以在此方案中存储密码明文。
答案 1 :(得分:1)
在Blowfish中存储密码比SHA-1更安全,因为截至目前,还没有报告获取Blowfish加密字符串值的方法。另一方面,SHA-1确实报告了从加密字符串获取数据的方法。 您无法信任SHA-1以阻止某人获取其数据。
如果您愿意接受建议,我认为在存储密码时根本不需要使用双向加密。使用加盐 SHA-256 方法来隐藏用户密码可能是一种选择。允许您的用户通过电子邮件重置自己的密码通常被认为是一个很好的策略,它会导致数据集无法轻易破解。
如果您 因任何原因需要双向加密,除了Blowfish之外, AES-256 (Rijndael)或 Twofish 也是目前足够安全,可以处理敏感数据。不要忘记您可以使用多种算法来存储加密数据。
关于暴力破解的说明,它与加密数据库存储没什么关系。当您引用攻击方法时,您正在查看完整的安全模型。使用已弃用的算法并通过实施防止攻击轻松的策略来“弥补”,不被认为是一种成熟的安全方法。
简而言之
不要把它当作福音:在安全方面,每个人都有不同的要求,你做的研究越多,你的方法就越好。如果您没有使用全面的安全策略完全封装您的敏感数据,那么您可能会在赛道上遇到令人讨厌的惊喜。
来源:维基百科,http://eprint.iacr.org/2005/010
答案 2 :(得分:0)
有没有理由不使用盐渍sha1并限制登录 尝试计数到一些合理的数字(例如每小时50次) 作为暴力攻击的“防火墙”?
如果您没有使用任何合适的算法加密密码,那么您将无法采取基本的安全预防措施。
为什么“只是”阻止登录尝试安全?
旁边你需要阻止每一个可能进入的事实,例如:
您还需要信任每个有权访问数据库和服务器的用户,我不希望别人读取我的密码,但我更不喜欢的是,您是否以某种方式对我做出决定: - )< / p>
也许其他人可以对Blowfish与SHA的讨论有所了解,尽管我怀疑这部分是一个值得信赖的格式问题