"什麼叫你只會加密128位元?"
---
花了不少篇幅介紹兩中區塊加密方式,DES 跟 AES。
來稍微複習一下,
DES 的加密區塊是64位元,
AES 的加密區塊是128位元。
複習完了,
謝謝大家,我們明天見。
還沒啦,還沒完啊。
那如果我要用 AES 加密150位元怎麼辦。
我是要先加密前面128位元,然後剩下22位元再加密還是怎麼樣。
這時候就要搬出操作模式(modes of operation)了。
操作模式要解決如何處理多個區塊的加密。
第一個介紹的操作模式是 ECB ,也是你最不該使用的一種。
ECB 的想法也是最直觀解決常訊息的方法。
它的操作方法就是直接將訊息切成小塊,再一一直接加密,
區塊間互不相關,不會互相影響。
這樣的好處是每個區塊可以同時加密,所以速度很快。
缺點是一樣的明文會加密成一樣的密文,所以在加密點陣圖時可以看到圓圖的大致樣貌。
也因為每個區塊之間不會互相影響,所以如果有一個 Oscar 要搞你的話,他可以將區塊的順序移來移去。
注意到CBC裡面有個 block chain,裡面有區塊鏈(開玩笑的)
cipher block chain 的意思是我們會把每個區塊串在一起,
上一個區塊的加密結果會影響下一個區塊。
來看這張圖,P 代表 plaintext
第一個區塊要先和初始向量(IV, initial vector)做 XOR,
接著進行加密,加密後的密文和下一個區塊做XOR,加密,成為第二塊密文。
依此類推直到結束。
和 IV 做 XOR 的效果是,即使密鑰和明文都一樣,也不會像 ECB 一樣轉換成一樣的密文。
所以 IV 只要注意只能使用一次,不必保密。
OFB和以下要講的CFB類似,都是將 IV 做加密,而不是訊息。
OFB的操作方式是,
將 IV 做 n 次加密後和第 n 塊明文 XOR 成為密文。
這有點像是將 IV 經由加密函數產生無限多個子IV的概念。
CFB 較 OFB 多一個步驟,他有點像 CBC 跟 OFB 的集合體。
意思是說他有串聯起來的概念。
跟OFB一樣,先將 IV 加密後和第一塊明文XOR成為密文。
接著這塊密文要進入下一輪加密後和下一塊XOR成為下一塊密文。
依此類推直到結束。
顧名思義他有一個計數器,也就是加密每一個區塊的時候他會產生一個不重複的計數。
而我們仍然使用一個 IV 後面接著這個計數。
將這整坨數字丟進家密函數裡加密後和明文XOR後即為密文。
因此每一個區塊是可以獨立操作的,運行速度快。
區塊密碼的操作模式除了提供機密性之外,
另一個想要達到的目的是可靠性和完整性。
可靠性(authenticity)讓接收者可以確認訊息是否是從原始傳送者傳來。
完整性(integrity)則可確定在傳送過程中訊息沒有經過更動。
為了達到這個目的,就需要衍伸出訊息鑑別碼(MAC)。
而訊息鑑別碼的其中一種方式是由操作模式達成,如GCM、CBC-MAC等等。
詳細的部分我們之後講 MAC 的部分再介紹。
當然還有百百種不同的操作模式沒辦發一一介紹,
有興趣的話可以看看XTS、OCB。
只要記得
參考資料:
https://www.youtube.com/watch?v=9IFhlnGp2Mc
https://www.geeksforgeeks.org/block-cipher-modes-of-operation/
圖片來源:
https://mobile.twitter.com/veorq/status/369453385440694272
https://software.intel.com/content/www/cn/zh/develop/articles/performance-of-multibuffer-aes-cbc-on-intel-xeon-processors-e5-v3.html
https://zh.wikipedia.org/wiki/分组密码工作模式
https://www.reddit.com/r/ProgrammerHumor/comments/6m6bvv/all_block_cipher_modes_are_beautiful/