⑴ 高分求C#版的IDEA演算法
1、IDEA基本概念
2、IDEA設計原理
3、IDEA加密過程
4、IDEA解密過程
3
IDEA(International Data Encryption Algorithm)是瑞士的James Massey,Xuejia Lai等人提出的加密演算法,在密碼學中屬於數據塊加密演算法(Block Cipher)類。
IDEA使用長度為128bit的密鑰,數據塊大小為64bit。從理論上講,IDEA屬於「強」加密演算法,至今還沒有出現對該演算法的有效攻擊演算法。
1. IDEA基本概念
4
早在1990年,Xuejia Lai等人在EuroCrypt』90年會上提出了分組密碼建議PES(Proposed Encryption Standard)。在EuroCrypt』91年會上, Xuejia Lai等人又提出了PES的修正版IPES(Improved PES)。目前IPES已經商品化,並改名為IDEA。IDEA已由瑞士的Ascom公司注冊專利,以商業目的使用IDEA演算法必須向該公司申請許可。
IDEA基本概念
5
IDEA是一個分組長度為64位的分組密碼演算法,密鑰長度為128位(抗強力攻擊能力比DES強),同一演算法既可加密也可解密。
IDEA能抗差分分析和相關分析;
IDEA似乎沒有DES意義下的弱密鑰;
IDEA的「混淆」和「擴散」設計原則來自三種運算,它們易於軟、硬體實現(加密速度快)
IDEA基本概念
6
異或運算( )
整數模216加( + )
整數模216+1乘( )(IDEA的S盒)
擴散由稱為MA結構的演算法基本構件提供。
Z6
F2
F1
Z5
G1
G2
IDEA運算
7
實現上的考慮
使用子分組:16bit的子分組;
使用簡單操作(易於加法、移位等操作實現)
加密解密過程類似;
規則的結構(便於VLSI實現)。
IDEA運算
8
2. IDEA設計原理
1 密碼的強度:主要是通過混淆和擴散來實現。
混淆實現的方法:
(1)逐比特異或。表示為
(2) 模 整數加法,表示為 ,其輸入和輸出作為
16位無符號整數處理。
模 整數乘法,表示為 ,其輸入和輸出中除16
全0作為 處理外,其餘都作為16位無符號整數處理。
9
例如
0000000000000000⊙1000000000000000
=1000000000000001
這是因為216×215 mod (216+1)=215+1。
IDEA設計原理
10
表3.6給出了操作數為2比特長時3種運算的運算表。在以下意義下,3種運算是不兼容的:
① 3種運算中任意兩種都不滿足分配律,例如 a + (b ⊙ c)≠(a + b ) ⊙ (a + c )
② 3種運算中任意兩種都不滿足結合律,例如 a +(b � c)≠(a + b ) � c
+
IDEA設計原理
11
3種運算結合起來使用可對演算法的輸入提供復雜的變換,從而使得對IDEA的密碼分析比對僅使用異或運算的DES更為困難。
演算法中擴散是由稱為乘加(multiplication/addition, MA)結構(見圖4.14)的基本單元實現的。
該結構的輸入是兩個16比特的子段和兩個16比特的子密鑰,輸出也為兩個16比特的子段。這一結構在演算法中重復使用了8次,獲得了非常有效的擴散效果。
IDEA設計原理
12
IDEA演算法的擴散主要是由乘加結構的基本單元實現的。
IDEA的MA結構
13
IDEA加密的總體方案
循環2
循環8
循環1
輸出變換
64位密文
64位明文
Z1
Z6
Z7
Z12
Z43
Z48
Z49
Z52
子密鑰生成器
128位密鑰
Z1
Z52
16
14
IDEA加密的總體方案圖
15
IDEA加密過程
第1輪
64比特明文
X1
X2
X3
X4
第2輪
W11
W12
W13
W14
第8輪
W71
W72
W73
W74
W21
W22
W23
W24
W81
W82
W83
W84
輸出變換
Y1
Y2
Y3
Y4
密文
…
Z1
Z6
…
Z7
Z12
…
Z43
Z48
…
Z49
Z52
字密鑰生成器
128比特密鑰
Z1
Z52
16
加密過程(如圖4.15所示)由連續的8輪迭代和一個輸出變換組成,演算法將64比特的明文分組分成4個16比特的子段,每輪迭代以4個16比特的子段作為輸入,輸出也為4個16比特的子段。最後的輸出變換也產生4個16比特的子段,鏈接起來後形成64比特的密文分組。每輪迭代還需使用6個16比特的子密鑰,最後的輸出變換需使用4個16比特的子密鑰,所以子密鑰總數為52。圖4.15的右半部分表示由初始的128比特密鑰產生52個子密鑰的子密鑰產生器。
3. IDEA加密過程
17
圖4.16是IDEA第1輪的結構示意圖,以後各輪也都是這種結構,但所用的子密鑰和輪輸入不同。從結構圖可見,IDEA不是傳統的Feistel密碼結構。每輪開始時有一個變換,該變換的輸入是4個子段和4個子密鑰,變換中的運算是兩個乘法和兩個加法,輸出的4個子段經過異或運算形成了兩個16比特的子段作為MA結構的輸入。MA結構也有兩個輸入的子密鑰,輸出是兩個16比特的子段。
IDEA的輪結構
18
IDEA第1輪的輪結構
19
Y1
Y2
Y3
Y4
1 輪結構
20
最後,變換的4個輸出子段和MA結構的兩個輸出子段經過異或運算產生這一輪的4個輸出子段。注意,由X2產生的輸出子段和由X3產生的輸出子段交換位置後形成W12和W13,目的在於進一步增加混淆效果,使得演算法更易抵抗差分密碼分析。
IDEA加密過程
21
在每一輪中,執行的順序如下:
1. X1和第一個子密鑰相乘。
2. X2和第二個子密鑰相加。
3. X3和第三個子密鑰相加。
4. X4和第四個子密鑰相乘。
5. 將第1步和第3步的結果相異或。
6. 將第2步和第4步的結果相異或。
IDEA每一輪的加密順序
22
7. 將第5步的結果與第五個子密鑰相乘。
8. 將第6步和第7步的結果相加。
9. 將第8步的結果與第六個子密鑰相乘。
10.將第7步和第9步的結果相加。
11.將第1步和第9步的結果相異或。
12.將第3步和第9步的結果相異或。
13.將第2步和第10步的結果相異或。
14.將第4步和第10步的結果相異或。
IDEA每一輪的加密順序
23
演算法的第9步是一個輸出變換,如圖4.17所示。它的結構和每一輪開始的變換結構一樣,不同之處在於輸出變換的第2個和第3個輸入首先交換了位置,目的在於撤銷第8輪輸出中兩個子段的交換。還需注意,第9步僅需4個子密鑰,而前面8輪中每輪需要6個子密鑰。
IDEA每一輪的加密順序
24
IDEA的輸出變換
25
加密過程中52個16比特的子密鑰是由128比特的加密密鑰按如下方式產生的: 前8個子密鑰Z1,Z2,…,Z8直接從加密密鑰中取,即Z1取前16比特(最高有效位),Z2取下面的16比特,依次類推。然後加密密鑰循環左移25位,再取下面8個子密鑰Z9,Z10,…,Z16,取法與Z1,Z2,…,Z8的取法相同。這一過程重復下去,直到52子密鑰都被產生為止。
IDEA子密鑰的產生
26
IDEA子密鑰的產生
產生子密鑰的方法。這個演算法用了52個子密鑰(8輪中的每一輪需要6個,其他4個用於輸出變換)。首先,將128-位密鑰分成8個16-位子密鑰。這些是演算法的第一批8個子密鑰(第一輪6個,第二輪的頭2個)。然後,密鑰向左環移動25位產生另外8個子密鑰,如此進行直到演算法結束。
27
28
29
4. IDEA的解密過程
加密解密實質相同,但使用不同的密鑰;
解密密鑰以如下方法從加密子密鑰中導出:
解密循環I的頭4個子密鑰從加密循環10-I的頭4個子密鑰中導出;解密密鑰第1、4個子密鑰對應於1、4加密子密鑰的乘法逆元;2、3對應2、3的加法逆元;
對前8個循環來說,循環I的最後兩個子密鑰等於加密循環9-I的最後兩個子密鑰;
30
解密與加密過程基本相同,但使用的密鑰不同,解密密鑰按下面的方式生成。
(1)第 i (i=1,2,…,9)輪解密的前4個子密鑰是由加密過程第(10-i)輪的前4個子密鑰得出。其中第1個和第4個解密子 密鑰取為相應的第一個和第四個加密子密鑰模 乘法逆元。第二和第三個子密鑰的取法為:當輪數為i=2,..,8時取為相應的第三個和第二個加密子密鑰的模 加法逆元,當i=1和9時,取為相應的第二個和第三個加密子密鑰的 模 加法逆元。
IDEA的解密過程
31
(2) 第 i(i=1,…,8)輪解密的後兩個子密鑰等於加密過程的第(9-i)輪的後兩個子密鑰。
IDEA的解密過程
32
加密過程
變 換
X1
X2
X3
X4
Z1..Z4
子 加 密
I11
I12
I13
I14
Z5 Z6
變 換
W11
W12
W13
W14
Z7..Z10
子 加 密
I21
I22
I23
I24
Z11 Z612
W21
W22
W23
W24
變 換
W71
W72
W73
W74
Z43..Z46
子 加 密
I81
I82
I83
I84
Z47 Z48
變 換
W81
W82
W83
W84
Z49..Z52
Y1
Y2
Y3
Y4
第1輪
第2輪
第8輪
…………..
33
變 換
X1
X2
X3
X4
U49..U52
子 加 密
V81
V82
V83
V84
U47U48
變 換
J81
J82
J83
J84
U43…U46
子 加 密
V71
V72
V73
V74
U11U12
V21
V22
V23
V24
變 換
J21
J22
J23
J24
U7…U10
子 加 密
V11
V12
V13
V14
U5U6
變 換
J11
J12
J13
J14
U1…U4
Y1
Y2
Y3
Y4
第8輪
第2輪
第1輪
解密
第9輪
…………..
解密過程
34
表3.7是對以上關系的總結。其中Zj的模216+1乘法逆元為Z-1j,滿足(見58頁表3.7)
Zj⊙Z-1j=1mod(216+1)
因216+1是一素數,所以每一個不大於216的非0整數都有一個惟一的模216+1乘法逆元。Zj的模216加法逆元為-Zj,滿足:
-Zj + Zj=0 mod (216)
IDEA的解密過程
35
下面驗證解密過程的確可以得到正確的結果。圖4.18中左邊為加密過程,由上至下,右邊為解密過程,由下至上。將每一輪進一步分為兩步,第1步是變換,其餘部分作為第2步,稱為子加密。
IDEA的解密過程
36
IDEA加密和解密框圖
37
現在從下往上考慮。對加密過程的最後一個輸出變換,以下關系成立:
Y1=W81⊙ Z49 Y2=W83 + Z50
Y3=W82 + Z51 Y4=W84⊙Z52
解密過程中第1輪的第1步產生以下關系:
J11=Y1⊙U1 J12=Y2 + U2
J13=Y3 + U3 J14=Y4⊙U4
IDEA的解密過程
38
將解密子密鑰由加密子密鑰表達並將Y1,Y2,Y3,,Y4代入以下關系,有
J11=Y1⊙Z-149= W81⊙Z49⊙Z-149= W81
J12=Y2 + -Z50=W83 + Z50 + -Z50=W83
J13=Y3 + -Z51=W82 + Z51 + -Z51=W82
J14=Y4⊙Z-152= W84⊙Z52⊙Z-152= W84
IDEA的解密過程
39
可見解密過程第1輪第1步的輸出等於加密過程最後一步輸入中第2個子段和第3個子段交換後的值。從圖4.16,可得以下關系:
W81=I81�MAR(I81�I83,I82�I84)
W82=I83�MAR(I81�I83,I82�I84)
W83=I82�MAL(I81�I83,I82�I84)
W84=I84�MAL(I81�I83,I82�I84)
IDEA的解密過程
40
其中MAR(X,Y)是MA結構輸入為X和Y時的右邊輸出,MAL(X,Y)是左邊輸出。則
V11=J11�MAR(J11�J13,J12�J14)
=W81�MAR(W81�W82,W83�W84)
=I81�MAR(I81�I83,I82�I84) MAR [I81�MAR(I81�I83,I82�I84)�I83�
MAR(I81� I83,I82�I84), I82�
MAL(I81�I83,I82�I84) �I84
�MAL(I81�I83,I82�I84)]
=I81�MAR(I81�I83,I82�I84)
MAR(I81�I83,I82�I84) =I81
IDEA的解密過程
41
類似地,可有 V12=I83 V13=I82 V14=I84
所以解密過程第1輪第2步的輸出等於加密過程倒數第2步輸入中第2個子段和第3個子段交換後的值。
同理可證圖4.18中每步都有上述類似關系,這種關系一直到
V81=I11 V82=I13 V83=I12 V84=I14
即除第2個子段和第3個子段交換位置外,解密過程的輸出變換與加密過程第1輪第1步的變換完全相同。
IDEA的解密過程
42
所以,除第2個子段和第3個子段交換位置外,解密過程的輸出變換與加密過程第1輪第1步的變換完全相同。
所以最後可得知,整個解密過程的輸出等於整個加密過程的輸入。
IDEA的解密過程
43
IDEA分組密碼的特點
可變密鑰長度
混合操作
依賴數據的循環移位
依賴於密鑰的循環移位
依賴S盒子
冗長的密鑰調度演算法
可變的F函數和可變的明文/密文長度
可變的循環次數
在每次循環中都對兩半數據進行操作
44
IDEA可方便地通過軟體和硬體實現。
① 軟體軟體實現採用16比特子段處理,可通過使用容易編程的加法、移位等運算實現演算法的3種運算。
② 硬體由於加、解密相似,差別僅為使用密鑰的方式,因此可用同一器件實現。再者,演算法中規則的模塊結構,可方便VLSI的實現。
IDEA分組密碼的特點
45
THE END!
IDEA
⑵ 理論上最成熟的密碼學演算法
理論上最成熟的密碼學演算法:對稱密碼演算法、公鑰密碼演算法、哈希函數(雜湊函數)。
1、對稱密碼演算法
DES演算法——二十世紀七十年代提出,曾經稱霸對稱加密領域30年。
AES演算法——二十一世紀初提出用以取代DES演算法。
IDEA演算法——二十世紀九十年代初提出,也是一種流行演算法。
RC4演算法——經典的流密碼演算法。
密碼演算法簡介
密碼演算法是用於加密和解密的數學函數,密碼演算法是密碼協議的基礎。現行的密碼演算法主要包括序列密碼、分組密碼、公鑰密碼、散列函數等,用於保證信息的安全,提供鑒別、完整性、抗抵賴等服務。
假設我們想通過網路發送消息P(P通常是明文數據包),使用密碼演算法隱藏P的內容可將P轉化成密文,這個轉化過程就叫做加密。
與明文P相對應的密文C的得到依靠一個附加的參數K,稱為密鑰。密文C的接收方為恢復明文,需要另一個密鑰K-1完成反方向的運算。這個反向的過程稱為解密。
⑶ 涓嬪垪灞炰簬瀵圭О瀵嗛掗鍔犲瘑綆楁硶鏄錛堬級
銆愮瓟妗堛戱細B
甯歌佸圭О瀵嗛掗綆楁硶鏈塖DBI錛堝浗瀹跺瘑鐮佸姙鍏瀹ゆ壒鍑嗗浗鍐呯畻娉曪紝浠呯‖浠朵腑瀛樺湪錛夈両DEA銆丷C4銆丏ES銆3DES