nist-sha

nist目前支持的sha運算,sha1系列,輸出mac160bit。算法

            sha2系列,支持sha2-224,sha2-256,sha2-384,sha2-512,sha2-512/224,sha2-512/256安全

            sha3系列,支持sha3-224,sha3-256,sha3-384,sha3-512app

sha1和sha2系列的算法,支持最大的message長度,block size的大小,輸出digest的size。3d

  

sha1和sha2的算法相似,都分爲preprocessing和迭代運算兩部分。NIST的標準爲FIPS 180-4blog

  1) preprocessing,padding message,將message分爲512,或者1024bit的整數倍。字符串

   512bit的block,最後64bit表示message的長度,1024bit的block,最後128bit表示message的長度input

    

  2) 迭代運算,迭代開始init vector,Hstring

    sha1,是5個32bit的word組成的向量,hash

    512bit的block,是8個32bit的word組成的向量,it

      1024bit的block,是8個64bit的word組成的向量。

   迭代過程當中,存在a-f的8箇中間變量,由H初始化

   每一個block的數據被分爲64個或者80個word,在通過64輪或者80輪迭代,更新a-f這幾個中間變量。

      輸出最終的a-f的中間變量的值做爲hash digest的值。

 

sha3系列算法,採用的engine內核不一樣於sha2,而是基於Keccak-p[b,nr]的置換-------sponge壓縮算法

  sponge壓縮算法,分爲absorb和squeeze兩部分,absorb進行數據的迭代壓縮,squeeze生成指定長度的digest

 

sponge壓縮算法的輸入Sponge[f, pad(r, len(N)), r](N,d):

  1) input string,能夠是byte流也能夠是bit流,注意sha3中的byte流和bit流的轉換,高低位置是相反的。0x80對應0b'0000_0001。

  2) padding function,SHA3採用10*1的bit流的方式來padding。padding以後的string len是r的整數倍。

  3) rate,r+c = b。

  4) f,表示算法每次塊的處理長度,處理長度爲b。

 

    

 

sha3運算中的核心engine,Keccak-p[b, nr]其中b表示每次置換的bits的長度,NIST給出的標準只有七種選擇。25,50,100,200,400,800,1600。

    由b的值能夠獲得兩個變量,w表示state的z軸,w = b/25

                  l表示算法須要迭代的次數,l = log2w。

 

Keccak-p[b, nr]算法的輸入是一個三維的5*5*w的三維矩陣。每次的置換運算中,包括5個小的運算。

  Keccak-p[b, nr]的算法流程:

    

    

Keccak-f系列的算法是Keccak-p算法中的一大類,其中nr = 12 + 2l,而sha3採用的Keccak算法正是該系列下的b = 1600的系列

  sha3算法的置換部分的engine爲Keccak-p[1600,24]

 

 

sha3的算法表示,N表示輸入的最原始的bit字符串,d表示輸出的string的長度。而且規定c = 2d

Keccak[c](N, d) = Sponge[Keccak-p[1600,24], pad 10*1, 1600-c](N, d)

sha3的其中四種運算,須要在M以後加01,以後padding。另外的shake運算,須要在M以後加1111。

  

   

  其中各個算法中的r*8爲(能夠經過1600-2d)/8獲得

    

總結:

sha3運算首先將input string pad 爲一個5*5 state,各個block塊,以1600bit分組,進行absort操做,每次調用Keccak算法24次

  以後進行squeezing操做

 

sha3中的10*1的bit pading方法,對應到byte string中,表示爲:(其中q爲r - m/ mod r,r爲byte表示的長度)

  

 

 

針對nist approve的各個hash algm,他們的安全等級分別爲:

  

本站公眾號
   歡迎關注本站公眾號,獲取更多信息