昨天學了五種不同的密碼攻擊手法,今天我想要更加深入了解彩虹表攻擊,透過實作來更直觀了解彩虹表攻擊的運作原理。彩虹表攻擊依靠預先計算出的雜湊值,當攻擊者獲得一個系統的密碼雜湊值後,他們可以通過彩虹表迅速查找出明文密碼,而不必即時重新計算雜湊。透過 Python 來模擬彩虹表攻擊,使用一個簡單的字典來存儲密碼和它們的雜湊值,並嘗試進行配對。
需要有 hashlib
才能生成雜湊值,但這個模組是 Python 內建,因此不需要額外安裝。
import hashlib
password_list = ['admin', '123456', 'a123456', '12345678', '1qaz2wsx']# 列出常見的密碼列表
rainbow_table = {}# 建立彩虹表 (密碼 -> 雜湊值)
for password in password_list:# 生成雜湊值並儲存在彩虹表中
hash_value = hashlib.md5(password.encode()).hexdigest() # 用 MD5 算法算出雜湊值
rainbow_table[hash_value] = password # 把雜湊值跟原密碼對應起來
print("生成的彩虹表:")# 顯示生成的彩虹表
for hash_val, password in rainbow_table.items():
print(f"密碼: {password}, 雜湊值: {hash_val}")
def rainbow_table_attack(hash_value):# 模擬攻擊,給定一個雜湊值,找到對應的密碼
return rainbow_table.get(hash_value, "未找到對應的密碼")
target_hash = hashlib.md5('123456'.encode()).hexdigest() # 假設我們拿到的是 '123456' 的雜湊值
print("\n攻擊測試中...")# 執行彩虹表攻擊
cracked_password = rainbow_table_attack(target_hash)
print(f"破解成功!原始密碼是: {cracked_password}")
彩虹表的關鍵在於預先計算,提前把常見密碼的雜湊值算出來並儲存,這樣攻擊的時候只需要查找,比逐一嘗試每個密碼要快很多。但如果加了鹽值(Salt),攻擊就會不容易成功。