ECB 和 OFB 的複雜性
ECB 在時間和記憶體方面的複雜性是多少?
還有在OFB?我在網際網路上找不到它,所以我決定在這裡問它。
好吧,假設你有一個固定的分組密碼(也就是說,你不會隨著消息長度的增加而改變分組密碼),那麼給定一個長度為 $ N $ :
- 歐洲央行和OFB都採取 $ O(N) $ 加密和解密的時間。
- 歐洲央行和OFB都採取 $ O(1) $ 除了保存加密/解密消息的空間(即 $ O(N) $ ).
正如 poncho 所指出的,ECB 和 OFB 加密(和解密)都需要 $ O(n) $ 時間和 $ O(1) $ 額外的空間(不包括輸入和輸出,它們可能被建模為不可搜尋的流)。
這些在平均情況和最壞情況下都成立,值得注意的是,複雜性很快接近它們的漸近線;通常,ECB 和 OFB(以及所有其他常見的分組密碼模式)的時間複雜度是 $ a + \lceil n \rceil b $ 對於任何 $ n > 0 $ , 在哪裡 $ n $ 是密碼塊中消息的長度,並且 $ a $ 和 $ b $ 是常數。同樣,額外的工作空間使用量通常也是恆定的 $ n > 0 $ .
這些模式之間的差異體現在其他特徵上,而不是時間/空間複雜度上:
- ECB模式加密並行的尷尬;OFB 幾乎完全是連續的。
- OFB 模式下的大部分計算可以在(明文或密文)輸入可用之前完成,前提是有足夠的空間來緩衝結果,因為它只取決於密鑰和初始化向量。這不適用於歐洲央行模式。
- OFB 模式在加密和解密消息時僅在一個方向使用分組密碼;ECB 模式需要雙向分組密碼實現。
- ECB模式不安全,會以明文形式洩露重複區塊的資訊;如果使用得當,OFB 可以完全保護消息的機密性。
- 如果相同的密鑰用於多條消息,OFB 模式需要每個唯一的 IV/nonce;歐洲央行不——也不能——使用 IV,並且對於多條消息和只對一條消息一樣(不)安全。
- ECB 和 OFB 模式都具有延展性,但方式不同:OFB 允許對手翻轉任意位,而 ECB 允許他們交換任意塊。兩者都不提供消息身份驗證。
在實踐中,後三個與安全有關的屬性會覆蓋前三個與性能有關的屬性。因此,如果您希望您的消息完全保密,則不應使用 ECB 模式;如果您希望它們也不會被篡改,則不應單獨使用任何一種模式。(但是,如果與MAC結合使用 OFB 就可以了。)
我還想指出,有一種分組密碼模式,它結合了上面列出的 ECB 和 OFB 的大部分優點:CTR 模式。它與 ECB 一樣可並行化,與 OFB 一樣可預計算,僅在一個方向上使用分組密碼並提供完全保密性。它確實需要多個消息的 IV / nonce(就像所有提供完全機密性的模式一樣),並且不提供消息身份驗證(但可以將 MAC 應用於密文以提供該身份驗證)。
CTR 模式的主要風險與 OFB 相同(以及像 RC4 這樣的流密碼):如果相同的密鑰和 IV(或等於任何中間密碼輸入的 IV)曾經用於兩條消息,則機密性可能會受到損害.