fbpx
维基百科

SHA-2

SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼雜湊函數演算法標準,由美國國家安全局研發[3],由美國國家標準與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標準,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

安全散列算法
概念
散列函数 · SHA · DSA
主流标准
SHA-0 · SHA-1 · SHA-2 · SHA-3
SHA-2
概述
设计者美國國家安全局
首次发布2001年
系列(SHA-0), SHA-1, SHA-2, SHA-3
认证FIPS PUB 180-4, CRYPTREC英语CRYPTREC, NESSIE英语NESSIE
细节
摘要长度224, 256, 384, or 512 bits
结构配合Davies–Meyer壓縮函數的默克爾-達姆加德結構英语Merkle–Damgård construction
重复回数64 or 80
最佳公开破解
A 2011 attack breaks preimage resistance for 57 out of 80 rounds of SHA-512, and 52 out of 64 rounds for SHA-256.[1] Pseudo-collision attack against up to 46 rounds of SHA-256.[2]

开发

 
SHA-2的第t個加密迴圈。圖中的深藍色方塊是事先定義好的非線性函數。ABCDEFGH一開始分別是八個初始值,Kt是第t個金鑰,Wt是本區塊產生第t個word。原訊息被切成固定長度的區塊,對每一個區塊,產生n個word(n視演算法而定),透過重複運作迴圈n次對ABCDEFGH這八個工作區段循環加密。最後一次迴圈所產生的八段字串合起來即是此區塊對應到的雜湊字串。若原訊息包含數個區塊,則最後還要將這些區塊產生的雜湊字串加以混合才能產生最後的雜湊字串。

NIST發佈了三個額外的SHA變體,這三個函數都將訊息對應到更長的訊息摘要。以它們的摘要長度(以位元計算)加在原名後面來命名:SHA-256,SHA-384和SHA-512。它們發佈於2001年的FIPS PUB 180-2草稿中,隨即通過審查和評論。包含SHA-1的FIPS PUB 180-2,於2002年以官方標準發佈。2004年2月,發佈了一次FIPS PUB 180-2的變更通知,加入了一個額外的變種SHA-224,這是為了符合雙金鑰3DES所需的金鑰長度而定義[4]

SHA-256和SHA-512是很新的雜湊函數,前者以定義一個word為32位元,後者則定義一個word為64位元。它們分別使用了不同的偏移量,或用不同的常數,然而,實際上二者結構是相同的,只在迴圈執行的次數上有所差異。SHA-224以及SHA-384則是前述二種雜湊函數的截短版,利用不同的初始值做計算。

這些新的雜湊函數並沒有接受像SHA-1一樣的公眾密碼社群做詳細的檢驗,所以它們的密碼安全性還不被大家廣泛的信任。[來源請求]Gilbert和Handschuh在2003年曾對這些新變種作過一些研究,聲稱他們沒有找到弱點。[來源請求]

演算法

以下是SHA-256演算法的虛擬碼。注意,64個word w[16..63]中的位元比起SHA-1演算法,混合的程度大幅提升。

注意:全部變量皆是32位元非帶號整數,且溢位時以模232處理 
初始化 (以下是前8個質數2..19平方根小數部分的前32位元): h0 := 0x6a09e667 h1 := 0xbb67ae85 h2 := 0x3c6ef372 h3 := 0xa54ff53a h4 := 0x510e527f h5 := 0x9b05688c h6 := 0x1f83d9ab h7 := 0x5be0cd19 
初始化每輪用的常數 (前64個質數2..311的立方根小數部分的前32位元): k[0..63] := 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 
預處理: 訊息後接上一個位元'1' 再接上k個'0',其中k為最小的非負整數,使所得的訊息長度(位元數)同余於448(mod 512) 將預處理前訊息的長度(位元數)寫成64位元大端序整數,接在最尾 
將訊息分成若干連續段處理,每段512位元: 將訊息分成512位元的分段 for 每段 將該段再分成十六個32位元的字組,看成大端序的整數w[0..15] 
 從該十六個字組,計算多四十八個同樣長度的字組,得到總共六十四個32位元字組: for i from 16 to 63 s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor(w[i-15] rightshift 3) s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor(w[i-2] rightshift 10) w[i] := w[i-16] + s0 + w[i-7] + s1 
 初始化此段的雜湊值: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 
 主迴圈: for i from 0 to 63 s0 := (a rightrotate 2) xor (a rightrotate 13) xor(a rightrotate 22) maj := (a and b) xor (a and c) xor(b and c) t2 := s0 + maj s1 := (e rightrotate 6) xor (e rightrotate 11) xor(e rightrotate 25) ch := (e and f) xor ((not e) and g) t1 := h + s1 + ch + k[i] + w[i] h := g g := f f := e e := d + t1 d := c c := b b := a a := t1 + t2 
 將此段的雜湊值加進總和: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h 
輸出最總的雜湊值(大端序): digest = hash = h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7 

其中ch函數及maj函數可利用前述SHA-1的優化方式改寫。

SHA-224和SHA-256基本上是相同的,除了:

  • h0h7的初始值不同,以及
  • SHA-224輸出時截掉h7的函數值。

SHA-512和SHA-256的結構相同,但:

  • SHA-512所有的數字都是64位元,
  • SHA-512執行80次加密迴圈而非64次,
  • SHA-512初始值和常數拉長成64位元,以及
  • 二者位元的偏移量和循環位移量不同。

SHA-384和SHA-512基本上是相同的,除了:

  • h0h7的初始值不同,以及
  • SHA-384輸出時截掉h6h7的函數值。

实现

Windows操作系统的System32目录下有certutil.exe,可以直接调用,例如:

certutil -hashfile yourfilename.ext SHA256 

参考文献

  1. ^ Dmitry Khovratovich, Christian Rechberger & Alexandra Savelieva. Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family (PDF). IACR Cryptology ePrint Archive. 2011,. 2011:286 [2016-12-15]. (原始内容 (PDF)于2016-07-22). 
  2. ^ Mario Lamberger & Florian Mendel. Higher-Order Differential Attack on Reduced SHA-256 (PDF). IACR Cryptology ePrint Archive. 2011,. 2011:37 [2016-12-15]. (原始内容 (PDF)于2017-03-29). 
  3. ^ (PDF). [2016-12-15]. (原始内容 (PDF)存档于2014-10-14). 
  4. ^ FIPS 180-2 with Change Notice 1 (PDF). csrc.nist.gov. [2017-01-13]. (原始内容存档 (PDF)于2012-03-18). 

此條目包含過多行話或專業術語, 可能需要簡化或提出進一步解釋, 2021年10月6日, 請在討論頁中發表對於本議題的看法, 並移除或解釋本條目中的行話, 名稱來自於安全散列演算法2, 英語, secure, hash, algorithm, 的縮寫, 一種密碼雜湊函數演算法標準, 由美國國家安全局研發, 由美國國家標準與技術研究院, nist, 在2001年發布, 屬於sha演算法之一, 是sha, 1的後繼者, 其下又可再分為六個不同的演算法標準, 包括了, 安全散列算法概念散列函数, dsa主流标准sha, 3. 此條目包含過多行話或專業術語 可能需要簡化或提出進一步解釋 2021年10月6日 請在討論頁中發表對於本議題的看法 並移除或解釋本條目中的行話 SHA 2 名稱來自於安全散列演算法2 英語 Secure Hash Algorithm 2 的縮寫 一種密碼雜湊函數演算法標準 由美國國家安全局研發 3 由美國國家標準與技術研究院 NIST 在2001年發布 屬於SHA演算法之一 是SHA 1的後繼者 其下又可再分為六個不同的演算法標準 包括了 SHA 224 SHA 256 SHA 384 SHA 512 SHA 512 224 SHA 512 256 安全散列算法概念散列函数 SHA DSA主流标准SHA 0 SHA 1 SHA 2 SHA 3查论编SHA 2概述设计者美國國家安全局首次发布2001年系列 SHA 0 SHA 1 SHA 2 SHA 3认证FIPS PUB 180 4 CRYPTREC 英语 CRYPTREC NESSIE 英语 NESSIE 细节摘要长度224 256 384 or 512 bits结构配合Davies Meyer壓縮函數的默克爾 達姆加德結構 英语 Merkle Damgard construction 重复回数64 or 80最佳公开破解A 2011 attack breaks preimage resistance for 57 out of 80 rounds of SHA 512 and 52 out of 64 rounds for SHA 256 1 Pseudo collision attack against up to 46 rounds of SHA 256 2 目录 1 开发 2 演算法 3 实现 4 参考文献开发 编辑 SHA 2的第t個加密迴圈 圖中的深藍色方塊是事先定義好的非線性函數 ABCDEFGH一開始分別是八個初始值 Kt是第t個金鑰 Wt是本區塊產生第t個word 原訊息被切成固定長度的區塊 對每一個區塊 產生n個word n視演算法而定 透過重複運作迴圈n次對ABCDEFGH這八個工作區段循環加密 最後一次迴圈所產生的八段字串合起來即是此區塊對應到的雜湊字串 若原訊息包含數個區塊 則最後還要將這些區塊產生的雜湊字串加以混合才能產生最後的雜湊字串 NIST發佈了三個額外的SHA變體 這三個函數都將訊息對應到更長的訊息摘要 以它們的摘要長度 以位元計算 加在原名後面來命名 SHA 256 SHA 384和SHA 512 它們發佈於2001年的FIPS PUB 180 2草稿中 隨即通過審查和評論 包含SHA 1的FIPS PUB 180 2 於2002年以官方標準發佈 2004年2月 發佈了一次FIPS PUB 180 2的變更通知 加入了一個額外的變種SHA 224 這是為了符合雙金鑰3DES所需的金鑰長度而定義 4 SHA 256和SHA 512是很新的雜湊函數 前者以定義一個word為32位元 後者則定義一個word為64位元 它們分別使用了不同的偏移量 或用不同的常數 然而 實際上二者結構是相同的 只在迴圈執行的次數上有所差異 SHA 224以及SHA 384則是前述二種雜湊函數的截短版 利用不同的初始值做計算 這些新的雜湊函數並沒有接受像SHA 1一樣的公眾密碼社群做詳細的檢驗 所以它們的密碼安全性還不被大家廣泛的信任 來源請求 Gilbert和Handschuh在2003年曾對這些新變種作過一些研究 聲稱他們沒有找到弱點 來源請求 演算法 编辑以下是SHA 256演算法的虛擬碼 注意 64個word w 16 63 中的位元比起SHA 1演算法 混合的程度大幅提升 注意 全部變量皆是32位元非帶號整數 且溢位時以模232處理 初始化 以下是前8個質數2 19平方根小數部分的前32位元 h0 0x6a09e667 h1 0xbb67ae85 h2 0x3c6ef372 h3 0xa54ff53a h4 0x510e527f h5 0x9b05688c h6 0x1f83d9ab h7 0x5be0cd19 初始化每輪用的常數 前64個質數2 311的立方根小數部分的前32位元 k 0 63 0x428a2f98 0x71374491 0xb5c0fbcf 0xe9b5dba5 0x3956c25b 0x59f111f1 0x923f82a4 0xab1c5ed5 0xd807aa98 0x12835b01 0x243185be 0x550c7dc3 0x72be5d74 0x80deb1fe 0x9bdc06a7 0xc19bf174 0xe49b69c1 0xefbe4786 0x0fc19dc6 0x240ca1cc 0x2de92c6f 0x4a7484aa 0x5cb0a9dc 0x76f988da 0x983e5152 0xa831c66d 0xb00327c8 0xbf597fc7 0xc6e00bf3 0xd5a79147 0x06ca6351 0x14292967 0x27b70a85 0x2e1b2138 0x4d2c6dfc 0x53380d13 0x650a7354 0x766a0abb 0x81c2c92e 0x92722c85 0xa2bfe8a1 0xa81a664b 0xc24b8b70 0xc76c51a3 0xd192e819 0xd6990624 0xf40e3585 0x106aa070 0x19a4c116 0x1e376c08 0x2748774c 0x34b0bcb5 0x391c0cb3 0x4ed8aa4a 0x5b9cca4f 0x682e6ff3 0x748f82ee 0x78a5636f 0x84c87814 0x8cc70208 0x90befffa 0xa4506ceb 0xbef9a3f7 0xc67178f2 預處理 訊息後接上一個位元 1 再接上k個 0 其中k為最小的非負整數 使所得的訊息長度 位元數 同余於448 mod 512 將預處理前訊息的長度 位元數 寫成64位元大端序整數 接在最尾 將訊息分成若干連續段處理 每段512位元 將訊息分成512位元的分段 for 每段 將該段再分成十六個32位元的字組 看成大端序的整數w 0 15 從該十六個字組 計算多四十八個同樣長度的字組 得到總共六十四個32位元字組 for i from 16 to 63 s0 w i 15 rightrotate 7 xor w i 15 rightrotate 18 xor w i 15 rightshift 3 s1 w i 2 rightrotate 17 xor w i 2 rightrotate 19 xor w i 2 rightshift 10 w i w i 16 s0 w i 7 s1 初始化此段的雜湊值 a h0 b h1 c h2 d h3 e h4 f h5 g h6 h h7 主迴圈 for i from 0 to 63 s0 a rightrotate 2 xor a rightrotate 13 xor a rightrotate 22 maj a and b xor a and c xor b and c t2 s0 maj s1 e rightrotate 6 xor e rightrotate 11 xor e rightrotate 25 ch e and f xor not e and g t1 h s1 ch k i w i h g g f f e e d t1 d c c b b a a t1 t2 將此段的雜湊值加進總和 h0 h0 a h1 h1 b h2 h2 c h3 h3 d h4 h4 e h5 h5 f h6 h6 g h7 h7 h 輸出最總的雜湊值 大端序 digest hash h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7 其中ch函數及maj函數可利用前述SHA 1的優化方式改寫 SHA 224和SHA 256基本上是相同的 除了 h0到h7的初始值不同 以及 SHA 224輸出時截掉h7的函數值 SHA 512和SHA 256的結構相同 但 SHA 512所有的數字都是64位元 SHA 512執行80次加密迴圈而非64次 SHA 512初始值和常數拉長成64位元 以及 二者位元的偏移量和循環位移量不同 SHA 384和SHA 512基本上是相同的 除了 h0到h7的初始值不同 以及 SHA 384輸出時截掉h6和h7的函數值 实现 编辑Windows操作系统的System32目录下有certutil exe 可以直接调用 例如 certutil hashfile yourfilename ext SHA256参考文献 编辑 Dmitry Khovratovich Christian Rechberger amp Alexandra Savelieva Bicliques for Preimages Attacks on Skein 512 and the SHA 2 family PDF IACR Cryptology ePrint Archive 2011 2011 286 2016 12 15 原始内容存档 PDF 于2016 07 22 Mario Lamberger amp Florian Mendel Higher Order Differential Attack on Reduced SHA 256 PDF IACR Cryptology ePrint Archive 2011 2011 37 2016 12 15 原始内容存档 PDF 于2017 03 29 On the Secure Hash Algorithm family PDF 2016 12 15 原始内容 PDF 存档于2014 10 14 FIPS 180 2 with Change Notice 1 PDF csrc nist gov 2017 01 13 原始内容存档 PDF 于2012 03 18 取自 https zh wikipedia org w index php title SHA 2 amp oldid 74335684, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。