之前討論的問題是:資訊保密。(通過加密的方式)
有時候,我們可能不需要對資訊保密,而是希望接收者能夠驗證在傳遞過程中的訊息有沒被修改,即入侵者不能用假訊息代替合法訊息。(資料完整性)
乙個生活中的問題:如何識別某個人的身份?身份證、指紋。
對應的,我們有資料指紋。
那麼乙個指紋函式需要滿足什麼條件?
指紋能處理不同人的身份識別
-》1.該指紋函式要能處理不同長度的資料(甚至是任意長度)
人的指紋是乙個規模相對固定的資訊
-》2.指紋函式的輸出長度要固定
獲取乙個人的指紋非常容易
-》3.資料指紋的計算應該比較容易
已知乙個指紋,不能知道指紋是誰(不使用指紋匹配查詢的系統)
-》4.指紋函式的計算具有單向性
找到兩個人的指紋完全一致是不可能的
-》5.給定乙個訊息,要找到另外乙個訊息的指紋與給定訊息的指紋一致,是不可能的
在世界上找到任意兩個人指紋完全一樣是不可能的
-》6.找到任意兩個指紋一致的訊息,是不可能的(包含性質5)
具有上述性質的指紋函式為單向雜湊函式
記為h(x), 具有以下的性質:
1.h(x)的輸入x為任意長度
2.h(x)的輸出長度固定
3.h(x)的計算方便快捷
4.h(x)的計算具有單向性
5.對於給定x, 找到y<>x, 且h(y)=h(x)在計算不可行
6.找到一對數(x, y), h(x)=h(y)在計算上不可行(包含5)
這樣的函式是滿足特殊性質的hash函式,後文簡稱hash函式,產生的輸出(訊息指紋)稱為訊息摘要,簡稱摘要。
使用hash函式進行完整性驗證的模型:
hash函式可以解決口令驗證的問題:
乙個使用者想進入乙個重要的計算機系統,如果計算機儲存的是使用者的口令,那麼就會出現很多問題。問題的關鍵是,驗證口令時,能不能不要知道具體的口令。
模型:
不同口令有不同的口令摘要
只有口令摘要不能恢復口令
但是這樣會有問題,如果攻擊者用暴力破解的方法,嘗試n個口令,最終能夠找到正確的口令,在這個過程中,如果他把口令和物件的口令摘要記錄成乙個字典,下次破解就只需要查詢這個字典就可以了。
解決的辦法是加入乙個鹽,成為乙個含鹽口令摘要,鹽是乙個隨機數,在口令設定時預設,且不需要保密。
不需要保密的原因是:我們必須要鹽存起來,以便驗證時使用,就有可能洩漏鹽,那麼就不對鹽進行保密了。
得到的好處:字典攻擊失效,對同一口令,鹽不同,摘要就不同,字典的空間變得很大,窮舉的時間非常長。
模型變得更加合理:
可以看到,其原理是對口令(口令長度任意)進行hash,輸出長度固定的摘要,作為乙個key,對私鑰檔案進行加密時,加入key,使用對稱加密器,得到加密後的私鑰檔案。
解密時同樣輸入乙個口令,hash一下,作為key進行解密。
hash函式解決數字簽名的問題:
如果直接對明文進行數字簽名,如果檔案很長,簽名的時間會很長。
使用hash,即使檔案很長,hash後的摘要長度是固定的,簽名的時間是個常數,驗證簽名的時間也是個常數。
簽名過程:
驗證簽名過程:
單向雜湊函式
在介紹單向雜湊函式之前,我們先了解一下什麼情況下需要使用到單向雜湊函式。單向雜湊函式有乙個輸入和輸出。輸入稱為訊息,輸出稱為雜湊值。雜湊值的長度跟訊息的長度無關,不論多少大小的長度的訊息,都會計算出固定長度的雜湊值。單向雜湊函式具有下面幾個特性 能夠根據任意長度的訊息計算出固定長度的雜湊值。計算速度...
單向雜湊函式
在介紹單向雜湊函式之前,我們先了解一下什麼情況下需要使用到單向雜湊函式。單向雜湊函式有乙個輸入和輸出。輸入稱為訊息,輸出稱為雜湊值。雜湊值的長度跟訊息的長度無關,不論多少大小的長度的訊息,都會計算出固定長度的雜湊值。單向雜湊函式具有下面幾個特性 能夠根據任意長度的訊息計算出固定長度的雜湊值。計算速度...
單向雜湊函式總結
名稱安全性 說明md5 不安全md5可以被碰撞 1 sha 1 不安全除了用於對過去生成的雜湊值進行校驗外,不應該被用於新的用途,而是應該遷移到sha 2 sha 2 安全有效應對了針對sha 1的攻擊方法,因此說安全的,可以使用 sha 3 2 安全 1 2004年的國際密碼學會議 crypto ...