在前一章中,我們介紹了串流密碼(Stream Cipher):透過金鑰與 Nonce/IV 產生一段與明文長度相同的「金鑰流(Keystream)」,並以位元級別的 XOR 運算與明文逐字加密。串流密碼的優點是速度極快,但若重複使用相同的 Nonce,金鑰流重疊將會帶來嚴重的安全災難。
與串流密碼不同,區塊密碼(Block Cipher)則是將輸入的明文切分成固定大小的資料區塊(Block)(例如 64 位元或 128 位元),並以「區塊」為單位,使用一把固定長度的對稱金鑰進行轉換與加密。
觀念釐清:無論是串流密碼還是區塊密碼,我們使用的對稱金鑰(Secret Key)都是固定長度的短金鑰(如 128-bit 或 256-bit)。串流密碼是將金鑰「擴展為無限長度的金鑰流」;區塊密碼則是以金鑰為核心,對「固定大小的資料區塊」進行多輪複雜的數學變換。
然而,如果我們直接將明文切塊並用同一把金鑰獨立加密每一個區塊,相同的明文區塊將會產出完全相同的密文區塊,使得密文呈現可辨識的統計規律。為了打造夠強大的區塊加密法,密碼學家引進了兩大核心設計原則:混淆(Confusion)與擴散(Diffusion)。
目的就是讓密文看起來更「亂」、更難從中看出規則,這個部分會由「加密演算法」負責
看到上面我們可以看到資料被分成一塊一塊透過金鑰加密然後產生加密的區塊,但是如果沒有再進行加工就會看到重複的資料產生出一樣的結果這樣就有被破解的風險,所以區塊密碼還需要進行前置加工讓輸入的資料不同,後置加工的認證標籤可以保證訊息沒有被串改,我們將前置加工與後置加工稱為「操作模式」