--- tags : 資安 --- # ch3 Block Cipher and DES ## Block Cipher 給定n bits的明文就會產出n bits的密文 如果是n bits的block cipher 則Key應該是$n(2^n)$ ## Feistel Cipher ### Diffusion(擴散) and Confusion(混淆) Diffusion是讓明文有一個不一樣,就會讓密文有很大的變化 confusion是讓密文盡可能跟原有的頻率沒有關聯,且鑰匙的複雜度也夠高 ### Feistel Cipher Structure ![](https://i.imgur.com/pMRmjuO.png) 通式 $LE_i=RE_i-_1$ $RE_i=LE_i-_1 \oplus F(RE_i-_1,K_i)$ 將明文分成兩半$LE_0,RE_0$ RE_0直接等於LE_1 ### Feistel Cipher Design * Block size 越大的區塊大小代表越安全,但是太大的區塊會造成加密/解密的速度變慢 * Key size 跟block 一樣越大越安全但會減慢加密/解密的速度 * Number of rounds 每一輪的加密強度其實是不夠的,但是經過很多輪之後就能把強度提升到一定程度 * Subkey generation algorithm 這裡的演算法越強越好 * Round function F 一樣演算法越強越好 * Fast software encryption/decryption 通常演算法的加密/解密會用軟體來做,因此要有好的軟體才能加快速度 * Ease of analysis 演算法不能太簡單否則會很容易被分析出漏洞 ## Data Encryption Standard (DES) * 在1977年時被發表 * 在2001年AES被發明以前是最廣泛使用的加密法 * DES使用的演算法叫Data Encryption Algorithm (DEA) ### Data Encryption Algorithm (DEA) ![](https://i.imgur.com/gIJsoFf.png) 一開始會先做Initial permutation (IP) 中間的16回合都是相同的function → Feistel Cipher Structure 最後將兩半交換後(也就是$LE_1$$_7$=$RE_1$$_6$,$RE_1$$_7$=$LE_1$$_6$),做一個反向的Initial permutation,稱為$IP^-$$^1$ ### Single round ![](https://i.imgur.com/P4UL5Et.png) 圖的右邊為Key的生產方式,左邊為Feistel Cipher Structure ### F Function 首先32bit的輸入會切成4bit一塊,然後將每一塊旁邊多加隔壁塊的bit Ex:...1100 0110 1001... → ...011000 001101 010011... 這樣操作完就會擴增成48bit 之後每一個6bit的區塊都會進入不一樣的S Box,在E-table中加入的2bit決定row,中間的4bit決定column 每個Sbox會有00~ 11的row,和0~15的column ![](https://i.imgur.com/P5y24tE.png) Ex. Input of S1 =011001 => 01 row => 1100=12 column => Output=9=1001 ### Key Generation 首先產生一個64bits的 Key並每8bit捨去一個bit ![](https://i.imgur.com/2UrOCwK.png) 然後把剩下的打亂後分成兩部分(28bits+28bits) ![](https://i.imgur.com/AtTsBoG.png) 兩部分分別做left shift,每一round有可能會shift 1~2bits,隨機決定 之後再做一次Permuted Choice(PC2)就得到最後48bits的輸出$K_i$ ![](https://i.imgur.com/uemybPv.png) ### Avalanche Effect 只要明文有1bit不一樣,經過16round的結果也會完全不一樣 就算明文一樣,只要Key不一樣,最後結果也會完全不一樣 ### Timing attacks 原理:通過不同的明文輸入觀察密文產生的時間差來分析可能的金鑰 →不同的輸入確實在DES上會有些微的時間處理的差距,但是目前還不可能用這種方式來破解DES甚至是更強的3DES,AES ## Block Cipher Design Principles 1. Number of Rounds 2. Design of the function F 必須是非線性的,且要有足夠的雪崩效應(Strict avalanche criterion (SAC)) 和位元轉換的獨立性(Bit independence criterion (BIC)) 3. Key scheduling algorithm [CH5 Advanced Encryption Stantard](https://hackmd.io/@Ired/ISch5N0t3)