目錄
正文本文主要講述使用sha1演算法計算資訊摘要的過程。
安全體系(零)—— 加解密演算法、訊息摘要、訊息認證技術、數字簽名與公鑰證書
安全體系(一)—— des演算法詳解
安全體系(二)——rsa演算法詳解
為保證傳輸資訊的安全,除了對資訊加密外,還需要對資訊進行認證。認證的目的有兩:一是驗證資訊的傳送者是合法的,二是驗證資訊的完整性。hash函式就是進行資訊認證的一種有效手段。
回到頂部
hash函式也稱為雜湊函式或雜湊函式,函式輸入為一可變長度x,輸出為一固定長度串,該串被稱為輸入x的hash值或數字指紋。
因為hash函式是多對一函式,不同的輸入對應著相同的輸出,求其逆是比較難,通過給定的輸入計算hash值必須是很容易,但從hash值逆推輸入則很難,因此也稱hash函式為單向hash函式。
hash函式一般滿足以下幾個基本需求:
1).輸入x可以任意長度
2).輸出資料長度固定
3).容易計算,給定任何x,容易計算出x的hash值
4).單向函式,即給出乙個hash值,很難反向計算出原始輸入的x
5).唯一性,即難以找出兩個不同的輸入會得到相同的hash輸出值
hash值得長度由演算法的型別決定,與輸入的訊息大小無關,一般為128bit或者160bit,即使兩個訊息的差別很小,如僅差別一兩位,其hash函式的運算結果也會截然不同,用同乙個演算法對某一訊息進行hash運算只能獲得唯一確定的hash值。
乙個安全的單向迭代函式是構造安全訊息hash值得核心和基礎,有了好的單向迭代函式,就可以用合適的迭代方法來構造迭代hash函式,hash函式的安全設計的理論主要有以下兩點:一是函式的單向性,二是函式影射的隨機性。常見的hash演算法有md-5、sha等。
回到頂部
sha(security hash algorithm)是美國的nist和nsa設計的一種標準的hash演算法,最初的版本於93年發表,稱為sha-0,因為很快就被發現存在安全隱患,於是在95年就發布第二個版本sha-1。02年,nist分別發布了sha-256、sha-384、sha-512,這些演算法統稱sha-2。08年又新增了sha-224。目前sha-2各版本已成為主流。
這裡以sha1為例來進行sha演算法的講解,其他系列原理類似。sha1的特性有:
1).不能使用訊息摘要復原資訊;
2).不同的訊息產生不同的訊息摘要。
回到頂部
sha1把訊息當做位(bit)字串進行處理。最小單位稱為位,8位組成乙個位元組,兩個位元組組成乙個字。
例如,字串「abc」轉換成位字串是01100001 01100010 01100011,轉換成16進製制字串是 0x616263。
下面的邏輯運算子作用於「字」
x^y = x, y邏輯與
x \/ y = x, y邏輯或
x xor y= x, y邏輯異或
~x = x邏輯取反
x+y的定義:字 x 和 y 代表兩個整數 x 和y, 其中 0 <= x < 2^32 且 0 <= y < 2^32. 令整數z = (x + y) mod 2^32. 這時候 0 <= z < 2^32. 將z轉換成字z, 那麼就是 z = x + y.
迴圈左移位操作符sn(x):x是乙個字,n是乙個整數,0<=n<=32。sn(x) = (x<>32-n)。這個很容易理解了,比如x=11111111 00000001 00000001 00000000,n=5,則sn(x)=11100000001 00000001 00000000 11111。
x>n定義:拋棄右邊的n位,將各個位依次向右移動n位,然後在左邊的n位填0。
回到頂部
因為sha1演算法只接受位作為輸入,所以進行計算前必須把原始訊息(比如字串、檔案等)轉換成位字串。
比如,對字串「abc」產生訊息摘要,『a』=97 『b』=98 『c』=99,先轉換成24位的字串:01100001 01100010 01100011
訊息必須進行補位,使其長度在對512取模以後的餘數是448,即(補位後的訊息長度)%512 = 448。
對訊息進行補位時,先在後面補乙個1,如果不滿足要求,再補0直到滿足對512取模餘數為448。這就意味著,補位至少補一位(原訊息位數為512n+447),最多補512位(原訊息位數為512n+448)。
還是以前面的「abc」為例顯示補位的過程:
原始資訊: 01100001 01100010 01100011
補位第一步,首先補乙個1:01100001 01100010 011000111
可以確定的是,如果用乙個位元組來表示乙個字元,補1之後肯定不滿足條件,仍需繼續補位。
補位第二步,後面補0直到總長度對512取模餘數為448,這裡補423個0,使總長度達到為448:
01100001 01100010 01100011
1000…..00
補位完成後的資料轉換為16進製制:
616263
80 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
從16進製制資料裡可以看到,我們也可以直接採用16進製制的方式進行補位,我們先補80,看是否滿足長度對64取餘的結果為56,不滿足則繼續補0。
大家可以自己考慮一下為什麼可以補80。
4.3 附加長度資訊
這一步中,要將原始訊息(沒有進行補位操作之前)的長度(二進位制位數)附加到已經補位的訊息之後。
通常用乙個64位的資料來表示原始訊息的長度。如果訊息長度不大於2^64,那麼第乙個字就是0。
補長度的操作以後,整個訊息(16進製制)如下:
616263
80 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
00000000 00000018
然後,將整個訊息拆分為乙個乙個的512位的資料塊m1,m2,…,mn,然後分別對每乙個資料塊mi (1≤i≤n)做處理,得到訊息摘要。
注意,這裡是64位,上一步補位後的長度是512k+448,k≥0,這樣,512k+448+64=512(k+1),恰好可以被512整除。
在我們舉得例子裡,一共只有512位,因此做為乙個資料塊進行處理。
一系列的常量字k(0), k(1), ... , k(79),如果以16進製制給出,它們如下:
kt = 0x5a827999 (0 <= t <= 19)
kt = 0x6ed9eba1 (20 <= t <= 39)
kt = 0x8f1bbcdc (40 <= t <= 59)
kt = 0xca62c1d6 (60 <= t <= 79)
在sha1中我們需要一系列的函式。每個函式ft (0 <= t <= 79)都操作32位字b,c,d並且產生32位字作為輸出。ft(b,c,d)可以如下定義
ft(b,c,d) = (b and c) or ((not b) and d) ( 0 <= t <= 19)
ft(b,c,d) = b xor c xor d (20 <= t <= 39)
ft(b,c,d) = (b and c) or (b and d) or (c and d) (40 <= t <= 59)
ft(b,c,d) = b xor c xor d (60 <= t <= 79)
使用進行了補位和補長度後的訊息來計算訊息摘要。
計算需要的緩衝區:
1).兩個都由5個32位的字組成緩衝區buf1和buf2, buf1的5個32位緩衝區被標識為a,b,c,d,e,buf2的5個32位緩衝區被標識為h0,h1,h2,h3,h4。
2).乙個80個32位字的緩衝區buf3,按照32位劃分,依次被標識為w0, w1,..., w79。
3).乙個1個字的temp緩衝區。
計算訊息摘要:
在3.2中,我們把補位之後的資料附加了長度資訊,然後劃分為乙個乙個的512位(16個字)的資料塊m1,m2,…,mn,這裡會依次對每個資料塊mi (1≤i≤n)做處理。
在處理每個資料塊mi (1≤i≤n)之前,先將緩衝區h0,h1,h2,h3,h4 初始化為下面的值(16進製制):
h0 = 0x67452301
h1 = 0xefcdab89
h2 = 0x98badcfe
h3 = 0x10325476
h4 = 0xc3d2e1f0.
接下來處理 mi(1≤i≤n),步驟如下:
1). 將每個mi 分成 16 個字(每個字32位) w0, w1, ... , w15, w0 是最左邊的字;
n個mi就劃分之後,就變成w0,w1,…,w15,w16,…,w31,w32,…w79;
2). 對於 t = 16 到 79 令 wt = s1(wt-3 xor wt-8 xor wt- 14 xor wt-16);
3). 令 a = h0, b = h1, c = h2, d = h3, e = h4;
4) 對於 t = 0 到 79,執行下面的迴圈
temp = s5(a) + ft(b,c,d) + e + wt + kt;
e = d;
d = c;
c = s30(b);
b = a;
a = temp;
5). 令 h0 = h0 + a, h1 = h1 + b, h2 = h2 + c, h3 = h3 + d, h4 = h4 + e.
在處理完所有的 mi(1≤i≤n) 後,會得到乙個160位(5個32位字)的字串訊息摘要h0 h1 h2 h3 h4
。
Sha 1演算法詳解
一 hash函式和訊息完整性 二 常見的hash函式 三 sha 1演算法實現的基本步驟 1 將訊息摘要轉換成位字串 01100001 01100010 01100011 2 對轉換後的位字串進行補位操作 初始的資訊摘要 01100001 01100010 01100011 第一步補位 011000...
SHA1演算法實現及詳解
1 sha1演算法簡介 安全雜湊演算法 secure hash algorithm 主要適用於數字簽名標準 digital signature standard dss 裡面定義的數字簽名演算法 digital signature algorithm dsa 對於長度小於2 64位的訊息,sha1會...
安全體系(二) RSA演算法詳解
正文 本文主要講述rsa演算法使用的基本數學知識 秘鑰的計算過程以及加密和解密的過程。安全體系 零 加解密演算法 訊息摘要 訊息認證技術 數字簽名與公鑰證書 安全體系 一 des演算法詳解 安全體系 三 sha1演算法詳解 回到頂部 rsa公鑰加密演算法是1977年由羅納德 李維斯特 ron riv...