iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
0
Security

無趣的密碼學,有趣的加密!系列 第 26

[Day 26] 026 - 串流加密法 - Stream cipher

串流加密法 - Stream cipher - RC4

我們來到了串流加密法~

我們這一章也資訊也不多,主要是目前串流加密不是很主流之外,跟上一回講的一樣。

串流加密除了要跟演算法綁在一起之外,另一個就是安全性問題了。

但我們還是必需要來介紹一下,讓我們來聊聊串流加密吧~

直接由我比較熟悉的RC4來作整個的代表。


RC4

其實整個RC4算是蠻簡單的。

主要是由金鑰和S盒子不斷的打亂生成出1位元的擴充金鑰來跟數據做XOR加密。

並且整個只要金鑰相同就能生成同樣的擴充金鑰。

兩個步驟而已:

初始化S盒子

一開始會先生成一個初始化的S盒子,從0-255。

我會拿Python來做範例:

S = list(range(255))

再來就是依據Key來打亂S盒子內部的排序:

j = 0
for i in range(255):
    j = (j + S[i] + Key[i % (len(Key)-1)]) % 255
    S[i],S[j] = S[j],S[i]

其實就是把『j』跟『S[i]的內容』跟『Key相對位子的內容』做累加後取255餘數。

S盒子都初始化好了之後就是不斷生成擴充金鑰。

不斷生成擴充金鑰

接下來就是繼續不斷的打亂盒子,並生成1位元與資料作XOR。

i = 0
j = 0
CipherData = []
for _ in range(len(data)):
    i = (i + 1) % 255
    j = (j + S[i]) % 255
    S[i],S[j] = S[j],S[i]
    CipherData.append(Data ^ S[(S[i]+S[j])%255])

圖一可以看一下大約:


圖一

圖片來自RC4 Wiki EN


RC4 結論

差不多就是這樣……

其實怎麼說跟其他AES之類的加密感覺簡單很多,但RC家族一貫的都是簡單。

這其實跟輪加密很像就是了,而RC4之前也為TLS、WPE等使用過。

但後來在2015年時候能將在75小時內破解。

所以目前也不是安全的加密法。

我提供一些資訊好了:Prohibiting RC4 Cipher Suites


串流加密法 結論

說起來是串流加密,能不將資料分塊的原因就是利用不斷生成擴充金鑰並且跟資料作XOR。

其實很多金鑰擴充都能做到,但安全性就是另一件事情了。

那個交給其他資諳大神來解釋。

大概大家能從RC4窺探串流加密的一些方法,也能發現就是類似於OTP的加密方案。

將資料做XOR,而且不斷打亂XOR的金鑰,讓其找不到規則。

因為能不斷生成XOR的金鑰,因此不需要將資料分隔,資料有多少生成多少擴充金鑰。

當然目前除了不主流之外,安全性都有一定的疑慮。

那接下來介紹的區塊交密才是比較重要的。

那大家明天見拉~


參考資料

串流加密法

RC4

RC4 Wiki EN

Prohibiting RC4 Cipher Suites


上一篇
[Day 25] 025 - 加密資料的差異與方法
下一篇
[Day 27] 027 - 區塊加密法 - Block cipher(一)
系列文
無趣的密碼學,有趣的加密!30

尚未有邦友留言

立即登入留言