密碼學/雜湊
| 一位華夏公益教科書使用者建議將 密碼學/雜湊函式 合併到本章。 在 討論頁面 上討論是否應該進行此合併。 |
一個摘要,有時簡稱為雜湊,是雜湊函式的結果,一個特定的數學函式或演算法,可以描述為 。"雜湊"需要是一個確定性的過程,因此,每次使用相同的雜湊函式對輸入塊進行"雜湊"時,生成的摘要或雜湊值都是恆定的,並與輸入資料保持可驗證的關係。因此,這種型別的演算法對資訊安全非常有用。
其他稱為密碼雜湊的過程,其功能類似於雜湊,但需要額外的安全性,以保證形式或級別,保證不能從生成的雜湊值中實際反轉輸入資料。即沒有有用的逆雜湊函式
此屬性可以正式擴充套件以提供以下安全雜湊的屬性
- 抗原像 : 給定 H,應該很難找到滿足 H = hash(M) 的 M。
- 抗第二原像: 給定一個輸入 m1,應該很難找到另一個輸入 m2(不等於 m1),使得 hash(m1) = hash(m2)。
- 抗碰撞: 應該很難找到兩個不同的訊息 m1 和 m2,使得 hash(m1) = hash(m2)。由於生日悖論,這意味著雜湊函式必須具有比抗原像所需要的更大的影像。
雜湊函式是演算法的實現,該演算法在給定一些資料作為輸入時,會生成一個稱為摘要的短結果。一個有用的雜湊函式會生成固定長度的雜湊值。
例如:如果我們的雜湊函式是“X”,而我們的輸入是“wiki”... 那麼 X('wiki')= a5g78,即某個雜湊值。
非密碼雜湊函式有許多應用,[1] 但在本節中,我們重點關注專門需要密碼雜湊函式的應用
密碼雜湊的典型用法如下:Alice 向 Bob 提出一個棘手的數學問題,並聲稱她已經解決了它。Bob 想自己嘗試,但又想確定 Alice 並沒有在吹牛。因此,Alice 寫下她的解決方案,附加一個隨機的 nonce,計算它的雜湊值,並將雜湊值告訴 Bob(同時保持解決方案的秘密)。這樣,當 Bob 幾天後自己想出解決方案時,Alice 可以驗證他的解決方案,但仍然能夠證明她之前已經有了解決方案。
在實際操作中,Alice 和 Bob 通常是計算機程式,秘密將是比聲稱的難題解決方案更難偽造的東西。上述應用稱為承諾方案。安全雜湊的另一個重要應用是驗證訊息完整性。例如,可以透過比較傳輸之前和之後(或任何其他事件)計算的訊息摘要來確定訊息(或檔案)是否被修改(參見 Tripwire,一個利用此屬性來防禦惡意軟體和惡意行為的系統)。訊息摘要還可以用作可靠識別檔案的方式。
一個相關的應用是密碼驗證。出於顯而易見的原因,密碼不應該以明文形式儲存,而應該以摘要形式儲存。在後面的章節中,將更詳細地討論密碼處理 - 特別是為什麼只對密碼進行一次雜湊是不夠的。
雜湊函式是訊息認證 (HMAC) 的關鍵部分。
大多數分散式版本控制系統 (DVCS) 使用密碼雜湊。[2]
出於安全和效能的原因,大多數數字簽名演算法規定只對訊息的摘要進行"簽名",而不是對整個訊息進行簽名。雜湊函式也可以用於生成偽隨機位。
SHA-1、MD5 和 RIPEMD-160 是截至 2004 年最常用的訊息摘要演算法。2004 年 8 月,研究人員發現許多雜湊函式(包括 MD5、SHA-0 和 RIPEMD)存在弱點。這使得人們對從這些雜湊函式派生的後續演算法的長期安全性產生了質疑。特別是,SHA-1(SHA-0 的加強版)、RIPEMD-128 和 RIPEMD-160(RIPEMD 的加強版)。SHA-0 和 RIPEMD 都不被廣泛使用,因為它們被它們的加強版取代了。
稍後我們將討論"生日攻擊"和其他用於破壞雜湊演算法 的技術。
當使用雜湊進行檔案驗證時,人們更喜歡執行速度非常快的雜湊函式。他們希望能夠儘快檢測到損壞的檔案(並將其排隊重新傳輸、隔離等)。此類別中的一些流行雜湊函式是
- BLAKE2b
- SHA-3
此外,SHA-256 (SHA-2) 和 SHA-1 在某些 CPU 指令集中也得到了硬體支援。
當使用雜湊進行密碼驗證時,人們更喜歡執行時間較長的雜湊函式。如果/當密碼驗證資料庫(/etc/passwd 檔案、/etc/shadow 檔案等)意外洩露時,他們希望強制蠻力攻擊者花費很長時間來測試每個猜測。[3] 此類別中的一些流行雜湊函式是
- Argon2
- scrypt
- bcrypt
- PBKDF2
我們在密碼學/安全密碼 部分中更多地討論密碼雜湊。
- 有關非密碼雜湊函式及其應用的更多資訊,請參閱 演算法實現/雜湊。
- 有關非密碼雜湊函式最常見的應用,請參閱 資料結構/雜湊表。
- Rosetta Code : 密碼雜湊函式 提供了多種程式語言中的密碼雜湊函式的實現。