【问题标题】:Why use a salt instead of AES when storing passwords [duplicate]为什么在存储密码时使用盐而不是 AES [重复]
【发布时间】:2015-04-09 07:01:45
【问题描述】:

与使用盐相比,将密码存储在数据库中时,AES 不会更安全。 注意:不关心性能,只关心安全。哪一个会更安全。 另外,将密钥存储在另一个数据库服务器中进行加密不是更好吗?显然是加密的。

【问题讨论】:

  • 您使用的是哪个 RDBMS?
  • 我使用的 RDBMS 是 MySQL。
  • 那么,请去掉sql-server标签
  • Salts 不会自动创建,也不能在 create table 语句中完成。通常,客户端应用程序会创建盐和密码哈希
  • '通常'你会在应用程序中创建一个盐,用盐对明文进行散列,并将生成的散列和盐发送到数据库中。为什么需要在数据库级别执行此操作?只需在网络上搜索,您就可以找到许多关于在大多数语言中创建 salt 和 hasing 的示例和博客。

标签: mysql encryption hash password-protection salt


【解决方案1】:

没有。如果您使用密钥加密密码,并且攻击者窃取了加密密码表和密钥,他可以发现您所有用户的密码并使用它们登录您的系统(以及用户拥有的所有其他系统)选择相同的密码)。这不安全。

如果您正确地“散列”密码,则没有密钥或快捷方式可以让攻击者从身份验证表中恢复密码。该哈希函数不能像密码一样反转。

【讨论】:

  • 此外,还有一些严重的法律原因导致您不能访问用户的密码。看我的回答here
  • 但是如果密码不是很好,我说的不仅仅是“password123”,甚至像“qeadzcwrsfxv1331”这样的密码也不是很好。盐渍确实有助于彩虹表,但蛮力不需要彩虹表即使有更强的哈希,例如SHA2,仍然容易受到攻击,因为它们是单向的。另外,盐通常以明文形式保留。相反,使用适当的随机长盐,然后使用 AES 加密该盐。但同样,问题仍然在于将密钥保密,但它仍然比使用非随机盐要好得多,就像大多数盐一样。
  • @Ramonster 为了防止暴力破解,使用了哈希的迭代。是的,确实,salt 必须是随机的,这很容易实现(远比保持对正在运行的进程和内部人员可用的秘密要简单得多)。这个问题的答案是从 scrypt、bcrypt 或 PBKDF2 中选择,按偏好降序排列。用户信任您以不可恢复的形式存储他们的密码。可逆加密不履行该义务。
  • @Ramonster QFT “我是说密码应该使用对称加密进行加密......” 不,这是危险和错误的。我之前读过你引用的第一篇文章,甚至他们推荐了我列出的三种算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2014-01-05
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多