contents
本篇筆記,僅為個人淺見
什麼是區段加密
先了解 stream ciphers 和 block ciphers 的差異
stream ciphers 特別在於加密用的 key 不斷地變更,並且以極少數的情況下重複使用,每一次加密針對一個 byte 或者是 bit 進行加密。加解密的兩方,可以同時產生出相同 random key。
block ciphers 只用同一份 key,把加密文件一次用一個 block 文字進行加密,利用換位 (位置交換)、替換 (文字替換) … 等方式,讓相似內容的明文,可以產出差異極大的密文 (訊息獨立)。
從概念上,串流加密是絕對安全,如果雙方有辦法在不通訊下,可以產生出 random key,而且不重複使用 key,攻擊者會無從下手。但是現今很多 random 的產生方法仍然是演算法的數學模型,因此一定有規則。
而區段加密的好處,在於換位、替換、 … 等方式,將密文的相似度降低,即使明文長得很相似,攻擊者無法誘導相似明文的傳遞,導致 key 快速被發現,因為密文的差異性導致規則難以被破解。
加密設計基礎原則
confusion 困惑
密文跟 key 的關係盡可能混亂,根據加密的方式,有可能某些 key 會造成特殊的密文規則,這種弱 key 要不不存在、要不不使用。減少攻擊者對密文的觀察,就可以找到 key。diffusion 散播
當明文相當相似時,也許只有幾個 bit 不同,產生出來的密文的差異性也要相當高,否則攻擊者可以推導加密原理,藉由 bitwise 將密文修改,讓解密者受到誤導。
Data Encryption Standard (DES)
- 每一次加密 64 -bit 的資料,用 56 -bit 的 key。
這是一個很詭異的現象,通常 key 的長度會比 data 的長度來得大。 - 經過 16 回合的加密,並且每一個回合用 56 -bit 的 key 產生出 48 -bit 的 subkey 針對 64 -bit 的資料加密。
- 加密過程會有擴充 subkey 和選擇一部分的 subkey,並且拿一部分的明文對 subkey 加密。
將明文對切成兩個部分,一部分加密 subkey,另一部分根據加密過的 subkey 進行加密。在下一個回合,交換部分明文和部分密文的位置,讓所有的明文都進入到混亂狀態。
在解密時,知道 subkey 的產生規則,然後拿部分明文,加密 subkey 後,得到部分密文的加密要件,逆推回去。這一個繁複的過程,主要是製造 confusion,而 diffusion 的部分,則是在擴充 key 和拿部分明文加密 subkey 時,發生雪崩效應,因為拿部分明文進行加密 subkey,會造成 key 差異性放大。
儘管明文相似程度很高,卻會因為處理過程將差異轉移到 subkey 很多的位置的不同,經過輪替加密。無法利用頻率的方式,找到明文差異會造成密文的哪一個部分的差異。
正確性
為什麼 DES 可以被正確解密?概念上,一個密文只能對應一個明文,這樣才符合正確解密的定義。因此不同的明文,也要產生出來不同的密文。
證明從輪替下手,部分明文 A 會保留到下一個輪替,而部分明文 A 會加密部分明文 B,假設兩個明文在 A 部分不同,則在密文部分就會不同 (因為保留),假設是 B 部分不同,加密 (XOR 加密) 後也會不同。數學歸納法得證。
加密強度分析
因為 subkey 產生方式和換位、替換的規格是明定,與 key 無關。因此 key 長短將影響加密的強度,從現在分析 56 -bit 在數個小時內就會被解出來。
為什麼 subkey 產生方式和換位、替換的規格是明定?
因為雪崩效應的造成需要某些放大效果,因此表格要符合某些設計規則。
攻擊方法
Timing Attacks 加密時間攻擊,因為電腦運算的速度受輸入要件影響,如果 bit 變換數大,會導致加密時間拉長,藉以分析明文。
Power Attacks 偵測能源消耗,因為運算所需要的能量不同,隨著時間能到得到能源使用圖,就能分析加密過程的情況。也有為了防止這種偵測,考慮將所有運算做得一樣耗電,這有可能本末倒置。
Analytic Attacks 分析攻擊,從統計學的角度進行攻擊,從密文差異下手、從已知密文、明文解方程式、key 與加密結果的關聯性 … 等。
Block mode
ECB
Electronic CodeBook (ECB),不變的 key,需要加密器和解密器,加解密的複雜度可能不同。
- 優點:
構造簡單、容易實做 - 缺點:
長時間下,容易被偵測。影像資料的差異性不大,很容易被辨識到重複性,相較於文字很容易受前後文的影響。
CBC
Cipher Block Chaining (CBC),不變的 key,以及前一個密文會先針對明文加密。
- 優點:
相同明文,會因為前一個的密文不同造就出不同的密文,也就是加密器多一個新的狀態。 - 缺點:
- 一個密文 Ci 的錯誤,會導致兩個明文解析錯誤 (Pi & Pi+1)。
- 第一次加密很容易被抽換 bitwise,因為每次驅動的 Initial Vector 都相同。
CFB
Cipher FeedBack (CFB),類似 CBC,但前一個密文的結果只影響一部分的加密關係,然後將前一段密文狀態加密 key,再對明文加密。
- 優點:
- 支持即時 (real-time) 通訊
- 只需要加密器,加密做兩次相當於解密。
- 支持自同步 (self-synchronization),即使中斷連線、訊息錯誤,可以在數個週期後再次同步運作。
- 藉由自同步的概念,可以捨棄掉 Initial Vector。
- 後半部的明文,可以透過週期性的部分密文建立解密狀態,支持 random access。
- 缺點:
- error propagation 錯誤增長,當一個訊息錯誤時,需要好幾個週期後才能修正回來,這導致中間的解密訊息都不能用。
- 雜訊過多的情況下,不宜使用。
OFB
Output FeedBack (OFB),類似於 CFB,將前一段的加密 key 拿回來加密,不依賴接收的密文狀態。
- 優點:
- 支持即時 (real-time) 通訊
- 只需要加密器,加密做兩次相當於解密。
- 相較於 CFB,沒有錯誤增長的情況。
- 依序使用的 key,可以事先算出來,然後依次使用。
- 雜訊下支持的能力好。
- 缺點:
- 必須一直保持同步
- 訊息被修改時,不易被發現,只單純影響單一明文 (沒有錯誤增長)。
- 起始狀態的 Initial Vector,不能重複使用,否則很容易被攻擊者抓到。
- 加設沒有預先算 key,沒辦法解密出後半部的明文。
CTR
Counter (CTR),類似於 OFB,直接利用計數器作為加密 key。
- 優點:
- 加解密可以平行化處理,如果加解密速度耗時,可以選擇這一種。
- 支持 random access。
- 缺點:
- 必須一直保持同步
- 訊息被修改時,不易被發現,只單純影響單一明文 (沒有錯誤增長)。
- 起始狀態的 Initial Vector,不能重複使用,否則很容易被攻擊者抓到。