des_modes
名稱
des_modes - OpenSSL 中 DES 和其他加密演算法的變體
說明
OpenSSL 的多種加密演算法可以使用在多種模式中。這些模式用於以類似串流密碼的方式使用區塊密碼,以及其他用途。
概觀
電子密碼本模式 (ECB)
通常,這會以函數 algorithm_ecb_encrypt() 的形式出現。
一次加密 64 位元。
區塊的順序可以重新排列而不被偵測到。
相同的明文區塊總是會產生相同的密文區塊(對於相同的金鑰),這使其容易受到「字典攻擊」。
錯誤只會影響一個密文區塊。
密碼區塊串接模式 (CBC)
通常,這會以函數 algorithm_cbc_encrypt() 的形式出現。請注意,des_cbc_encrypt() 並非真正的 DES CBC(它不會更新 IV);請改用 des_ncbc_encrypt()。
一次加密 64 位元的倍數。
CBC 模式會在使用相同的金鑰和起始變數加密相同的明文時產生相同的密文。
串接作業會使密文區塊依賴於目前的和所有先前的明文區塊,因此區塊無法重新排列。
使用不同的起始變數可以防止相同的明文加密成相同的密文。
錯誤會影響目前的和後續的密文區塊。
密碼回饋模式 (CFB)
通常,這會以函數 algorithm_cfb_encrypt() 的形式出現。
一次加密少於或等於 64 位元的位元數 (j)。
CFB 模式會在使用相同的金鑰和起始變數加密相同的明文時產生相同的密文。
串接作業會使密文變數依賴於目前的和所有先前的變數,因此 j 位元變數會串接在一起,無法重新排列。
使用不同的起始變數可以防止相同的明文加密成相同的密文。
CFB 模式的強度取決於 k 的大小(在 j == k 時最大)。在我的實作中,情況總是如此。
選擇較小的 j 值會需要在加密演算法中進行更多次循環才能處理每個純文字單位,因此會造成更大的處理負擔。
只能加密 j 位元組數的倍數。
錯誤會影響目前的密文變數和後續密文變數。
輸出回饋模式 (OFB)
通常會以函式 algorithm_ofb_encrypt() 的形式找到。
一次加密少於或等於 64 位元的位元數 (j)。
OFB 模式會在使用相同金鑰和起始變數加密相同純文字時產生相同的密文。此外,在 OFB 模式中,當使用相同金鑰和起始變數時會產生相同的金鑰串流。因此,基於安全性考量,特定起始變數應僅針對特定金鑰使用一次。
由於沒有串接,OFB 較容易受到特定攻擊。
使用不同的起始變數值可防止相同純文字加密為相同密文,這是透過產生不同的金鑰串流來達成。
選擇較小的 j 值會需要在加密演算法中進行更多次循環才能處理每個純文字單位,因此會造成更大的處理負擔。
只能加密 j 位元組數的倍數。
OFB 操作模式不會在結果純文字輸出中延伸密文錯誤。密文中的每個位元錯誤只會導致解密純文字中一個位元錯誤。
OFB 模式不會自我同步。如果加密和解密這兩個操作不同步,系統需要重新初始化。
每個重新初始化都應使用與先前使用相同金鑰的起始變數值不同的起始變數值。原因是每次都會從相同的參數產生相同的位元串流。這很容易受到「已知純文字」攻擊。
三重 ECB 模式
通常會以函式 algorithm_ecb3_encrypt() 的形式找到。
使用金鑰 1 加密,使用金鑰 2 解密,再使用金鑰 3 加密。
與 ECB 加密相同,但將金鑰長度增加到 168 位元。有理論攻擊可用於將有效金鑰長度縮短為 112 位元,但這種攻擊也需要 2^56 個記憶體區塊,不太可能,即使是對於 NSA 來說也是如此。
如果兩個金鑰相同,則等於僅使用一個金鑰加密一次。
如果第一個和最後一個金鑰相同,則金鑰長度為 112 位元。有攻擊可能會將有效金鑰強度降低到僅比 56 位元稍長,但這些攻擊需要大量的記憶體。
如果所有 3 個金鑰都相同,則這實際上與一般的 ecb 模式相同。
三重 CBC 模式
通常會以函式 algorithm_ede3_cbc_encrypt() 的形式找到。
使用 key1 加密,使用 key2 解密,然後使用 key3 加密。
如同 CBC 加密,但將金鑰長度增加至 168 位元,並具有與三重 ecb 模式相同的限制。
注意事項
這段文字大部分由 Eric Young 在他為 SSLeay(OpenSSL 的前身)撰寫的原始文件中所撰寫。而他則將其歸功於
AS 2805.5.2
Australian Standard
Electronic funds transfer - Requirements for interfaces,
Part 5.2: Modes of operation for an n-bit block cipher algorithm
Appendix A
另請參閱
版權
Copyright 2000-2017 The OpenSSL Project Authors。保留所有權利。
根據 Apache License 2.0(「本授權」)授權。您不得使用此檔案,除非符合本授權。您可以在原始程式碼散佈中的 LICENSE 檔案中取得副本,或至 https://www.openssl.org/source/license.html 取得。