哈希函數(shù)(Hash Function),也稱為散列函數(shù)砂沛,給定一個輸入x
崇裁,它會算出相應(yīng)的輸出H(x)
。哈希函數(shù)的主要特征是:
- 輸入x可以是任意長度的字符串
- 輸出結(jié)果即H(x)的長度是固定的
- 計算 H(x) 的過程是高效的(對于長度為 n 的字符串 x 掠抬,計算出 H(x) 的時間復(fù)雜度應(yīng)為 O(n) )
另外哈希函數(shù)一般還要求以下兩種特點:
1、免碰撞:即不會出現(xiàn)輸入 x≠y 校哎,但是H(x)=H(y) 的情況两波,其實這個特點在理論上并不成立,比如目前比特幣使用的 SHA256 算法闷哆,會有 2^256 種輸出腰奋,如果我們進行 2^256 + 1 次輸入,那么必然會產(chǎn)生一次碰撞抱怔,事實上劣坊,通過 理論證明 ,通過 2^130 次輸入就會有99%的可能性發(fā)生一次碰撞野蝇,不過即使如此讼稚,即便是人類制造的所有計算機自宇宙誕生開始一直運算到今天,發(fā)生一次碰撞的幾率也是極其微小的绕沈。
2、隱匿性:也就是說帮寻,對于一個給定的輸出結(jié)果 H(x) 乍狐,想要逆推出輸入 x ,在計算上是不可能的固逗。如果想要得到 H(x) 的可能的原輸入浅蚪,不存在比窮舉更好的方法藕帜。
hash 算法的原理是試圖將一個空間的數(shù)據(jù)集映射到另外一個空間(通常比原空間要小)惜傲,并利用質(zhì)數(shù)將數(shù)據(jù)集能夠均勻的映射洽故。目前主流的 hash 算法有:md4、md5盗誊、sha系列时甚。
MD4
MD4是麻省理工學(xué)院教授 Ronald Rivest 于1990年設(shè)計出來的算法。其摘要長度為128位哈踱,一般用32位的十六進制來表示荒适。
2004年8月清華大學(xué)教授王小云,指出在計算MD4時可能發(fā)生雜湊沖撞开镣。不久之后刀诬,Dobbertin 等人發(fā)現(xiàn)了MD4在計算過程中第一步和第三步中的漏洞,并向大家演示了如何利用一部普通電腦在幾分鐘內(nèi)找到MD4中的沖突邪财,毫無疑問陕壹,MD4就此被淘汰掉了。
MD5
1991年树埠,Rivest 開發(fā)出技術(shù)上更為趨近成熟的MD5算法糠馆,它在MD4的基礎(chǔ)上增加了"安全-帶子"(safety-belts)的概念。雖然 MD5 比 MD4 復(fù)雜度大一些弥奸,但卻更為安全榨惠。這個算法很明顯的由四個和 MD4 設(shè)計有少許不同的步驟組成。
MD5 擁有很好的抗修改性盛霎,即對原數(shù)據(jù)進行任何改動赠橙,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別愤炸。
MD5很好的用在了大文件的斷點續(xù)傳上:如果有一個 5MB 的文件 客戶端把它分割成5片 1MB 的文件 在上傳的時候上傳兩個 MD5 值期揪,一個是當(dāng)前上傳的文件片的 MD5 還有一個就是拼接之后的 MD5 (如果現(xiàn)在上傳的是第二片 這個MD5就應(yīng)該是第一片加上第二片的MD5), 通過這樣的方式能保證文件的完整性规个。
當(dāng)如果文件傳到一半斷了凤薛,服務(wù)器可以通過驗證文件 MD5 值就可以得知用戶已經(jīng)傳到了第幾片,并且知道之前上傳的文件有沒有發(fā)生變化诞仓,就可以判斷出用戶需要從第幾片開始傳遞缤苫。
不過在2004年8月的國際密碼學(xué)會議(Crypto’2004),王小云提出了一種快速找到 MD5 碰撞的方法(參見其論文)墅拭,降低了 MD5 的安全性活玲,人們開始尋求更加可靠的加密算法。
SHA系列
SHA的全稱是Secure Hash Algorithm(安全hash算法),SHA系列有五個算法舒憾,分別是 SHA-1镀钓、SHA-224、SHA-256镀迂、SHA-384丁溅,和SHA-512,由美國國家安全局(NSA)所設(shè)計探遵,并由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布窟赏,是美國的政府標(biāo)準(zhǔn)。后四者有時并稱為 SHA-2别凤。SHA-1在許多安全協(xié)定中廣為使用饰序,包括 TLS/SSL 等,是 MD5 的后繼者规哪。
SHA-1
最初該算法于1993年發(fā)布求豫,稱做安全散列標(biāo)準(zhǔn) (Secure Hash Standard),最初這個版本被稱為"SHA-0"诉稍,它在發(fā)布之后很快就被NSA撤回蝠嘉,因為有很大的安全缺陷,之后在1995年發(fā)布了修訂版本杯巨,也就是SHA-1蚤告。
SHA-0 和 SHA-1 會從一個最大 2^64 位元的訊息中產(chǎn)生一串 160 位元的摘要,然后以 MD4 及 MD5 算法類似的原理來加密服爷。
2017年杜恰,谷歌發(fā)布了最新的研究成功,宣布攻破了SHA-1仍源,并詳細(xì)描述了成功的SHA1碰撞攻擊方式心褐,使用這種方式,可以在亞馬遜的云計算平臺上笼踩,耗時10天左右創(chuàng)建出SHA-1碰撞逗爹,并且成本可以控制在11萬美元以內(nèi)。
即使如此嚎于,對于單臺機器來說攻擊的成本依然很高掘而,發(fā)生一次SHA-1碰撞需要超過9,223,372,036,854,775,808
個SHA1計算,這需要使用你的機器進行6500年計算于购。
SHA2
SHA2包括了SHA-224袍睡、SHA-256、SHA-384肋僧,和SHA-512女蜈,這幾個函數(shù)都將訊息對應(yīng)到更長的訊息摘要持舆,以它們的摘要長度(以位元計算)加在原名后面來命名色瘩,也就是說SHA-256會產(chǎn)生256位長度摘要伪窖。
SHA-2相對來說是安全的,至今尚未出現(xiàn)對SHA-2有效的攻擊居兆!
由于目前大量的網(wǎng)站使用的SSL數(shù)字證數(shù)都是使用SHA-1簽名的覆山,而SHA-1又已經(jīng)不安全,各大瀏覽器廠商均宣布了棄用SHA-1的時間表:
可以看出泥栖,在時間表之后簇宽,如果檢測到網(wǎng)站的證書使用的還是SHA-1,就會彈出警告:
為了防止網(wǎng)站因出現(xiàn)上面的警告而顯得不專業(yè)吧享,我們需要盡快的申請使用跟安全放心的基于SHA-2簽名的證書魏割。
待調(diào)查的問題:
- 生日彩虹表攻擊
- 字典攻擊