概念
將任意長度的輸入變換為固定長度的輸出的不可逆的單向密碼體制
Hash函數在數字簽名和消息完整性檢測等方面有着廣泛的應用
Hash函數同時是一種具有壓縮特性的單向函數,其像通常稱為數字指紋,消息摘要或散列值。
散列值的生成過程可以表示為
h = H(M)
其中h是定長的散列值,H是哈希函數,M是一個變長消息
散列函數主要用於消息認證和數字簽名,因此需要具備以下特性
- H可應用於任意長度的消息
- H產生定長的輸出
- 對任意給定的消息x,計算H(x)比較容易,用硬件軟件均可實現
- 單向性:對任意給定的散列值h,找到滿足H(x) = h 的x在計算上是不可行的
- 抗弱碰撞性:對任意給定的消息x,找到x != y並且H(x) = H(y)的消息y在計算上是不可行的
- 抗強碰撞性:找到任何滿足H(x) = H(y) 的偶對(x,y)在計算上是不可行的
性質2是哈希函數的基本特性,性質3是哈希函數的可用性,性質4,5,6是哈希函數為滿足不同應用而需具備的基本安全性質
應用
數字簽名
由於消息散列值通常比消息本身短的多,因此對消息散列值進行數字簽名在處理上比對消息本身進行簽名要高效的多。
生成程序或文檔的數字指紋
hash函數可以用來保證消息的完整性。首先,通過哈希函數變換得到程序或文檔的散列值,然后將散列值存儲,對程序或文檔進行定時的檢測,與已存儲的散列值進行比較,以此來實現完整性驗證。
用於安全傳輸和用戶口令
用於保存用戶登陸口令(密碼),通過用戶id及口令生成相應的散列值,然后保存,用戶在進入系統輸入口令時,生成散列值與存儲的散列值進行比較,這樣可以確保用戶口令不被管理員或攻擊者獲取到
哈希算法

消息認證
消息認證的作用主要有兩個:一個是驗證信息來源的真實性,一般稱之為信息源認證;另一個是驗證消息的完整性
消息認證碼(MAC)
利用消息和雙放共享的密鑰通過認證函數來生成一個固定長度的短數據塊,並將該數據塊附加在消息后
比如發送方A和接收方B共享密鑰K,若A向B發送消息M,則MAC = C(K,M) ,其中C是認證函數,MAC是消息認證碼

(a)為明文傳輸,(b)為先計算MAC后,將MAC數據塊附加在M信息后進行加密傳輸,(c)為先將M進行加密,再生成MAC,並附在消息塊后進行傳輸
基於哈希的消息認證碼
HMAC是實際應用中使用最多的方案,如SSL就使用HMAC來實現消息認證功能