SHA-1

SHA-1雜湊值，雜湊值通常的呈現形式為40個十六進位制數。2005年，密碼分析人員發現了對SHA-1的有效攻擊方法，這表明該演算法可能不夠安全，不能繼續使用，自2010年以來，許多組織建議用SHA-2或SHA-3來替換SHA-1。Microsoft、Google以及Mozilla都宣佈，它們旗下的瀏覽器將在2017年停止接受使用SHA-1演算法簽名的SSL證書。2017年2月23日，與Google宣佈了一個成功的SHA-1，釋出了兩份內容不同但SHA-1雜湊值相同的PDF檔案作為概念證明。2020年，針對SHA-1的選擇字首衝突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。SHA-0和SHA-1.最初載明的演演算法於1993年釋出，稱做安全雜湊標準取代。SHA-1和SHA-0的演演算法只在壓縮函式的訊息轉換部份差了一個位元的迴圈位移。根據NSA的說法，它修正了一個在原始演演算法中會降低雜湊安全性的弱點。然而NSA並沒有提供任何進一步的解釋或證明該弱點已被修正。而後SHA-0和SHA-1的弱點相繼被攻破，SHA-1似乎是顯得比SHA-0有抵抗性，這多少證實了NSA當初修正演演算法以增進安全性的宣告。SHA-0和SHA-1可將一個最大264位元的訊息，轉換成一串160位元的訊息摘要；其設計原理相似於MIT教授Ronald L. Rivest所設計的密碼學雜湊演演算法MD4和MD5。SHA-0的破解.在CRYPTO 98上，兩位法國研究者提出一種對SHA-0的攻擊方式：在261的計算複雜度之內，就可以發現一次碰撞；這個數字小於生日攻擊法所需的280，也就是說，存在一種演演算法，使其安全性不到一個理想的雜湊函式抵抗攻擊所應具備的計算複雜度。2004年時，Biham和Chen也發現了SHA-0的近似碰撞，也就是兩個訊息可以雜湊出幾乎相同的數值；其中162位元中有142位元相同。他們也發現了SHA-0的完整碰撞，將本來需要80次方的複雜度降低到62次方。2004年8月12日，Joux, Carribault, Lemuet和Jalby宣佈找到SHA-0演演算法的完整碰撞的方法，這是歸納Chabaud和Joux的攻擊所完成的結果。發現一個完整碰撞只需要251的計算複雜度。他們使用的是一臺有256顆Itanium2處理器的超級電腦，約耗80,000 CPU工時。2004年8月17日，在CRYPTO 2004的Rump會議上，王小雲，馮登國宣佈了攻擊MD5、SHA-0和其他雜湊函式的初步結果。他們攻擊SHA-0的計算複雜度是240，這意味的他們的攻擊成果比Joux還有其他人所做的更好。請D5安全性。2005年二月，王小雲和殷益群、於紅波再度發表了對SHA-0破密的演演算法，可在239的計算複雜度內就找到碰撞。SHA-1的破解.鑒於SHA-0的破密成果，專家們建議那些計劃利用SHA-1實作密碼系統的人們也應重新考慮。在2004年CRYPTO會議結果公佈之後，NIST即宣佈他們將逐漸減少使用SHA-1，改以SHA-2取而代之。2005年，Rijmen和Oswald發表了對SHA-1較弱版本的攻擊：在280的計算複雜度之內找到碰撞。2005年二月，王小雲、殷益群及於紅波發表了對完整版SHA-1的攻擊，只需少於269的計算複雜度，就能找到一組碰撞。這篇論文的作者們寫道；「我們的破密分析是以對付SHA-0的差分攻擊、近似碰撞、多區塊碰撞技術、以及從MD5演演算法中尋找碰撞的訊息更改技術為基礎。沒有這些強力的分析工具，SHA-1就無法破解。」此外，作者還展示了一次對58次加密迴圈SHA-1的破密，在233個單位操作內就找到一組碰撞。完整攻擊方法的論文發表在2005年八月的CRYPTO會議中。殷益群在一次面談中如此陳述：「大致上來說，我們找到了兩個弱點：其一是前置處理不夠複雜；其二是前20個迴圈中的某些數學運算會造成不可預期的安全性問題。」2005年8月17日的CRYPTO會議尾聲中王小雲、姚期智、姚儲楓再度發表更有效率的SHA-1攻擊法，能在263個計算複雜度內找到碰撞。2006年的CRYPTO會議上，Christian Rechberger和Christophe De Cannière宣佈他們能在容許攻擊者決定部分原訊息的條件之下，找到SHA-1的一個碰撞。在密碼學的學術理論中，任何攻擊方式，其計算複雜度若少於暴力搜尋法所需要的計算複雜度，就能被視為針對該密碼系統的一種破密法；但這並不表示該破密法已經可以進入實際應用的階段。就應用層面的考量而言，一種新的破密法出現，暗示著將來可能會出現更有效率、足以實用的改良版本。雖然這些實用的破密法版本根本還沒誕生，但確有必要發展更強的雜湊演演算法來取代舊的演演算法。在「碰撞」攻擊法之外，另有一種反譯攻擊法，就有可能得到該使用者的密碼。2017年2月23日，Google公司宣佈，他們與CWI Amsterdam合作建立了兩個有著相同SHA-1值但內容不同的PDF檔案，這代表SHA-1演演算法已被正式攻破。2020年，針對SHA-1的選擇字首衝突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。在數位簽章領域，用更安全的SHA-2或SHA-3替換SHA-1已經變得急迫。SHA-1演演算法.以下是SHA-1演演算法的虛擬碼："Note: All variables are unsigned 32 bits and wrap modulo 232 when calculating""Initial variables:"h0 := 0x67452301h1 := 0xEFCDAB89h2 := 0x98BADCFEh3 := 0x10325476h4 := 0xC3D2E1F0"Pre-processing:"append the bit '1' to the messageappend k bits '0', where k is the minimum number &gt;= 0 such that the resulting messagelength (in "bits") is congruent to 448(mod 512)append length of message (before pre-processing), in "bits", as 64-bit big-endian integer"Process the message in successive 512-bit chunks:"break message into 512-bit chunksfor each chunkbreak chunk into sixteen 32-bit big-endian words w[i], 0 ≤ i ≤ 15"Extend the sixteen 32-bit words into eighty 32-bit words:"for i from 16 to 79w[i] := (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1"Initialize hash value for this chunk:"a := h0b := h1c := h2d := h3e := h4"Main loop:"for i from 0 to 79if 0 ≤ i ≤ 19 thenf := (b and c) or ((not b) and d)k := 0x5A827999else if 20 ≤ i ≤ 39f := b xor c xor dk := 0x6ED9EBA1else if 40 ≤ i ≤ 59f := (b and c) or (b and d) or(c and d)k := 0x8F1BBCDCelse if 60 ≤ i ≤ 79f := b xor c xor dk := 0xCA62C1D6temp := (a leftrotate 5) + f + e + k + w[i]e := dd := cc := b leftrotate 30b := aa := temp"Add this chunk's hash to result so far:"h0 := h0 + ah1 := h1 + bh2 := h2 + ch3 := h3 + dh4 := h4 + e"Produce the final hash value (big-endian):"digest = hash = h0 append h1 append h2 append h3 append h4上述關於codice_1運算式列於FIPS PUB 180-1中，以下替代運算式也許也能在主要迴圈裡計算codice_1：(0 ≤ i ≤ 19): f := d xor (b and (c xor d)) "(alternative)"(40 ≤ i ≤ 59): f := (b and c) or (d and (b or c)) "(alternative 1)"(40 ≤ i ≤ 59): f := (b and c) or (d and (b xor c)) "(alternative 2)"(40 ≤ i ≤ 59): f := (b and c) + (d and (b xor c)) "(alternative 3)"SHA-1示例.空文的雜湊為：SHA-1("")= da39a3ee5e6b4b0d3255bfef95601890afd80709