天天看点

Bcrypt 加密算法研究与对比一、什么是Bcrypt二、Bcrypt如何加密与验证?三、如果使用彩虹表进行hash碰撞攻击会如何?四、比较五、数据库迁移是否有问题?

Bcrypt 加密算法研究与对比

  • 一、什么是Bcrypt
  • 二、Bcrypt如何加密与验证?
    • (一)encode方法加密:
    • (二)matches方法验证:
  • 三、如果使用彩虹表进行hash碰撞攻击会如何?
  • 四、比较
      • MD5加密算法的缺陷:
      • 相对于MD5,Bcrypt加密算法的特点:
      • 各种加密算法的比较参考:
  • 五、数据库迁移是否有问题?

一、什么是Bcrypt

1、bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。

2、Bcrypt是单向hash算法, 不可逆向解密,生成的密文是60位的。

二、Bcrypt如何加密与验证?

以SpringSecurity为例:BCryptPasswordEncoder类中有两个方法:

encode

matches

。前者用于加密,后者用于验证。

源码解析参考地址:https://www.cnblogs.com/chengxuxiaoyuan/p/11939084.html

(一)encode方法加密:

  • 大致方法调用流程:

    =>

    encode()

    传入明文,准备加密

    =>

    BCrypt.gensalt()

    获取生成随机盐值salt

    =>

    hashpw()

    通过传入的salt生成real_salt。将real_salt和传入的明文,通过规则策略生成最终密文。
  • 加密后的最终密文示例:(图片来源网上)
    Bcrypt 加密算法研究与对比一、什么是Bcrypt二、Bcrypt如何加密与验证?三、如果使用彩虹表进行hash碰撞攻击会如何?四、比较五、数据库迁移是否有问题?

    1、Bcrypt: 2a代表Bcrypt加密版本号。

    2、Rouds: 迭代次方数,10是默认值。可以设置范围为4-31。最终迭代次数为2的Rouds次方。

    3、Salt: 22位的盐值(即上述的real_salt)。

    4、Hash:明文password和Salt一起hash加密后生成的密文,长度31位。

(二)matches方法验证:

  • 大致方法调用流程:

    =>

    matches()

    传入明文与数据库密文准备进行验证。

    =>

    BCRYPT_PATTERN.matcher()

    校验数据库密文是否符合规范。

    =>

    BCrypt.checkpw()

    进入匹配明文与数据库密文。

    =>

    hashpw()

    传入明文与数据库密文。提取数据库密文中的指定位置的22位长度的盐值real_salt,将其与明文通过相同加密策略生成新密文。

    =>

    equalsNoEarlyReturn()

    新密文与数据库密文逐个字节比较,完全相同则说明验证成功。

三、如果使用彩虹表进行hash碰撞攻击会如何?

Bcrypt是种慢哈希算法,执行时间较长。同时随机盐可以有效抵御彩虹表,使用这该种算法时也需要指定相应的参数,使破解难度增加。

四、比较

  • MD5加密算法的缺陷:

    1、常规MD5加密,可使用彩虹表碰撞来进行攻击,可以匹配出原密码或者能得到相同密文的明文。

    2、加盐使攻击者无法采用特定的查询表或彩虹表快速破解大量哈希值,但不能阻止字典攻击或暴力攻击。这里假设攻击者已经获取到用户数据库,意味着攻击者知道每个用户的盐值,根据Kerckhoffs’s principle,应该假设攻击者知道用户系统使用密码加密算法,如果攻击者使用高端GPU或定制的ASIC,每秒可以进行数十亿次哈希计算,针对每个用户进行字典查询的效率依旧很高效。

  • 相对于MD5,Bcrypt加密算法的特点:

    1、相同明文通过Bcrypt生成的密文每次都是不一样的,MD5则相同。这样就无法通过直接比对密文来反推明文。

    2、Bcrypt是种慢哈希算法,执行时间较长。有文章指出,针对某一字符串,Bcrypt执行一次加密约0.3秒,MD5加密约1微秒(百万分之一秒)。使得暴力破解Bcrypt的时间成本很高。https://www.jianshu.com/p/2b131bfc2f10

    3、Bcrypt加密长度60位,MD5是32位,提高穷举难度。

  • 各种加密算法的比较参考:

    https://www.cnblogs.com/tqlin/p/11320970.html

五、数据库迁移是否有问题?

Bcrypt算法是跨平台的加密算法,数据库迁移后,不会影响原数据的验证。

本文内容部分来自其他网站,如有侵权,请私信作者。

参考地址:

1、https://www.jianshu.com/p/2b131bfc2f10

2、https://www.cnblogs.com/chengxuxiaoyuan/p/11939084.html

3、https://www.cnblogs.com/qianjinyan/p/10636404.html

4、https://www.cnblogs.com/tqlin/p/11320970.html

继续阅读