栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2010年11月28日 星期日

加密模式

  對人體有害的編程時間。

  所謂加密模式,英文叫 mode of operation,例如 ECB, CBC, CPB 之類。

  最近思考加密模式的問題。我的目標如下:
- 正文若出現重覆內容,在絕大部份情況下,不會反映在密件結果中。
- 極相似的不同正文產生出來的密件,沒有相似性。
- 在密件中任何一 byte 改動,都會影響整個解密結果。
- 攻擊者即使修改密件,也無法保証解密結果和原正文有任何相似。
- 不需假設 block cipher 的種類,但假設其有足夠安全。
- 由於編程難度考量,將會以組合 php 加密模式來實作。
- iv, block cipher 固定並可以公開。key 是唯一的安全關鍵。

  經過數次的推翻和改動,現在使用的方法如下:

(En-CBC-k0).(De-CBC-k1).rev.(De-CBC-k1)(msg)
En = 加密, De = 解密, rev = 前後反轉
CBC = Cipher-block chaining
k0,k1 = key, k0!=k1


  這個算法其中一個奇怪的地方,是把 De-CBC 也用作加密用途。這樣當要對密件進行解密時,就必須要用到 En-CBC。En-CBC 的特性是中途的變化會影響以後的結果,加上 rev,就可以使任何一 byte 的改動都影響整個解密結果。

  這個方法,其中一個問題是不能保證(En-CBC-k0).(De-CBC-k1)不會導致資訊洩漏。另外由於 De-CBC 不能當成安全的加密法,所以 k1 不屬於安全考量之內。

沒有留言: