雜湊函式及其應用

2022-08-21 05:21:13 字數 2239 閱讀 3322

雜湊,英文hash,也有直接音譯為「雜湊」的,就是把任意長度的輸入(又叫做預對映, pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來確定唯一的輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的資訊摘要的函式。

演算法競賽中,我所接觸到的主要有字串hash用於把字串「索引」為乙個值,然後對複雜字串進行操作,來加快遍歷速度,降低演算法複雜度。把字串匹配轉移到了值匹配。但是雜湊函式屬於一種「概率型演算法」,對於模的取值有一定概率出現碰撞。所以在演算法競賽中不常使用,或者要多次測驗避免碰撞。

資訊保安方面的應用主要體現在以下的3個方面:

1)檔案校驗

我們比較熟悉的校驗演算法有奇偶校驗和crc校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。

md5 hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的命令。

2)數字簽名

hash 演算法也是現代密碼體系中的乙個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了乙個重要的角色。對 hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。

3)鑑權協議

如下的鑑權協議又被稱作"挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

兩個不同的輸入,經過雜湊演算法後,得到了同樣的雜湊值,就叫做雜湊碰撞。由於通常的雜湊演算法中,雜湊值的空間遠小於輸入的空間,這就意味著資訊熵有丟失。乙個空間較大的集合(輸入)通過雜湊演算法對映到乙個空間較小的集合(雜湊值),必然會造成多個輸入對映到乙個雜湊值上,這就是所謂的雜湊碰撞。而這個也就是在演算法競賽中很少使用字串雜湊和值雜湊的原因。

而因為雜湊碰撞的原因,也就有了對雜湊函式進行攻擊的方法。

1、生日攻擊

生日攻擊是以概率論中的生日問題為資料基礎的一種密碼學攻擊方法。根據生日悖論,如果雜湊值的位數過短,很容易可以找到一組(兩個)雜湊值相同的輸入,這就是一種最常用的生日攻擊的應用。使用乙個64位的雜湊函式,大約有 1.8 × 10^19 個不同的雜湊值。如果產生每個雜湊值的可能性是相同的,那麼只需大約 5.1 x 10^9 次(51億次)暴力嘗試就可以得到一次雜湊碰撞。

2、王曉雲破解md5。

md5最大的問題在於,通過我國的王曉雲教授等學者的工作,md5已經被證明可以進行碰撞攻擊。也就是說,攻擊者可以產生兩個應用程式,內容不一樣,但是雜湊值完全一樣。

1、目前,已經出現了sha-3,但是還是採用的是sha-2。之所以全世界沒有遷移到sha-3,首要原因是世界上目前幾乎沒有任何軟體或硬體支援該演算法。

2、前量子計算演算法的grover演算法和shor演算法已經可以破譯當今廣泛使用的密碼。shor演算法是一種量子計算機求解離散對數問題的演算法,它能夠攻破rsa、dsa和ecdsa密碼,grover演算法沒有shor演算法有效,它的作用相當於把密碼的秘鑰長度減少一半,密碼技術人員可以通過加長秘鑰長度來抵抗grpver演算法攻擊。

值得注意的是,國外的量子計算機發展迅速,已有像谷歌這樣的著名公司將量子計算機投入使用,用於提高資訊搜尋效率和研究量子人工智慧。如今的量子計算機還不足以通過執行shor演算法或grover演算法來大肆攻擊現有密碼。

3、md5 和 sha1 是目前應用最廣泛的hash演算法,而它們都是以 md4 為基礎設計的。md4(rfc 1320)是 mit 的ronald l. rivest在 1990 年設計的,md 是 message digest 的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於 32位運算元的位操作來實現的。

md5演算法的選擇字首可以在使用相同字首的情況下更改少部分內容仍能使兩個檔案得到相同的md5,而第二個鏈結中兩個內容不同的exe檔案卻有著相同的md5,為md5的不安全性提供了例項,在王曉雲教授研究結果的基礎上,密碼學研究者已經研究出了改進版本「構造字首碰撞法」,並且編寫出了快速md5碰撞生成器,使md5的破解速度可以達到幾秒鐘這樣的速度。

故用md5演算法驗證軟體完整性會出現如下的問題:

(1)不能確保得到的軟體是否被修改過或者被替換

(2)不能確保得到的軟體中間被人獲取過

(3)在軟體過大時,會使驗證時間過長而導致攻擊者的成功率增加

雜湊表原理及其應用

給定若干非負整數,範圍是 1 10000,編寫程式使得查詢乙個數的時間複雜度為 o 1 int data 10001 void insert int key intsearch int key 上述 的基本思想是將每個輸入的key,存放在陣列的key這個位置。我們假設陣列下標為a,對應位置的值為ke...

雜湊演算法及其應用場景

雜湊演算法的概念和特性 我們前面分享了雜湊表 雜湊函式和雜湊衝突,其實也可以譯作雜湊表 雜湊函式和雜湊衝突,是乙個意思。雜湊演算法簡單理解就是實現前面提到的雜湊函式的演算法,用於將任意長度的二進位制值串對映為固定長度的二進位制值串,對映之後得到的二進位制值就是雜湊值 雜湊值 我們日常開發中最常見的雜...

雜湊函式的應用

訊息認證碼 使用單向雜湊函式可以構造訊息認證碼。訊息認證碼是將 傳送者和接收者之間的共享金鑰 和 訊息,進行混合後計算出的雜湊值。使用訊息認證碼可以檢測並防止通訊過程中的錯誤 篡改以及偽裝。數字簽名 在進行數字簽名時也會使用單向雜湊函式。數字簽名是現實社會中的簽名 sign 和蓋章這樣的行為在數字世...