密碼算法詳解——DES

0 DES簡介

  在20世紀60年代後期,IBM公司成立了一個由Horst Feistel負責的計算機密碼學研究項目。1971年設計出密碼算法LUCIFER後,該項目宣告結束。LUCIFER被賣給了倫敦的Lloyd公司,用在一樣由IBM公司開發的現金髮放系統上。LUCIFER是分組長度爲64位、密鑰長度爲128位、具備Feistel結構的分組密碼算法。由於LUCIFER很是成功,IBM決定開發一個適合於芯片實現的商業密碼產品。這一次由Walter Tuchman和Carl Meyer牽頭,參與者不只有IBM公司的研究人員,並且還有美國國家安全局(NSA)的技術顧問。此次努力的結果是給出了LUCIFER的一個修訂版,它的抗密碼分析能力更強,並且密鑰長度減少爲56位。git

  1973年,美國國家標準局(NBS)徵求美國國家密碼標準方案時,IBM將Tuchman-Meyer方案提交給NBS,它是全部應徵方案中最好的一個,因此1977年NBS將它採納爲數據加密標準,即DES。github

  以上內容直接來自與參考文獻[1],參考文獻[2]給出了更加詳細的一些介紹,有興趣能夠閱讀。算法

1 Feistel

  分組密碼經常使用的結構有SP、Feistel[3]、Lai-Massey、MISTY等,其中Feistel結構的使用較爲廣泛,不只DES用到了,後續的不少經典算法中都有涉及,故在此先對其進行介紹。安全

1.1 Feistel介紹

  Feistel是以發明者Horst Feistel的名字命名的。加解密的原理如右圖1,左邊表示的加密過程,右邊表示解密過程。網絡

  在每一輪加密過程當中,明文被分紅左右兩部分。函數

  加密和解密公式以下:編碼

  不一樣的是,在加密過程當中,輪數和輪密鑰從小開始遞增;解密時正好相反,從最大開始遞減。加密

  從圖中能夠看出,加密最後一輪的操做與前面的有所不一樣,最後一輪獲得的兩個部分沒有交換,之因此這樣是爲了保持解密的流程和加密一致,這樣在硬件設計時可使用相同的結構,進而減小硬件面積。spa

  可是對於Feistel結構最本質的特色究竟是什麼,我也一直不太明白,比較淺顯的一點認識就是:每一輪只有一半的比特位參與計算,另一半直接做爲下一輪的輸入。設計

 

1.2 一個簡單的例子

  假設明文爲(L0,R0),一共有兩輪計算,每輪的密鑰分別爲k0、k1,加解密的流程如圖2。

2 算法流程

  DES算法原理如右圖,相關參數以下: 

    • 明文分組長度:64 bits
    • 密鑰長度:64 bits
    • 輪數:16輪

  整個操做能夠分爲3部分:

    • 初始置換和逆初始置換:這是一對可逆操做,一組數字通過初始置換(或逆初始置換)後,再通過逆初始置換(或初始置換)便可恢復原來的值;
    • 每輪的加解密操做:64位明文和48爲密鑰通過必定的操做,輸出64位密文;
    • 輪密鑰計算:64位初始密鑰通過置換、循環移位等獲得16輪的密鑰,每輪密鑰長度爲48位。

  接下來分別對這三種核心操做進行介紹。

 

 

2.1 初始置換與逆初始置換

  置換的操做以下表一、表2,將一個64位的輸入經過各位的提到獲得一個新的64位輸出。觀察能夠發現x = IP-1 ( IP(x) ) = IP ( IP-1(x) )。  

  須要注意的一點是,圖中的索引值從1開始(下文中的數字也相似),有些資料中是從0開始的,若是從零開始,則全部的數字減1便可。

2.2 每輪的操做

  每一輪的流程如圖4,從圖中能夠看出DES用到了Feistel結構。F即爲圖中虛線框的內容。

                                                                                                        圖4 輪操做流程

  每一輪主要涉及3中操做:

    • 擴展/置換:將32位輸入擴展成48位輸出,如表3;
    • S盒:將48位輸入分紅8組分別做爲8個S盒的輸入,每組6位,最高位和最低位做爲行索引,中間4位做爲列索引,獲得一個值x(0<=x<=15),表示爲二進制即爲4位,8個S盒的輸出和在一塊兒正好32位。表4是S1的數值;
    • 置換:對32位輸入進行位的變化,輸出仍爲32位,如表5。

2.3 輪密鑰擴展

  從圖1和圖4中能夠得出,密鑰擴展流程能夠表示以下:

    1) 64位初始密鑰P進行置換選擇1,獲得56位輸出K;

    2) 將K循環左移必定位數,再進行置換選擇2獲得48位輸出k1(即第一輪的密鑰);

    3) 循環步驟2),直至獲得16輪的密鑰(k1、k2、……、k16);

    4) 結束。

  置換選擇一、置換選擇2和左移次數的值分別如表六、表七、表8。

 

3 其它密碼算法

  近期介紹了DES、AES和Simon3種密碼算法,他們都屬於分組密碼算法,後續有時間再介紹其它分組密碼算法、流密碼算法、雜湊函數(Hash算法)等。讀者有興趣能夠參考《密碼學與網絡安全——原理與實踐》以及網上相關資料,算法原理基本都差很少。

4 參考資料

[1] William Stallings著;王張宜等譯. 密碼編碼學與網絡安全——原理與實踐(第五版)[M]. 北京:電子工業出版社,2012.1.

[2] http://en.wikipedia.org/wiki/Data_Encryption_Standard

[3] http://en.wikipedia.org/wiki/Feistel_cipher

[4] https://github.com/tarequeh/DES

相關文章
相關標籤/搜索