所以我对加密和stackoverflow相对较新,所以请告诉我我是否会出错。
默认情况下,Bcrypt在摘要中使用随机生成的盐来阻止彩虹表攻击。这些盐在密码摘要中存储在数据库中。 将常量存储在您将添加到随机生成的盐中的代码中是不是更安全。理论上,这需要攻击者同时拥有数据库和代码来测试密码。如果我的想法中没有一些缺陷,我会假设它会内置到bcrypt中,那么我的想法中的错误在哪里?
答案 0 :(得分:2)
所以,基本规则:没有加密是不可破坏的,这只是时间问题。 "安全"加密只是意味着打破它会花费不可思议的长时间。
带有预先破解密码的彩虹表。现在它根本没有时间,加密也没用。
输入盐。使用盐,您无法提前做任何工作,并且使用单独的盐,您也可以重复使用。
http://throwingfire.com/storing-passwords-securely/读得很好。
此时,从数据库中读取密码并非不可能,但是直接猜测它们并不困难,从这一点开始改进加密对您没有任何帮助,除非你开始让你的用户密码更难猜测。
另外,如果他们可以直接访问您的数据库(您只能在部署计算机上存储凭据),那么他们很可能可以访问该计算机上的其他内容,并且有更简单的方法来吸引用户密码比针对您的数据库的暴力测试。 (重写代码只是为了输入密码,例如输入密码)
答案 1 :(得分:0)
对于每个密码,盐是随机的并且不同,因此在代码中存储一个字符串的安全性较低,因为当您同时获得代码和数据库时,将更容易破解密码。如果你把一切都做得好,那么好的盐和良好的单向功能,它应该抵抗强力攻击(提供密码"强大")。你的建议是security through obscurity而且不鼓励,不推荐。