常用的加解密技術(3)

【分組密碼算法分析,改進】

序:這是我花了近2周的時間寫的,可以說比較全面地介紹了各種分組密碼、如DES算法、IDEA算法,其中最爲寶貴的一部分是最後AES新推薦的算法Rijndael,它是今年10月份美國國家標準和技術研究所剛剛推出的分組密碼算法,目前美國官方還沒有正式發佈此標準,但基本上已有定奪。

前言

數據加密作爲一項基本技術是所有通信安全的基石。數據加密過程是由形形色色的加密算法來具體實施,它以很小的代價提供很大的安全保護。在多數情況下,數據加密是保證信息機密性的唯一方法。據不完全統計,到目前爲止,已經公開發表的各種加密算法多達數百種。如果按照收發雙方密鑰是否相同來分類,可以將這些加密算法分爲常規密碼算法和公鑰密碼算法,兩種算法最有名的代表分別爲DES和RSA。粗略地講,分組密碼是用一個固定的變換對一個比較大的明文數組進行操作。本文將對分組密碼進行詳細的介紹。

分組密碼

分組密碼即對固定長度的一組明文進行加密的算法。它將明文按一定的位長分組,明文組和密鑰組的全部經過加密運算得到密文組。解密時密文組和密鑰組經過解密運算(加密運算的逆運算),還原成明文組。

分組密碼的特點是:密鑰可以在一定時間內固定,不必每次變換,因此給密鑰配發帶來了方便。但是,由於分組密碼存在着密文傳輸錯誤在明文中擴散的問題,因此在信道質量較差的情況下無法使用。

分組密碼其中最著名的兩個分組密碼即DES(Data Encryption Standard) 數據加密標準和IDEA(International Data Encryption Algorithm)國際數據加密算法。

術語和符號

一個分組密碼有兩個重要的參數:一個是密鑰的大小,稱作密鑰長度;另一個是每次操作的組的大小,稱作分組長度。

被變換的數據稱作明文,變換後的數據稱作密文。

將明文變換成密文的過程稱作加密,其逆過程,即由密文恢復出原明文的過程稱作解密。密鑰是由希望通信的雙方選擇的一些祕密信息。

通信雙方的密鑰可能一樣,也可能不一樣,我們把前者稱作對稱密碼,後者稱作非對稱密碼。該報告限於介紹對稱的分組密碼。將明文變換成密文時所採用的一組規則稱作加密算法,由密文恢復出原明文時所採用的一組規則稱作解密算法。加密和解密算法通常是在密鑰控制下進行的。

在密鑰K控制之下的加密算法E記爲E_K,明文消息m對應的密文記爲E_K(m)。類似地,在密鑰K控制之下的解密算法D記爲D_K,密文消息c對的明文記爲D_K(c)。顯然,對所有的明文m,都有D_K(E_K(m))=m。

分組密碼-DES

DES密碼算法的產生及發展

DES密碼是1977年由美國國家標準局公佈的第一個分組密碼。

20世紀五十年代,密碼學研究領域出現了最具代表性的兩大成就。其中之一就是1971年美國學者塔奇曼(Tuchman)和麥耶(Meyer)根據信息論創始人香農(Shannon)提出的"多重加密有效性理論"創立的,後於1977年由美國國家標準局頒佈的數據加密標準DES。

爲了實現同一水平的安全性和兼容性,爲此美國商業部所屬國家標準局(ANBS)於1972年開始了一項計算機數據保護標準的發展規則。於1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,爲了建立適用於計算機系統的商用密碼,於1973年5月和1974年8月先後兩次向公衆發出了徵求加密算法的公告。1973年5月13日的聯邦記錄(FR1973)中的公告,徵求在傳輸和存儲數據中保護計算機數據的密碼算法的建議,這一舉措最終導致了數據加密標準(DES)算法的研製。徵求的加密算法要達到的目的(通常稱爲DES 密碼算法要求)主要爲以下四點:

提供高質量的數據保護,防止數據未經授權的泄露和未被察覺的修改;
具有相當高的複雜性,使得破譯的開銷超過可能獲得的利益,同時又要便於理解和掌握;
DES密碼體制的安全性應該不依賴於算法的保密,其安全性僅以加密密鑰的保密爲基礎;
實現經濟,運行有效,並且適用於多種完全不同的應用。
在徵得的算法中,IBM公司提出的算法lucifer中選。DES密碼實際上是Lucifer密碼的進一步發展。它是一種採用傳統加密方法的分組密碼。1975年3月17日,ANBS向社會公佈了此算法,首次公佈在聯邦記錄中,以求得公衆的評論。1977年1月正式向社會公佈,採納IBM公司設計的方案作爲非機密數據的正式數據加密標準(DES-Data Encryption Standard)。成爲美國聯邦信息處理標準,即FIPS-46,同年7月15日開始生效。

隨後DES的應用範圍迅速擴大到涉及美國以外的公司、甚至某些美國軍事部門也使用了DES,引起了美國國家安全局的憂慮。因此,里根總統曾於1984年9月簽署了一項命令,即NSDD-145號命令,下令責成美國防部的國家安全局負責組織、研製一種新的數據加密標準CCEP(CommercialCommunication SecurityEndorsement)商用通信安全保證程序於1988年取代DES。後來由於遭到整個最大的金融界用戶以其不符合他們的要求爲由的強烈反對,美國政府在其國會的壓力下才撤銷了里根這個NSDD-145號命令。

DES自1977年由美國國防部採用,它的標準ANSI X.3.92和X3.106標準中都有說明。因爲擔心這種方法被敵對國使用,美國政府不允許出口此種算法的加密軟件,但是要想找到這種軟件也不難,在各地的BBS上都會有。

每隔五年由美國國家保密局(NSA)對DES作出評估,並重新批准它是否繼續作爲聯邦加密標準。

DES簡介

數據加密標準(DES)是一種世界範圍之內廣泛使用的以密鑰作爲加密方法的加密手段,被美國政府確定是很難破譯的,因此也被美國政府作爲限制出口的一種技術。在此標準下有72,000,000,000,000,000(72Q)多種密鑰可供使用。對於每條給定的信息,密鑰在這72Q個密鑰中隨機選擇。與其它的加密方法一樣,加密方和解密方必須使用相同的密鑰,所以DES算法也屬於對稱算法。它的算法是對稱的,既可用於加密又可用於解密。

設計分組密碼算法的核心技術是:在相信複雜函數可以通過簡單函數迭代若干圈得到的原則下,利用簡單圈函數及對合等運算,充分利用非線性運算。DES算法採用美國國家安全局精心設計的8個S-Box和P-置換,經過16圈迭代,最終產生64比特密文,每圈迭代使用的48比特子密鑰是由原始的56比特產生的。

DES密碼算法輸入的是64比特的明文,在64比特密鑰的控制下產生64比特的密文;反之輸入64比特的密文,輸出64比特的明文。64比特的密鑰中含有8個比特的奇偶校驗位,所以實際有效密鑰長度爲56比特。

DES算法加密時把明文以64bit爲單位分成塊,而後用密鑰把每一塊明文轉化成同樣64bit的密文塊。DES提供72,000,000,000,000,000個密鑰,用每微秒可進行一次DES加密的機器來破譯密碼需兩千年。採用DES的一個著名的網絡安全系統是Kerberos,由麻省理工學院MIT開發,是網絡通信中身份認證的工業上的事實標準。

DES應用

自DES算法頒佈之後,引起了學術界和企業界的廣泛重視。許多廠家很快生產出實現DES算法的硬件產品,廣大用戶在市場上買到高速而又廉價的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算法,目前美國使用的128位對稱密碼算法(DES),支持全美的電子商務活動。1998年全美電子商務營業額爲160億美元,尚未發現有安全問題。目前,在國內,隨着三金工程尤其是金卡工程的啓動,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收費站等領域被廣泛應用,以此來實現關鍵數據的保密。如信用卡持卡人的PIN的加密傳輸、IC卡與POS間的雙向認證、金融交易數據包的MAC校驗等,均用到DES算法。

DES算法

DES使用56比特有效密鑰的64-比特分組密碼來加密64位數據。它是一個16-圈的迭代型密碼。加、解密算法一樣,但加、解密時所使用的子密鑰的順序剛好相反。DES的硬件實現的加密速率大約爲20 M比特/秒;DES的軟件實現的速率大約爲400 ~ 500K比特/秒。DES專用芯片的加密和解密的速率大約爲1G比特/秒。

DES的圈函數f對32比特的串作如下操作:首先將這32比特的串擴展成48比特的串。其次將這48比特的串和48比特的密鑰進行組合並將組合結果作爲八個不同S-盒的輸入。每個S-盒的輸入是6比特,輸出是4比特。然後將S-盒的32比特做置換作爲圈函數f的輸出。

DES有56比特的有效密鑰,64比特密鑰中的第8位、第16位、…、第64位爲校驗位。所以對DES最尖銳的批評之一是DES的密鑰太短。

DES算法以被應用於許多需要安全加密的場合。(如:UNIX的密碼算法就是以DES算法爲基礎的)。下面是關於如何實現DES算法的語言性描述。

1. 處理密鑰:

1-1、變換密鑰:取得64位的密鑰,每個第8位作爲奇偶校驗位。

1-2、變換密鑰。

1-2-1、捨棄64位密鑰中的奇偶校驗位,根據下表(PC-1)進行密鑰變換得到56位的密鑰,在變換中,奇偶校驗位以被捨棄。

Permuted Choice 1 (PC-1)

57 49 41 33 25 17 9

1 58 50 42 34 26 18

10 2 59 51 43 35 27

19 11 3 60 52 44 36

63 55 47 39 31 23 15

7 62 54 46 38 30 22

14 6 61 53 45 37 29

21 13 5 28 20 12 4

1-2-2、將變換後的密鑰分爲兩個部分,開始的28位稱爲C[0],最後的28位稱爲D[0]。

1-2-3、生成16個子密鑰,初始I=1。

1-2-3-1、同時將C[I]、D[I]左移1位或2位,根據I值決定左移的位數。見下表

I: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

左移位數: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

1-2-3-2、將C[I]D[I]作爲一個整體按下表(PC-2)變換,得到48位的K[I]

Permuted Choice 2 (PC-2)

14 17 11 24 1 5

3 28 15 6 21 10

23 19 12 4 26 8

16 7 27 20 13 2

41 52 31 37 47 55

30 40 51 45 33 48

44 49 39 56 34 53

46 42 50 36 29 32

1-2-3-3、從1-2-3-1處循環執行,直到K[16]被計算完成。

2、處理64位的數據

2-1、取得64位的數據,如果數據長度不足64位,應該將其擴展爲64位(例如補零)

2-2、將64位數據按下表變換(IP)

Initial Permutation (IP)

58 50 42 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

2-3、將變換後的數據分爲兩部分,開始的32位稱爲L[0],最後的32位稱爲R[0]。

2-4、用16個子密鑰加密數據,初始I=1。 2-4-1、將32位的R[I-1]按下表(E)擴展爲48位的E[I-1]

Expansion (E)

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

2-4-2、異或E[I-1]和K[I],即E[I-1] XOR K[I]

2-4-3、將異或後的結果分爲8個6位長的部分,第1位到第6位稱爲B[1],第7位到第12位稱爲B[2],依此類推,第43位到第48位稱爲B[8]。

2-4-4、按S表變換所有的B[J],初始J=1。所有在S表的值都被當作4位長度處理。

2-4-4-1、將B[J]的第1位和第6位組合爲一個2位長度的變量M,M作爲在S[J]中的行號。

2-4-4-2、將B[J]的第2位到第5位組合,作爲一個4位長度的變量N,N作爲在S[J]中的列號。

2-4-4-3、用S[J][M][N]來取代B[J]。

Substitution Box 1 (S[1])

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

S[2]

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

S[3]

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

S[4]

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

S[5]

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

S[6]

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

S[7]

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

S[8]

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

2-4-4-4、從2-4-4-1處循環執行,直到B[8]被替代完成。

2-4-4-5、將B[1]到B[8]組合,按下表(P)變換,得到P。

Permutation P

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

2-4-4-6、異或P和L[I-1]結果放在R[I],即R[I]=P XOR L[I-1]。

2-4-4-7、L[I]=R[I-1]

2-4-4-8、從2-4-1處開始循環執行,直到K[16]被變換完成。

2-4-5、組合變換後的R[16]L[16](注意:R作爲開始的32位),按下表(IP-1)變換得到最後的結果。

Final Permutation (IP**-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

以上就是DES算法如何加密一段64位數據塊算法的描述。解密時用同樣的過程,只需把16個子密鑰的順續顛倒過來,應用的順序爲K[16],K[15],K[14],。。。。K[1]。

DES的安全性

對稱的分組密碼算法最主要的問題是:由於加解密雙方都要使用相同的密鑰,因此在發送、接收數據之前,必須完成密鑰的分發。因而,密鑰的分發便成了該加密體系中的最薄弱因而風險最大的環節。各種基本的手段均很難保障安全地完成此項工作。從而,使密鑰更新的週期加長,給他人破譯密鑰提供了機會。實際上這與傳統的保密方法差別不大。在歷史戰爭中,破獲他國情報的紀錄不外是兩種方式:一種是在敵方更換"密碼本"的過程中截獲對方密碼本;另一種是敵人密鑰變動週期太長,被長期跟蹤,找出規律從而被破獲。在對稱算法中,儘管由於密鑰強度增強,跟蹤找出規律破獲密鑰的機會大大減小了,但密鑰分發的困難問題幾乎無法解決。如,設有n方參與通信,若n方都採用同一個對稱密鑰,一旦密鑰被破解,整個體系就會崩潰;若採用不同的對稱密鑰則需n(n-1)個密鑰,密鑰數與參與通信人數的平方數成正比。這便使大系統密鑰的管理幾乎成爲不可能。

自DES算法1977年首次公諸於世以來,引起了學術界和企業界的廣泛重視。

學術界對DES密碼進行了深入的研究,圍繞它的安全性和破譯方法展開了激烈的爭論,在一定意義上對密碼學的理論研究也起了推動作用。同時人們也一直對DES的安全性持懷疑態度,對密鑰的長度、迭代次數及S盒的設計縱說紛紜。從技術上說,對DES的批評主要集中在以下三個方面。

作爲分組密碼,DES的加密單位僅有64位二進制,這對於數據傳輸來說太小,因爲每個區組僅含8個字符,而且其中某些位還要用於奇偶校驗或其他通訊開銷。
密鑰僅有56位二進制未免太短,各次迭代中使用的密鑰K(i)是遞推產生的,這種相關必降低了密碼體制的安全性。目前,有人認爲:在現有的技術條件下用窮舉法尋找正確密鑰已趨於可行,所以若要安全保護10年以上的數據最好不用DES算法。
實現替代函數Si所用的S盒的設計原理尚未公開,其中可能留有隱患。更有人擔心DES算法中有"陷阱",知道祕密的人可以很容易地進行密文解密。
目前人們仍然不知道DES中是否存在陷門。所謂陷門,通俗地講,就是在算法的設計中設計者留了一個後門,知道某一祕密的人可進入這一後門獲得使用該算法的用戶的祕密密鑰。DES的設計準則除了極少數被公佈外,其餘的仍然是保密的。圍繞S-盒人們討論了一系列問題包括設計準則和構造等。

Campbell和Wiener於1992年證明了"DES不成羣"這個事實。

DES至少有4個弱密鑰,12個半弱密鑰。

1993年Wiener給了一個詳細的設計密鑰搜索機的方案,他估計耗資100萬美元製造一臺機器,搜索一個DES密鑰平均大約需花3·5小時。差分分析破譯16-圈DES需要2個選擇明文,破譯8-圈DES需要2個選擇明文。線性分析破譯16-圈DES需要2個已知明文,破譯8-圈DES需要2個已知明文。

根據目前的計算技術和DES的分析情況,16-圈DES仍然是安全的,但提醒使用者不要使用低於16-圈的DES,特別是10-圈以下的DES。

在對DES密碼進行鑑定的期間,美國國家保密局和計算機科學技術學會組織各界專家研究了DES密碼體制的安全性問題,討論了破譯DES密碼體制的一切可能途徑。儘管有些專家和學者對它的安全性仍持懷疑態度,但官方卻得出了十分樂觀的結論。他們宣佈:"沒有任何可以破譯DES密碼體制的系統分析法。若使用窮舉法,則在1990年以前基本上不可能產生出每天能破譯一個DES密鑰的專用計算機。即使屆時能製造出這樣的專用機,它的破譯成功率也只會在0.1到0.2之間,而且造價可能高達幾千萬美元。"

我們先考慮用窮舉法破譯DES密碼的問題。設已知一段密碼文C及與它對應的明碼文M,用一切可能的密鑰K加密M,直到得到E(M)=C,這時所用的密鑰K即爲要破譯的密碼的密鑰。窮舉法的時間複雜性是T=O(n),空間複雜性是S=O(1)。對於DES密碼,n=256≈7×1016,即使使用每秒種可以計算一百萬個密鑰的大型計算機,也需要算106天才能求得所使用的密鑰,因此看來是很安全的。但是Diffie和Hellman指出,如果設計一種一微秒可以覈算一個密鑰的超大規模集成片,那麼它在一天內可以覈算8.64×1010個密鑰。如果由一個百萬個這樣的集成片構成專用機,那麼它可以在不到一天的時間內用窮舉法破譯DES密碼。他們當時(1977年)估計:這種專用機的造價約爲兩千萬美元。如果在五年內分期償還,平均每天約需付一萬美元。由於用窮舉法破譯平均只需要計算半個密鑰空間,因此獲得解的平均時間爲半天。這樣,破譯每個DES密碼的花銷只是五千美元。後來,Diffie在1981年又修改了他們的估計,認爲以1980年的技術而論,用造價爲五千萬美元的專用機破譯DES密碼平均要花兩天時間。但是他與Hellman都預計:1990年時,破譯DES密碼的專用機的造價將大幅度下降。

計算及科學家Tanenbaum指出,即使沒有這種專用機,也可以用窮舉法破譯DES。

DES對每64位數據塊應用一個56位的密鑰。整個過程要經歷16個加密運算週期(或操作)。在1997年,RSA(數據安全公司)爲能夠破解DES信息的人提供$10,000獎金,於是在Internet上的一次多達14,000計算機的聯合行動最終找到了密鑰,這次行動中,總共搜索了72Q個密鑰中的18Q個,這也顯示了網絡分佈式計算機的強大威力。能夠令我們放心的是,因爲人力的關係,對於普通信息不可能受到這樣的破譯。

據美國(華爾街報)1999年3月8日報導,由Verisign公司(一個信息保密安全公司)經理 AnilPereira分指出,欲破解一個祕密密鑰長度爲128位的DES加密要比破解一個祕密密鑰長度爲40位的DES加密要困難300X1042倍(300Septillion倍)。也就是說如以300MC奔騰CPU的PC機破解40位DES加密要花3個小時計,那麼用同樣的PC機來破解一個128位DES加密就要花去900 X1042小時。這在一個人的有生之年是不可能做到的。

對一個密碼算法的安全來說,密鑰長度只是密碼強度痕量標準之一,對一個密碼算法的評價,除密鑰長度外,還必須對算法進行詳盡、系統的理論分析,對於DES型的分組密碼,就需進行算法抵抗所謂的差分攻擊和線性密碼分析的能力。在國外,商用密碼的算法必須是公開的,DES就是這樣,因爲這樣有利於密碼算法評價的公開性和公正性,這是我國商用密碼管理的必由之路。

DES算法的應用漏洞

DES算法具有極高的安全性,到目前爲止,除了用窮舉搜索法對DES算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間爲256,這意味着如果一臺計算機的速度是每一秒鐘檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的。當然,隨着科學技術的發展,當出現超高速計算機後,我們可考慮把DES密鑰的長度再增長一些,以此來達到更高的保密程度。

由上述DES算法介紹我們可以看到ES算法中只用到64位密鑰中的其中56位,而第8、16、24、......64位8個位並未參與DES運算,這一點,向我們提出了一個應用上的要求,即DES的安全性是基於除了8,16,24,......64位外的其餘56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24......64位作爲DES密鑰的有效數據位,而使用其它的56位作爲有效數據位,才能保證DES算法安全可靠地發揮作用。如果不瞭解這一點,把密鑰Key的8,16,24,......64位作爲有效數據位使用,將不能保證DES加密數據的安全性,對運用DES來達到保密作用的系統產生數據被破譯的危險,這正是DES算法在應用上的誤區,是各級技術人員、各級領導在使用過程中應絕對避免的。

避開DES算法漏洞安全管理
在DES密鑰Key的使用、管理及密鑰更換的過程中,應絕對避開DES算法的應用誤區,即:絕對不能把Key的第8,16,24......64位作爲有效數據位,來對Key進行管理。這一點,特別推薦給金融銀行界及非金融業界的領導及決策者們,尤其是負責管理密鑰的人,要對此點予以高度重視。有的銀行金融交易網絡,利用定期更換DES密鑰Key的辦法來進一步提高系統的安全性和可靠性,如果忽略了上述應用誤區,那麼,更換新密鑰將是徒勞的,對金融交易網絡的安全運行將是十分危險的,所以更換密鑰一定要保證新Key與舊Key真正的不同,即除了第8,16,24,...64位以外其它位數據發生了變化,須務必對此保持高度重視!

現代密碼學的特徵是算法可以公開。保密的關鍵是如何保護好自己的密鑰,而破密的關鍵則是如何能破解得到密鑰。

系統的安全主管者,要根據本系統實際所使用的密鑰長度與其所保護的信息的敏感程度、重要程度以及系統實際所處安全環境的惡劣程度,在留有足夠的安全係數的條件下來確定其密鑰和證書更換週期的長短。同時,將已廢棄的密鑰和證書放入黑庫歸檔,以備可能後用。密鑰更換週期的正確安全策略是系統能夠安全運行的保障,是系統的安全管理者最重要、最核心的日常工作任務。

DES的變形

DES 算法目前已廣泛用於電子商務系統中。隨着研究的發展,針對以上DES的缺陷,DES算法在基本不改變加密強度的條件下,發展了許多變形DES。人們提出瞭解幾種增強DES安全性的方法,主要有以下幾種。

多重DES

爲了增加密鑰的長度,人們建議將一種分組密碼進行級聯,在不同的密鑰作用下,連續多次對一組明文進行加密,通常把這種技術稱爲多重加密技術。對DES,人們建議使用三重DES,這一點目前基本上達成一個共識。

三重DES

雖然DES被認爲是一種十分可靠的加密方法,但許多公司仍然採用稱爲"三重DES"的方法加密,這種方法邊連續使用三個密鑰進行加密。

因爲確定一種新的加密法是否真的安全是極爲困難的,而且DES主要的密碼學缺點,就是密鑰長度相對比較短,所以人們並沒有放棄使用DES,而是想出了一個解決其長度問題的方法,即採用三重DES。其基本原理是將128比特的密鑰分爲64比特的兩組,對明文多次進行普通的DES加解密操作,從而增強加密強度。

這種方法用兩個密鑰對明文進行三次加密,假設兩個密鑰是K1和K2:

1. 用密鑰K1進行DES加密。

2. 用K2對步驟1的結果進行DES解密。

3. 用步驟2的結果使用密鑰K1進行DES加密

三重DESDES算法擴展其密鑰長度的一種方法,可使加密密鑰長度擴展到128比特(112比特有效)或192比特(168比特有效)。此方法爲密碼專家默克爾(Merkle)及赫爾曼(Hellman)推薦。據稱,目前尚無人找到針對此方案的攻擊方法。

S-盒可選擇的DES(也稱帶用交換S盒的DES算法)

比哈姆(Biham)和沙米爾(Shamir)證明通過優化S盒的設計,甚至S盒本身的順序,可以抵抗差分密碼分析,以達到進一步增強DES算法的加密強度的目的。

在一些設計中,將DES作如下改進:

使S-盒的次序隨密鑰而變化或使S-盒的內容本身是可變的。

8個DES的S-盒的改變可使得DES變弱許多,使用某些特定次序的S-盒的16-圈DES僅需要大約2個選擇明文就能用差分分析方法被破譯。採用隨機的S-盒的DES很容易被破譯,即使是對DES的一個S-盒的數字稍作改變也會導致DES易於破譯。結論:不管怎樣隨機選擇S-盒都不會比DES更安全。

具有獨立子密鑰的DES

DES的另一種變形是每圈迭代都使用不同的子密鑰,而不是由單個的56比特密鑰來產生。因爲16-圈DES的每圈都需要48比特密鑰,所以這種變形的DES的密鑰長度是768比特。這一方法可以增強DES的加密強度,大大地增加了實現DES的難度。

但據密碼專家比哈姆(Biham)及沙米爾(Shamir)證明利用261個選擇明文便可破譯這個DES變形,而不是人們所希望的2768個選擇明文。所以這種改變並不能使DES變得更安全。

G-DES

G-DES是廣義的DES的縮寫,設計它的目的是爲了提高DES的速度和強度。總的分組長度增加了(分組長度是可變的),但圈函數f保持不變。Biham和Shamir僅使用16個已知明文就能用差分分析破譯分組長度爲256比特的16-圈G-DES。使用48個選擇明文就能用差分分析破譯分組長度爲256比特的22-圈G-DES。即使是分組長度爲256比特的64-圈G-DES也比16-圈DES弱。事實證明,比DES快的任何G-DES也就比它不安全。

IDEA算法

1990年賴學家(XueJiaLai)和梅西(Massey)開發的IDEA密碼首次成形,稱爲PES,即"建議的加密標準"。次年,根據有關專家對這一密碼算法的分析結果,設計者對該算法進行了強化並稱之爲IPES,即"改進的建議加密標準"。該算法於1992年更名爲IDEA,即"國際加密標準"。

IDEA算法的密鑰長度爲128位。設計者盡最大努力使該算法不受差分密碼分析的影響,賴學家已證明IDEA算法在其8圈迭代的第4圈之後便不受差分密碼分析的影響了。假定窮舉法攻擊有效的話,那麼即使設計一種每秒種可以試驗10億個密鑰的專用芯片,並將10億片這樣的芯片用於此項工作,仍需1013年才能解決問題;另一方面,若用1024片這樣的芯片,有可能在一天內找到密鑰,不過人們還無法找到足夠的硅原子來製造這樣一臺機器。目前,尚無一片公開發表的試圖對IDEA進行密碼分析的文章。因此,就現在來看應當說IDEA是非常安全的。

IDEA分組密碼已在歐洲取得專利,在美國的專利還懸而未決,不存在非商用所需的使用許可證費用問題。

IDEA算法概述

IDEA是一個迭代分組密碼,分組長度爲64比特,密鑰長度爲128比特。IDEA的軟件實現速度與DES差不多。但硬件實現速度要比DES快得多,快將近10倍。設計者們聲稱由ETH Zurich開發的一種芯片,採用IDEA算法的加密速率可達到177M比特/秒。

IDEA密碼中使用了以下三種不同的運算:

逐比特異或運算;
模2加運算;
模2+1乘運算,0與2對應。
IDEA算法是由8圈迭代和隨後的一個輸出變換組成。它將64比特的數據分成4個子塊,每個16比特,令這四個子塊作爲迭代第一輪的輸出,全部共8圈迭代。每圈迭代都是4個子塊彼此間以及16比特的子密鑰進行異或,MOD2加運算,MOD2+1乘運算。任何一輪迭代第三和第四子塊互換。該算法所需要的"混淆"可通過連續使用三個"不相容"的羣運算於兩個16比特子塊來獲得,並且該算法所選擇使用的MA-(乘加)結構可提供必要的"擴散"。 I

IDEA現狀

IDEA有大量的弱密鑰,這些弱密鑰是否會威脅它的安全性還是一個迷。IDEA密碼能夠抵抗差分分析和線性分析。

設計者Lai認爲IDEA不是一個羣,但目前仍未得到證實。

Eurocrypt'97會議上給出了兩種新的攻擊低圈IDEA的方法,第一種攻擊方法可破譯大約3·5-圈的IDEA;第二種攻擊方法可破譯大約3-圈的IDEA。但從分析結果來看,這兩種攻擊方法並未對IDEA的安全性構成威脅。

其它分組密碼簡介

隨着DES的逐漸衰老,分組密碼的研究也在不斷深入。在DES之後,近年來國際上又相繼提出了多種新的分組密碼體制,在這些分組密碼中,有的已被破譯,有的仍具有較高的安全性。下面對這此算法作一簡介。

近年來出現的一些分組密碼體制

分組密碼 密鑰組位長度(比特) 明、密文組位長度(比特) 迭代次數(次)

DES(美國) 56 64 16

FEAL-8(日本) 64 64 8

LOKI(澳大利亞) 64 64 16

Khufu Khafre(美國)512 64 ...

IDEA(歐洲) 128 64 8 

FEAL-8密碼

FEAL密碼算法家族是日本NTT(日本電報電話公司)的清水(Shimizi)和宮口(Miyaguchi)設計的。作爲一種分組密碼,與DES相比其主要想法爲增加每一圈迭代的算法強度,因此可以通過減少迭代次數而提高運算速度。

FEAL-8即爲8圈迭代的FEAL密碼算法。FEAL密碼算法推出之後,引起有關專家的注意。密碼專家比哈姆和沙米爾利用養分密碼分析技術發現,可以用比窮舉法更快的速度破譯FEAL密碼。如FEAL-8只需2000個選擇明文即可破譯,而FEAL-4更只需8個精心選擇的明文便可破譯。

目前,FEAL已經取得了專利。

LOKI算法

LOKI算法作爲DES的一種潛在替代算法於1990年在密碼學界首次亮相。LOKI同DES一樣以64位二進制分組加密數據,也使用64位密鑰(只是其中無奇偶校驗位),所有64位均爲密鑰。LOKI密碼公佈之後,有關專家對其進行了研究破譯並證明不大於14圈的LOKI算法極易受到差分密碼分析的攻擊等。不過,這仍然優於56位密鑰的DES。LOKI較新的成果版本是LOKI-91。

LOKI尚未取得專利,任何人都可以使用該算法。有意在商用產品中使用設計者基準方案的人士,可以與澳大利亞堪培拉國防學院計算機科學系西特拉德主任聯繫。

Khufu和Khafre算法

1990年由默克爾(Merhie)設計的這對算法具有較長的密鑰,適合於軟件實現,比較完全可靠。Khufu算法的總體設計同DES,只是擁有512位(64字節)的密鑰。Khafre算法與前者類似,預定用於不能預先計算的場合。由於Khufu算法具有可變的S盒,可以抵抗差分密碼分析的攻擊。據瞭解目前尚無以該算法爲目標的其它密碼分析成果。

這對密碼算法都已取得專利,算法的原碼在專利之中。對使用這對算法感興趣的人士,可以與施樂(Xerox)公司專利許可證發放部的彼得(Petre)主任聯繫。

SAFER K-64算法

SAFER K-64是Massey於1993年提出的一種面向字節的迭代分組密碼,它的分組長度和密鑰長度均爲64比特。SAFERK-64既適合於硬件實現又適合於軟件實現。1995年Massey將SAFERK-64的密鑰長度修改爲128比特。設計者建議使用6-圈SAFERK-64,實際上,它可以是任意圈。每一圈都使用了兩個面向字節的不同的非線性變換,兩個64比特長的子密鑰和一個三級線性層的僞Hadamard變換。僞Hadamard變換的作用是實現"擴散"。最後一圈末,再經過一個輸出變換形成密文。

SAFER K-64是一種Markov密碼,而Markov密碼關於能抵抗差分分析的能力的研究已有一些成果。Massey認爲6-圈SAFER K-64就能抵抗差分分析。關於該算法的安全性的討論目前還很少。

SAFER K-64的密鑰方案存在着某些弱點,但還未對它的安全性構成威脅。

RC5算法

RC5算法是Rivest於1994年提出的一個新的迭代分組密碼,但它不是Feistel型密碼。

它的特點是:分組長度W,密鑰長度b和圈數r都是可變的。簡記爲RC5-W/r/b。該密碼既適合於硬件實現又適合於軟件實現,實現速度非常快。它主要通過數據循環來實現數據的擴散和混淆。每次循環的次數都依賴於輸入數據,事先不可預測。

目前只有少數幾篇論文對RC5的抵抗差分分析和線性分析的能力作了分析。分析結果表明,12-圈的RC5就可抵抗差分分析和線性分析。

RC5是利用數據循環的觀點設計的一種密碼算法,那麼利用這種觀點設計密碼算法是否成功還有待於進一步探討。

Skipjack算法

Skipjack算法是NSA爲Clipper和Capstone芯片開發的一個加密算法。該算法從1985年開始設計,於1990年完成,1993年將告知衆人,但算法一直保密,沒有公開。只知道該算法是一個32-圈的分組密碼,分組長度爲64比特,密鑰長度爲80比特。加、解密的運行速度非常快。

Skipjack算法仍未公開,這就引起了人們的強烈不滿。儘管NIST聲稱Skipjack算法比DES多麼安全,用窮搜索破譯它有多麼難,但許多人對Skipjack算法的安全性仍表示懷疑。也有人懷疑Skipjack算法可能有陷門。

其它分組密碼算法

除了上面介紹的算法外,還有一些分組算法,諸如,RC2,FEAL-N,REDOC-II,LOKI,COST,Blowfish,Crab,Khufu,Khafre,MMB,3-WAY等。在這裏我們不可能作逐一介紹,對這些算法感興趣的讀者可在Schneier所著的《Applied Cryptography:Protocals,Algorithms,and SourceCode in C》一書中找到。

關注新的加密標準(AES)

從分組密碼的參數來看,它的兩個重要參數即分組長度和密鑰長度有增長的趨勢。這主要取決於計算機的處理能力和計算能力。

從分組密碼的應用來看,它的應用將更加廣泛。從國家的重要機構到個人都有使用分組密碼的要求。

從分組密碼的研究來看,隨着美國新的數據加密標準的出現,分組密碼的研究將會掀起新的浪潮。

AES發展過程

在DES每隔五年的評估會議中,最後一次在1998年美國政府終於簽署了不再繼續延用DES作爲聯邦加密標準,就也就表明了DES將退出加密標準的舞臺,而新的標準AES(Advanced Encryption Standard)將粉墨登場。

1997年4月15日,美國國家標準和技術研究所(NIST)發起徵集AES (Advanced Encryption Standard)密碼算法的活動。

1997年9月7日,NIST公開發表了面向公衆、科研機構、工業界以及政府機構的AES侯選算法徵集書,請社會各界提供AES的侯選算法,以便從中篩選出符合要求的算法作爲AES正式算法使用。NIST發起這次徵集的主要目標,是爲AES選定一種能在近期內代替DES、公開的、能夠很好地保護政府的敏感信息直到下個世紀的算法,強度應不低於3重DES,而且實現效率要比3重DES高。

NIST對AES侯選算法有三條基本要求:

(1)是對稱密碼體制,也即祕密密鑰算法;

(2)算法應爲分組密碼算法;

(3) 算法明密文分組長度爲128比特,應支持128、192、256比特的密鑰長度;

由此可見,AES算法的密鑰長度比起DES的56比特要長的多,EFF的DES破譯機要搜索長度爲128比特以上的密鑰其能力還遠遠不夠。

1997年9 月12月在聯邦登記處(FR)公開發布了徵集AES候選算法的通告。並提出了對AES的基本技術要求,即候選算法要比三重DES快,與三重DES一樣安全,分組長度爲128比特,密鑰長度爲128、192和256比特。

1998年8月,NIST召開了第一次AES候選會議,宣佈對15個候選算法的若干討論結果。作爲第一輪評測的候選算法情況是:其中5個來自美國(HPC、MARS、RC6、SAFERT和TWOFISH);2個來自加拿大(CAST-256和REAL);澳大利亞(LOK197)、比利時(RIJNDAEL)、哥斯達黎加(FROG)、法國(DFC);德國(MAGENTA)、日本(EZ)、韓國(CRYPTON)和挪威(SERPENT)各一個。

第一輪評測1999年4月15日結束,並開始第二輪評測。這次評測將從15個候選算法中選出5個,這5個候選算法爲:MARS、RC6、Rijndael、Serpent、Twofish。最後再在這5個優選算法中評選出一個算法作爲正式的AES標準,計劃在2001年正式出臺。

而最新的消息2000年的10月,美國政府通過公開招標選定了新的加密算法Rijndael作爲其高級加密標準(AES),該方案是由兩位比利時工程師提交。

這兩位中標人分別是ProtonWorldInternational的JoanDaemen和天主教大學電子工程系的VincentRijmen。

貿易部負責技術的官員CherylShavers說,新的高級加密標準(AES)可支持128、192和256位的密鑰,並且將取代現在的數據加密標準(DES),DES僅支持56位的密鑰。

國家標準局的當前任務是在2001年2月前,草擬AES聯邦信息執行標準供公衆審查和評定。新標準計劃將在2001年二季度正式公佈施行。

最新的AES標準-Rijndael

NIST已經選擇了Rijndael作爲推薦的AES算法。這種算法的設計者建議用這樣發音來讀Rijndael:Reign Dahl、RainDoll、Rhine Dahl。兩位開發者都是來自比利時的密碼專家:國際質子中心的Joan Daemen (Yo'-ahnDah'-mun)博士和Vincent Rijmen(Rye'-mun)博士一位來自Katholieke大學電子工程系的博士後研究員。這兩位在密碼學界都有一定的知名度。

NIST的AES標準選擇小組撰寫了有關AES的開發報告,這是一個很綜合涉及面廣的報告。報告中對於各種有關AES的版本進行探討,羅列了一些自公開試行時的分析和評論。總結了五個最後入圍的有關算法的特點,對照和比較了他們的優缺點,表明了NIST對於Rijndael的選擇。

宣佈新的AES標準標誌着四年來美國政府與私人企業及來自世界各國學術機構共同合作開加密技術已經達到了頂峯,這些加密技術將有成百上千人使用的潛力。NIST預言將會在國內和國際上更廣泛地應用。

爲什麼NIST選擇Rijndael作爲AES標準,全面的考慮,Rijndael是將安全、高效、性能、方便的使用及靈活性集於一體,這使它成爲AES的合適選擇。特別指出的是,Rijndael在不同硬件和軟件運行環境下表現出始終如一的良好性能,而無論這些環境是否有反饋模式,它的密鑰設置時間相當出色,密鑰的靈敏性也不錯。Rijndael對於內存要求可以很低,這使得它可以廣泛使用與空間上受限制的環境,在這樣的環境下它仍然可以表現出出色的性能。Rijndael的操作可以很容易的抵禦時間和空間上的攻擊。另外,在提供這些保護的同時也並沒有影響Rijndael的性能。從分組長度和密鑰長度的觀點來看,Rijndael設計帶有靈活性,同時這種算法也允許一定循環次數的修正,但這個特點還需進一步研究,在現在還不被認同。最後要說的,Rijndael內部循環結構使得它表現出有益於並行水平結構的很好的潛能。

從安全的觀點來看,NIST在它的報告中指出,這五種算法作爲AES標準都有其合適的安全性能。但這並不表明除Rijndael外的其他四種算法有什麼不當之處,當把多種分析小組對它們的評價也作爲考慮之列時,NIST小組感覺還是把Rijndael作爲AES更爲合適。NIST考慮過選擇複合函數作爲AES的可能性。因爲大家曾廣泛討論過複合算法的課題。在公開評審期間評審爭論都是有關或贊同或反對把複合算法作爲標準。NIST的AES評選小組認爲這些評論探討優先於算法的評估。概括的講,AES評選小組決定選擇一種算法有幾個原因,首先,其他贊同的算法如(3-DES)提出了對系統的彈性要求,會因爲成爲AES而變成一個問題;其次,複合AES的密鑰程度對提高安全等級;第三,單一的AES算法會促進共同的操作性來減少應用的複雜性,這種應用也同樣遵從於AES的特殊範例,比起復合AES算法也更能在實施中帶來較少的花費;第四,考慮到潛在的知識產權問題,費用問題,單一的AES算法也保護了設計者的利益。

NIST對Rijndael算法不會做改動,比如增加循環的次數。早在NIST的AES選擇小組對最後的5個入圍者評審之前,他們就討論是否對於某一種或幾種算法的循環次數進行改變的問題。這個問題在提交給公衆評論期間就提出了。一些公衆評議表明了改變循環次數的特別理由,但大多數並沒有提出什麼理由來。似乎也沒有達成有關算法,循環次數應該改變的協議。(即使達成了也沒有確切指出應如何改變)。NIST小組認識到改變循環次數可能會削弱大量分析的有效性,而這種分析兩年前就已開始。對於一些算法來說,如何用循環次數的不同完全定義一個算法並不十分清楚。同樣也不十分清楚這種改變對於完全性的影響。另一個問題是,沒有一個算法的研究者打算改變他們算法中的循環次數。而是在1999年夏天曾允許他們對自己的產品進行一些改動。基於這麼多原因,NIST的AES小組還是決定在保持5個算法原有風貌上對其評估繼而進行選擇也許是更合適的。

NIST將會繼續對Rijndael的密碼分析進行研究、開發,同時對於其他標準密碼算法也會進行研究。一旦AES成爲官方標準,那麼每5年便會對其評估一次,在合適的時候考慮到一些特殊環境,對於標準的修改工作也將會進行。當需要立即引起注意的問題出現時,NIST會迅速行動,並考慮各種可選擇的算法。

可以預言在Rijndael公佈不久,應用Rijndael的商用產品會很快出現。然而從時間表上看,AES直到2001年纔會成爲官方標準,當AES成爲官方標準,NIST就會對應用Rijndael的產品進行測試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章