密碼學 - 雜湊函式



密碼學中的雜湊函式就像一個數學函式,它接收各種輸入,例如訊息或資料,並將它們轉換為固定長度的字元字串。這意味著雜湊函式的輸入可以是任意長度,但輸出始終是固定長度。這就像將一個大氣球壓縮成一個緊湊的球。

此過程的重要性在於它為每個輸入生成唯一的“指紋”。輸入的任何微小更改都會導致指紋發生實質性變化,這種特性稱為“抗碰撞性”。

雜湊函式在各種安全應用中發揮著至關重要的作用,包括密碼儲存(雜湊值而不是密碼)、數字簽名和資料完整性檢查。雜湊值或訊息摘要是雜湊函式返回的值。雜湊函式如下圖所示 -

Hash Functions

雜湊函式的關鍵點

  • 雜湊函式是數學運算,它們“對映”或更改給定的資料集,將其轉換為固定長度的位元字串,該字串稱為“雜湊值”。

  • 雜湊函式具有各種複雜性和難度級別,並用於密碼學。

  • 加密貨幣、密碼安全和通訊安全都使用雜湊函式。

密碼學雜湊函式的操作

在計算機系統中,雜湊函式通常用作資料結構,用於資訊認證和訊息完整性檢查等任務。它們不容易被解密,但由於它們可以在多項式時間內解決,因此被認為在密碼學上“較弱”。

透過密碼學雜湊函式,典型的雜湊函式得到了改進的安全特性,這使得解密訊息內容或收件人和發件人資訊變得更加困難。

具體來說,密碼學雜湊函式顯示以下三個特徵 -

  • 雜湊函式被稱為“無衝突”。因此,沒有兩個輸入雜湊應該等於相同的輸出雜湊。

  • 它們是隱藏的。雜湊函式的輸出應該使根據它推斷出輸入值變得困難。

  • 它們應該對難題友好。選擇產生預定結果的輸入需要很困難。因此,輸入需要儘可能廣泛地獲取。

雜湊函式的屬性

要成為可靠的密碼學工具,雜湊函式應具有以下屬性 -

原像抵抗性

  • 根據此特性,反轉雜湊函式在計算上應該很困難。

  • 換句話說,如果雜湊函式 h 生成雜湊值 z,則應難以識別雜湊到 z 的輸入值 x。

  • 此特性可以防禦試圖僅使用雜湊值查詢輸入的攻擊者。

第二原像抵抗性

  • 此屬性表明,給定輸入及其雜湊值,應該很難找到另一個具有相同雜湊值的輸入。

  • 換句話說,如果輸入 x 的雜湊函式 h 返回雜湊值 h(x),則應該很難找到另一個輸入值 y,使得 h(y) 等於 h(x)。

  • 雜湊函式的此特性可以防禦想要替換原始輸入值和雜湊的新值的攻擊者,但僅持有輸入值及其雜湊值。

抗碰撞性

  • 此屬性表明,應難以識別產生相同雜湊值的兩個不同長度的輸入。此特性也稱為無衝突雜湊函式。

  • 換句話說,對於雜湊函式 h,很難識別兩個不同的輸入 x 和 y,使得 h(x)=h(y)。

  • 雜湊函式不能沒有衝突,因為它是一個具有固定雜湊長度的壓縮函式。無衝突條件僅表示這些衝突應該很難找到。

  • 此特性使得攻擊者很難識別具有相同雜湊值的兩個輸入值。

  • 此外,如果雜湊函式具有抗碰撞性,則它也具有第二原像抵抗性。

操作效率

  • 對於任何雜湊函式 h,給定輸入 x 計算 h(x) 可以是一個簡單的過程。

  • 雜湊函式在計算上比對稱加密快得多。

固定輸出大小

雜湊生成特定長度的輸出,而不管輸入大小如何,並有助於從不同輸入大小生成相同大小的輸出。

確定性

對於給定的輸入,雜湊函式始終生成相同的輸出,就像一個食譜,當嚴格遵循時始終產生相同的菜餚。

快速計算

即使對於大量資料集,雜湊操作也發生得很快。

雜湊演算法的設計

雜湊本質上涉及一個數學函式,該函式獲取兩個固定大小的資料塊並將它們轉換為雜湊碼。該函式是雜湊演算法的關鍵部分。這些資料塊的長度根據使用的演算法而異。通常,它們範圍從 128 位到 512 位。下面是一個雜湊函式的示例 -

Hash function structure

雜湊演算法使用一系列輪次(類似於分組密碼)來處理訊息。在每一輪中,使用固定大小的輸入,該輸入通常結合當前訊息塊和上一輪的結果。

此過程持續多輪,直到整個訊息被雜湊。下圖提供了此過程的視覺表示。

Hash algorithm

由於雜湊的相互關聯性質,其中一個操作的輸出會影響下一個操作的輸入,因此即使原始訊息的微小變化(單個位元差異)也會極大地改變最終的雜湊值。

這種現象被稱為雪崩效應。此外,區分雜湊函式和雜湊演算法至關重要。雜湊函式本身接收兩個固定長度的二進位制資料塊,並生成一個雜湊碼。

另一方面,雜湊演算法規定了訊息如何劃分為塊以及如何組合多個雜湊操作的結果。

常用的雜湊函式

雜湊函式在計算中發揮著重要作用,提供了多種功能,例如:快速檢索資料、安全保護資訊(加密)、確保資料保持不變(完整性驗證)。一些常用的雜湊函式包括:

訊息摘要 (MD)

多年來,MD5 一直是最流行和最常用的雜湊函式。

  • 雜湊函式 MD2、MD4、MD5 和 MD6 屬於 MD 家族。它被採納為 RFC 1321,網際網路標準。它是一個 128 位的雜湊函式。

  • 在軟體行業,MD5 摘要經常用於確保傳輸檔案的完整性。為了使使用者能夠將下載檔案的校驗和與預先計算的 MD5 校驗和進行比較,檔案伺服器通常提供此功能。

  • 2004 年,在 MD5 中發現了碰撞。據稱,使用計算機叢集進行的分析攻擊在不到一小時內就取得了成功。由於 MD5 受到此碰撞攻擊的破壞,因此不再建議使用它。

安全雜湊函式 (SHA)

構成 SHA 家族的四種 SHA 演算法是 SHA-0、SHA-1、SHA-2 和 SHA-3。儘管來自同一個家族,但它們的結構有所不同。

  • 美國國家標準與技術研究院 (NIST) 於 1993 年釋出了 160 位雜湊演算法的第一個版本,稱為 SHA-0。它並沒有獲得廣泛的流行,並且存在一些缺點。SHA-1 後來於 1995 年建立,以解決 SHA-0 中的已知缺陷。

  • SHA-1 是現有的 SHA 雜湊函式中使用最廣泛的一種。它用於大多數應用程式和協議,包括安全套接字層 (SSL) 安全性。

  • 2005 年,發現了一種 SHA-1 碰撞檢測技術,可以在現實的時間範圍內使用。因此,人們對 SHA-1 的長期可用性表示懷疑。

  • SHA-224、SHA-256、SHA-384 和 SHA-512 是 SHA-2 家族中的另外四種 SHA 變體,它們根據其雜湊值中的位數而有所不同。SHA-2 雜湊函式尚未成為任何有效攻擊的目標。

  • 儘管 SHA-2 是一種強大的雜湊函式。雖然差異很大,但其基本設計仍然遵循 SHA-1 的設計。因此,NIST 要求建立新的競爭性雜湊函式設計。

  • 2012 年 10 月,NIST 選擇 Keccak 演算法來替換 SHA-3 標準。Keccak 具有多個優點,包括有效操作和強大的抗攻擊能力。

CityHash

CityHash 是另一種非加密雜湊函式,旨在快速雜湊大量資料。它針對現代處理器進行了最佳化,並且在 32 位和 64 位架構上都能提供良好的效能。

BLAKE2

BLAKE2 是一種快速且安全的雜湊函式,它改進了 SHA-3。它廣泛用於加密貨幣挖掘等需要快速雜湊的應用程式。BLAKE2 有兩種型別:

  • BLAKE2b - 最適合 64 位計算機,它生成長達 512 位的雜湊值。

  • BLAKE2s - 最適合小型計算機(8-32 位),它生成長達 256 位的雜湊值。

CRC(迴圈冗餘校驗)

CRC(迴圈冗餘校驗)是一種用於檢測資料傳輸錯誤的技術。它涉及在訊息末尾新增一個稱為校驗和的特殊值。此校驗和是根據訊息內容計算得出的,並在傳輸過程中包含在內。

接收資料後,接收方將使用相同的方法重新計算校驗和。如果新的校驗和與原始校驗和匹配,則很可能訊息已在傳輸過程中沒有錯誤。雖然 CRC 對錯誤檢測有效,但它不是安全措施。它主要用於確保資料在傳輸過程中的完整性,而不是保護資料免受未經授權的訪問或修改。

MurmurHash

MurmurHash 是一種快速有效的雜湊函式,不適用於安全性。它非常適合雜湊表等用途,但不適合需要防止碰撞的任務(不同輸入產生相同雜湊的情況)。

標準長度

雜湊涉及使用數學公式將任何大小的資料集轉換為更短的、固定長度的輸出。

表 I:不同的雜湊函式

在表 I 中,訊息“CFI”使用三種演算法(MD5、SHA-1 和 SHA-256)轉換為雜湊值。每種演算法都會生成一個具有固定長度的唯一輸出雜湊。MD5 生成一個包含 32 個十六進位制字元的雜湊,SHA-1 生成一個包含 40 個字元的雜湊,SHA-256 生成一個包含 64 個字元的雜湊。

輸入訊息 雜湊函式 輸出(雜湊值)
CFI MD5(128 位,16 位元組)32 個字元 3A10 0B15 B943 0B17 11F2 E38F 0593 9A9A
CFI SHA-1(160 位,20 位元組)40 個字元 569D C9F0 7B48 7F58 9241 AD4C 5C28 7DA0 A448 8D08
CFI SHA-256(256 位,32 位元組)64 個字元 F3ED 0867 48FF 3641 3091 0BB6 6293 7080 2958 B5A2 52AF F364 1FC5 07FD E80D 9929

表 II:使用相同的雜湊函式 (SHA-1) 和不同的輸入

除了使用的資料(輸入)外,雜湊函式始終生成具有固定字元數的雜湊值。如表 II 所示,輸入到相同雜湊函式(在本例中為 SHA-1)的不同訊息始終生成長度為 40 個十六進位制字元的輸出值。

輸入訊息 雜湊函式 輸出(雜湊值)
CFI SHA-1 569D C9F0 7B48 7F58 9241 AD4C 5C28 7DA0 A448 8D08
Corporate FI SHA-1 82C0 5EDC 608F AA08 8EE0 BDD8 8E22 3B38 CA38 82CC
CF Input SHA-1 2013 85FC EEE4 F73D 07F0 4F2A A4CB BOE9 12BF BBB8
CFI 1 SHA-1 C501 23CE 8BB2 A42D 5BB4 4DA7 3FC2 3B3D 62F5 14A5

雜湊函式的應用

基於其加密特性,雜湊函式有兩個直接用途。

密碼儲存

雜湊函式為密碼儲存提供保護。大多數登入過程不是以明文形式儲存密碼,而是將密碼的雜湊值儲存在檔案中。

密碼檔案是以 (使用者 ID,h(P)) 格式的成對錶的格式。

即使攻擊者訪問了密碼檔案,他們也只能看到密碼的雜湊值。由於雜湊函式具有原像抵抗性特徵,因此他無法使用它來登入或從中獲取密碼。

資料完整性檢查

資料完整性檢查(通常使用雜湊函式)透過建立校驗和來確保資料檔案的準確性。此方法允許使用者檢測對原始檔案所做的任何更改。

但是,它不能保證檔案的真實性。攻擊者可能修改整個檔案並生成新的雜湊值,然後將其傳送給接收者。此完整性檢查僅在使用者信任檔案的原始來源時才有效。

Data Integrity Check

雜湊與加密

加密將資料轉換為偽裝形式,需要使用密碼(金鑰)對其進行解密和讀取。加密和解密是透過密碼啟用的可逆過程。加密的目的是為了以後解密資料。

雜湊將任何大小的資料轉換為固定長度的輸出。與加密不同,雜湊通常是單向函式。反轉雜湊所需的巨大計算量使得從雜湊輸出中檢索原始資料變得困難。

資料在傳輸過程中受到加密的保護,這阻止了未經授權的訪問。透過將資料與從原始資料建立的唯一指紋(雜湊)進行比較,雜湊確保了資料的完整性。加密使資料保密,而雜湊透過檢測任何修改來確保真實性。

廣告

© . All rights reserved.