天天看點

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

繼續閱讀