將任意長度的輸入變換爲固定長度的輸出的不可逆的單向密碼體制算法
Hash函數在數字簽名和消息完整性檢測等方面有着普遍的應用安全
Hash函數同時是一種具備壓縮特性的單向函數,其像一般稱爲數字指紋,消息摘要或散列值。函數
散列值的生成過程能夠表示爲加密
h = H(M)3d
其中h是定長的散列值,H是哈希函數,M是一個變長消息blog
散列函數主要用於消息認證和數字簽名,所以須要具有如下特性文檔
性質2是哈希函數的基本特性,性質3是哈希函數的可用性,性質4,5,6是哈希函數爲知足不一樣應用而需具有的基本安全性質hash
因爲消息散列值一般比消息自己短的多,所以對消息散列值進行數字簽名在處理上比對消息自己進行簽名要高效的多。軟件
hash函數能夠用來保證消息的完整性。首先,經過哈希函數變換獲得程序或文檔的散列值,而後將散列值存儲,對程序或文檔進行定時的檢測,與已存儲的散列值進行比較,以此來實現完整性驗證。硬件
用於保存用戶登錄口令(密碼),經過用戶id及口令生成相應的散列值,而後保存,用戶在進入系統輸入口令時,生成散列值與存儲的散列值進行比較,這樣能夠確保用戶口令不被管理員或攻擊者獲取到
消息認證的做用主要有兩個:一個是驗證信息來源的真實性,通常稱之爲信息源認證;另外一個是驗證消息的完整性
利用消息和雙放共享的密鑰經過認證函數來生成一個固定長度的短數據塊,並將該數據塊附加在消息後
好比發送方A和接收方B共享密鑰K,若A向B發送消息M,則MAC = C(K,M) ,其中C是認證函數,MAC是消息認證碼
(a)爲明文傳輸,(b)爲先計算MAC後,將MAC數據塊附加在M信息後進行加密傳輸,(c)爲先將M進行加密,再生成MAC,並附在消息塊後進行傳輸
HMAC是實際應用中使用最多的方案,如SSL就使用HMAC來實現消息認證功能