3個著名加密算法(MD5、RSA、DES)的解析

MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。
    MD5將任意長度的“字節串”變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因爲原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

    MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。
    MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的, 用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較,而系統並不“知道”用戶的密碼是什麼。

RSA是第一個既能用於數據加密也能用於數字簽名的算法。它易於理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。 

DES算法 
美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,於1973年5月15日和1974年8月27日先後兩次向公衆發出了徵求加密算法的公告。 1977年1月,美國政府頒佈:採納IBM公司設計的方案作爲非機密數據的正式數據加密標準(DES?Data Encryption Standard)。 

1.加密算法之MD5算法

在一些初始化處理後,MD5以512位分組來處理輸入文本,每一分組又劃分爲16個32位子分組。算法的輸出由四個32位分組組成,將它們級聯形成一個128位散列值。 
首先填充消息使其長度恰好爲一個比512位的倍數僅小64位的數。填充方法是附一個1在消息後面,後接所要求的多個0,然後在其後附上64位的消息長度(填充前)。這兩步的作用是使消息長度恰好是512位的整數倍(算法的其餘部分要求如此),同時確保不同的消息在填充後不相同。 
四個32位變量初始化爲: 
A=0x01234567 
B=0x89abcdef 
C=0xfedcba98 
D=0x76543210 
它們稱爲鏈接變量(chaining variable) 
接着進行算法的主循環,循環的次數是消息中512位消息分組的數目。 
將上面四個變量複製到別外的變量中:A到a,B到b,C到c,D到d。 
主循環有四輪(MD4只有三輪),每輪很相擬。第一輪進行16次操作。每次操作對a,b,c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變量,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a,b,c或d中之一。最後用該結果取代a,b,c或d中之一。 
以一下是每次操作中用到的四個非線性函數(每輪一個)。 
F(X,Y,Z)=(X&Y)|((~X)&Z) 
G(X,Y,Z)=(X&Z)|(Y&(~Z)) 
H(X,Y,Z)=X^Y^Z 
I(X,Y,Z)=Y^(X|(~Z)) 
(&是與,|是或,~是非,^是異或) 
這些函數是這樣設計的:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。 
函數F是按逐位方式操作:如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。 
設Mj表示消息的第j個子分組(從0到15),<<< s表示循環左移s位,則四種操作爲: 
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<< s) 
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<< s) 
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<< s) 
II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<< s) 
這四輪(64步)是: 
第一輪 
FF(a,b,c,d,M0,7,0xd76aa478) 
FF(d,a,b,c,M1,12,0xe8c7b756) 
FF(c,d,a,b,M2,17,0x242070db) 
FF(b,c,d,a,M3,22,0xc1bdceee) 
FF(a,b,c,d,M4,7,0xf57c0faf) 
FF(d,a,b,c,M5,12,0x4787c62a) 
FF(c,d,a,b,M6,17,0xa8304613) 
FF(b,c,d,a,M7,22,0xfd469501) 
FF(a,b,c,d,M8,7,0x698098d8) 
FF(d,a,b,c,M9,12,0x8b44f7af) 
FF(c,d,a,b,M10,17,0xffff5bb1) 
FF(b,c,d,a,M11,22,0x895cd7be) 
FF(a,b,c,d,M12,7,0x6b901122) 
FF(d,a,b,c,M13,12,0xfd987193) 
FF(c,d,a,b,M14,17,0xa679438e) 
FF(b,c,d,a,M15,22,0x49b40821) 
第二輪 
GG(a,b,c,d,M1,5,0xf61e2562) 
GG(d,a,b,c,M6,9,0xc040b340) 
GG(c,d,a,b,M11,14,0x265e5a51) 
GG(b,c,d,a,M0,20,0xe9b6c7aa) 
GG(a,b,c,d,M5,5,0xd62f105d) 
GG(d,a,b,c,M10,9,0x02441453) 
GG(c,d,a,b,M15,14,0xd8a1e681) 
GG(b,c,d,a,M4,20,0xe7d3fbc8) 
GG(a,b,c,d,M9,5,0x21e1cde6) 
GG(d,a,b,c,M14,9,0xc33707d6) 
GG(c,d,a,b,M3,14,0xf4d50d87) 
GG(b,c,d,a,M8,20,0x455a14ed) 
GG(a,b,c,d,M13,5,0xa9e3e905) 
GG(d,a,b,c,M2,9,0xfcefa3f8) 
GG(c,d,a,b,M7,14,0x676f02d9) 
GG(b,c,d,a,M12,20,0x8d2a4c8a) 
第三輪 
HH(a,b,c,d,M5,4,0xfffa3942) 
HH(d,a,b,c,M8,11,0x8771f681) 
HH(c,d,a,b,M11,16,0x6d9d6122) 
HH(b,c,d,a,M14,23,0xfde5380c) 
HH(a,b,c,d,M1,4,0xa4beea44) 
HH(d,a,b,c,M4,11,0x4bdecfa9) 
HH(c,d,a,b,M7,16,0xf6bb4b60) 
HH(b,c,d,a,M10,23,0xbebfbc70) 
HH(a,b,c,d,M13,4,0x289b7ec6) 
HH(d,a,b,c,M0,11,0xeaa127fa) 
HH(c,d,a,b,M3,16,0xd4ef3085) 
HH(b,c,d,a,M6,23,0x04881d05) 
HH(a,b,c,d,M9,4,0xd9d4d039) 
HH(d,a,b,c,M12,11,0xe6db99e5) 
HH(c,d,a,b,M15,16,0x1fa27cf8) 
HH(b,c,d,a,M2,23,0xc4ac5665) 
第四輪 
II(a,b,c,d,M0,6,0xf4292244) 
II(d,a,b,c,M7,10,0x432aff97) 
II(c,d,a,b,M14,15,0xab9423a7) 
II(b,c,d,a,M5,21,0xfc93a039) 
II(a,b,c,d,M12,6,0x655b59c3) 
II(d,a,b,c,M3,10,0x8f0ccc92) 
II(c,d,a,b,M10,15,0xffeff47d) 
II(b,c,d,a,M1,21,0x85845dd1) 
II(a,b,c,d,M8,6,0x6fa87e4f) 
II(d,a,b,c,M15,10,0xfe2ce6e0) 
II(c,d,a,b,M6,15,0xa3014314) 
II(b,c,d,a,M13,21,0x4e0811a1) 
II(a,b,c,d,M4,6,0xf7537e82) 
II(d,a,b,c,M11,10,0xbd3af235) 
II(c,d,a,b,M2,15,0x2ad7d2bb) 
II(b,c,d,a,M9,21,0xeb86d391) 
常數ti可以如下選擇: 
在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。 
(2的32次方) 
所有這些完成之後,將A,B,C,D分別加上a,b,c,d。然後用下一分組數據繼續運行算法,最後的輸出是A,B,C和D的級聯。 
MD5的安全性 

MD5相對MD4所作的改進: 
1.增加了第四輪. 
2.每一步均有唯一的加法常數. 
3.爲減弱第二輪中函數G的對稱性從(X&Y)|(X&Z)|(Y&Z)變爲(X&Z)|(Y&(~Z)) 
4.第一步加上了上一步的結果,這將引起更快的雪崩效應. 
5.改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似. 
6.近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應.各輪的位移量互不相同.

2.加密算法之RSA算法

  它是第一個既能用於數據加密也能用於數字簽名的算法。它易於理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。 

一、RSA算法 : 

首先, 找出三個數, p, q, r, 
其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數...... 
p, q, r 這三個數便是 private key 

接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)..... 
這個 m 一定存在, 因爲 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了..... 
再來, 計算 n = pq....... 
m, n 這兩個數便是 public key 

編碼過程是, 若資料爲 a, 將其看成是一個大整數, 假設 a < n.... 
如果 a >= n 的話, 就將 a 表成 s 進位 (s <= n, 通常取 s = 2^t), 
則每一位數均小於 n, 然後分段編碼...... 
接下來, 計算 b == a^m mod n, (0 <= b < n), 
b 就是編碼後的資料...... 

解碼的過程是, 計算 c == b^r mod pq (0 <= c < pq), 
於是乎, 解碼完畢...... 等會會證明 c 和 a 其實是相等的 

如果第三者進行竊聽時, 他會得到幾個數: m, n(=pq), b...... 
他如果要解碼的話, 必須想辦法得到 r...... 
所以, 他必須先對 n 作質因數分解......... 
要防止他分解, 最有效的方法是找兩個非常的大質數 p, q, 
使第三者作因數分解時發生困難......... 

<定理> 
若 p, q 是相異質數, rm == 1 mod (p-1)(q-1), 
a 是任意一個正整數, b == a^m mod pq, c == b^r mod pq, 
則 c == a mod pq 

證明的過程, 會用到費馬小定理, 敘述如下: 
m 是任一質數, n 是任一整數, 則 n^m == n mod m 
(換另一句話說, 如果 n 和 m 互質, 則 n^(m-1) == 1 mod m) 
運用一些基本的羣論的知識, 就可以很容易地證出費馬小定理的........ 

<證明> 
因爲 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整數 
因爲在 modulo 中是 preserve 乘法的 
(x == y mod z and u == v mod z => xu == yv mod z), 
所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq 

1. 如果 a 不是 p 的倍數, 也不是 q 的倍數時, 
則 a^(p-1) == 1 mod p (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod p 
a^(q-1) == 1 mod q (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod q 
所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 
即 a^(k(p-1)(q-1)) == 1 mod pq 
=> c == a^(k(p-1)(q-1)+1) == a mod pq 

2. 如果 a 是 p 的倍數, 但不是 q 的倍數時, 
則 a^(q-1) == 1 mod q (費馬小定理) 
=> a^(k(p-1)(q-1)) == 1 mod q 
=> c == a^(k(p-1)(q-1)+1) == a mod q 
=> q | c - a 
因 p | a 
=> c == a^(k(p-1)(q-1)+1) == 0 mod p 
=> p | c - a 
所以, pq | c - a => c == a mod pq 

3. 如果 a 是 q 的倍數, 但不是 p 的倍數時, 證明同上 

4. 如果 a 同時是 p 和 q 的倍數時, 
則 pq | a 
=> c == a^(k(p-1)(q-1)+1) == 0 mod pq 
=> pq | c - a 
=> c == a mod pq 
Q.E.D. 

這個定理說明 a 經過編碼爲 b 再經過解碼爲 c 時, a == c mod n (n = pq).... 
但我們在做編碼解碼時, 限制 0 <= a < n, 0 <= c < n, 
所以這就是說 a 等於 c, 所以這個過程確實能做到編碼解碼的功能..... 

二、RSA 的安全性 

RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因爲沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成爲大數分解算法。目前, RSA 的一些變種算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現在,人們已能分解多個十進制位的大素數。因此,模數n 必須選大一些,因具體適用情況而定。 

三、RSA的速度 

由於進行的都是大數計算,使得RSA最快的情況也比DES慢上倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。 

四、RSA的選擇密文攻擊 

RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下僞裝( Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構: 

( XM )^d = X^d *M^d mod n 

前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction 對文檔作HASH處理,或同時使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。 

五、RSA的公共模數攻擊 

若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P爲信息明文,兩個加密密鑰爲e1和e2,公共模數是n,則: 

C1 = P^e1 mod n 

C2 = P^e2 mod n 

密碼分析者知道n、e1、e2、C1和C2,就能得到P。 

因爲e1和e2互質,故用Euclidean算法能找到r和s,滿足: 

r * e1 + s * e2 = 1 

假設r爲負數,需再用Euclidean算法計算C1^(-1),則 

( C1^(-1) )^(-r) * C2^s = P mod n 

另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它成對的e’和d’,而無需分解模數。解決辦法只有一個,那就是不要共享模數n。 

RSA的小指數攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度有 
所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。 

RSA算法是第一個能同時用於加密和數字簽名的算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸爲人們接受,普遍認爲是目前最優秀的公鑰方案之一。RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。 RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,爲保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。目前,SET( Secure Electronic Transaction )協議中要求CA採用比特長的密鑰,其他實體使用比特的密鑰。

3.加密算法之DES算法

一、DES算法 

  美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,於1973年5月15日和1974年8月27日先後兩次向公衆發出了徵求加密算法的公告。加密算法要達到的目的(通常稱爲DES 密碼算法要求)主要爲以下四點: ☆提供高質量的數據保護,防止數據未經授權的泄露和未被察覺的修改; 

☆具有相當高的複雜性,使得破譯的開銷超過可能獲得的利益,同時又要便於理解和掌握; 

☆DES密碼體制的安全性應該不依賴於算法的保密,其安全性僅以加密密鑰的保密爲基礎; 

☆實現經濟,運行有效,並且適用於多種完全不同的應用。 

1977年1月,美國政府頒佈:採納IBM公司設計的方案作爲非機密數據的正式數據加密標準(DES?Data Encryption Standard)。 

  目前在國內,隨着三金工程尤其是金卡工程的啓動,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收費站等領域被廣泛應用,以此來實現關鍵數據的保密,如信用卡持卡人的PIN的加密傳輸,IC卡與POS間的雙向認證、金融交易數據包的MAC校驗等,均用到DES算法。 
  DES算法的入口參數有三個:Key、Data、Mode。其中Key爲8個字節共64位,是DES算法的工作密鑰;Data也爲8個字節64位,是要被加密或被解密的數據;Mode爲DES的工作方式,有兩種:加密或解密。 
  DES算法是這樣工作的:如Mode爲加密,則用Key 去把數據Data進行加密, 生成Data的密碼形式(64位)作爲DES的輸出結果;如Mode爲解密,則用Key去把密碼形式的數據Data解密,還原爲Data的明碼形式(64位)作爲DES的輸出結果。在通信網絡的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然後以密碼形式在公共通信網(如電話網)中傳輸到通信網絡的終點,數據到達目的地後,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。 
  通過定期在通信網絡的源端和目的端同時改用新的Key,便能更進一步提高數據的保密性,這正是現在金融交易網絡的流行做法。 
  DES算法詳述 
  DES算法把64位的明文輸入塊變爲64位的密文輸出塊,它所使用的密鑰也是64位,整個算法的主流程圖如下: 
其功能是把輸入的64位數據塊按位重新組合,並把輸出分爲L0、R0兩部分,每部分各長32位,其置換規則見下表: 
58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4, 
  62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 
  57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3, 
  61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7, 
  即將輸入的第58位換到第一位,第50位換到第2位,...,依此類推,最後一位是原來的第7位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0 是右32位,例:設置換前的輸入值爲D1D2D3......D64,則經過初始置換後的結果爲:L0=D58D50...D8;R0=D57D49...D7。 
  經過16次迭代運算後。得到L16、R16,將此作爲輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算,例如,第1位經過初始置換後,處於第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規則如下表所示: 
  40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 
  38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 
  36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 
  34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25, 
放大換位表 
  32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11, 
  12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21, 
  22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1, 
單純換位表 
  16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 
  2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, 
  在f(Ri,Ki)算法描述圖中,S1,S2...S8爲選擇函數,其功能是把6bit數據變爲4bit數據。下面給出選擇函數Si(i=1,2......的功能表: 
選擇函數Si 
S1: 
  14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 
  0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 
  4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 
  15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 
S2: 
  15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 
  3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 
  0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 
  13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 
S3: 
  10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 
  13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 
  13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 
  1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 
S4: 
  7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 
  13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 
  10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 
  3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 
S5: 
  2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 
  14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 
  4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 
  11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 
S6: 
  12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 
  10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 
  9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 
  4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, 
S7: 
  4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 
  13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 
  1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 
  6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 
S8: 
  13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 
  1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 
  7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 
  2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11, 
在此以S1爲例說明其功能,我們可以看到:在S1中,共有4行數據,命名爲0,1、2、3行;每行有16列,命名爲0、1、2、3,......,14、15列。 
  現設輸入爲: D=D1D2D3D4D5D6 
令:列=D2D3D4D5 
  行=D1D6 
  然後在S1表中查得對應的數,以4位二進制表示,此即爲選擇函數S1的輸出。下面給出子密鑰Ki(48bit)的生成算法 
  從子密鑰Ki的生成算法描述圖中我們可以看到:初始Key值爲64位,但DES算法規定,其中第8、16、......64位是奇偶校驗位,不參與DES運算。故Key 實際可用位數便只有56位。即:經過縮小選擇換位表1的變換後,Key 的位數由64 位變成了56位,此56位分爲C0、D0兩部分,各28位,然後分別進行第1次循環左移,得到C1、D1,將C1(28位)、D1(28位)合併得到56位,再經過縮小選擇換位2,從而便得到了密鑰K0(48位)。依此類推,便可得到K1、K2、......、K15,不過需要注意的是,16次循環左移對應的左移位數要依據下述規則進行: 
循環左移位數 
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 
  以上介紹了DES算法的加密過程。DES算法的解密過程是一樣的,區別僅僅在於第一次迭代時用子密鑰K15,第二次K14、......,最後一次用K0,算法本身並沒有任何變化。 

二、DES算法理論圖解 

DES的算法是對稱的,既可用於加密又可用於解密。下圖是它的算法粗框圖。其具體運算過程有如下七步。 
<缺:找到補上> 

三、DES算法的應用誤區  

  DES算法具有極高安全性,到目前爲止,除了用窮舉搜索法對DES算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間爲256,這意味着如果一臺計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨着科學技術的發展,當出現超高速計算機後,我們可考慮把DES密鑰的長度再增長一些,以此來達到更高的保密程度。 
  由上述DES算法介紹我們可以看到:DES算法中只用到64位密鑰中的其中56位,而第8、16、24、......64位8個位並未參與DES運算,這一點,向我們提出了一個應用上的要求,即DES的安全性是基於除了8,16,24,......64位外的其餘56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24,......64位作爲有效數據位,而使用其它的56位作爲有效數據位,才能保證DES算法安全可靠地發揮作用。如果不瞭解這一點,把密鑰Key的8,16,24,..... .64位作爲有效數據使用,將不能保證DES加密數據的安全性,對運用DES來達到保密作用的系統產生數據被破譯的危險,這正是DES算法在應用上的誤區,留下了被人攻擊、被人破譯的極大隱患。

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