為什麼 ECB CBC 和 CFB 可以並行化?
我想我不明白“可並行化”這個詞。為什麼 ECB CBC 和 CFB 可以並行化?
如果有人能簡短地解釋一下,那就太好了。
通過可並行化,我們的意思是加密/解密過程可以分解為可以同時執行的多個任務。對於分組密碼模式,這意味著如果我們有多個分組密碼副本,我們可以使用它來加快速度。
例如,在CBC解密模式下,幾個相鄰塊的解密變換定義為:
$$ P_i = C_{i-1} \oplus D_k( C_i ) $$ $$ P_{i+1} = C_{i} \oplus D_k( C_{i+1} ) $$ $$ P_{i+2} = C_{i+1} \oplus D_k( C_{i+2} ) $$ ( $ C_i $ 是個 $ i $ 密文塊, $ P_i $ 是個 $ i $ 明文塊,和 $ D_k $ 是在解密模式下執行的分組密碼)
現在,我們假設我們看到了整個密文,包括 $ C_{i-1} $ 通過 $ C_{i+2} $ 同時。所以,如果我們有三個硬體實現 $ D_k $ ,然後我們可以用 $ C_i, C_{i+1}, C_{i+2} $ ,讓他們執行解密,然後進行異或運算,從而產生 $ P_i, P_{i+1}, P_{i+2} $ 同時。
因此,通過三個硬體實現,我們可以將解密速度提高三倍。
另一方面,讓我們考慮 CBC 模式加密。在這裡,對此的標准定義是:
$$ C_i = E_k( C_{i-1} \oplus P_i ) $$ $$ C_{i+1} = E_k( C_i \oplus P_{i+1} ) $$ $$ C_{i+2} = E_k( C_{i+1} \oplus P_{i+2} ) $$ 在這裡,當我們嘗試並行執行它時遇到了問題。生成 $ C_{i+1} $ ,我們需要有值 $ C_i $ 在我們開始加密之前。因此,要生成下一個加密塊,我們必須先計算前一個。因此,如果我們有三個加密引擎,我們就無法利用它們;我們最終一次只使用一個。