AES加密算法(帶示例)

原創不易,轉載請註明出處。

目錄

1.    算法簡介

2.    算法流程

2.1 擴展密鑰

2.2 輪密鑰加

2.3 字節代替

2.4 行位移

2.5 列混淆

3.    總結

附錄A 運算示例


1.算法簡介

高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣爲全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日發佈於FIPS PUB 197,並在2002年5月26日成爲有效的標準。2006年,高級加密標準已然成爲對稱密鑰加密中最流行的算法之一。

AES算法屬於對稱加密算法,是一個分組密碼。AES加密算法分爲3種,分別是AES-128,AES-192,AES-256。它們之間區別如表1-1所示。

                                                                        表1-1 3種AES加密算法區別

AES

密鑰長度(bit

分組長度(bit

加密輪數

AES-128

128

128

10

AES-192

192

128

12

AES-256

256

128

14

本文以最常見的AES-128爲例,詳細介紹AES加密算法的加密流程。

2.算法流程

AES加密算法主要由4中操作組成:字節代替行位移列混淆輪密鑰加。另外還需要對原始密鑰進行擴展。主流程圖如圖2-1所示。

                                               圖2-1 AES-128加密算法流程圖

加密過程:首先明文進行1次輪密鑰加;然後循環9輪字節代替、行位移、列混淆、輪密鑰加;注意第10輪沒有列混淆。

解密過程:解密過程與加密過程相反,這也是對稱加密算法的特點。首先密文進行1次輪密鑰加;然後循環9輪逆向行位移、逆向字節代替、輪密鑰加、逆向列混淆;注意第10輪沒有逆向列混淆。

接下來對每一個流程進行詳細介紹。

2.1 擴展密鑰

首先對16字節的原始密鑰進行擴展,擴展密鑰原理圖如圖2-2所示。

                                圖2-2 擴展密鑰原理圖

  1. 首先需要將16字節原始密鑰按列轉換成4個32bit的字,即W[0],W[1],W[2],W[3]。
  2. 根據原理圖和下式依次求解W[j],j=4……43。

        

函數g如圖2-2b所示,具體流程如下:

2.1)將循環左移1字節;

2.2)分別對每個字節按S盒進行映射(S盒見圖2-3);

2.3)映射後的值與32bit常量[RC[j/4],0,0,0]進行異或。RC實際只用到後10個字節,RC[0]沒有用到,增加RC[0]是爲了方便程序中用數組表示。

RC=[0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1B,0x36]

2.2 輪密鑰加

在首次進行輪密鑰加之前,要對16字節明文進行預處理,將其組成一個4*4的矩陣,然後與初始密鑰進行異或運算。之後每次輪密鑰加都是與對應擴展的密鑰進行異或。

2.3 字節代替

字節代替是通過S盒映射完成的,S盒如圖2-3所示。逆向字節代替是通過S盒的逆(S-1)映射完成的。S盒的逆如圖2-4所示,其中的值都以16進製表示。

字節代替就是將字節的高4位作爲行,低4位作爲列,取S盒中對應的行列的值。

例如:字節0x19代替後的值爲S(0x19)=S[0x1][0x9]=0xD4;再通過S-1即可替換爲原來的值,S-1(0xD4)= S-1 [0xD][0x4]=0x19。

                                            圖2-3 S盒(S-box)

                                           圖2-4 S盒的逆(Inverse S-box)

2.4 行位移

1)正向行位移

第1行不變

第2行循環左移1字節

第3行循環左移2字節

第4行循環左移3字節

                            圖2-5 正向行位移原理圖

2)逆向行位移

第1行不變

第2行循環右移1字節

第3行循環右移2字節

第4行循環右移3字節

2.5 列混淆

利用GF(28)域上算術特性的一個代替。

1)正向列混淆

正向列混淆將數據左乘一個固定矩陣,原理圖如圖2-6所示。

                                     圖2-6 正向列混淆原理圖

此處的矩陣乘法不是一般數學意義上的相乘,而是定義在GF(28)上的乘法,需注意以下節點:

a)乘法滿足分配率,如07*S­­­0,0=(010203)* S­­­0,0= S­­­0,0(02* S­­­0,0)(04*S­­­0,0)

b)加法爲異或運算

c) 乘2就是將二進制左移1位,若原始的值最高位爲1,需將移位後的結果異或00011011(若沒有移位則不用異或00011011)。

舉例:

02*d4=02*(1101 0100)B=(1010 1000)B(0001 1011)B=(1011 0011)B

03*bf=(0102)*bf=01*(1011 1111)B02*(1011 1111)B=(1011 1111)B(0111 1110)B(0001 1011)B=(1101 1010)B

01*5d=(0101 1101)B

01*30=(0011 0000)B

則:(1011 0011)B(1101 1010)B (0101 1101)B (0011 0000)B­=04

2)逆向列混淆

逆向列混淆原理圖如圖2-7所示。他與正向列混淆的差別僅僅是左乘的矩陣不同。正向列混淆與逆向列混淆左乘的矩陣,相乘之後爲單位矩陣,所以逆向列混淆可以恢復原文。

3.總結

本文以AES-128爲例,詳細介紹了AES加密算法的流程,AES-192和AES-256與AES-128相似,只是密鑰長度和加密輪數不一樣。AES作爲對稱加密算法,加密和解密用相同密鑰;加密速度快,適合用於經常發送數據的場合。

 

附錄A 運算示例

輸入消息(16字節)

0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,

0x31,0x31,0x98,0xa2,0xe0,0x37,0x07,0x34

原始密鑰(16字節)

0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,

0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c

擴展密鑰:

0x2b7e1516        0x28aed2a6         0xabf71588         0x09cf4f3c

0xa0fafe17          0x88542cb1        0x23a33939        0x2a6c7605

0xf2c295f2         0x7a96b943        0x5935807a        0x7359f67f

0x3d80477d        0x4716fe3e         0x1e237e44         0x6d7a883b

0xef44a541         0xa8525b7f         0xb671253b        0xdb0bad00

0xd4d1c6f8        0x7c839d87        0xcaf2b8bc         0x11f915bc

0x6d88a37a        0x110b3efd         0xdbf98641        0xca0093fd

0x4e54f70e         0x5f5fc9f3          0x84a64fb2         0x4ea6dc4f

0xead27321        0xb58dbad2        0x312bf560         0x7f8d292f

0xac7766f3         0x19fadc21         0x28d12941        0x575c006e

0xd014f9a8         0xc9ee2589         0xe13f0cc8         0xb6630ca6

先對明文進行1次輪密鑰加

0x19,0x3d,0xe3,0xbe,0xa0,0xf4,0xe2,0x2b,

0x9a,0xc6,0x8d,0x2a,0xe9,0xf8,0x48,0x08

1輪:

字節代替後:

0xd4,0x27,0x11,0xae,0xe0,0xbf,0x98,0xf1,

0xb8,0xb4,0x5d,0xe5,0x1e,0x41,0x52,0x30

行位移後:

0xd4,0xbf,0x5d,0x30,0xe0,0xb4,0x52,0xae,

0xb8,0x41,0x11,0xf1,0x1e,0x27,0x98,0xe5

列混淆後:

0x04,0x66,0x81,0xe5,0xe0,0xcb,0x19,0x9a,

0x48,0xf8,0xd3,0x7a,0x28,0x06,0x26,0x4c

2-10

原創不易,轉載請註明出處。水平有限,歡迎大家批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章