Why use a salt instead of AES when storing passwords
与使用salt相比,aes在将密码存储在数据库中时是否更安全?注:不涉及性能,只涉及安全性。哪个更安全。另外,将加密密钥存储在另一个数据库服务器中,显然是加密的,这不是更好吗?
- 您使用的是哪个RDBMS?
- 我使用的RDBMS是MySQL。
- 然后,请删除SQL Server标记
- 盐不是自动创建的,不能在create table语句上执行。通常,客户端应用程序创建salt和密码哈希
- "通常"您会在应用程序中创建一个salt,用salt散列纯文本,并将得到的散列和salt发送到数据库中。为什么需要在数据库级别执行此操作?在大多数语言中,你可以通过简单的搜索网页找到许多关于制作盐和搭扣的例子和博客。
- 我正在尝试开发一种安全的数据库体系结构,用于使用MySQL存储凭证。我希望mysql可以创建salts,一定有办法,因为mysql有很多可用的加密函数。
- 我知道这是你通常会做的,但是你能不能,像中一样,只使用mysql就可以创建随机的salts。
- 我投票结束这个问题,因为这是关于加密的,而不直接涉及编程。
不可以。如果您使用密钥加密密码,而攻击者窃取了加密密码表和密钥,他可以发现所有用户的密码并使用它们登录到您的系统(以及用户选择相同密码的所有其他系统)。这不安全。
如果您正确地"散列"密码,则没有允许攻击者从身份验证表中恢复密码的密钥或快捷方式。这个哈希函数不能像密码一样被颠倒。
- 此外,还有严重的法律原因导致您不能访问用户的密码。看看我的答案。
- 但如果密码不是很好,我不仅仅是在说"密码123",甚至像"qeadzcwrsfxv1331"这样的密码也不是很好。盐渍确实有助于彩虹桌,但蛮力不需要彩虹桌,即使有更强的哈希,如sha2,仍然容易受到攻击,因为它们是单向的。另外,盐一般是纯文本的。相反,使用适当的随机长盐,然后使用AES加密该盐。但同样,问题仍然是把钥匙保密,但比使用非随机盐要好得多,就像大多数盐一样。
- 这里有几个链接要查看。arstechnica.com/security/2013/05/…arstechnica.com/security/2012/12/…
- @Ramonster为了防御暴力,使用了哈希迭代。是的,事实上,盐必须是随机的,这是很容易实现的(远比保守一个必须对运行过程和内部人员可用的秘密简单得多)。这个问题的答案是按优先顺序从scrypt、bcrypt或pbkdf2中选择。用户信任您将其密码以不可恢复的形式存储。可逆加密并不能履行这一义务。
- 是的,但我是说应该使用对称加密来加密密码,而应该加密salt。密码在一定程度上是可以恢复的。
- @Ramonster QFT"我是说密码应该使用对称加密进行加密……"不,这是危险和错误的。我以前读过你引用的第一篇文章,甚至他们推荐了我列出的三种算法。