能否詳細說明一下對稱演算法中的DES,AES?

如果可以的話,也說明下IDEA


題外話,其實與其叫AES,還不如叫Rijndael。

既然題主已經閱讀過基本,我就說點別的:)

DES和AES的關鍵不同就在於前者的結構是Feistel,後者是SPN(Substitution and Permutation Network)

Feistel每輪只處理上一輪結果的一半,而SPN每次都加密整個塊。Feilstel裡面,f可以選可逆的,也可以選不可逆的,不影響加密解密。而SPN的解密必須是對加密的逆運算,所以SPN中必須每一步都可逆。

S-box是產生非線性變換的最重要的部分, 至於DES的s-box為什麼那麼選,目前都還沒有定論。

AES里,整體的加密相當於在GF(2^128)上面,把輸入映射到一個高階的、係數並非全部已知的多項式上, 因為解這個多項式依舊沒有什麼好手段, 所以在面對滿輪(full round)AES時,純數學攻擊的複雜度和brute-force的複雜度相當。

Side-Channel Attack和具體的實現相關,在此就不多說了。


對於 @徐君 的回答,我想可能是我的問題提問方式,讓你產生誤解,我不是懶到連百度都不想用的人,我只是想聽聽大家對這些演算法的理解

--------------------------------------------------------------------------------------------------------------------------------------------

現在說說我對DES的了解

在密碼機制設計中,我們設計的原則就是要做到擴散和混淆(目的就是為了不好被破解)

說俗一點,就是讓密碼看起來「更沒有規律」(這也是為什麼要擴散和混淆),很難通過數學方法分析破譯它。

那DES是怎麼做到讓密碼看起來「更沒有規律」呢?

它是明文通過一個輪函數,進行16次迭代,並且配合置換得到加密結果,整個構架,人們稱這個構架叫做Feistel網路,簡單一點說,就是通過代換和置換的交替使用,和多次迭代,使得密文與密鑰的關係更加複雜(達到混淆效果)。

那麼具體過程如圖

這是一張描述單輪迭代過程的示意圖

首先

將64位(8個位元組)明文分成等長的兩部分,也就是左右兩個部分L、R部分(一部分4位元組),注意在此之前,已經經歷了將64位數據位置置換的過程。將R部分直接作為輸出的前半部分,也就是L部分,再將R部分作用於輪函數後與L部分異或運算得到的結果作為輸出的後半分,也就是R部分,如此循環16次,就得到了密文。

解密過程,與加密過程一樣,唯一不一樣就是子密鑰的作用順序不用,順序是顛倒的,因為你在加密過程中,最後一次作用在最後一個子密鑰,所以解密,第一次也應該用最後一個子密鑰作用,一層一層反作用上去。16個子密鑰也是不相同的


DES設計於上世紀70年代,由IBM設計,採用16輪Fiestel結構,分組長度64比特。該結構的好處是加解密相同,只是密鑰的使用順序不同,實現時只要實現加密就可以了,實現代價小。DES主要面向硬體設計。

該演算法被人質疑的原因在於美國的NSA參與了演算法設計且其設計原理不公開,具體表現在:

1.據說原來IBM設計時密鑰是128比特最終改為56比特;

2.s盒的設計原理一隻沒公開,外界懷疑其存在後門,但到目前為止沒有發現,而且我個人認為可能也確實不存在後門。

由於DES密鑰長度短,隨著超級計算機計算能力以及分散式計算,56比特密鑰確實太短,因此美國開始面向全球徵集DES的繼任者AES

A E S,設計時叫Rijndael,由兩個比利時人設計,10輪S P N結構,分組長度128比特。演算法設計時吸取了DES的教訓,密鑰長度128比特(實際上設計時演算法支持128,192,256三種長度),使用的sbox由有限域上的逆變換構造,線性變換使用MDS矩陣進行擴散。

I D E A是來學嘉設計,上世紀90年代設計,原來是歐洲主推的分組演算法(當時來學嘉在瑞士),分組長度64比特。演算法中沒有使用sbox,混合使用了不同域上的運算達到混淆和擴散。

這些分組演算法設計理念都是使用簡單輪函數的迭代來實現擴散和混淆,基本上輪函數中的sbox主要作用是混淆,線性變換主要用來快速擴散。


這裡主要是看一下AES-128bit演算法,此演算法主要包含兩個部分

- key擴展,將原來128bit(16byte)的 key擴展成176位元組

-文本加密,使用之前生成的176位元組的擴展key進行矩陣運算

加密運算包含:

-SubBytes

-Shift Rows

-Mix Columns

-Add Round Key (Round key指的是前面生成的擴展key, 每16位元組一組)

具體的加密演算法請看這張圖:


推薦閱讀:

深度增強學習之Policy Gradient方法1
有趣的演算法(1)排序
3/7 演算法題詳解:Reverse a Singly Sublist 反轉一個子單向鏈表
天天演算法 | Easy | 3. 去除有序數組中的重複元素
追MM的各種演算法

TAG:演算法 | 密碼學 |