深巷
安全存储 密码安全

如何安全存储用户密码

分享
  • X0_0X 2 等保中级测评师 CICSA
    X0_0X2 等保中级测评师 CICSA

    采取一些措施来保护用户的密码,即使网站被攻破的情况下也不会造成较大的危害。如果你还在存储用户密码的MD5,那可真的有点弱了。保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情。但是密码经过hash之后并不是绝对的安全通过一些手法还是可以破解的比如字典和暴力破解攻击、查表破解、反向查表破解、彩虹表、Adding Salt等这些方法也是有一定几率破击。储存过程如下:

    1. 使用 CSPRNG 生成足够长的随机盐值。

    2. 将盐值混入密码,并使用标准的密码哈希函数进行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。

    3. 将盐值和对应的哈希值一起存入用户数据库。

    校验

    • 数据库检索出用户的盐值和对应的哈希值。
    • 将盐值混入用户输入的密码,并且使用通用的哈希函数进行加密。
    • 比较上一步的结果,是否和数据库存储的哈希值相同。如果它们相同,则表明密码是正确的;否则,该密码错误。
  • Ann 2 等保高级测评师 NISP
    Ann2 等保高级测评师 NISP

    每个用户的每一个密码都要使用独一无二的盐值。用户每次创建帐号或更改密码时,密码应采用一个新的随机盐值。

    永远不要重复使用某个盐值。这个盐值也应该足够长,以使有足够多的盐值能用于哈希加密。一个经验规则是,盐值至少要跟哈希函数的输出一样长。该盐应和密码哈希一起存储在用户帐号表中。

    存储密码的步骤:

    • 使用 CSPRNG 生成足够长的随机盐值。

    • 将盐值混入密码,并使用标准的密码哈希函数进行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。

    • 将盐值和对应的哈希值一起存入用户数据库。

    校验密码的步骤:

    • 从数据库检索出用户的盐值和对应的哈希值。

    • 将盐值混入用户输入的密码,并且使用通用的哈希函数进行加密。

    • 比较上一步的结果,是否和数据库存储的哈希值相同。如果它们相同,则表明密码是正确的;否则,该密码错误。

  • 帅末 2
    帅末2

    每个用户的每一个密码都要使用独一无二的盐值。用户每次创建帐号或更改密码时,密码应采用一个新的随机盐值。

    永远不要重复使用某个盐值。这个盐值也应该足够长,以使有足够多的盐值能用于哈希加密。一个经验规则是,盐值至少要跟哈希函数的输出一样长。该盐应和密码哈希一起存储在用户帐号表中。

    存储密码的步骤:

    • 使用 CSPRNG 生成足够长的随机盐值。

    • 将盐值混入密码,并使用标准的密码哈希函数进行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。

    • 将盐值和对应的哈希值一起存入用户数据库。

    校验密码的步骤:

    • 从数据库检索出用户的盐值和对应的哈希值。

    • 将盐值混入用户输入的密码,并且使用通用的哈希函数进行加密。

    • 比较上一步的结果,是否和数据库存储的哈希值相同。如果它们相同,则表明密码是正确的;否则,该密码错误。

  • Anna艳娜 2 CISO 高级信息系统项目管理师 PMP
    Anna艳娜2 CISO 高级信息系统项目管理师 PMP

    采取一些措施来保护用户的密码,即使网站被攻破的情况下也不会造成较大的危害。如果你还在存储用户密码的MD5,那可真的有点弱了。保护密码最好的的方式就是使用带盐的密码hash。对密码进行hash操作是一件很简单的事情。但是密码经过hash之后并不是绝对的安全通过一些手法还是可以破解的比如字典和暴力破解攻击、查表破解、反向查表破解、彩虹表、Adding Salt等这些方法也是有一定几率破击。

    储存过程如下:

    1. 使用 CSPRNG 生成足够长的随机盐值。

    2. 将盐值混入密码,并使用标准的密码哈希函数进行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。

    3. 将盐值和对应的哈希值一起存入用户数据库。

    校验

    • 数据库检索出用户的盐值和对应的哈希值。
    • 将盐值混入用户输入的密码,并且使用通用的哈希函数进行加密。
    • 比较上一步的结果,是否和数据库存储的哈希值相同。如果它们相同,则表明密码是正确的;否则,该密码错误。
  • 写回答