天天看點

AES 加密算法小結

        AES 相對來說是一個比較重要的加密算法,應該去好好的了解一下,畢竟在對稱加密中它的地位還是很高的。

        今天又把 AES 加密算法又過了一遍,具體來看 AES 加密算法學了有 4 到 5 次。今天算是把 AES 加密算法學完了,整個的加密過程算是有一個大概的了解了,解密過程也大概了解了一下,它不像 DES 屬于對合運算,它需要把加密中每個過程求逆。

       AES 的加密過程着實要比 DES 難了許多,單單從數學方面就已經可以感覺到了。比如 AES 中涉及到了​乘法逆元的計算、多項式的計算、矩陣的計算​等。其實,這幾個數學步驟如果能夠快速的掌握的話,那麼整個 AES 的了解就會輕松許多,我就是在數學方面花的時間多一些。

        除了數學方面的話,整個流程大緻分為那麼幾個步驟:

       明文和密鑰生成狀态字,然後進行 S 盒變換、行移位變換、列混合變換、輪密鑰加變換、以及子密鑰的生成幾個步驟。

       簡單的描述一下這幾個步驟:

       生成狀态字,因為 AES 是分組加密算法,明文有固定的分組長度,密鑰也有三種不同的長度,分别是 128、192 和 256 三種。按照 4 個位元組為一列,按列存儲生成狀态字。

        S 盒變換,S 盒變換是整個 AES 加密算法中唯一一處非線性變換,将 8 位的輸入經過變換後産生 8 位的輸出,由于分組長度為 128 位,是以 AES 有 16 個 S 盒,而這 16 個 S 盒是完全相同的(DES 加密算法在進行 S 盒時,是 6 位的輸入經過變換後産生 4 位的輸出,共有 8 個 S 盒,且 8 個 S 盒各不相同)。S 盒可以通過查表進行完成,這個方式簡單直覺,也可以通過具體的數學變換進行完成,首先對輸入的值求 GF(2^8) 的逆元,​然後與一個固定的常量矩陣相乘後,再與一個 8 位的常量進行模二加計算​(紅字部分被稱作​仿射映射​)。其實用這個過程把 GF(2^8) 有限域中的值計算一遍,就得到了第一種查表方法中的那張表。

        擴散層分為兩步,分别是行移位和列混合(或者也成為列混淆)。

       行移位,按照将 S 盒變換後的狀态字進行移位,這步相對簡單,隻要知道矩陣每行進行循環移位的位數即可。

        列混合,與一個固定的 4 * 4 的矩陣相乘,這裡又是計算一個線性代數的東西,掌握方法就能計算了。

        子密鑰生成,子密鑰的生成這個步驟還需要抽空進一步熟悉一下。按照密鑰的長度不同,加密的輪數是不同的。在 128 位長度密鑰下,輪數一共有 10 輪,但是明文在進行第一輪運算變換前,會先與子密鑰進行一次計算,是以一共需要生成 11 個子密鑰。這點也是和 DES 有差別的地方,DES 進行 IP 置換時,是沒有密鑰參與計算的。子密鑰的産生,除了第一個子密鑰外,其餘的密鑰都是進行計算得到的,其中的計算涉及到 S 盒、移位、與每輪的輪系數進行模二加等。

        整個過程算是自己一邊回憶一邊寫的,其中可能有不對的地方,尤其是在子密鑰的描述中肯定會不準确。不過整個 AES 加密算法算是能把大體的流程串下來了,再經過簡單的一些印象上的加深,應該對 AES 加密算法就算是入門了。