天天看點

AES算法

文章目錄

    • AES的由來
    • 什麼是Rijndael
    • Rijndael的原理
    • Rijndael的特點

前面一篇文章我們講到了DES算法。鑒于DES可以被破解和加密效率不高的缺陷。美國的NIST(National Institute of Standards and Technology,國家标準技術研究所)在2000年通過選拔,從多個候選算法中确認了Rijndael算法為最新的AES算法,成為聯邦資訊處理标準(FIPS)。

Rijndael是由比利時密碼學家Joan Daemen和Vincent Rijmen設計的分組密碼算法。它在2000年被當選為AES算法。

注意,雖然AES是一種密碼強度很高的對稱密碼算法,但是如果需要商用的話要向NIST支付授權費用。

跟DES一樣,Rijndael也是由多輪運算組成的。其中每一輪都包括:SubBytes,ShiftRows,MixColumns和AddRoundKey這四個步驟。

下面我們分别來講一下各個步驟的作用。

SubBytes

在AES的規範中,Rijindael的分組長度固定為128bits,密鑰長度有128,192和256bits三種。

128bits就是16位元組。一個位元組可以表示0-255的任意值。而SubBytes就是根據其值在一個擁有256個值的替換表中查找出對應的值進行處理。

為了便于了解,大家可以将其看成是簡單的替換。

源4*4位元組替換目标4*4位元組

ShiftRows

SubBytes 之後,我們就可以進行shiftRows的操作了。

由于我們的源位元組是16bytes,可以将其看成4*4 的一個矩陣。

ShiftRows就是将一行4位元組按照一定的規則向左平移,現在有4行,每一行的平移位元組數是不同的。

MixColumns

ShiftRows之後就是MixColumns,MixColumns是在4位元組的列上面進行一定的運算,将其變為另外的4位元組列。

AddRoundKey

最後将生産的位元組和密鑰進行XOR運算,最後生産結果。通常需要重複進行10-14輪運算。

  1. 輸入的所有bits都會在一輪裡面被加密。同DES相比,AES的加密效率更加高效。
  2. Rijndael 加密過程為:SubBytes->shiftRows->MixColumns->AddRoundKey , 解密的時候需要按照相反的流程來進行:AddRoundKey->MixColumns->shiftRows->SubBytes。 注意,除了AddRoundKey是XOR運算不需要逆運算之外,其他的步驟都需要進行逆運算。

更多教程請參考 flydean的部落格