讓我一個字一個字解開你的心。
串流密碼(stream cipher)跟區塊密碼(block cipher)都列屬於對稱式加密底下,
唯一的差別是,串流密碼的加密是以位元為單位,而區塊密碼是多個位元一次加密。
首先要來介紹一個概念,叫做XOR(他的唸法是X、OR)。
XOR的符號寫作⊕
簡單來說,XOR的邏輯是:一樣的是0(False),不一樣則是1(True)。
在這裡,我們所使用的數字只有0或1,
所以
0⊕0=0
1⊕0=1
0⊕1=1
1⊕1=0
以數學式來表達的話,XOR可以表示成這樣:
r = p ⊕ q ⇔ r = p+q (mod2)
其中p、q 是 0或1 。
XOR在密碼學中很常使用到,之後會很常出現在各大加密系統裡。
那麼介紹完XOR,我們就可以來看這個用XOR為基礎的,非常簡單的串流加密方法,OTP。
如果你直接在Google上搜尋OTP的話,可能會出現另一個東西,叫做one time password。
那個跟我要講的東西不一樣。
我要講的是一個名叫one time pad的加密方法。
OTP的中文是一次性密碼本。
先說一個很厲害的事實,OTP是無法被破解的。
但是沒有人會想用它。
假設你要加密以下的訊息
010110010110
接下來你要生成一個隨機的密鑰,密碼的位元數至少要跟明文一樣長。
101110101111
接著,把每一個明文的每一個位元一一對密鑰做XOR,於是你會得到
111000111001
這樣就完成了OTP加密,只要密鑰沒有被洩漏,並且密鑰是隨機的,只使用一次,
那麼OTP被證明是無法破解的。
所以你知道為什麼沒有人要用了嗎?
我在上一篇說到,演算法的安全性跟可行性同樣重要。
OTP的缺點就在於它的密鑰長度:你的明文有多長,密鑰就要多長。
如果你要加密一個1GB的訊息,你就要有一個1GB的密鑰,並且要能安全的傳送這個密鑰。
既然你可以安全的傳送跟明文一樣長的密鑰,那你怎麼不乾脆拿來傳訊息。
明天我會來介紹一個有名的串流加密方法,叫做RC4。
跟 OTP 不同的是,RC4 是可以拿來使用的。(曾經)
圖片來源:
https://imgflip.com/i/1z72rk
https://unwire.hk/2015/03/09/15_programmer_joke/fun-tech/
讚讚~ 我剛開始學的時候,反而只知道區塊加密,
不清楚串流加密是怎樣,因為網路資源都是講區塊加密GCM,CBC的東西居多XD