SHA加密算法
SHA加密算法是一種數(shù)據(jù)加密算法,該算法經(jīng)過加密專家多年來的發(fā)展和改進(jìn)已日益完善,現(xiàn)在已成為公認(rèn)的最安全的散列算法之一,并被廣泛使用。
SHA加密算法原理
接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更?。┟芪?,也可以簡單的理解為取一串輸入碼(稱為預(yù)映射或信息),并把它們轉(zhuǎn)化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認(rèn)證代碼)的過程。
SHA加密算法信息產(chǎn)生摘要的過程
SHA加密算法最大輸入信息長度小于264位,產(chǎn)生的輸出是長164位的信息摘要。輸入按每組512位處理。
第一步、附加添湊位
對信息附加添湊位以便使它的長度等于448(模512)。即使信息已經(jīng)達(dá)到需要的長度,也總是附加添湊位。因此,添湊位的長度范圍是1至512位。添湊位由單個“1”后跟必要數(shù)目的“0”組成。
第二步、附加長度
將一個長64位的數(shù)據(jù)塊附加到信息添湊位后,這個塊被視為一個無符號的64位整數(shù),而且包含了信息在附加添湊位之前的初始長度。
前面兩步的結(jié)果是產(chǎn)生長度為512的整數(shù)倍的信息。用數(shù)字標(biāo)記信息擴(kuò)展后的512位分組序列Y0,Y1...YL-1,于是擴(kuò)展后信息的總長度是LX512位。同樣地,結(jié)果是16個32位字的整數(shù)倍。讓M0,M1...MN-1代表結(jié)果信息字,N為16的整數(shù)倍,因此N=LX16。
第三步、初始化MD緩沖區(qū)
用一個160位的緩沖區(qū)存放哈希函數(shù)的中間結(jié)果和最終結(jié)果。這個緩沖區(qū)用5個32位寄存器(A,B,C,D,E)表示。這些寄存器初始化為如下的16進(jìn)制值(高8位在前):
A=67452301
B=EFCDAB89
C=98BADCFE
D=10325476
E=C3D2E1FO
第四步、處理512位(16字)信息分組
SHA加密算法的核心是一個由80步處理組成的模塊,這個模塊在上圖中標(biāo)記為HSHA,它的邏輯如下圖所示。這80步有相似的結(jié)構(gòu)。
請注意每一層(round)的輸入是當(dāng)前正處理的512位分組YQ和值為ABCDE的160位緩沖區(qū),并在每一層修改緩沖區(qū)的內(nèi)容。再每一層中用到了一個輔助常數(shù)K1,K1只用到4個不同的常數(shù)值。這些值用16進(jìn)制表示如圖所示:
總之,對分組YQ,SHA加密算法以YQ和摘要的中間值MDQ作為輸入。MDQ放在緩沖區(qū)ABCDE中,第80步的輸出與MDQ相加以產(chǎn)生MDQ+1。這個加法是利用模232加法,由緩沖區(qū)5個字中的每一個字單獨地與MDQ中相應(yīng)的字相加完成。
第五步、輸出
當(dāng)所有的L個512位分組處理完后,從L階段的輸出是160位的信息摘要。
在每一層的邏輯中,每一層的形式是:
A,B,C,D,E—[CLS3(A)+FT(B,C,D)+E+WT+KT],A,CLS30(B),C,D
這里,A,B,C,D,E為緩沖區(qū)中的5個字;T代表層或步數(shù)字型,0≤T≤79;FT是一個簡單邏輯函數(shù);CLS3表示循環(huán)左移32位變量S位;WT是從當(dāng)前輸入512位分組中產(chǎn)生出來的;KT是一個輔助常數(shù),用到了4個不同的值;“+”是模232加法。
每個簡單函數(shù)32位輸入,32位輸出。每個函數(shù)執(zhí)行一組“位位置邏輯”操作。也就是說,第N位輸出是第N位3個輸入的函數(shù)。正如你所見到的,只用到了3個不同的函數(shù)。對0≤T≤19,函數(shù)是條件函數(shù):如果B那么C否則D。對20≤T≤39和60≤T≤79,函數(shù)產(chǎn)生奇偶校驗位。對40≤T≤59,如果2個或3個變量值為TRUE,則函數(shù)值為TRUE。
現(xiàn)在剩下的是說明32位字WT如何從512位信息中產(chǎn)生。前16個WT的值直接取當(dāng)前分組產(chǎn)生的16個字。剩下的WT值定義為:WT=WT-16 8 WT-14 8 WT-8 8 WT-3
這樣,在前16層處理中,信息分組產(chǎn)生的輸入由分組中的一個32位字組成。在余下的64層中,輸入由一些信息分組中的字異或而成。
SHA可概述為:
MD0=IV
MDq+1=SUM32(MDq,ABCDEq)
MD=MDl-1
這里,IV為ABCDE緩沖區(qū)中的初始值,在第三步中定義;ABCDE為第Q個信息分組在最后一層處理的輸出;L為信息(包括附加位和長度域)的分組數(shù);SUM32代表輸入的每一對字的獨立的模232加法;MD等于最后的信息摘要值。
小知識之信息摘要:
信息摘要(Message Digest)又稱為數(shù)字摘要(Digital Digest)。它是一個唯一對應(yīng)一個消息或文本的固定長度的值,它由一個單向Hash加密函數(shù)對消息進(jìn)行作用而產(chǎn)生。如果消息在途中改變了,則接收者通過對收到消息的新產(chǎn)生的摘要與原摘要比較,就可知道消息是否被改變了。因此消息摘要保證了消息的完整性。








