1. 程式人生 > >密碼學摘要演算法之SHA1

密碼學摘要演算法之SHA1

密碼學摘要演算法之SHA1

SHA介紹

SHA演算法,即安全雜湊演算法(Secure Hash Algorithm)是一種與MD5同源的資料加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的雜湊演算法之一,並被廣泛使用

SHA演算法能計算出一個數位資訊所對應到的,長度固定的字串,又稱資訊摘要.而且如果輸入資訊有任何的不同,輸出的對應摘要不同的機率非常高。因此SHA演算法也是FIPS所認證的五種安全雜湊演算法之一。原因有兩點:一是由資訊摘要反推原輸入資訊,從計算理論上來說是極為困難的;二是,想要找到兩組不同的輸入資訊發生資訊摘要碰撞的機率,從計算理論上來說是非常小的。任何對輸入資訊的變動,都有很高的機率導致的資訊摘要大相徑庭。

SHA實際上是一系列演算法的統稱,分別包括:SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。後面4種統稱為SHA-2,事實上SHA-224是SHA-256的縮減版,SHA-384是SHA-512的縮減版。

提一下:MD5摘要長度128bit,SHA-1摘要長度160bit

思想

接收一段明文,然後以一種不可逆的方式將它轉換成一段密文,也可以簡單的理解為輸入一串二進位制碼,並把它們轉化為長度較短、位數固定的輸出序列即雜湊值,也稱為資訊摘要或資訊認證程式碼的過程。

SHA-1演算法輸入報文的最大長度不超過264位,產生的輸出是一個160位的報文摘要。輸入是按512 位的分組進行處理的。SHA-1是不可逆的、防衝突,並具有良好的雪崩效應

處理過程

  • 對輸入資訊進行處理

既然SHA-1演算法是對給定的資訊進行處理得到相應的摘要,那麼首先需要按演算法的要求對資訊進行處理。那麼如何處理呢?對輸入的資訊按512位進行分組並進行填充。如何填充資訊報文呢?其實即使填充報文後使其按512進行分組後,最後正好餘448位。那填充什麼內容呢?就是先在報文後面加一個1,再加很多個0,直到長度滿足對512取模結果為448。到這裡可能有人會奇怪,為什麼非得是448呢?這是因為在最後會附加上一個64位的報文長度資訊,而448+64正好是512。

  • 填充長度
    前面已經說過了,最後會補充資訊報文使其按512位分組後餘448位,剩下的64位就是用來填寫報文的長度資訊的.填充長度值時要注意必須是低位位元組優先。

  • 資訊分組處理
    經過新增位數處理的明文,其長度正好為512位的整數倍,然後按512位的長度進行分組,可以得到一定數量的明文分組,我們用Y0,Y1,……YN-1表示這些明文分組。對於每一個明文分組,都要重複反覆的處理,這些與MD5都是相同的。

    而對於每個512位的明文分組,SHA1將其再分成16份更小的明文分組,稱為子明文分組,每個子明文分組為32位,我們且使用M[t](t= 0, 1,……15)來表示這16個子明文分組。然後需要將這16個子明文分組擴充到80個子明文分組,我們將其記為W[t](t= 0, 1,……79),擴充的具體方法是:當0≤t≤15時,Wt = Mt;當16≤t≤79時,Wt = ( Wt-3 ⊕ Wt-8⊕ Wt-14⊕ Wt-16) <<< 1,從而得到80個子明文分組

  • 初始化快取
    所謂初始化快取就是為連結變數賦初值。SHA-1採用160位的資訊摘要,以32位為計算長度,需要5個連結變數。我們記為A、B、C、D、E。其初始賦值分別為:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476、E = 0xC3D2E1F0

  • 計算資訊摘要
    SHA1有4輪運算,每一輪包括20個步驟,一共80步,最終產生160位的資訊摘要,這160位的摘要存放在5個32位的連結變數中

    在SHA1的4論運算中,雖然進行的就具體操作函式不同,但邏輯過程卻是一致的。首先,定義5個變數,假設為H0、H1、H2、H3、H4,對其分別進行如下操作:
    (A)、將A左移5位與 函式的結果求和,再與對應的子明文分組、E以及計算常數求和後的結果賦予H0。
    (B)、將A的值賦予H1。
    (C)、將B左移30位,並賦予H2。
    (D)、將C的值賦予H3。
    (E)、將D的值賦予H4。
    (F)、最後將H0、H1、H2、H3、H4的值分別賦予A、B、C、D
    這一過程表示如下:在這裡插入圖片描述
    經過4論80步計算後得到的結果,再與各連結變數的初始值求和,就得到了我們最終的資訊摘要。而對於有多個明文分組的,則將前面所得到的結果作為初始值進行下一明文分組的計算,最終計算全部的明文分組就得到了最終的結果

與MD5的區別

  1. 摘要長度不同
    MD5的摘要的長度盡128bit,SHA-1摘要長度160bit。多出32bit意味著什麼呢?不同明文的碰撞機率降低了2^32 = 324294967296倍
  2. 效能略有差別
    SHA-1生成摘要的效能比MD5略低