哈希函數(Hash)
又稱為 散列函數、雜湊演算法、雜湊函數等
是一種單向密碼體制:從明文到密文的不可逆映射
可将任意長度的輸入變換為固定長度的輸出
生成消息的“資料指紋”(也稱消息摘要或散列值),
在資料完整性認證和數字簽名等領域有廣泛的應用
分類:
改動檢測碼MDC(Manipulation Detection Code)
不帶密鑰哈希函數,檢測消息有無篡改
消息認證碼MAC(Message Authentication Code)
帶密鑰哈希函數,認證消息源真實性與消息完整性
對任意長度的輸入消息,産生固定長度的輸出
公式表示:
h=H(M)
M:任意長度的消息
H:哈希函數
h:固定長度的哈希值
性質:
輸入:任意有限長度消息;輸出:固定長度哈希值
可計算性:對于任意給定消息,計算哈希值容易
單向性:對給定哈希值h,要找到M使 H(M)=h 在計算
上不可行
抗弱碰撞性:對于給定消息M1,找到M2 ≠M1 ,且滿足
H( M1 )=H(M2)在計算上是不可行的
抗強碰撞性:找到任何滿足H(M1)=H(M2)的消息對(M1,
M2),在計算上是不可行的
一般模型:
核心:
設計無碰撞的壓縮函數 f
敵手對算法的攻擊重點是f 的内部結構
f 和分組密碼一樣是由多輪處理組成
攻擊者對各輪的位模式進行分析,找出 f 的碰撞
f 是壓縮函數,其碰撞不可避免
設計f 時,應保證找出碰撞在計算上是不可行的
兩個重要的疊代型哈希函數
Hash算法衆多,MD5(128位)和SHA(160位)最著名
MD5、SHA-1