"AES, ACE, ASS, AIDS(喂)"
---
現今最廣泛使用的對稱式密碼 AES (Advanced Encryption Standard),由美國的 NIST 在2001年制定為標準。
目前還沒有人把他打下來。
AES 在選中之前不叫做 AES ,而是設計者自行決定名稱,投稿參選。
現今使用的這個 AES 原始名稱是Rijndael,由J. Daemen 和 V. Rijmen 所設計。
其他參選者有Twofish, Serpent 等等。不過最後是由 Rijndael 拿下了這場選拔。
AES 是一個128位元的區塊加密演算法,密鑰長度可以是128, 192, 256位元。
所以會寫作AES-128、AES-192、AES-256
加密的過程有4個步驟,重複執行10, 12, 14回合(根據密鑰長度決定)。
加密過程如下圖。
一開始要先將資料處理一下,排列成4×4的表示方法。
我們要將128位元的資料分成16個位元組(bytes),再將每個位元組用16進位表示。
利用下面的S-box中的每一格代換掉。
這個S-box是經過設計的,能提供非線性的變換。
即是將第一列不動,第二列向左旋轉一格,
第三列旋轉兩格,第四列旋轉三格。
將每一行看做一個向量和另一個固定的4×4的矩陣相乘。
矩陣相乘中的加法使用XOR,
乘法使用中的乘法,這個就...看看就好(超不負責任)。
總之你還是會得到四格就對了。
如果你真的對這個乘法很有興趣的話,你可以看一下這個印度人。
然後當你發現他用十分鐘解完16格裡面的1格的時候...嗯。
有興趣的話可以去找找有限體裡的乘法。
重點是,不管如何計算,加減乘除,這些數字永遠會落在 之內。
最後一步就是將你有的所有東西跟回合密鑰做XOR就完成了。
以上就是AES裡面最主要的4個步驟。
我們再從頭來過一次。
一開始我們有128位元的資料。
先將這些分成16個byte,再用16進位表示,放到4×4的格子裡。
接著先把他們和原始密鑰做XOR一次。
再來進入10個回合(假設密鑰長度128)的SubBytes,ShiftRows,MixColumns,AddRoundKey
注意到第十回合時不必做 MixColumns 的動作。
跟DES一樣,我們明天再來說如何製造回合密鑰,
以及AES的安全性。
圖片來源:
https://www.sciencedirect.com/topics/computer-science/advanced-encryption-standard
https://towardsdatascience.com/aes-encryption-256-bit-a9ae49cde0b6
https://slideplayer.com/slide/250044/
https://www.meme-arsenal.com/en/create/meme/1834508
參考資料:
https://www.youtube.com/watch?v=O4xNJsjtN6E