基本介紹
- 中文名:單向散列算法
- 外文名:Hash函式
定義,安全性,常見算法,套用,CRC,MD5,
定義
單向散列函式(也稱雜湊函式、Hash函式)指的是根據輸入訊息計算後,輸出固定長度數值的算法,輸出數值也稱為“散列值”或“訊息摘要”,其長度通常在128~256位之間。
一個安全的雜湊函式應該至少滿足以下幾個條件:
①輸入長度是任意的;
②輸出長度是固定的,根據目前的計算技術應至少取128bits長,以便抵抗生日攻擊;
③對每一個給定的輸入,計算輸出即雜湊值是很容易的;
④給定雜湊函式的描述,找到兩個不同的輸入訊息雜湊到同一個值是計算上不可行的,或給定雜湊函式的描述和一個隨機選擇的訊息,找到另一個與該訊息不同的訊息使得它們雜湊到同一個值是計算上不可行的。
安全性
單向散列函式的安全性是由於它的單向性,其輸出不依賴於輸入。平均而言,預映射值單個位的改變,將引起散列值中一半位的改變。已知一個散列值,要找到預映射的值,使它的散列值等於已知的散列值在計算上是不可行的。單向散列函式的安全性使它能用於完整性校驗和提高數字簽名的有效性。
常見算法
常見散列函式(Hash函式)有:
- SHA(Secure Hash Algorithm)這是一種較新的散列算法,可以對任意長度的數據運算生成一個160位的數值。
套用
CRC
在如今廣泛使用的乙太網中,報文的傳送方會在乙太網訊息的末尾加上一個CRC(Cyclic Redundancy Check,循環冗餘校驗)欄位,用來給接收方驗證該訊息的完整性,具體做法是:
1、訊息傳送方計算出訊息的校驗和並將其隨訊息一起傳送。
2、接收方根據收到的訊息重新計算校驗和,並將其與直接收到的校驗和相比較。如果兩者不同,接收方就認為訊息在傳送過程中受損(如電信號受干擾出錯),要求傳送方重新傳送。
這種方式被廣泛使用到基於TCP/IP的多種通信協定中。大多數情況下,我們可以簡單地將CRC看成是單向散列算法(函式)的一種套用。
MD5
經常在網站下載軟體的人會留意這樣一件事兒,在下載頁面,網站會提供這個下載數據包的MD5值。這樣的一個值就是網站使用MD5算法對下載的目標數據進行計算得到的一個散列值。如果攻擊者攻破這個網站,在給用戶下載的數據包中插入一些惡意代碼或病毒,那么使用MD5算法計算得到的MD5散列值肯定發生了變化。
當這些被篡改的數據包被用戶下載之後,用戶只要執行MD5算法得到下載數據包的MD5散列值,與網站上公布的正常的MD5值對比。如果MD5值兩者不同,表示正常的數據包被篡改了,就不要使用該數據包;如果兩者一致,表示數據包沒有被篡改,就能放心使用該數據包。
那么攻擊者必須能調整代碼的其他部分,使MD5的輸出與以前相同。但MD5是專門為防止這種攻擊而設計的,因此任何人下載了修改過的檔案後,通過檢查MD5散列值都將發現檔案已不是原來的。