密碼學06(SHA1算法)

Hash函數

基本形式:

hash函數將任意長的報文M映射爲定長的hash碼h,hash碼也稱爲報文摘要,具有錯誤檢驗能力。

基本性質:
  • 單向性:由Hash碼不能得出相應的報文。
  • 抗弱碰撞性:不能找到與給定報文具有相同Hash值的另一個報文,保證消息不會僞造。
  • 抗強碰撞性:Hash值應該較長

典型的Hash算法

典型的M-D結構,將明文劃分爲明文塊,再進入到壓縮函數處理,輸出定長的密文(摘要)
在這裏插入圖片描述

SHA算法

SHA算法採用迭代型Hash函數的一般結構,輸入長度不超過264bit,輸入的消息按照512bit的塊進行處理,產生160位的消息摘要。
在這裏插入圖片描述

消息填充

填充報文的目的是使報文長度與448mod512同餘,即報文的最後的一部分只需要被填充到448位即可,512 - 448 = 64,這最後64位存放報文長度。其中填充位數在1到512之間(注意沒有0,也就是說一個長爲448位的明文,需要再填充512位)。

初始化緩衝區

算法使用了160位長度的緩衝區以存儲中間結果和最終的消息摘要,緩衝區表示爲5個32位長的寄存器A、B、C、D、E,每個寄存器都以big-ebdian方式存儲數據,即字的最高有效字節存於低地址字節位置。
緩存器初值爲(16進製表示):
在這裏插入圖片描述

算法主循環

每次以塊(512位)爲單位對消息進行壓縮處理,將512位的明文分組劃分爲16個子明文分組每個明文分組32位,之後經過壓縮函數處理,整體循環的次數爲填充後報文的分組數,即有多少分組就循環多少次。

  • 壓縮函數處理:
    壓縮函數有4輪處理過程,也就是經過4輪函數(f1,f2,f3,f4)處理,每一輪函數由20步迭代組成,每輪的輸入爲當前處理的消息塊mi導出的32位數據和緩衝區ABCDE的當前值,輸出覆蓋在對應的緩衝區,第四輪的輸出在與第一輪的輸入進行異或運算,得到壓縮函數的輸出。
    在這裏插入圖片描述
    因爲每一輪函數經過20步迭代,所以壓縮函數總共由80步迭代組成,每一步迭代的運算形式爲 :
                               A = (E + f(B,C,D) + (A << 5)+Wt + Kt)mod 232
                               B = A
                               C = B<<30
                               D = C
                               E = D
    ABCDE就是對應的緩衝區中的值,f爲函數,<<爲左移, Wt 爲當前512位的消息塊導出的32位的數據,t爲迭代步數,Kt加法常量。
    其中函數f輸入爲32*3=96位,輸出爲32位,輸入值每個函數都不同
    每一步使用的Kt加法常量對應4輪處理只有4個取值
    現在這裏存在一個問題!:每一步都使用512位報文分組中導出的32位數據,但是一共有20 * 4 = 80步迭代,80大於512 / 32 = 16,所以要將16個32位的數據(M0 ~ M15)擴展爲80個32位的字(M0 ~ M79)前16步迭代直接取輸入消息塊的16個相應的數據(Wt = Mt),後面64步迭代中Wt的值等於前4個Wt值異或後循環左移一位的結果。
    具體的計算方式爲:
                              Wt = Mt                                                             ,0 <= t <=15
                              Wt = (Wt-3 ⊕ Wt-8⊕Wt-14⊕Wt-16 ) <<1       ,16 <= t <=79
輸出

對第一個512位分組執行完壓縮函數處理後繼續對下一個512位的分組重複4輪,每輪20次f1,f2,f3,f4操作,緩衝區中的值作爲下一個明文分組的輸入重複該過程,直到最後一個512位分組結束。
所有的消息塊處理結束後,將緩衝區A、B、C、D、E中最後生成的數據合併得到一個32 * 5 = 160位的數據,這就是SHA摘要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章