--- tags: 資安 --- # ch6 Block Cipher Operation ## Double DES DES有被暴力攻擊的風險,因此為了加強有兩種做法 1. 換成完全不同的演算法:AES 2. 多重加密:Double DES,Triple DES  做了2次DES,鑰匙長度為56*2=112 bits,增強加密強度 ### Meet-in-the-Middle Attack 當攻擊者已知明文P與密文C時,攻擊者可以窮舉所有$k_1$的組合,將產生出來的第一層密文$ENC_k$$_1(P)$,用大量空間儲存下來。再窮舉所有$k_2$的值,將 $DEC_k$$_2(C)$ 與前面儲存下來的結果比對,進而得出正確的$k_1$與$k_2$。 這使得攻擊者計算的量從$k_1$與$k_2$各自的可能組合數相乘,變成相加。 [維基百科](https://zh.wikipedia.org/wiki/%E4%B8%AD%E9%80%94%E7%9B%B8%E9%81%87%E6%94%BB%E6%93%8A) ## Triple-DES with Two-Keys 增加中途攻擊的難度到$2^1$$^1$$^2$ 兩把鑰匙在每回合分別是加密→解密→加密,如下圖  ## Triple DES with Three Keys 加密→EDE $K_1,K_2,K_3$ 解密→DED $K_3,K_2,K_1$ Key length : 168 = 56*3 ## Block Cipher Modes of Operation  [維基百科-區塊加密操作方式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Confidentiality_only_modes) [區塊加密法詳細說明](https://notes.andywu.tw/2019/%E5%AF%86%E7%A2%BC%E7%9A%84%E5%8A%A0%E5%AF%86%E6%A8%A1%E5%BC%8Fecb-cbc-cfb-ofb-ctr/#OFB) ### Electronic codebook (ECB) 將訊息分為多個block,並分別加密(key相同) →由於缺乏擴散(diffusion),使得密文還能保有某些明文的特性,容易利用replay attack ### Cipher block chaining (CBC) 在CBC下,除了每個區塊分開加密,在加密前都要和前一個訊息的密文做XOR,而第一個block加密前要先跟**初始向量**[^first]做XOR * 每一區塊鑰匙是一樣的 [^first]:初始化向量(Initial Vector) 由於密文區塊1前面已經沒有任何的密文區塊了 所以電腦會以隨機數來產生與密文區塊同樣大小的區塊叫初始化向量(Initial Vector) 這個初始化向量會充當密文區塊1的前一個密文區塊 如此即可以解決密文區塊1前面沒有任何的密文區塊的問題  由於密文是經過重複跟前項運算得出,因此有擴散的特性 ### Cipher feedback (CFB) CFB可以將block cipher 轉換成 stream cipher 比CBC更好的是,他不用將訊息多填充成區塊的倍數 流程是先將原始向量加密後,在跟明文做XOR運算形成密文  ### Output feedback (OFB) 跟CFB很像,但是是把初始化向量經過每回合的加密後,跟每回合的明文做XOR產生 卻彌補了CFB模式如果要指定直接加密第x個明文區塊 要重新從第一個明文區塊開始加密直到第(x-1)個明文區塊,才有辦法處理第x個明文區塊的缺點 在OFB模式中,如果要指定直接加密第x個明文區塊,只要重複把初始化向量做(x-1)次加密即可  缺點:??? ### Counter (CTR) 在CTR模式中用了計數器counter的概念取代初始化向量 CTR模式的運作原理是先產生一個隨機值,然後拿加密後的隨機值與明文區塊做XOR運算產生密文區塊,接著隨機值+1,再重複上述的動作  所以可以得出公式: 第x個密文區塊 = 第x個明文區塊與加密後的(隨機值+(x-1))進行XOR 有了這個關係,如果要指定加密第幾個區塊的明文就可以直接加密,大幅減少加密所需的時間  [CH7 Pseudorandom Number Generator](https://hackmd.io/@Ired/ISch7N0t3)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.