【數字摘要算法】SHA算法(sha-0/sha-1/sha-2)

SHA-1
  SHA 家族
  SHA (Secure Hash Algorithm,譯作安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院 (NIST) 發佈的一系列密碼散列函數。正式名稱爲 SHA 的家族第一個成員發佈於 1993年。然而現在的人們給它取了一個非正式的名稱 SHA-0 以避免與它的後繼者混淆。兩年之後, SHA-1,第一個 SHA 的後繼者發佈了。 另外還有四種變體,曾經發布以提升輸出的範圍和變更一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱做 SHA-2)。
  SHA-0 和 SHA-1
  最初載明的算法於 1993年發佈,稱做安全散列標準 (Secure Hash Standard),FIPS PUB 180。這個版本現在常被稱爲 "SHA-0"。它在發佈之後很快就被 NSA 撤回,並且以 1995年發佈的修訂版本 FIPS PUB 180-1 (通常稱爲 "SHA-1") 取代。根據 NSA 的說法,它修正了一個在原始算法中會降低密碼安全性的錯誤。然而 NSA 並沒有提供任何進一步的解釋或證明該錯誤已被修正。1998年,在一次對 SHA-0 的攻擊中發現這次攻擊並不能適用於 SHA-1 — 我們不知道這是否就是 NSA 所發現的錯誤,但這或許暗示我們這次修正已經提升了安全性。SHA-1 已經被公衆密碼社羣做了非常嚴密的檢驗而還沒發現到有不安全的地方,它現在被認爲是安全的。
  SHA-0 和 SHA-1 會從一個最大 2^64 位元的訊息中產生一串 160 位元的摘要然後以設計 MD4 及 MD5 訊息摘要算法的 MIT 教授 Ronald L. Rivest 類似的原理爲基礎來加密。
  SHA-0 的密碼分析
  在 CRYPTO 98 上,兩位法國研究者展示了一次對 SHA-0 的攻擊 (Chabaud and Joux, 1998): 散列碰撞可以複雜到 2^61 時被發現;小於 2^80 是理想的相同大小散列函數。
  2004年時,Biham 和 Chen 發現了 SHA-0 的近似碰撞 — 兩個訊息可以散列出相同的數值;在這種情況之下,142 和 160 位元是一樣的。他們也發現了 SHA-0 在 80 次之後減少到 62 位元的完整碰撞。
  2004年8月12日,Joux, Carribault, Lemuet 和 Jalby 宣佈了完整 SHA-0 算法的散列碰撞。這是歸納 Chabaud 和 Joux 的攻擊所完成的結果。發現這個碰撞要複雜到 2^51, 並且用一臺有 256 顆 Itanium2 處理器的超級電腦耗時大約 80,000 CPU 工作時 。
  2004年8月17日,在 CRYPTO 2004 的 Rump 會議上,Wang, Feng, Lai, 和 Yu 宣佈了攻擊 MD5、SHA-0 和其他散列函數的初步結果。他們對 SHA-0 攻擊複雜到 2^40,這意味着他們攻擊的成果比 Joux 還有其他人所做的更好。該次 Rump 會議的簡短摘要可以在 這裏找到,而他們在 sci.crypt 的討論,例如: 這些結果建議計劃使用 SHA-1 作爲新的密碼系統的人需要重新考慮。
  更長的變種
  NIST 發佈了三個額外的 SHA 變體,每個都有更長的訊息摘要。以它們的摘要長度 (以位元計算) 加在原名後面來命名:"SHA-256", "SHA-384" 和 "SHA-512"。它們發佈於 2001年的 FIPS PUB 180-2 草稿中,隨即通過審查和評論。包含 SHA-1 的 FIPS PUB 180-2,於 2002年以官方標準發佈。這些新的散列函數並沒有接受像 SHA-1 一樣的公衆密碼社羣做詳細的檢驗,所以它們的密碼安全性還不被大家廣泛的信任。2004年2月,發佈了一次 FIPS PUB 180-2 的變更通知,加入了一個額外的變種 "SHA-224",定義了符合雙金鑰 3DES 所需的金鑰長度。
  Gilbert 和 Handschuh (2003) 研究了新的變種並且沒有發現弱點。
  SHAd
  SHAd 函數是一個簡單的相同 SHA 函數的重述:
  SHAd-256(m)=SHA-256(SHA-256(m))。它會克服有關延伸長度攻擊的問題。
  應用
  SHA-1, SHA-224, SHA-256, SHA-384 和 SHA-512 都被需要安全散列算法的美國聯邦政府所應用,他們也使用其他的密碼算法和協定來保護敏感的未保密資料。FIPS PUB 180-1 也鼓勵私人或商業組織使用 SHA-1 加密。Fritz-chip 將很可能使用 SHA-1 散列函數來實現個人電腦上的數位版權管理。
  首先推動安全散列算法出版的是已合併的數位簽章標準。
  SHA 散列函數已被做爲 SHACAL 分組密碼算法的基礎。
  SHA-1 的描述
  以下是 SHA-1 算法的僞代碼:
  (Initialize variables:)
  a = h0 = 0x67452301
  b = h1 = 0xEFCDAB89
  c = h2 = 0x98BADCFE
  d = h3 = 0x10325476
  e = h4 = 0xC3D2E1F0
  (Pre-processing:)
  paddedmessage = (message) append 1
  while length(paddedmessage) mod 512 <> 448:
  paddedmessage = paddedmessage append 0
  paddedmessage = paddedmessage append (length(message) in 64-bit format)
  (Process the message in successive 512-bit chunks:)
  while 512-bit chunk(s) remain(s):
  break the current chunk into sixteen 32-bit words w(i), 0 <= i <= 15
  (Extend the sixteen 32-bit words into eighty 32-bit words:)
  for i from 16 to 79:
  w(i) = (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) leftrotate 1
  (Main loop:)
  for i from 0 to 79:
  temp = (a leftrotate 5) + f(b,c,d) + e + k + w(i) (note: all addition is mod 2^32)
  where:
  (0 <= i <= 19): f(b,c,d) = (b and c) or ((not b) and d), k = 0x5A827999
  (20 <= i <= 39): f(b,c,d) = (b xor c xor d), k = 0x6ED9EBA1
  (40 <= i <= 59): f(b,c,d) = (b and c) or (b and d) or (c and d), k = 0x8F1BBCDC
  (60 <= i <= 79): f(b,c,d) = (b xor c xor d), k = 0xCA62C1D6
  e = d
  d = c
  c = b leftrotate 30
  b = a
  a = temp
  h0 = h0 + a
  h1 = h1 + b
  h2 = h2 + c
  h3 = h3 + d
  h4 = h4 + e
  digest = hash = h0 append h1 append h2 append h3 append h4
  注意:FIPS PUB 180-1 展示的構想,用以下的公式替代可以增進效能:
  (0 <= i <= 19): f(b,c,d) = (d xor (b and (c xor d)))
  (40 <= i <= 59): f(b,c,d) = (b and c) or (d and (b or c)))

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章