複製鏈接
請複製以下鏈接發送給好友

單向散列算法

鎖定
單向散列算法,又稱hash函數,Hash函數(也稱雜湊函數或雜湊算法)就是把任意長的輸入消息串變化成固定長的輸出串的一種函數。這個輸出串稱為該消息的雜湊值。一般用於產生消息摘要,密鑰加密等。
中文名
單向散列算法
外文名
Hash函數

目錄

單向散列算法定義

單向散列函數(也稱雜湊函數、Hash函數)指的是根據輸入消息計算後,輸出固定長度數值的算法,輸出數值也稱為“散列值”或“消息摘要”,其長度通常在128~256位之間。
一個安全的雜湊函數應該至少滿足以下幾個條件:
①輸入長度是任意的;
②輸出長度是固定的,根據目前的計算技術應至少取128bits長,以便抵抗生日攻擊;
③對每一個給定的輸入,計算輸出即雜湊值是很容易的;
④給定雜湊函數的描述,找到兩個不同的輸入消息雜湊到同一個值是計算上不可行的,或給定雜湊函數的描述和一個隨機選擇的消息,找到另一個與該消息不同的消息使得它們雜湊到同一個值是計算上不可行的。

單向散列算法安全性

單向散列函數的安全性是由於它的單向性,其輸出不依賴於輸入。平均而言,預映射值單個位的改變,將引起散列值中一半位的改變。已知一個散列值,要找到預映射的值,使它的散列值等於已知的散列值在計算上是不可行的。單向散列函數的安全性使它能用於完整性校驗和提高數字簽名的有效性。

單向散列算法常見算法

常見散列函數(Hash函數)有:
  • MD5(Message Digest Algorithm 5):是RSA數據安全公司開發的一種單向散列算法,MD5被廣泛使用,可以用來把不同長度的數據塊進行暗碼運算成一個128位的數值。
  • SHA(Secure Hash Algorithm)這是一種較新的散列算法,可以對任意長度的數據運算生成一個160位的數值。
  • MAC(Message Authentication Code):消息認證代碼,是一種使用密鑰的單向函數,可以用它們在系統上或用户之間認證文件或消息,常見的是HMAC(用於消息認證的密鑰散列算法)。
  • CRC(Cyclic Redundancy Check):循環冗餘校驗碼,CRC校驗由於實現簡單,檢錯能力強,被廣泛使用在各種數據校驗應用中。佔用系統資源少,用軟硬件均能實現,是進行數據傳輸差錯檢測地一種很好的手段(CRC 並不是嚴格意義上的散列算法,但它的作用與散列算法大致相同,所以歸於此類)。

單向散列算法應用

單向散列算法CRC

在如今廣泛使用的以太網中,報文的發送方會在以太網消息的末尾加上一個CRC(Cyclic Redundancy Check,循環冗餘校驗)字段,用來給接收方驗證該消息的完整性,具體做法是:
1、消息發送方計算出消息的校驗和並將其隨消息一起發送。
2、接收方根據收到的消息重新計算校驗和,並將其與直接收到的校驗和相比較。如果兩者不同,接收方就認為消息在傳送過程中受損(如電信號受干擾出錯),要求發送方重新發送。
這種方式被廣泛使用到基於TCP/IP的多種通信協議中。大多數情況下,我們可以簡單地將CRC看成是單向散列算法(函數)的一種應用。

單向散列算法MD5

經常在網站下載軟件的人會留意這樣一件事兒,在下載頁面,網站會提供這個下載數據包的MD5值。這樣的一個值就是網站使用MD5算法對下載的目標數據進行計算得到的一個散列值。如果攻擊者攻破這個網站,在給用户下載的數據包中插入一些惡意代碼或病毒,那麼使用MD5算法計算得到的MD5散列值肯定發生了變化。
當這些被篡改的數據包被用户下載之後,用户只要執行MD5算法得到下載數據包的MD5散列值,與網站上公佈的正常的MD5值對比。如果MD5值兩者不同,表示正常的數據包被篡改了,就不要使用該數據包;如果兩者一致,表示數據包沒有被篡改,就能放心使用該數據包。
那麼攻擊者必須能調整代碼的其他部分,使MD5的輸出與以前相同。但MD5是專門為防止這種攻擊而設計的,因此任何人下載了修改過的文件後,通過檢查MD5散列值都將發現文件已不是原來的。