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的數據加密傳輸可以在不同的平台上實現並具有實現簡潔、安全性強等優點。
Ⅱ 加密演算法的常見加密演算法
DES(Data Encryption Standard):對稱演算法,數據加密標准,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
RC2和RC4:對稱演算法,用變長密鑰對大量數據進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數據加密演算法,使用 128 位密鑰提供非常強的安全性;
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
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准),嚴格來說不算加密演算法;
AES(Advanced Encryption Standard):高級加密標准,對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael 演算法;
BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
MD5:嚴格來說不算加密演算法,只能說是摘要演算法;
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
在MD5演算法中,首先需要對信息進行填充,使其位元組長度對512求余的結果等於448。因此,信息的位元組長度(Bits Length)將被擴展至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,如今信息位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。(可參見MD5演算法詞條)
PKCS:The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合作夥伴制定的一組公鑰密碼學標准,其中包括證書申請、證書更新、證書作廢表發布、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。
SSF33,SSF28,SCB2(SM1):國家密碼局的隱蔽不公開的商用演算法,在國內民用和商用的,除這些都不容許使用外,其他的都可以使用;
Ⅲ 國際數據加密演算法的演算法簡介
IDEA加密演算法簡介
IDEA(International Data Encryption Algorithm)在密碼學中屬於數據塊加密演算法(Block Cipher)類。IDEA使用長度為128bit的密鑰,數據塊大小為64bit。從理論上講,IDEA屬於「強」加密演算法,至今還沒有出現對該演算法的有效攻擊演算法。
早在1990年,Xuejia Lai等人在EuroCrypt』90年會上提出了分組密碼建議PES(Proposed Encryption Standard)。在EuroCrypt』91年會上,Xuejia Lai等人又提出了PES的修正版IPES(Improved PES)。目前IPES已經商品化,並改名為IDEA。IDEA已由瑞士的Ascom公司注冊專利,以商業目的使用IDEA演算法必須向該公司申請許可。
IDEA是一種由8個相似圈(Round)和一個輸出變換(Output Transformation)組成的迭代演算法。IDEA的每個圈都由三種函數:模(216+1)乘法、模216加法和按位XOR組成。
在加密之前,IDEA通過密鑰擴展(Key Expansion)將128bit的密鑰擴展為52Byte的加密密鑰EK(Encryption Key),然後由EK計算出解密密鑰DK(Decryption Key)。EK和DK分為8組半密鑰,每組長度為6Byte,前8組密鑰用於8圈加密,最後半組密鑰(4Byte)用於輸出變換。IDEA的加密過程和解密過程是一樣的,只不過使用不同的密鑰(加密時用EK,解密時用DK)。
密鑰擴展的過程如下:
1. 將128bit的密鑰作為EK的前8byte;
2. 將前8byte循環左移25bit,得到下一8byte,將這個過程循環7次;
3. 在第7次循環時,取前4byte作為EK的最後4byte;
4. 至此52byte的EK生成完畢。
密鑰擴展的過程如表1所示,為了能夠清楚的看出每個8Byte的關系,在表1中用粗線條將將每個8Byte劃分開了.
IDEA演算法相對來說是一個比較新的演算法,其安全性研究也在不斷進行之中。在IDEA演算法公布後不久,就有學者指出:IDEA的密鑰擴展演算法存在缺陷,導致在IDEA演算法中存在大量弱密鑰類,但這個弱點通過簡單的修改密鑰擴展演算法(加入異或運算元)即可克服。在1997年的EuroCrypt』97年會上,John Borst等人提出了對圈數減少的IDEA的兩種攻擊演算法:對3.5圈IDEA的截短差分攻擊(Truncate Diffrential Attack)和對3圈IDEA的差分線性攻擊(Diffrential Linear Attack)。但作者也同時指出,這兩種攻擊演算法對整8.5圈的IDEA演算法不可能取得實質性的攻擊效果。目前尚未出現新的攻擊演算法,一般認為攻擊整8.5圈IDEA演算法唯一有效的方法是窮盡搜索128bit的密鑰空間。
Ⅳ 對稱加密演算法和非對稱加密演算法
常見的對稱加密演算法包括瑞士的國際數據加密演算法(International Data Encryption
Algorithm,IDEA)和美國的數據加密標准(Date Encryption Standard,DES)。
DES是一種迭代的分組密碼,明文和密文都是64位,使用一個56位的密鑰以及附加的8位奇偶校驗位。攻擊DES的主要技術是窮舉法,由於DES的密鑰長度較短,為了提高安全性,就出現了使用112位密鑰對數據進行三次加密的演算法(3DES),即用兩個56位的密鑰K1和K2,發送方用K1加密,K2解密,再使用K1加密;接收方則使用K1解密,K2加密,再使用K1解密,其效果相當於將密鑰長度加倍。
IDEA是在DES的基礎上發展起來的,類似於3DES。IDEA的明文和密文都是64位,密鑰長度為128位。
非對稱加密演算法也稱為公鑰加密演算法,是指加密密鑰和解密密鑰完全不同,其中一個為公鑰,另一個為私鑰,並且不可能從任何一個推導出另一個。它的優點在於可以適應開放性的使用環境,可以實現數字簽名與驗證。
最常見的非對稱加密演算法是RSA,該演算法的名字以發明者的名字命名:Ron Rivest,AdiShamir 和Leonard Adleman。RSA演算法的密鑰長度為512位。RSA演算法的保密性取決於數學上將一個大數分解為兩個素數的問題的難度,根據已有的數學方法,其計算量極大,破解很難。但是加密/解密時要進行大指數模運算,因此加密/解密速度很慢,主要用在數字簽名中。
用公鑰進行加密,用私鑰進行解密
Ⅳ 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)