IDEA資料加密演算法介紹
IDEA資料加密演算法及實現
作者:成曉旭
IDEA對稱資料加密演算法,是我2000年剛畢業,工作需要進行資料加密時,學習、實現的第一個標準資料加密演算法,並且此後就深深地迷上了資料加密這個方面,以後連續兩年潛心學習和研究這方面的知識與技術。在此過程中,非常感謝同事李哥對我的大力幫助,並從此成了很好的朋友。
1、 簡介
IDEA是International Data Encryption Algorithm 的縮寫,是1990年由瑞士聯邦技術學院來學嘉X.J.Lai 和Massey提出的建議標準演算法稱作PES( Proposed Encryption Standard) 。Lai 和Massey 在1992 年進行了改進強化了抗差分分析的能力改稱為IDEA 它也是對64bit大小的資料塊加密的分組加密演算法金鑰長度為128位它基於“相異代數群上的混合運算”設計思想演算法用硬體和軟體實現都很容易且比DES在實現上快的多。IDEA自問世以來,已經經歷了大量的詳細審查,對密碼分析具有很強的抵抗能力,在多種商業產品中被使用。
這種演算法是在DES演算法的基礎上發展出來的,類似於三重DES。發展IDEA也是因為感到DES具有金鑰太短等缺點,已經過時。IDEA的金鑰為128位,這麼長的金鑰在今後若干年內應該是安全的。
類似於DES,IDEA演算法也是一種資料塊加密演算法,它設計了一系列加密輪次,每輪加密都使用從完整的加密金鑰中生成的一個子金鑰。與DES的不同處在於,它採用軟體實現和採用硬體實現同樣快速。
由於IDEA是在美國之外提出並發展起來的,避開了美國法律上對加密技術的諸多限制,因此,有關IDEA演算法和實現技術的書籍都可以自由出版和交流,可極大地促進IDEA的發展和完善。
2、 演算法詳解:
2.1產生金鑰
演算法用了52個子金鑰(8輪中的每一輪需要6個,其他4個用與輸出變換)。首先,將128-位金鑰分成8個16-位子金鑰。這些是演算法的第一批8個子金鑰(第一輪六個,第二輪的頭兩個)。然後,金鑰向左環移x位後再分成8個子金鑰。開始4個用在第二輪,後面4個用在第三輪。金鑰再次向左環移25位產生另外8個子金鑰,如此進行直到演算法結束。具體是:
IDEA總共進行8輪迭代操作,每輪需要6個子金鑰,另外還需要4個額外子金鑰,所以總共需要52個子金鑰,這個52個子金鑰都是從128位金鑰中擴充套件出來的。
首先把輸入的Key分成8個16位的子金鑰, 1~6號子金鑰供第一輪加密使用,7~8號子金鑰供第二輪使用,然後把這個128位金鑰迴圈左移25位,這樣Key = k26k27k28…k24k25。
把新生成的Key在分成8個16位的子金鑰,1~4號子金鑰供第二輪加密使用(前面已經提供了兩個)5~8號子金鑰供第三輪加密使用。到此我們已經得到了16個子金鑰,如此繼續,當迴圈左移了5次之後已經生成了48個子金鑰,還有四個額外的子金鑰需要生成,再次把Key迴圈左移25位,選取劃分出來的8個16位子金鑰的前4個作為那4個額外的加密金鑰.供加密使用的52個子金鑰生成完畢。
輸入的64-位資料分組被分成4個16-位子分組:xl,X2,x3和x4。這4個子分組成為演算法的第一輪的輸入,總共有8輪。在每一輪中,這4個子分組相互相異或,相加,相乘,且與6個16-位子金鑰相異或,相加,相乘。在輪與輪間,第二和第三個子分組交換。最後在輸出變換中4個子分組與4個子金鑰進行運算。
2.2加、解密過程
在每一輪中,執行的順序如下:
(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個子分組重新連線到一起產生密文。
2.3金鑰對應圖
2.4加密過程圖
2.5解密過程圖
3、 評價:
IDEA演算法的金鑰長度為128位。設計者盡最大努力使該演算法不受差分密碼分析的影響,數學家已證明IDEA演算法在其8圈迭代的第4圈之後便不受差分密碼分析的影響了。假定窮舉法攻擊有效的話,那麼即使設計一種每秒種可以試驗10億個金鑰的專用晶片,並將10億片這樣的晶片用於此項工作,仍需1013年才能解決問題;另一方面,若用1024片這樣的晶片,有可能在一天內找到金鑰,不過人們還無法找到足夠的矽原子來製造這樣一臺機器。目前,尚無一片公開發表的試圖對IDEA進行密碼分析的文章。因此,就現在來看應當說IDEA是非常安全的。
並且,IDEA資料比較RSA演算法加、解決速度快得多,又比DES演算法要相對安全得多。
4、 參考文獻:
《應用密碼學(協議演算法與C源程式)》:機械工業出版社
5、 原始碼:
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1109279
相關文章
- IDEA資料加密演算法實現Idea加密演算法
- 加密演算法介紹及加密演算法的選擇加密演算法
- ECC加密演算法入門介紹加密演算法
- AES 加密演算法的詳細介紹加密演算法
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- 資料庫介紹資料庫
- javascript加密簡單介紹JavaScript加密
- 【 演算法與資料結構專場 】BitMap 演算法介紹演算法資料結構
- RSA加密演算法簡單介紹以及python實現加密演算法Python
- python演算法與資料結構-演算法和資料結構介紹(31)Python演算法資料結構
- MNIST資料集介紹
- Cora 資料集介紹
- IndexedDB資料庫介紹Index資料庫
- MongoDB資料模型介紹MongoDB模型
- json資料介紹JSON
- nuPlan資料集介紹
- 文件加密的發展介紹加密
- HSQL 資料庫介紹(1)--簡介SQL資料庫
- Android資料加密之異或加密演算法Android加密演算法
- 常用加密解密演算法【RSA、AES、DES、MD5】介紹和使用加密解密演算法
- 資料庫介紹--初識資料庫資料庫
- 資料倉儲—資料庫—Oracle 介紹資料庫Oracle
- MySQL資料庫鎖介紹MySql資料庫
- 【Redis】資料型別介紹Redis資料型別
- Rust 資料型別介紹Rust資料型別
- PostgreSQL資料rotate用法介紹SQL
- 大資料核心元件介紹大資料元件
- Oracle資料型別介紹Oracle資料型別
- postgresql資料庫鎖介紹SQL資料庫
- ORACLE常用資料字典介紹Oracle
- MySQL資料切分策略介紹MySql
- camunda相關資料介紹
- 在PHP中使用AES加密演算法加密資料及解密資料PHP加密演算法解密
- 限流演算法介紹演算法
- GC演算法介紹GC演算法
- Bootstrap Blazor 元件介紹 Table (三)列資料格式功能介紹bootBlazor元件
- 大型網站的HTTPS實踐(二)——HTTPS加密演算法介紹網站HTTP加密演算法
- L10資料庫——資料庫介紹資料庫