BCryptPasswordEncoder中的自定义盐生成器

时间:2019-08-26 13:34:24

标签: spring-security

我知道我们用来加密密码的盐应该是:

  
      
  • 它们是通过算法从与用户相关联的一些数据中生成的,例如,用户的时间戳   已创建

  •   
  • 它们是随机生成并以某种形式存储的

  •   
  • 它们是纯文本或双向加密以及用户的密码记录

  •   

由于第一点,当任何人访问db时,为另一个用户设置他的密码时,他不能代替另一个用户登录。 但是当我使用BCryptPasswordEncoder时,我在另一个用户的“密码”列中替换了我的密码,并且可以由该用户登录。

我认为这是一个安全问题,因为有权访问数据库的管理员可以登录而不是任何用户登录,并且可能会做一些工作。这些作品是由该用户而非管理员用户记录的。

如果我们使用userIduserCreationTime或类似的东西生成盐和覆盖 PasswordEncoder#match方法,问题已解决。

如果这些观点是正确的,我的问题是: 如何在BCryptPasswordEncoder中使用自定义盐生成器?

1 个答案:

答案 0 :(得分:3)

Salt旨在防止针对泄漏的哈希密码的rainbow table攻击。通过良好的按用户分配,一个彩虹表将无法用于整个数据库,并且攻击者需要为每个用户生成一个彩虹表。这与计算复杂的哈希算法结合在一起,使得从泄漏的哈希密码数据库中反向工程密码变得不切实际。

但是,如果有人可以操纵数据库,那么您就是pwnz0r3d。如果管理员可以修改数据库,则他们可以修改用户创建时间。他们还可以用已知值“交换”用户ID。