AES的加密原理 | 剖析勒索軟體I

我在幾個禮拜前的文章裡有開箱過一款勒索軟體,展示了勒索軟體的運作。為什麼勒索軟體是駭客界最熱門的惡意軟體形式之一? 為什麼是很多很多資安工作者的噩夢? 今天的文章會談談近代勒索軟體最常用的加密算法之一: AES。

你或許聽過AES-128、AES-192、AES-256…等加密算法,但是為什麼它被那麼廣泛使用? 它到底有多安全? AES的故事起源於1970年代,當時最盛行的加密方式是DES(Data Encryption Standard;數據加密標準),使用56位對稱加密,對當時的電腦運算能力來說已經相當安全,直到1999年,有人在一天內公開破解了一組DES密鑰,說明DES已經落後當時的電腦運算速度,可以很容易被暴力破解。於是,AES(Advanced Encryption Standard;進階加密標準)就在2001年誕生了。AES是由兩個比利時密碼學家發明的,原始名稱是結合兩人姓氏的RijnDael,最後被定義成標準的就是128、192、256位的長度。

對稱加密

指的是加密與解密時使用相同的密鑰。
非對稱加密則通常有一組公鑰與一組私鑰。

一般來說,最基本的對稱加密方法是直接運算,例如我的資料內容是2,金鑰是3,加密方式是相乘,那麼加密後的數據是6,持有金鑰3的人只要將6除以3就能得到原本的內容。但是這樣實在太簡單了,所以AES有很多不同的步驟,像是替換和移位。

AddRoundKey

這是AES的第一個步驟,會將每一個位元組的內容都加上一位元組的round key。加入round key方式是XOR位元運算,也就是對於每個位元,如果相應位置上的兩個位元不相同,則結果位元為1,否則為0。假設要比較1010和1100,由於第一位都是1,所以結果為0;第二位分別是0和1,並不相同,所以結果為1;第二位分別是1和0,結果為1;末位都是0,所以結果為0。

    1 0 1 0
XOR 1 1 0 0
-------------
    0 1 1 0

循環

以下的幾個步驟(SubBytes、ShiftRows、MixColumns、AddRoundKey)會重複數次,AES-128、192、256分別會重複9、11、13次。

SubBytes

這個步驟會把所有位元按照Rijndael S-box進行替換,原理相對簡單,就像看著對照表把英文字母替換成豬圈密碼一樣。

ShiftRows

因為AES會把數據分成4*4的陣列(如下所示),所以四排各四位元組的數據會是一組,而這個步驟會把最後三排的數據變換順序一定的次數。

b0   b4   b8   b12
b1   b5   b9   b13
b2   b6   b10  b14
b3   b7   b11  b15

也就是b0, b4, b8, b12不會改變,且b1的橫排會左移一次,b1會補原本b13的位置;b2橫排則會左移兩次;b3橫排三次。這個步驟並沒有改變任何數據,只有移動位置,但是能確保每一列的數據是被一起加密的,否則就跟四組獨立的密碼沒兩樣。這個概念有點像S型分班。

MixColumns

這個步驟是跟上一步相對的,基於直列進行變更,會透過可逆布林線性變換改變每一列的內容,跟上一步合在一起可以達成擴散的效果。擴散可以隱藏密文跟明文的關係,確保不能透過密文的冗餘位推測明文內容。

跟上一個步驟不同的地方是,不同於上個步驟像魔術方塊一樣改變位置,這個步驟會改變所有位元的內容。這個步驟中,每一列都會被乘以一個固定多項式a(x) = 3x^3+x^2+x+2模除x^4+1。

AddRoundKey

這跟前面執行的AddRoundKey一樣,只是再做一次而已。

末動作組

最後,會再分別進行一次SubBytes、ShiftRows、AddRoundKey三個步驟。


複雜的內容到此為止。

經過這些複雜的步驟,AES可以說是相當難破解,就算是最簡單的128位AES加密,暴力破解一次也只有1/2^128的機會猜中,換成現實中的樣子,就是即使有一千萬臺運算力10Pflops的超級電腦,也要花一千億年才能破解,所以除非量子電腦普及化,不然破解AES加密是不可能的。

雖然AES在現在硬體限制下無法破解,但是這不代表它是無懈可擊的,因為它仍有身為斷秤加密的缺點和人為操作的弱點。如果使用AES的人挑了一個很容易被猜中的密碼,那防暴力破解再怎麼強都沒用。因此,就算你用AES加密任何資料,還是建議使用電腦生成的亂碼作為密碼,才能有效保護你的資料。下次再來講講密碼管理程式或是非對稱加密吧。不過可能會拖很久,因為今天這種主題雖然對我來說並不難,但是要確保們有任何錯誤,需要花很多時間校對資料。


分類:

這些文章都是由我獨力完成,如果願意贊助我,我會很開心!

我的Monero 錢包:

88NniPxHdJ9VMvor1orgS2dDDDM5RjLrxXAs3HYCRH2mSKxjZPdrp2h42gmf4mP6RVX9kmCEeBA1oaSndnB7VmT9MBEaUDE


我的Bitcoin 錢包:

bc1qy73wr3y73ymkjtnct3f0jfuya20avfztffxepv