單向散列函數

單向散列函數

單向散列函數,又稱單向Hash函數、雜湊函數,就是把任意長的輸入消息串變化成固定長的輸出串且由輸出串難以得到輸入串的一種函數。這個輸出串稱為該消息的散列值。一般用於產生消息摘要,密鑰加密等.

函數應用


Hash函數主要用於完整性校驗和提高數字簽名的有效性,目前已有很多方案。這些演演算法都是偽隨機函數,任何雜湊值都是等可能的。輸出並不以可辨別的方式依賴於輸入;在任何輸入串中單個比特的變化,將會導致輸出比特串中大約一半的比特發生變化。
常見單向散列函數(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 並不是嚴格意義上的散列演演算法,但它的作用與散列演演算法大致相同,所以歸於此類)。

函數性質


Hash 是作用於一任意長度的消息M,返回一固定長度的散列值h:h=H(m)。其中h的長度為m。Hash函數主要用於封裝或者數字簽名的過程當中,它必須具有如下幾個性質:
1.給定h,根據H(M)=h計算M在計算上是不可行的;
2.給定M,要找到另一消息M’。並滿足H(m)=H(m’)在計算上是不可行的。
上述特性中的任何弱點都有可能破壞使用Hash函數進行封裝或者簽名的各種協議的安全性,如生日攻擊。Hash函數的重要之處就是賦予M唯一的“指紋”。如果用戶A用數字簽名演演算法H(m)進行簽名,而B能產生滿足H(m)=H(m’)的另一消息M’,那麼B就可以聲稱A對M進行了簽名。
Hash函數除了需要上述性質外還需要的性質有:
3.給定M,很容易計算h;
4.抗碰撞性。即隨機找到兩個消息M和M’,使H(m)=H(m’)在計算上不可行。