1.簡介
美國國家標準與技術學會和nsa開發了安全雜湊演算法(secure hash algorithm,sha)。sha可以處理長度在2
642^
264以內的任何輸入訊息。sha的輸出是訊息摘要,長度為160位(比md5的訊息摘要多32位)。sha中的安全利用了兩個特性,在計算上保證下列情況的不可行:
(1)根據訊息摘要取得初始訊息;
(2)尋找兩個訊息,產生相同訊息摘要。
2.sha工作原理
2.1 填充
和md5一樣,sha的第一步是在初始訊息末尾進行填充,使訊息長度為512的倍數少64位。和md5一樣,填充總是增加,即使訊息長度已經是比512的倍數少64。
2.2 新增長度
計算不包括填充的訊息長度,用64位塊加到填充後面。
2.3 將輸入分為512位塊
將輸入分為512位塊,這些塊稱為訊息摘要處理邏輯的輸入。
2.4 初始化鏈結變數
初始化5個鏈結變數a~ e,記住,md5中為4個32位的鏈結變數,總長度為128位,中間結果和最終結果存放在這些鏈結變數構成的組合暫存器abcd中。sha要產生的訊息摘要為160位,因此要有5個鏈結變數,總長度為160位。sha中變數a到d的值與md5中相同,e初始化的c3 d2 e1 f0(十六進製制)。
2.5 處理塊
第一步:將鏈結變數a~ e複製到變數a~ e中,a~ e組合成暫存器abcde,儲存中間結果和最終結果。
第二步:將當前512位塊分解為16個子塊,每個子塊為32位。
第三步:sha共4輪,每一輪20步。每一輪的3個輸入為當前512位塊、暫存器abcde和常量k,其中t為0~ 79。然後用sha演算法步驟更新暫存器abcde內容。另外,md5中的t定義64個常量,而這裡的k之定義4個常量,每一輪用乙個。k的值如下表所示:
輪次t值範圍
k[t]的十六進製制值
k[t]的十進位制值(只顯示整數部分)
11~19
5a 92 79 99
2 30×
22^\times \sqrt2
230×2
220~39
6e d9 eb a1
2 30×
32^\times \sqrt3
230×3
340~59
9f 1b bc dc
2 30×
52^\times \sqrt5
230×5
460~79
ca 62 c1 d6
2 30×
102^\times \sqrt
230×10
第四步:sha共4輪,每輪20次迭代,共80次。一次sha迭代的邏輯操作如下圖所示:
一次sha迭代的數學表示如下:
a bc
de=(
e+pr
oces
sp+s
5(a)
+w+k
),a,
s30(b
),c,
dabcde=(e+process p +s^5(a)+w+k),a,s^(b),c,d
abcde=
(e+p
roce
ssp+
s5(a
)+w[
]+k[
]),a
,s30
(b),
c,d其中abcde位5個變數a、b、c、d、e構成的暫存器;process p(處理p)位邏輯操作;sts^
st將32位子塊迴圈左移t位;w從當前32位子塊求出的32位值;k為5個常量之一。
注意,它與md5相似,只是有小改動,使sha比md5更複雜。下面介紹處理p和w的含義,下表顯示了每一輪的sha-1中的處理p:
輪次處理p
1(b and c) or ((not b) and (d))
2b xor c xor d
3(b and c) or (b and d) or (c and d))
4b xor c xor d
w[t]的值計算如下:
對w的前16個字(t=0~15),輸入訊息子塊m[t]的內容變成w[t]內容,即把輸入訊息m的前16塊複製到w。w的其餘值用下列方程求出:
w [t
]=s1
(w[t
−16]x
orw[
t−14]
xorw
[t−8
]xor
t[t−
3])w[t]=s^1(w[t-16]\quad xor\quad w[t-14] \quad xor\quad w[t-8] \quad xor\quad t[t-3])
w[t]=s
1(w[
t−16
]xor
w[t−
14]x
orw[
t−8]
xort
[t−3
])3.比較md5與sha-1
md5與sha-1都基於md4演算法,因此可以進行比較,兩者的差別如下表所示:
特性md5
sha-1
訊息摘要長度(位)
128160
根據訊息摘要尋找初始訊息所需的操作
2
1282^
2128次2
1602^
2160
次尋找產生相同訊息摘要的兩個訊息所需的操作
2
642^
264次
2
802^
280次
目前攻擊情況
一定程度沒有
還沒有速度塊慢
軟體實現
簡單,不需要大程式和複雜**
簡單,不需要大程式和複雜**
4.sha-1的安全性
nist尋找了更安全的sha版本,出現了如下版本:2023年,nist在標準文件fips 1802中提供了另乙個新的sha版本,稱為sha-256、sha-384和sha-512,其後面的數字表示為訊息摘要的長度(以位為單位),下表歸納了不同的sha版本:
引數sha-1
sha-256
sha-384
sha-512
訊息摘要長度
160256
384512
訊息長度
<264
<2^
<26
4<264
<2^
<26
4<
2128
<2^
<21
28<
2128
<2^
<21
28塊大小512
5121024
1024
詞大小32
3264
64演算法所需步驟
8064
8080
密碼雜湊安全
hash,一般翻譯做 雜湊 也有直接音譯為 雜湊 的,就是把任意長度的輸入 又叫做預對映 通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。通過對密碼進行雜湊處理,然後再儲存到資料庫中,這樣就使得攻擊者無法直接獲取原始密碼,同時還可以保證你的應用可以對原始密碼進行相同的雜湊處理,然後比對雜湊結...
查詢演算法 雜湊演算法,雜湊表查詢
那麼問題來了,如果集合s中同時存在值k 16和值k 27,我們該如何將兩個位址一樣的值存入雜湊表呢?常用的雜湊函式 處理衝突的方法 2.連位址法 雜湊表涉及的是一種對映關係,可以根據某個值查詢到關鍵字的位址,這樣的做法省去了比較的時間,優化了演算法。雜湊表是把值 關鍵字 存到跟它具有 唯一 對映的格...
簽名與加密安全技術基礎(一) 雜湊演算法
一 hash 演算法 著名的hash 演算法,md5 和sha1 可以說是目前應用最廣泛的 hash 演算法,而它們都是以 md4為基礎設計的。那麼他們都有什麼用途呢?雜湊演算法 有如下特性 1 不可以從 訊息摘要 中復原資訊 2 兩個不同的訊息不會產生同樣的訊息摘要 1.1 md5 演算法md5 ...