密码学基础知识(六)Hash函数与消息认证
Hash函數(shù)和消息認(rèn)證
先說Hash
哈希函數(shù),可以將任意長度的消息壓縮為某一固定長度的消息摘要函數(shù)。一句話,Hash簡直了。
當(dāng)然有逆天的一面就有大缺點,過程不可逆。傻了吧,哈哈。
Hash的性質(zhì):
1.????(逆天特性)應(yīng)用于任意長的消息,產(chǎn)生固定長的輸出(散列值,消息摘要,數(shù)字指紋隨便你叫什么了);
2.????(單向性)對于給定消息x,H(x)很容易得出。但是對于給定z,尋找H(x)=z是不可行的;
3.????(安全特性)抗弱碰撞性:有x,找一個y,使得H(x)=H(y)計算不可行;抗強(qiáng)碰撞性:尋找(x,y),使得使得H(x)=H(y)計算不可行。
4.????(雪崩性)雪崩效應(yīng),散列值的每一位都與消息的每一位有關(guān),相近的消息,輸出很大差別。
Hash:
?????? 帶密鑰的Hash和不帶密鑰的Hash。區(qū)別在于前者一個輸入,后者兩個:消息+密鑰。后者一般用于產(chǎn)生消息認(rèn)證碼MAC。
Hash應(yīng)用:
1.數(shù)據(jù)完整性驗證:由于雪崩性,稍有改動一對比就發(fā)現(xiàn)了;2.產(chǎn)生數(shù)字簽名:計算H(m),然后私鑰加密;3.密鑰推導(dǎo):天生單向性;4.偽隨機(jī)數(shù)生成。
簡單說下Hash函數(shù)的攻擊方法:
?????? 第一類生日攻擊:
????????????? 就是說,n個輸入,其中有一個輸出H(x),那我要多少個y才能使H(y)=H(x)的概率達(dá)到0.5?
????????????? 答案是2/n個。假如輸出為m位長,那么就有2m個輸出。引出了第二類生日攻擊
?????? 第二類生日攻擊:
????????????? k~=2m/2,說明了散列值不能小于128位啊。
?????? 模差分攻擊:
????????????? 最有效的方法,也叫比特追蹤法。這個假期研究研究。
?
再額外提下基于分組密碼的Hash函數(shù):
?????? 可以用CBC和CFB。
由于這種基于加密體制的Hash函數(shù)經(jīng)不起攻擊,所以大多都用另一類,即構(gòu)造復(fù)雜的非線性關(guān)系實現(xiàn)單向性。這就產(chǎn)生了那些著名的算法和那些著名的事。
?
MD5算法:
?????? 輸入消息:長度小于264,以512位一組。
?????? 輸出消息:128位
過程:
1.消息填充:將消息長度填充至差64位就是512的倍數(shù)。那64位是表示填充長度的,是先從低位表示填充長度的。
?????? 2.填充后的消息是512的倍數(shù),然后按512分組,每組又是16個32位長的字。
?????? 3.初始化中間結(jié)果:128位的緩存區(qū)來存儲中間結(jié)果,對其初始化4個32位長的寄存器分別存放四個固定的整數(shù)。
?????? 4.迭代壓縮:每個分組經(jīng)壓縮函數(shù)HMD5處理。
???????????????????? 那就說說這個壓縮函數(shù),HMD5有四輪處理,四個輪函數(shù)結(jié)構(gòu)相同但是邏輯函數(shù)不同。
5.????輸出:最后一個HMD5的輸出即為消息摘要。
?
HMD5:
?????? 四輪處理過程,每輪都對緩沖區(qū)16輪迭代運算。
?
SHA:
?????? 與MD5一脈相承,來自MD4,真名SHA-1。
?????? 輸入消息:長度小于264,以512位一組。
?????? 輸出消息:160位
過程:
1.消息填充:(跟MD5一樣)將消息長度填充至差64位就是512的倍數(shù)。那64位是表示填充長度的,是先從高位表示填充長度的。
?????? 2.填充后的消息是512的倍數(shù),然后按512分組,每組又是16個32位長的字。
?????? 3.初始化中間結(jié)果:160位的緩存區(qū)來存儲中間結(jié)果,對其初始化5個32位長的寄存器分別存放五個固定的整數(shù)。
?????? 4.迭代壓縮:四輪處理,每輪20迭代,也是邏輯函數(shù)不同
5.? 輸出:最后一個分組的輸出即為160位的消息摘要。
?
在壓縮函數(shù)上看兩者區(qū)別:
?????? MD5直接用分組的16個字作為迭代,SHA則將16字?jǐn)U展為80字。
?
MD5和SHA算法必然相似,哥倆嘛,
?
?
消息認(rèn)證碼MAC:
?????? 驗證信息來源的真實性;驗證消息的完整性。
?
很顯然,Hash函數(shù)很適合設(shè)計MAC。所以有了HMAC:
?????? 累了,休息一會。
總結(jié)
以上是生活随笔為你收集整理的密码学基础知识(六)Hash函数与消息认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码学基础知识(五)序列密码
- 下一篇: 密码学基础知识(七)公钥密码