Hash
具有已知前綴和附錄的密碼雜湊的安全性
假設我有一個正好 32 個字元長的密碼。我通過以下方式對其進行雜湊處理:
- 前置 1524 字節(攻擊者知道)
- 附加 3356 字節(攻擊者知道)
- 做校驗和
很明顯,只有一小部分明文是可變的。
假設攻擊者從數據庫中竊取了校驗和。他們恢復密碼或製造衝突有多難?哪些校驗和算法更能抵抗這種情況?
是的,我知道無法從 16 位 CRC-16 中恢復密碼。假設校驗和至少有 128 位長。
如果其中一個墊子消失會發生什麼變化?
除了針對彩虹表之外,如果它們是已知的並且是靜態的,則無論您是否預先添加或附加任何字節都沒有區別。兩者都可能不存在。
因此,該場景被簡化為“對 32 字節密碼進行校驗和”(可能試圖散列)。
沒有常用的 CRC-128,但如果您將 CRC 算法擴展到 128 位,您將獲得完全不安全的轉換。CRC 旨在簡化和降低衝突機率,使其可逆。有一篇專門關於逆向 CRC 的論文 - https://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2006-05/SAR-PR-2006-05_.pdf - 並且可以實施該過程一個體面的高中生。
抵抗這種情況的算法 - 產生真正的單向轉換 - 稱為散列算法,而不是校驗和。散列算法的流行範例包括 SHA-3 和 SHA-2。
特別是對於密碼,通常需要更高級別的安全性,例如使用密鑰派生函式 (PBKDF) - bcrypt、scrypt、argon2。除了散列具有而 CRC 沒有的準隨機屬性之外,PBKDF 還故意佔用額外的電腦資源以在一定程度上提高它們的暴力抵抗力。