在安全應用中使用的Hash函數稱為密碼學Hash函數
密碼學Hash函數要求兩種狀況在計算上不可行(即沒有攻擊方法比窮舉更有效):web
- 對預先指定的Hash值找到對應的數據塊(單向性)
- 找到兩個不一樣的數據塊對應相同的Hash值(抗碰撞性)
Hash函數被用於判斷數據是否被篡改過(數據完整性)
Hash函數的操做過程:
輸入數據的長度首先被填充為某固定長度(如1024位)分組的整數倍,填充的內容包括原始消息的位長度信息。填充長度信息可以提升攻擊者修改信息而保持Hash值不變的難度。算法
1、密碼學Hash函數的應用
1.消息認證(Message Authentication)
是用來驗證消息完整性的一種機制和服務安全
- 消息認證確保收到的數據確實和發送時的同樣(即沒有修改、插入、刪除或重放)
- 還要求消息認證機制確保發送方聲稱的身份是真實有效的
當Hash函數用於提供消息認證功能時,Hash函數值一般稱為消息摘要
消息認證中使用Hash函數的本質以下: - 發送者根據待發送的消息使用該函數計算一組Hash值,而后將Hash值和消息一塊兒發送過去
- 接收者收到后對消息執行一樣的Hash計算,並將結果與收到的Hash值進行對比
- 若是不匹配則接收者推斷出消息(也多是Hash值)遭到了篡改
Hash函數 的運行結果必須經過安全的方式進行傳輸。
Hash碼可以經過如下方法用於提供消息認證: - 使用對稱密碼算法加密消息和Hash碼
- 使用對稱密碼算法只對Hash碼進行加密
- 不使用加密算法,僅使用Hash函數也能實現消息認證
- 對整個消息和Hash值加密
b所需計算少,a、d須要加密整個消息,若是不要求提供保密性,b比a、d更有優點。框架
更通常地,消息認證是經過使用消息認證碼(MAC)實現的,即帶密鑰的Hash函數。
一般狀況下,通訊雙方基於共享的同一密鑰來認證彼此之間交互的信息時,就會使用MAC。
MAC函數將密鑰和數據塊做為輸入,產生Hash值做為MAC碼,而后將MAC碼和受保護的消息一塊兒傳遞或存儲。
檢查消息完整性的時候,使用MAC函數對消息從新計算,並將計算結果與存儲的MAC碼對比。
攻擊者能對消息進行篡改,可是在不知道密鑰的狀況下不可以計算出與篡改后的消息相匹配的MAC值。
MAC是Hash函數和加密函數操做的結合,即對於函數E(K,H(M)),長度可變的消息M和密鑰K是函數的輸入,輸出是固定長度的值。MAC提供安全保護,用於抵抗不知道密鑰的攻擊者的攻擊,svg
2.數字簽名
在數字簽名時,使用發送方的私鑰加密消息的Hash值,其余任何知道該發送方公鑰的人都能經過數字簽名來驗證消息的完整性。
攻擊者想要篡改消息,須要知道用戶的私鑰。
數字簽名的應用比消息認證更普遍。
3.其余應用函數
- 用於產生單向口令文件(操做系統存儲口令的Hash值而不是口令自己)
- 用於入侵檢測和病毒檢測
- 用於構建隨機函數(PRF)或用做偽隨機數發生器(PRNG),基於Hash函數的PRF課用於對稱密碼中的密鑰產生
2、密碼學Hash函數的安全需求
3、對Hash函數的攻擊
- 窮舉攻擊:不依賴任何算法的細節,僅與算法所產生的Hash值的長度有關。
- 密碼分析:依賴於具體算法的設計缺點
安全Hash碼的通常結構:加密
4、安全Hash函數(SHA)
SHA算法創建在MD4算法之上,其基本框架也與MD4相似。
SHA-1產生160位Hash值
SHA-2的Hash值長度分別為256,384,512,分別稱為SHA-256,SHA-384,SHA-512。
SHA-3:基本迭代結構為海綿結構,海綿結構與其余迭代Hash函數的結構類似。
在海綿函數中,輸入消息被分塊為固定長度的分組。
每一個分組逐次做為每輪迭代的輸入,同時上輪迭代的輸出也反饋至下輪的迭代中,最終產生一組輸出塊。
海綿函數的輸入、輸出:
海綿函數的迭代結構:
SHA-3參數:操作系統
消息認證碼
消息認證函數:
1.消息加密
消息加密自己提供了一種認證手段。對稱密碼和公鑰密碼體制中,對消息加密的分析是不一樣的。設計
- 對稱加密
- 公鑰加密
直接使用接收方公鑰加密可提供保密性,但不能提供認證
發送方私鑰加密消息(數字簽名),接收方用發送方的公鑰對消息進行解密(驗證簽名),提供了認證。
既要保密又要認證:發送方私鑰加密(數字簽名),發送方用接收方的公鑰對上述結果進行加密(保密性)。 缺點:一次通訊中要執行4次而不是兩次復雜的公鑰算法
2.消息認證碼
又稱密碼校驗和或MAC,也是一種認證技術。它利用密鑰來生成一個固定長度的短數據塊,並將該數據塊附加在消息以后。
MAC算法不要求可逆性,加密算法必須可逆
對MAC的攻擊:3d
- 窮舉攻擊:攻擊密鑰空間和MAC值
- 密碼分析
基於Hash函數的MAC(HMAC)
基於分組密碼的MAC(數據認證算法DAA、基於密碼的消息認證碼CMAC)
認證加密(分組密碼鏈——消息認證碼CCM、Galoid/計數器模式GCM)
基於Hash函數、基於MAC的PRNG
數字簽名
1、數字簽名簡介
數字簽名過程的通常模型:
在收發雙方不能徹底信任的狀況下,須要除認證以外的其余方法來解決他人偽造或當事人否定的問題。
數字簽名是解決這個問題最好的方法。
數字簽名必須具備的特征:
- 驗證簽名者、簽名日期和時間(消息來源)
- 認證被簽的消息內容(數據完整性)
- 簽名由第三方仲裁以解決爭執
數字簽名具備認證功能。
攻擊:
偽造:
數字簽名應知足的條件:
直接數字簽名:
只涉及通訊雙方(發收雙方)的數字簽名方案
假定接收方已知發送方的公鑰,用共享的密鑰(對稱密碼)對整個消息和簽名加密,則能夠得到保密性
先進行簽名,再執行外層的加密,在發生爭執時,第三方能夠查看消息及簽名。
該方法的有效性依賴於發送方私鑰的安全性。
2、數字簽名算法(DSA)
使用安全Hash算法(SHA),最新版本還包括基於RSA和橢圓曲線密碼的數字簽名算法。
兩種數字簽名的方法:
DSA使用的是只提供數字簽名功能的算法,與RSA不一樣,DSA雖然是一種公鑰密碼方案,但不能用於加密或密鑰交換。
在RSA方法中,Hash函數的輸入是要簽名的消息,輸出是定長的Hash碼,用發送方的私鑰將該Hash碼加密成簽名,而后發送消息及其簽名。接收方收到消息,計算Hash碼。接收方用發送方的公鑰對簽名解密,若是計算出的Hash碼與解密出的結果相同,則認為簽名是有效的。由於只有發送方擁有私鑰,因此只有發送方可以產生有效的簽名。
DSA方法也使用Hash函數,它產生的Hash碼和為這次簽名而產生的隨機數k做為簽名函數的輸入,簽名函數依賴於發送方的私鑰和一組參數,這些參數為一組通訊伙伴所共有,咱們能夠認為這組參數構成全局公鑰。簽名由兩部分組成,標記為s和r。
DSA是創建在求離散對數之困難性以及ElGamal和Schnorr最初提出的方法之上。
3、橢圓曲線數字簽名算法(ECDSA)
用戶認證
1、雙向認證(Mutual Authentication)
使通訊雙方互相認證彼此身份並交換會話密鑰。
已認證的密鑰交換主要關注兩個問題:保密性和實效性
重放攻擊的例子:
防止重放攻擊的方法:
- 為每個用於認證交互的消息附上一個序列號,新的消息只有其序列號知足適當的順序時才會被接收。
這種方法的難點是要求每一方都跟蹤與其交互的通訊方最新的序列號。
考慮到開銷問題,序列號基本上不會用於認證和密鑰交換。 - 為每一個消息附上時間戳,要求不一樣參與者之間的時鍾是同步的
- 挑戰/應答
2、單向認證(One-Way Authentication)
應用領域:電子郵件服務 郵件消息須要加密,而且郵件處理系統不擁有解密密鑰 認證的做用是接收者須要確保消息確實來自於所謂的發送者