SHA-256算法——被認(rèn)為是目前最安全的Hash函數(shù)之一
SHA-256算法單向Hash函數(shù)是密碼學(xué)和信息安全領(lǐng)域中的一個(gè)非常重要的基本算法,它是把任意長的消息轉(zhuǎn)化為較短的、固定長度的消息摘要的算法。
SHA安全加密標(biāo)準(zhǔn),是至今國際上使用最為廣泛的較為安全的壓縮算法之一,由美國NIST和NSA兩個(gè)組織共同開發(fā)的,此算法于1993年5月11日被美國NIST和NSA設(shè)定為加密標(biāo)準(zhǔn)。為了提高Hash函數(shù)的安全性能,陸續(xù)發(fā)布了改進(jìn)的Hash密碼算法SHA-1、SHA-224、SHA-256、SHA-384及SHA-512等。但隨著2004年中國密碼專家王小云教授研究小組宣布對MD5、SHA-1等加密算法的破解,隨著密碼學(xué)研究的不斷深入和計(jì)算機(jī)技術(shù)的快速發(fā)展,美國政府計(jì)劃從2010年起不再使用SHA-1,全面推廣使用SHA-256、SHA-384和SHA-512等加密算法。
SHA-256算法的安全性分析
Hash函數(shù)的安全性很大程度上取決于抗強(qiáng)碰撞的能力,即攻擊者找出兩個(gè)涓息M和M'(M≠M(fèi)'),使得H(M)=HM'。因此,評價(jià)一個(gè)Hash函數(shù)的安全性,就是看攻擊者在現(xiàn)有的條件下,是否能找到該函數(shù)的一對碰撞。目前已有的對Hash函數(shù)攻擊的方法包括生日攻擊、彩虹表攻擊、差分攻擊等。
生日攻擊
生日攻擊是一種可用于攻擊任何類型Hash函數(shù)的攻擊方法。從攻擊原理上看,它沒有利用Hash函數(shù)的結(jié)構(gòu)和任何代數(shù)弱性質(zhì),只依賴于Hash值的長度。因此,抵御生日攻擊最有效的方法是Hash值必須有足夠的長度。
生日攻擊步驟:
發(fā)送方用私鑰對256位的Hash值加密,并將加密結(jié)果附于消息之后一并提交給接收者,攻擊者可按如下步驟實(shí)施攻擊:
1)攻擊者生成出消息M的2128種不同的消息變形,每一種消息變形都與原消息M具有相同的含義,同時(shí)攻擊者再偽造一個(gè)假冒的消息M',并對假冒的消息生成出2128個(gè)不同消息,其目的是試圖用假冒的消息替代真實(shí)消息。
2)比較上述兩個(gè)集合,找出具有相同Hash值的一對消息Mi和M'j,依照生日悖論原理,攻擊者找到碰撞的概率大于0.5。如果沒找到,則重新偽造一個(gè)消息,并生成2128個(gè)變形,直至找到碰撞為止。
3)攻擊者將消息Mi(與偽造消息M'j有相同Hash值)提交給A請求簽名,后將該簽名連同偽造消息M'j一起發(fā)送給接收者。
差分攻擊
差分攻擊是目前破譯迭代Hash函數(shù)最有效的手法之一,其基本方法是利用明文的輸入差值對輸出差值的影響,運(yùn)用差分的高概率的繼承或者消除來產(chǎn)生最終的相同輸出。一個(gè)Hash函數(shù)的安全性高低最終要看能否找到函數(shù)的整體碰撞,由于SHA-256算法具有迭代型結(jié)構(gòu),根據(jù)迭代算法的雪崩效應(yīng),隨著輪數(shù)的增加,相應(yīng)的整體碰撞復(fù)雜度會急劇上升,這就使得找到整體碰撞變得非常困難,直至目前現(xiàn)有的攻擊還無法找到SHA-256的一個(gè)整體碰撞。因此,SHA-256算法被認(rèn)為是目前最安全的Hash函數(shù)之一。






