认知理论与技术(hash函数,SHA,MD
概述:
認證是個過程,通過這個過程一個實體向另一個實體證明某種聲稱的屬性
認證參數:
“口令”相當于平時登錄系統時輸入的密碼。
“密鑰”相當于公鑰密碼體制中的私鑰,可用于數字簽名
“智能卡”相當于校園一卡通
“指紋”比如指紋識別手機
Hash函數:
散列(hash)英文原意是“混雜”、“拼湊”、“重新表述”的意思。Hash函數可以將任意長的消息m映射為較短的,固定長度的一個值,記為H(m)。最常用的Hash函數有兩大系列:
MD(MD5,128bit)和SHA(SHA—3)
不可逆映射:
給定輸入M,通過函數H可以很容易計算出輸出h;但如果給定h,則找到M在計算上不可行。
錯誤檢測能力:
輸入數據M中任何1個bit發生變化,都將導致輸出M發生很大的變化。
注:Hash并不能防止偽造。如果攻擊者將A發送的東西截取了,反手將(y,H(y))發送給接收者B,B也覺得消息完整。有時候要結合密鑰使用。
對于Hash函數有以下要求:
1能夠接受任意長度的消息作為輸入。
2能夠生成較短的,固定長度的輸出。
3對任何消息輸入都應該能夠容易和快速地計算出哈希值。
4應該具有單向性,也就是說,給定H(m),恢復消息m在計算上是不可行的;
5應該能抵抗弱碰撞,即給定消息m和H(m),找到另外一個消息m!=n使得H(m)=H(n)是不可能的。給定一個人,找到另外一個和他指紋相同的人。
6應該能夠抵抗強碰撞,既可以有兩個消息m和n使得H(m)和H(n)幾乎是不可能的。這個世界找到兩個指紋相同的人。
MD迭代結構:
Hash函數輸入消息m,并將其分為L個固定長度的分組,若最后一個數據塊不滿足輸入分組長度要求,按照一定規則填充。重復使用的b bit分組,并生成一個n bit輸出。
f函數:輸入n+b比特,輸出n比特
SHA:
SHA-1算法:
- 輸入:任意長的消息,分為?512 比特長的分組。首先在消息右側補比特 1,然后再補若干個比特 0,直到消息的比特長度滿足對 512 取模后余數是 448,使其與 448 模 512 同余。
- 輸出:160 比特的消息摘要。
- 每個512bit塊重復使用分塊處理函數,以32字為處理單位進行壓縮,壓縮包含4回合運算,每一回合走20步。
?SHA-2:
SHA-384 SHA-512算法與SHA-1不同都是以1024bit分塊為基本處理單位。
SHA-256與SHA-1算法一樣以512bit作為基本處理單位。?
SHA-3:
?keccak算法作為SHA-3的標準。
Keccak基于海綿體,區別于多數Hash函數所采用的經典MD結構
?
?f函數的輸入輸出都是1600bit,這1600bit要說是一個一維數組,但是本算法中將該一維數組轉換為三位數組。
MD5:
?能接受任意長度的值作為輸入,并生成128bit哈希值。
?Hash算法的攻擊現狀分析:
1原像攻擊:
?攻擊者對給定的Hash值h,試圖找到滿足H(y) = h的y。最難
2第二原像攻擊:(弱碰撞
給定固定消息m1,找到另一個消息m2,使hash(m2)= hash(m1)。
3碰撞攻擊:
?找到任意兩消息M和n使得H(M)=H(n)最容易
生日攻擊:
碰撞攻擊中最重要的一種攻擊方法 ,對hash函數提出了一個必要的安全條件,即hash值必須足夠長。
生日悖論:
已知在1~n之間均勻分布的整數型隨機變量,隨機取k個,至少有兩個取值相同的概率大于0.5,k至少有多大?
生日攻擊例子
其他方法:密碼分析學的辦法,即利用算法邏輯上的缺陷,降低破譯算法的代價(王小云破譯MD5
消息認證:
消息認證是一個過程,用以驗證接受消息的真實性和完整性,同時還運用于驗證消息的順序性和時間性。可用消息認證碼對消息做認證。
消息認證碼:
消息被一密鑰控制的公開函數作用后產生的,用作認證符的固定長度的算數值,也稱為密碼校驗或者MAC值。
消息認證碼在輸入包括任意長度的消息和一個發送者與接收者之間的共享密鑰后,輸出固定長度的數據,該數據稱為MAC值。但是與Hash函數不同的是計算MAC必須持有共享的密鑰。因此消息認證碼也可以理解為是一種與密鑰相關聯的單向Hash函數。
消息認證碼主要包括
基于分組密碼的CBC-MAC(大多數
?先將密文等分成多個分組數據塊,從第一塊數據塊開始先與一個隨機生成的初始化向量IV進行異或運算,運算結果再和密鑰進行加密運算,得到第一塊分組密文。第二塊數據塊把前一塊數據塊的分組密文當作IV,先與其進行異或運算,再和密鑰進行加密得到第二塊分組密文,這樣下去,第n個分組數據塊會與第n-1個密文分組進行異或運算,然后和密鑰進行加密,得到第n個分組密文,最后將所有分組密文按順序組合在一起,得到完整的密文。CBC-MAC算法就是將最后一個密文分組的值作為MAC值。
?消息認證使用方法:
發送者與接收者事先共享密鑰,發送者根據消息計算MAC值(使用共享密鑰),發送者將消息和MAC發送給接收者,接收者根據收到的消息計算MAC(使用共享密鑰),接收者將自己計算出的MAC與從發送者收到的MAC比對,如果MAC一致,接收者可以判定消息的確來自接收者(認證成功);如果不一致,可判斷消息不是來自發送方(認證失敗),實現以下功能:
接收方相信發送方發來的消息未被篡改,攻擊者不知道密鑰,無法篡改mac值。
接收方相信發送方不是冒充的,因為密鑰無其他人知道。
但是發送方可能會與接受方產生分歧,發送方對自己的MAC不承認,說是接收方偽造的。
?基于hash的HMAC:
HMAC所能提供的消息認證包括兩方面:
1消息完整性認證,2信源身份認證。
設計目標:
1不必修改而且使用現有的Hash函數。
2如果找到或者需要更安全的Hash函數,應該很容易地替代原來嵌入的Hash函數
3如果已知嵌入的Hash函數的強度,易于分析HMAC用于認證時的密碼強度。
描述:
HMAC使用Hash算法做加密基元,加密基元就是指一些基礎的加密算法,如Hash,一些復雜的加密算法是根據基礎的Hash算法構建出來的,如最上面例子中,對稱加密里,使用口令pass和salt加Hash運算得到密鑰,Hash算法作為加密基元,每次salt都不同,保證相同的口令可以生成不同的密鑰。與HMAC配合使用的散列函數有SHA-1,SHA256和SHA512等,通過Hash函數和密鑰得到MAC值,將其與密文一起發送給接收方,待接收方進行驗證。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的认知理论与技术(hash函数,SHA,MD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公钥密码体制(RSA,椭圆曲线密码,El
- 下一篇: 数字签名简记