1. idea的加密是什麼機制
IDEA加密標准由PGP(Pretty Good Privacy)系統使用。公共密鑰加密使用兩個不同的密鑰, 因此是一種不對稱的加密系統。它的一個密鑰是公開的, 而系統的基本功能也是有公共密鑰的人可以訪問的, 公共密鑰可以保存在系統目錄內或保存在未加密的電子郵件信息中。它的另一個密鑰是專用的, 它用來加密信息但公共密鑰可以解密該信息, 它也可以對公共密鑰加密的信息解密。在提供同等安全性的前提下, 專用密鑰加密的系統速度比較快。
RC5分組密碼演算法是1994由麻薩諸塞技術研究所的Ronald L. Rivest教授發明的,並由RSA實驗室分析。它是參數可變的分組密碼演算法,三個可變的參數是:分組大小、密鑰大小和加密輪數。在此演算法中使用了三種運算:異或、加和循環。
RC5是種比較新的演算法,Rivest設計了RC5的一種特殊的實現方式,因此RC5演算法有一個面向字的結構:RC5-w/r/b,這里w是字長其值可以是16、32或64對於不同的字長明文和密文塊的分組長度為2w位,r是加密輪數,b是密鑰位元組長度。由於RC5一個分組長度可變的密碼演算法,為了便於說明在本文中主要是針對64位的分組w=32進行處理的,下面詳細說明了RC5加密解密的處理過程:
1、創建密鑰組,RC5演算法加密時使用了2r+2個密鑰相關的的32位字:,這里r表示加密的輪數。創建這個密鑰組的過程是非常復雜的但也是直接的,首先將密鑰位元組拷貝到32位字的數組L中(此時要注意處理器是little- endian順序還是big-endian順序),如果需要,最後一個字可以用零填充。然後利用線性同餘發生器模2初始化數組S:
對於i=1到2(r+1)-1: (本應模 ,本文中令w=32)
其中對於16位字32位分組的RC5,P=0xb7e1 Q=0x9e37
對於32位字和64位分組的RC5,P=0xb7e15163 Q=0x9e3779b9
對於64位字和128位分組,P=0xb7151628aed2a6b Q=0x9e3779b97f4a7c15
最後將L與S混合,混合過程如下:
i=j=0
A=B=0
處理3n次(這里n是2(r+1)和c中的最大值,其中c表示輸入的密鑰字的個數)
2、加密處理,在創建完密鑰組後開始進行對明文的加密,加密時,首先將明文分組劃分為兩個32位字:A和B(在假設處理器位元組順序是little- endian、w=32的情況下,第一個明文位元組進入A的最低位元組,第四個明文位元組進入A的最高位元組,第五個明文位元組進入B的最低位元組,以此類推),其中操作符<<<表示循環左移,加運算是模 (本應模 ,本文中令w=32)的。輸出的密文是在寄存器A和B中的內容
3、解密處理,解密也是很容易的,把密文分組劃分為兩個字:A和B(存儲方式和加密一樣),這里符合>>>是循環右移,減運算也是模 (本應模 ,本文中令w=32)的。
IDEA演算法被認為是當今最好最安全的分組密碼演算法!
2. 加密演算法有哪些
常見加密演算法
DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數據加密演算法:使用 128 位密鑰提供非常強的安全性;
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准);
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 演算法;
BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
其它演算法,如ElGamal、Deffie-Hellman、新型橢圓曲線演算法ECC等。
比如說,MD5,你在一些比較正式而嚴格的網站下的東西一般都會有MD5值給出,如安全焦點的軟體工具,每個都有MD5。
3. 安全密鑰異同性分,AES和IDEA屬於什麼演算法
aes和idea都是對稱加密演算法,他們都是塊加密的演算法,idea是在des的基礎上發展起來的,aes是對des的替代演算法。他的密鑰比idea要長,所以安全性也好一些。
4. 什麼是IDEA對稱加密演算法
國際數據加密演算法(IDEA)是上海交通大學教授來學嘉與瑞士學者James Massey聯合提出的。它在1990年正式公布並在以後得到增強。這種演算法是在DES演算法的基礎上發展出來的,類似於三重DES。發展IDEA也是因為感到DES具有密鑰太短等缺點。IDEA的密鑰為128位,這么長的密鑰在今後若干年內應該是安全的。
5. surface安裝IDEA
首先去官網下載idea軟體。點擊下載好的idea,選擇軟體安裝位置。選擇位元組,如果你的電腦是64位的就選擇他,然後點擊安裝,勾選運行idea,選擇插件,默認就好。最後復制注冊碼,idea最新版本的就安裝成功了。
idea提倡的是智能編碼,目的是減少程序員的工作,其特色功能有智能的選取、豐富的導航模式、歷史記錄功能等,最突出的功能是調試(Debug),可以對java代碼、JavaScript、JQuery等技術進行調試。
類似於DES,IDEA演算法也是一種數據塊加密演算法,它設計了一系列加密輪次,每輪加密都使用從完整的加密密鑰中生成的一個子密鑰。與DES的不同處在於,它採用軟體實現和採用硬體實現同樣快速。IDEA曾今也是AES演算法標準的主要競爭者,其安全性已經在國際密碼年會上被證明。
6. IDEA加密演算法的C語言實現
1、數據加密的基本過程就是對原來為明文的文件或數據按某種演算法進行處理,使其成為不可讀的一段代碼,通常稱為「密文」,使其只能在輸入相應的密鑰之後才能顯示出本來內容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。
2、常見加密演算法
DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數據加密演算法:使用 128 位密鑰提供非常強的安全性;
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准);
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 演算法;
BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
其它演算法,如ElGamal、Deffie-Hellman、新型橢圓曲線演算法ECC等。
比如說,MD5,你在一些比較正式而嚴格的網站下的東西一般都會有MD5值給出,如安全焦點的軟體工具,每個都有MD5。
3、常式:
#include<stdio.h>
#include<process.h>
#include<conio.h>
#include<stdlib.h>
#definemaxim65537
#definefuyi65536
#defineone65536
#defineround8
unsignedintinv(unsignedintxin);
unsignedintmul(unsignedinta,unsignedintb);
voidcip(unsignedintIN[4],unsignedintOUT[4],unsignedintZ[7][10]);
voidkey(unsignedintuskey[9],unsignedintZ[7][10]);
voidde_key(unsignedintZ[7][10],unsignedintDK[7][10]);
voidmain()
{
inti,j,k,x;
unsignedintZ[7][10],DK[7][10],XX[5],TT[5],YY[5];
unsignedintuskey[9];
FILE*fpout,*fpin;
printf(" InputKey");
for(i=1;i<=8;i++)
scanf("%6u",&uskey[i]);
for(i=0;i<9;i++)
uskey[i]=100+i*3;
key(uskey,Z);/*產生加密子密鑰*/
de_key(Z,DK);/*計算解密子密鑰*/
if((fpin=fopen("ekey.txt","w"))==NULL)
{
printf("cannotopenfile!");
exit(EXIT_FAILURE);
}
for(i=0;i<7;i++)
{
for(j=0;j<10;j++)
fprintf(fpin,"%6u",Z[i][j]);
fprintf(fpin," ");
}
fclose(fpin);
/*XX[1..5]中為明文*/
for(i=0;i<4;i++)XX[i]=2*i+101;
clrscr();
printf("Mingwen%6u%6u%6u%6u ",XX[0],XX[1],XX[2],XX[3]);
if((fpin=(fopen("ideaming.txt","w")))==NULL)
{printf("cannotopenfile!");
exit(EXIT_FAILURE);
}
fprintf(fpin,"%6u,%6u,%6u,%6u ",XX[0],XX[1],XX[2],XX[3]);
fclose(fpin);
for(i=1;i<=30000;i++)
cip(XX,YY,Z);/*用密鑰Z加密XX中的明文並存在YY中*/
printf(" Mingwen%6u%6u%6u%6u ",YY[0],YY[1],YY[2],YY[3]);
if((fpin=fopen("ideamiwn.txt","w"))==NULL)
{
printf("cannotopenfile!");
exit(EXIT_FAILURE);
}
fprintf(fpout,"%6u%6u%6u%6u ",YY[0],YY[1],YY[2],YY[3]);
{
printf("cannotopenfile!");
exit(EXIT_FAILURE);
}
fprintf(fpout,"%6u%6u%6u%6u ",YY[0],YY[1],YY[2],YY[3]);
fclose(fpout);
for(i=1;i<=30000;i++)
cip(YY,TT,DK);/*encipherYYtoTTwithKeyDK*/
printf(" JieMi%6u%6u%6u%6u ",TT[0],TT[1],TT[2],TT[3]);
if((fpout=fopen("dideaout.txt","w"))==NULL)
{
printf("cannotopenfile!");
exit(EXIT_FAILURE);
}
fprintf(fpout,"%6u%6u%6u%6u ",TT[0],TT[1],TT[2],TT[3]);
fclose(fpout);
}
/*此函數執行IDEA演算法中的加密過程*/
voidcip(unsignedintIN[4],unsignedintOUT[4],unsignedintZ[7][10])
{
unsignedintr,x1,x2,x3,x4,kk,t1,t2,a;
x1=IN[0];x2=IN[1];x3=IN[2];x4=IN[3];
for(r=1;r<=8;r++)
{
/*對64位的塊進行分組運算*/
x1=mul(x1,Z[1][r]);x4=mul(x4,Z[4][r]);
x2=x2+Z[2][r]&one;x3=(x3+Z[3][r])&one;
/*MA結構的函數*/
kk=mul(Z[5][r],(x1^x3));
t1=mul(Z[6][r],(kk+(x2^x4))&one;
/*隨機變換PI*/
x1=x1^t1;x4=x4^t2;a=x2^t2;x2=x3^t1;x3=a;
}
/*輸出轉換*/
OUT[0]=mul(x1,Z[1][round+1]);
OUT[3]=mul(x4,Z[1][round+1]);
OUT[1]=(x3+Z[2][round+1])&one;
OUT[2]=(x2+Z[3][round+1])&one;
}
/*用高低演算法上實現乘法運算*/
unsignedintmul(unsignedinta,unsignedintb)
{
longintp;
longunsignedq;
if(a==0)p=maxim-b;
elseif(b==0)p=maxim-a;
else
{
q=(unsignedlong)a*(unsignedlong)b;
p=(q&one)-(q>>16);
if(p<=0)p=p+maxim;
{
return(unsigned)(p&one);
}
/*通過Euclideangcd演算法計算xin的倒數*/
unsignedintinv(unsignedintxin)
{
longn1,n2,q,r,b1,b2,t;
if(xin==0)
b2=0;
else
{n1=maxim;n2=xin;b2=1;b1=0;
do{
r=(n1%n2);q=(n1-r)/n2;
if(r==0)
if(b2<0)b2=maxim+b2;
else
{n1=n2;n2=r;
t=b2;
b2=b1-q*b2;b1=t;
}
}while(r!=0);
}
return(unsignedlongint)b2;
}
/*產生加密子密鑰Z*/
voidkey(unsignedintuskey[9],unsignedintZ[7][10])
{
unsignedintS[54];
inti,j,r;
for(i=1;i<9;i++)
S[i-1]=uskey[i];
/*shifts*/
for(i=8;i<54;i++)
{
if(i+2)%8==0)/*對於S[14],S[22],...進行計算*/
S[i]=((S[i-7]<<0)^(S[i-14]>>7)&one;
elseif((i+1)%8==0)/*對於S[15],S[23],...進行計算*/
S[i]=((S[i-15]<<9)^(S[i-14]>>7)&one;
else
S[i]=((S[i-7]<<9)^(S[i-6]>>7)&one;
}
/*取得子密鑰*/
for(r=1;r<=round+1;r++)
for(j=1;j<7;j++)
Z[j][r]=S[6*(r-1)+j-1];
}
/*計算解子密鑰DK*/
voidde_key(unsignedintZ[7][10],unsignedintDK[7][10])
{
intj;
for(j=1;j<=round+1;j++)
{DK[1][round-j+2]=inv(Z[1][j]);
DK[4][round-j+2]=inv(Z[4][j]);
if(i==1|j==round+1)
{
DK[2][round-j+2]=(fuyi-Z[2][j])&one;
DK[3][round-j+2]=(fuyi-Z[3][j])&one;
}
else
{
DK[2][round-j+2]=inv(Z[3][j]);
DK[3][round-j+2]=inv(Z[2][j]);
}
}
for(j=1;j<=round+1;j++)
{
DK[5][round-j+2]=inv(Z[5][j]);
DK[6][round-j+2]=inv(Z[6][j]);
}
}
7. idea加密演算法屬於什麼密碼體制
在對稱密鑰體制中,它的加密密鑰與解密密鑰的密碼體制是相同的,且收發雙方必須共享密鑰,對稱密碼的密鑰是保密的,沒有密鑰,解密就不可行,知道演算法和若干密文不足以確定密鑰。公鑰密碼體制中,它使用不同的加密密鑰和解密密鑰,且加密密鑰是向公眾公開的,而解密密鑰是需要保密的,發送方擁有加密或者解密密鑰,而接收方擁有另一個密鑰。兩個密鑰之一也是保密的,無解密密鑰,解密不可行,知道演算法和其中一個密鑰以及若干密文不能確定另一個密鑰。
優點:對稱密碼技術的優點在於效率高,演算法簡單,系統開銷小,適合加密大量數據。對稱密鑰演算法具有加密處理簡單,加解密速度快,密鑰較短,發展歷史悠久等優點。
缺點:對稱密碼技術進行安全通信前需要以安全方式進行密鑰交換,且它的規模復雜。公鑰密鑰演算法具有加解密速度慢的特點,密鑰尺寸大,發展歷史較短等特點。
8. idea的IT
加密演算法
是旅居瑞士中國青年學者來學嘉和著名密碼專家J.Massey於1990年提出的。它在1990年正式公布並在以後得到增強。這種演算法是在DES演算法的基礎上發展出來的,類似於三重DES,和DES一樣IDEA也是屬於對稱密鑰演算法。發展IDEA也是因為感到DES具有密鑰太短等缺點,已經過時。IDEA的密鑰為128位,這么長的密鑰在今後若干年內應該是安全的。
類似於DES,IDEA演算法也是一種數據塊加密演算法,它設計了一系列加密輪次,每輪加密都使用從完整的加密密鑰中生成的一個子密鑰。與DES的不同處在於,它採用軟體實現和採用硬體實現同樣快速。
由於IDEA是在美國之外提出並發展起來的,避開了美國法律上對加密技術的諸多限制,因此,有關IDEA演算法和實現技術的書籍都可以自由出版和交流,可極大地促進IDEA的發展和完善。
IDEA曾今也是AES演算法標準的主要競爭者,其安全性已經在國際密碼年會上被證明。
在PGP(pretty good privacy)中,IDEA演算法被採用。
64-位數據分組被分成4個16-位子分組:xl,X2,x3,x4。這4個子分組成為演算法的第一輪的輸入,總共有8輪。在每一輪中,這4個子分組相列相異或,相加,相乘,且與6個16-位子密鑰相異或,相加,相乘。在輪與輪間,第二和第:個子分組交換。最後在輸出變換中4個子分組與4個子密鑰進行運算。
在每一輪中,執行的順序如下:(以下表述中的相加指的是兩個數mod 2^256 相加,例如:(a + b) mod p,其結果是a+b算術和除以p的余數,也就是說,(a+b) = kp +r,則 (a+b) mod p =r,又例如對於下列表述中的「(2)X2和第二個子密鑰相加」就是指用X2與第二個子密鑰的和除以2^16(即65536)後的余數。對於以下表述中的相乘,指的是:(a × b) mod p,其結果是 a × b算術乘法除以p的余數,又例如對於下列表述中的「(1)X1和第一個子密鑰相乘。」就是指用X1和第一個子密鑰相乘後的積除於(2^16+1)(即65537)後的余數。異或指的是不進位加法。)
(1)X1和第一個子密鑰相乘。
(2)X2和第二個子密鑰相加。
(3)X3和第三個子密鑰相加。
(4)X4和第四個子密鑰相乘。
(5)將第(1)步和第(3)步的結果相異或。·
(6)將第(2)步和第(4)步的結果相異或。
(7)將第(5)步的結果與第五個子密鑰相乘。
(8)將第(6)步和第(7)步的結果相加。
(9)將第(8)步的結果與第六個子密鑰相乘。
(10)將第(7)步和第(9)步的結果相加。
(11)將第(1)步和第(9)步的結果相異或。
(12)將第(3)步和第(9)步的結果相異或。
(13)將第(2)步和第(10)步的結果相異或。
(14)將第(4)步和第(10)步的結果相異或。
每一輪的輸出是第(11)、(12)、(13)和(14) 步的結果形成的4個子分組。將中間兩個分組分組交換(最後一輪除外)後,即為下一輪的輸入。
經過8輪運算之後,有一個最終的輸出變換:
(1) X1和第一個子密鑰相乘。
(2) X2和第二個子密鑰相加。
(3) X3和第三個子密鑰相加。
(4) X4和第四個子密鑰相乘。
最後,這4個子分組重新連接到一起產生密文。
產生子密鑰也很容易。這個演算法用了52個子密鑰(8輪中的每一輪需要6個,其他4個用與輸出變換)。首先,將128-位密鑰分成8個16-位子密鑰。這些是演算法的第一批8個子密鑰(第一輪六個,第二輪的頭兩個)。然後,密鑰向左環移25位後再分成8個子密鑰。開始4個用在第二輪,後面4個用在第三輪。密鑰再次向左環移25位產生另外8個子密鑰,如此進行D演算法結束。
解密過程基本上一樣,只是子密鑰需要求逆且有些微小差別,解密子密鑰要麼是加密子密鑰的加法逆要麼是乘法逆。(對IDEA而言,對於模256十1乘,全0子分組用256=-l來表示,因此0的乘法逆是0)。計運算元密鑰要花點時間,但對每一個解密密鑰,只需做一次。
關於IDEA中運用的很多概念,需要參考數論中的知識,如有疑問,可以參考以下資料:計算機密碼學(盧開澄著清華大學出版社出版),計算機密碼學及其應用,初等數論,數論導引(華羅庚著)等。關於IDEA運用的數學原理,均可在以上資料中獲得答案。
IDEA獎項
國際傑出設計獎(Instrial Design Excellence Awards)
9. 高分求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
10. java環境下實現idea演算法的加密解密
基於Java的IDEA加密演算法探討
隨著Internet的迅速發展,電子商務的浪潮勢不可擋,日常工作和數據傳輸都放在Internet網上進行傳輸,大大提高了效率,降低了成本,創造了良好的效益。但是,由於 Internet網路協議本身存在著重要的安全問題(IP包本身並不繼承任何安全特性,很容易偽造出IP包的地址、修改其內容、重播以前的包以及在傳輸途中攔截並查看包的內容),使網上的信息傳輸存在巨大的安全風險電子商務的安全問題也越來越突出。加密是電子商務中最主要的安全技術,加密方法的選取直接影響電子商務活動中信息的安全程度,在電子商務系統中,主要的安全問題都可以通過加密來解決。數據的保密性可通過不同的加密演算法對數據加密來實現。
對我國來講,雖然可以引進很多的外國設備,但加密設備不能依靠引進,因為它涉及到網路安全、國家機密信息的安全,所以必須自己研製。當前國際上有許多加密演算法,其中DES(Data Encryption Standard)是發明最早的用得最廣泛的分組對稱加密演算法,DES用56位蜜鑰加密64位明文,輸出64位密文,DES的56位密鑰共有256 種可能的密鑰,但歷史上曾利用窮舉攻擊破解過DES密鑰,1998年電子邊境基金會(EFF)用25萬美元製造的專用計算機,用56小時破解了DES的密鑰,1999年,EFF用22小時完成了破解工作,使DES演算法受到了嚴重打擊,使它的安全性受到嚴重威脅。因為JAVA語言的安全性和網路處理能力較強,本文主要介紹使用IDEA(Internation Data Encryption Algorithm )數據加密演算法在Java環境下實現數據的安全傳輸。
一、IDEA數據加密演算法
IDEA數據加密演算法是由中國學者來學嘉博士和著名的密碼專家 James L. Massey 於1990年聯合提出的。它的明文和密文都是64比特,但密鑰長為128比特。IDEA 是作為迭代的分組密碼實現的,使用 128 位的密鑰和 8 個循環。這比 DES 提供了更多的 安全性,但是在選擇用於 IDEA 的密鑰時,應該排除那些稱為「弱密鑰」的密鑰。DES 只有四個弱密鑰和 12 個次弱密鑰,而 IDEA 中的弱密鑰數相當可觀,有 2 的 51 次方個。但是,如果密鑰的總數非常大,達到 2 的 128 次方個,那麼仍有 2 的 77 次方個密鑰可供選擇。IDEA 被認為是極為安全的。使用 128 位的密鑰,蠻力攻擊中需要進行的測試次數與 DES 相比會明顯增大,甚至允許對弱密鑰測試。而且,它本身也顯示了它尤其能抵抗專業形式的分析性攻擊。
二、Java密碼體系和Java密碼擴展
Java是Sun公司開發的一種面向對象的編程語言,並且由於它的平台無關性被大量應用於Internet的開發。Java密碼體系(JCA)和Java密碼擴展(JCE)的設計目的是為Java提供與實現無關的加密函數API。它們都用factory方法來創建類的常式,然後把實際的加密函數委託給提供者指定的底層引擎,引擎中為類提供了服務提供者介面在Java中實現數據的加密/解密,是使用其內置的JCE(Java加密擴展)來實現的。Java開發工具集1.1為實現包括數字簽名和信息摘要在內的加密功能,推出了一種基於供應商的新型靈活應用編程介面。Java密碼體系結構支持供應商的互操作,同時支持硬體和軟體實現。Java密碼學結構設計遵循兩個原則:(1)演算法的獨立性和可靠性。(2)實現的獨立性和相互作用性。演算法的獨立性是通過定義密碼服務類來獲得。用戶只需了解密碼演算法的概念,而不用去關心如何實現這些概念。實現的獨立性和相互作用性通過密碼服務提供器來實現。密碼服務提供器是實現一個或多個密碼服務的一個或多個程序包。軟體開發商根據一定介面,將各種演算法實現後,打包成一個提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIP和JAR文件放在CLASSPATH下,再編輯Java安全屬性文件來設置定義一個提供器。Java運行環境Sun版本時,提供一個預設的提供器Sun。
三、Java環境下的實現
1.加密過程的實現
void idea_enc( int data11[], /*待加密的64位數據首地址*/ int key1[]){
int i ;
int tmp,x;
int zz[]=new int[6];
for ( i = 0 ; i < 48 ; i += 6) { /*進行8輪循環*/
for(int j=0,box=i; j<6; j++,box++){
zz[j]=key1[box];
}
x = handle_data(data11,zz);
tmp = data11[1]; /*交換中間兩個*/
data11[1] = data11[2];
data11[2] = tmp;
}
tmp = data11[1]; /*最後一輪不交換*/
data11[1] = data11[2];
data11[2] = tmp;
data11[0] = MUL(data11[0],key1[48]);
data11[1] =(char)((data11[1] + key1[49])%0x10000);
data11[2] =(char)((data11[2] + key1[50])%0x10000);
data11[3] = MUL(data11[3],key1[51]);
}
2.解密過程的實現
void key_decryExp(int outkey[])/*解密密鑰的變逆處理*/
{ int tmpkey[] = new int[52] ;
int i;
for ( i = 0 ; i < 52 ; i++) {
tmpkey[i] = outkey[ wz_spkey[i] ] ; /*換位*/
}
for ( i = 0 ; i < 52 ; i++) {
outkey[i] = tmpkey[i];
}
for ( i = 0 ; i < 18 ; i++) {
outkey[wz_spaddrever[i]] = (char)(65536-outkey[wz_spaddrever[i]]) ; /*替換成加法逆*/
}
for ( i = 0 ; i < 18 ; i++){
outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] )); /*替換成乘法逆*/
}
}
四、總結
在實際應用中,我們可以使用Java開發工具包(JDK)中內置的對Socket通信的支持,通過JCE中的Java流和鏈表,加密基於Socket的網路通信.我們知道,加密/解密是數據傳輸中保證數據完整性的常用方法,Java語言因其平台無關性,在Internet上的應用非常之廣泛.使用Java實現基於IDEA的數據加密傳輸可以在不同的平台上實現並具有實現簡潔、安全性強等優點。