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
=>
通過傳入的salt生成real_salt。将real_salt和傳入的明文,通過規則政策生成最終密文。hashpw()
- 加密後的最終密文示例:(圖檔來源網上)
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