Rijndael(讀做rain-dahl)是由美國國家標準與技術協會(NIST)所選的高級加密標準(AES)的候選算法。html
AES算法流程:算法
下面簡單介紹下各個部分的做用與意義:數組
- 明文P:
沒有通過加密的數據。安全
- 密鑰K:
用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰爲接收方與發送方協商產生,但不能夠直接在網絡上傳輸,不然會致使密鑰泄漏,一般是經過非對稱加密算法加密密鑰,而後再經過網絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不能夠泄漏的,不然會被攻擊者還原密文,竊取機密數據。網絡
- AES加密函數:
設AES加密函數爲E,則 C = E(K, P),其中P爲明文,K爲密鑰,C爲密文。也就是說,把明文P和密鑰K做爲加密函數的參數輸入,則加密函數E會輸出密文C。函數
- 密文C:
經加密函數處理後的數據加密
- AES解密函數:
設AES解密函數爲D,則 P = D(K, C),其中C爲密文,K爲密鑰,P爲明文。也就是說,把密文C和密鑰K做爲解密函數的參數輸入,則解密函數會輸出明文P。spa
在這裏簡單介紹下對稱加密算法與非對稱加密算法的區別。.net
- 對稱加密算法:
加密和解密用到的密鑰是相同的,這種加密方式加密速度很是快,適合常常發送數據的場合。缺點是密鑰的傳輸比較麻煩。3d
- 非對稱加密算法:
加密和解密用的密鑰是不一樣的,這種加密方式是用數學上的難解問題構造的,一般加密解密的速度比較慢,適合偶爾發送數據的場合。優勢是密鑰傳輸方便。常見的非對稱加密算法爲RSA、ECC和EIGamal。
實際中,通常是經過RSA加密AES的密鑰,傳輸到接收方,接收方解密獲得AES密鑰,而後發送方和接收方用AES密鑰來通訊。
AES算法流程:
AES加密過程涉及到4種操做,分別是字節替代、行移位、列混淆和輪密鑰加。解密過程分別爲對應的逆操做。因爲每一步操做都是可逆的,按照相反的順序進行解密便可恢復明文。加解密中每輪的密鑰分別由初始密鑰擴展獲得。算法中16個字節的明文、密文和輪密鑰都以一個4x4的矩陣表示。
1、字節代換
1.字節代換操做
AES的字節代換其實就是一個簡單的查表操做。AES定義了一個S盒和一個逆S盒。
AES的S盒:
2.字節代換逆操做
逆字節代換也就是查逆S盒來變換,逆S盒以下:
舉例:字節66替換後的值爲S[6][6]=33,再經過S-1便可獲得替換前的值,S-1[3][3]=66。
2、行位移
1.行移位:行移位的功能是實現一個4x4矩陣內部字節之間的置換。
3、列混淆
根據矩陣的乘法可知,在列混淆(利用域GF(28)上的算術特性的一個代替)的過程當中,每一個字節對應的值只與該列的4個值有關係。此處的乘法和加法須要注意以下幾點:
(1)將某個字節所對應的值乘以2,其結果就是將該值的二進制位左移一位,若是該值的最高位爲1(表示該數值不小於128),則還須要將移位後的結果異或00011011
(2)乘法對加法知足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)
(3)此處的矩陣乘法與通常意義上矩陣的乘法有所不一樣,各個值在相加時使用的是模2加法(異或運算)。
由於:說明兩個矩陣互逆,通過一次逆向列混淆後便可恢復原文。
補充:(按位異或的概念)
4.輪密鑰加:加密過程當中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);由於二進制數連續異或一個數結果是不變的,因此在解密時再異或上該輪的密鑰便可恢復輸入。首尾使用輪密鑰加的理由:若將其餘不須要密鑰的階段放在首尾,在不用密鑰的狀況下就能完成逆過程,這就下降了算法的安全性。
加密原理:輪密鑰加自己不難被破解,另外三個階段分別提供了混淆和非線性功能。但是字節替換、行移位、列混淆階段沒有涉及密鑰,就它們自身而言,並無提供算法的安全性。但該算法經歷一個分組的異或加密(輪密鑰加),再對該分組混淆擴散(其餘三個階段),再接着又是異或加密,如此交替進行,這種方式很是有效很是安全。
5.密鑰擴展:其複雜性是確保算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密算法共迭代10輪,須要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展算法是以字爲一個基本單位(一個字爲4個字節),恰好是密鑰矩陣的一列。所以4個字(128位)密鑰須要擴展成11個子密鑰,共44個字。
密鑰擴展過程說明:將初始密鑰以列爲主,轉化爲4個32 bits的字,分別記爲w[0…3];按照以下方式,依次求解w[i],其中i是整數而且屬於[4,43]。
1)將w[i]循環左移一個字節。
2)分別對每一個字節按S盒進行映射。
3)32 bits的常量(RC[i/4],0,0,0)進行異或,RC是一個一維數組,其中RC = {01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}。
4)除了輪密鑰的第一列使用上述方法,以後的二到四列都是w[i]=w[i-4]⊕w[i-1]
5)最終獲得的第一個擴展密鑰爲(以後的每一輪密鑰都是在前一輪的基礎上按照上述方法獲得的):
參考原文連接:
https://blog.csdn.net/qq_38289815/article/details/80900813 (AES)
https://blog.csdn.net/qq_28205153/article/details/55798628 (AES)
https://zhidao.baidu.com/question/318582446.html (按位異或的概念)