密碼學(xué)之高級加密標(biāo)準(zhǔn)(AES)
前言
還是有關(guān)block cipher的文章。
上文的DES以及跟不上時代的步伐了,而代替DES的,是這篇文章的AES。

一、State
AES的所有運(yùn)算都是基于一個State的概念,State是一個二維數(shù)組,一共4行列,數(shù)組中的每一個元素都是一個8-bit (1 byte)的二進(jìn)制序列。
的值是根據(jù)輸入序列的長度(也就是block length)
決定的:
.如果block length為128,那么就是4行4列。

現(xiàn)在,我們用 代表這個二維數(shù)組,用下標(biāo)
和
來進(jìn)行索引。
對于任意一個輸入序列 ,我們用如下的方式將其轉(zhuǎn)化為State數(shù)組:
很明顯,其逆運(yùn)算——將State二維數(shù)組還原為一維序列的方式為:

二、AES算法
AES一共可以有三種不同的master key的長度,128 bits, 192 bits和256 bits. 每一個長度對應(yīng)不同的round數(shù)——128 bits對應(yīng)10輪,192 bits對應(yīng)12輪,256 bits對應(yīng)14輪。
AES的的算法如下:

*Nk為master key的長度除以32,Nb為本文中的b,Nr為round數(shù)(循環(huán)次數(shù))。這里的word代表一個32-bit的二進(jìn)制序列。
其中,四個函數(shù)SubBytes、ShiftRows、MixColumns和AddRoundKey分別如下:
SubBytes是用一個可逆的S-box:? 將我們的State中的每一個元素替換為新的元素。我們的S-box,簡單地說是一張
的表格,我們將一個8-bit序列切割為2個長度為4-bit的序列,第一個4-bit序列決定行,第二個4-bit序列決定列。
ShiftRows是將State二維數(shù)組中的后三行rotate,如圖所示

MixColumns是對我們State中的每一列進(jìn)行一系列的運(yùn)算,同一列中的每一個元素都將參與到運(yùn)算中(故名Mix Column),詳細(xì)可參照FIPS 197的文檔,在此不進(jìn)行說明。
AddRoundKey是將我們的State與我們的round key進(jìn)行一個XOR運(yùn)算:

三、Key Schedule
我們用 來代表我們的master key,我們用如下的方法來將我們的
擴(kuò)張成為
(這里的w就是上一節(jié)里面的w):

其中,SubWord是將一個32-bit的序列切分為4個8-bit的序列,每一個8-bit序列通過上述的S-Box替換為一個新的8-bit值。RotWord是將一個32-bit/4-byte的序列向左旋轉(zhuǎn)1個byte的長度。

后記
block cipher好像寫得差不多了…準(zhǔn)備近幾天再看看有沒有其他值得寫得地方。
參考資料:
NIST Computer Security Division - FIPS 197, Advanced Encryption Standard (AES)
使用工具:Drawio: https://app.diagrams.net

THE END.