跳轉到內容

密碼學/雜湊

來自華夏公益教科書,開放書籍,開放世界

摘要,有時簡稱為雜湊,是雜湊函式的結果,雜湊函式是一種特定的數學函式或演算法,可以描述為。"雜湊"需要是一個確定性過程,因此,每次輸入塊被相同雜湊函式"雜湊"時,生成的摘要或雜湊值都是恆定的,保持與輸入資料的可驗證關係。因此,這種型別的演算法對資訊安全很有用。

其他被稱為密碼雜湊的過程,其功能類似於雜湊,但需要額外的安全性,以保證形式或一定程度的保證,即生成的雜湊值無法從輸入資料中逆向推匯出來。即,不存在有用的逆雜湊函式

此屬性可以正式擴充套件,以提供安全雜湊的以下屬性

  • 抗原像 : 給定 H,應難以找到 M 使得 H = hash(M)。
  • 抗第二原像: 給定輸入 m1,應難以找到另一個輸入 m2(不等於 m1),使得 hash(m1) = hash(m2)。
  • 抗碰撞: 應難以找到兩個不同的訊息 m1 和 m2,使得 hash(m1) = hash(m2)。由於生日悖論,這意味著雜湊函式必須具有比抗原像所需的更大的像空間。

雜湊函式是演算法的實現,該演算法在給定某些資料作為輸入時,將生成一個稱為摘要的短結果。有用的雜湊函式會生成固定長度的雜湊值。

例如:如果我們的雜湊函式是'X',並且我們的輸入是'wiki'…那麼 X('wiki')= a5g78,即某個雜湊值。

雜湊函式的應用

[編輯 | 編輯原始碼]

非密碼雜湊函式有許多應用,[1] 但在本節中,我們將重點關注專門需要密碼雜湊函式的應用。

密碼雜湊的典型用法如下:愛麗絲向鮑勃提出一個難題,並聲稱她已經解決了。鮑勃想自己嘗試一下,但他想確保愛麗絲沒有在吹牛。因此,愛麗絲寫下她的解決方案,新增一個隨機的nonce,計算它的雜湊值,並告訴鮑勃雜湊值(同時保密解決方案)。這樣,當鮑勃幾天後自己想出解決方案時,愛麗絲可以驗證他的解決方案,但仍然能夠證明她之前就有了解決方案。

在實際應用中,愛麗絲和鮑勃通常是計算機程式,而秘密將比聲稱的難題解決方案更容易被偽造。上面的應用稱為承諾方案。安全雜湊的另一個重要應用是驗證訊息完整性。例如,可以透過比較傳輸前後的訊息摘要來確定訊息(或檔案)是否發生過任何更改(或任何其他事件)(參見Tripwire,一個利用此屬性作為抵禦惡意軟體和惡意行為的系統)。訊息摘要也可以用作可靠識別檔案的方法。

相關的應用是密碼驗證。出於顯而易見的原因,密碼不應該以明文形式儲存,而應該以摘要形式儲存。在後面的章節中,我們將詳細討論密碼處理,特別是為什麼只對密碼進行一次雜湊是不夠的。

雜湊函式是訊息認證(HMAC)的關鍵部分。

大多數分散式版本控制系統(DVCS)使用密碼雜湊。[2]

出於安全和效能的原因,大多數數字簽名演算法規定只對訊息的摘要進行"簽名",而不是對整個訊息進行簽名。雜湊函式也可以用於生成偽隨機位。

SHA-1MD5和RIPEMD-160是截至2004年最常用的訊息摘要演算法。2004年8月,研究人員發現許多雜湊函式的弱點,包括MD5、SHA-0和RIPEMD。這讓人質疑了後來從這些雜湊函式派生的演算法的長期安全性。特別是SHA-1(SHA-0的加強版)、RIPEMD-128和RIPEMD-160(RIPEMD的加強版)。由於它們被它們的加強版所取代,因此SHA-0和RIPEMD都沒有得到廣泛使用。

其他常見的密碼雜湊包括SHA-2Tiger

稍後我們將討論"生日攻擊"以及人們用來破解雜湊演算法的其他技術。

雜湊速度

[編輯 | 編輯原始碼]

在使用雜湊進行檔案驗證時,人們更喜歡執行速度非常快的雜湊函式。他們希望能夠儘快檢測到損壞的檔案(並將其排隊進行重新傳輸、隔離等)。此類別中一些流行的雜湊函式是

  • BLAKE2b
  • SHA-3

此外,SHA-256(SHA-2)和SHA-1都在某些CPU指令集中獲得了硬體支援。

在使用雜湊進行密碼驗證時,人們更喜歡執行時間很長的雜湊函式。如果/當密碼驗證資料庫(/etc/passwd檔案、/etc/shadow檔案等)意外洩露時,他們希望迫使暴力攻擊者花費很長時間來測試每個猜測。[3] 此類別中一些流行的雜湊函式是

  • Argon2
  • scrypt
  • bcrypt
  • PBKDF2

我們將在密碼學/安全密碼部分詳細討論密碼雜湊。

進一步閱讀

[編輯 | 編輯原始碼]
  1. 非密碼雜湊函式的應用在資料結構/雜湊表演算法實現/雜湊中進行了描述。
  2. Eric Sink. "版本控制示例". 第 12 章:"Git: 密碼雜湊"
  3. "速度雜湊"
華夏公益教科書