哈希函數¶
哈希函數(Hash Function)把消息或數據壓縮成摘要,使得數據量變小。其一般模型如下
顯然對於任何一個hash值,理論上存在若干個消息與之對應,即碰撞。
哈希函數的基本需求如下
需求 | 描述 |
---|---|
輸入長度可變 | hash函數可以應用於任意長度的數據 |
輸出長度固定 | hash函數的輸出長度固定 |
效率 | 對於任意消息 x,計算 H(x) 很容易 |
單向性 | 對於任意哈希值h,想要找到滿足H(x)=h 的x在計算上不可行。 |
抗弱碰撞性 | 對於任意消息x,找到滿足另一消息y,滿足H(x)=H(y) ,在計算上不可行。 |
抗強碰撞性 | 找到任意一對滿足 H(x)=H(y) 的消息x和y在計算上不可行。 |
僞隨機性 | 哈希函數的輸出滿足僞隨機性測試標準。 |
散列值的目的如下
- 確保消息的完整性,即確保收到的數據確實和發送時的一樣(即沒有修改、插入、刪除或重放),防止中間人篡改。
- 冗餘校驗
- 單向口令文件,比如linux系統的密碼
- 入侵檢測和病毒檢測中的特徵碼檢測
目前的Hash函數主要有MD5,SHA1,SHA256,SHA512。目前的大多數hash函數都是迭代性的,即使用同一個hash函數,不同的參數進行多次迭代運算。
算法類型 | 輸出 Hash 值長度 |
---|---|
MD5 | 128 bit |
SHA1 | 160 bit |
SHA256 | 256 bit |
SHA512 | 512 bit |