小弟我才接觸資安1年多,有很多東西沒有學過跟不確定,今天要介紹的金鑰生成最近才開始去看(以前學校教AES時直接跳過金鑰生成阿~~!)有任何說錯的部分,還請大佬們指正
AES的加密流程中會做很多個rounds,但每個round都要一把金鑰,但又不能要使用著生出一堆金鑰八
所以就有了金鑰生成的演算法
至於要幾把round key就要看哪種AES了,這裡用AES128為例,AES128有10 rounds,所以要11把因為在最一開始明文就和key做一次addroundkey了,所以多1把,就是11把
(來源:https://braincoke.fr/blog/2020/08/the-aes-key-schedule-explained/#aes-key-schedule)
這個最簡單,就是左位移
把32位元分成8位元一組共4組(4 bytes)
[a1,a2,a3,a4]
接著以組為單位位移
[a2,a3,a4,a1]
記得超過要回來
就這樣沒了~
這個也還好
和AES內的SubBytes一樣
一樣把4 bytes的資料透過S_box(對又我)做置換
是一個bytes(8 bits)丟入S_box歐,不是一次4 bytes
(來源:https://en.wikipedia.org/wiki/AES_key_schedule)
這步就不是很懂了
ricon會是一個4 bytes的array,第1個bytes為rci
而這個i就是第幾round
AES128來說從1~10
直接對表
(這裡的值是16進位的)
最後把ricon這個4 bytes的array和SubWord出來的4 bytes array做xor運算得到輸出
AES作為對稱加密的主流其背後真的很複雜,後面還有很多深奧的數論在背後,所以至今還未被淘汰和有效的攻擊手法
即便是量子演算法也是(RSA和DF瑟瑟發抖),可見其強大之處,也令人讚嘆背後的發明者們的厲害