Encryption

這是增加分組密碼的塊大小的可接受方式嗎?

  • June 16, 2017

**注意:**這一切都是為了娛樂和學習。這些都不會進入生產程式碼。

我正在研究一些受益於大塊大小的東西(特別是海綿函式)。AES 的塊大小(比較)小,只有 128 位。這是增加塊大小的安全結構嗎?

$ E(x) $ 和 $ D(x) $ 分別是ECB模式下的加密和解密。輸入的大小 $ b_0 $ 是密碼塊大小的倍數。加密如下進行。

$$ c_n = E(b_{n-1}) $$ $$ b_n = shift(c_n) $$ 這對輸入中的每個塊大小的塊重複一次。例如,使用 AES(128 位分組密碼)加密一個 512 位分組需要 4 輪,所以輸出將是 $ b_4 $ .

解密是上述算法的簡單逆運算。

$$ c_{n} = shift^{-1}(b_n) $$ $$ b_{n-1} = D(c_{n}) $$ $ shift(x) $ 被定義為垂直排列塊並將每一行移動與其所在行相對應的量。所有操作都是在字節級別上完成的。它類似於 AES 中的 ShiftRows。

例如,塊大小為 8(字節),輸入為aaaaaaaabbbbbbbb12345678, $ shift $ 會這樣進行。

ab1 <-- shift by 0            = ab1
ab2 <-- shift by 1            = b2a
ab3 <-- shift by 2            = 3ab
ab4 <-- shift by 3 (equiv. 0) = ab4
ab5 <-- shift by 4 (equiv. 1) = b5a
ab6 <-- shift by 5 (equiv. 2) = 6ab
ab7 <-- shift by 6 (equiv. 0) = ab7
ab8 <-- shift by 7 (equiv. 1) = b8a

結果輸出將是ab3ab6abb2ab5ab81ab4ab7a.

目的是將其擴散到足以確保每個明文位對每個密文位都有影響。

我在這裡遺漏了什麼重大缺陷嗎?

分組密碼操作模式的目的是擺脫塊大小施加的大小限制,所以您建議使用不安全模式,對其進行調整以希望使其安全,最後用這個建構一個新的分組密碼……以 4 AES 加密為代價來實現擴散(而 AES 中的 MixColumn 和 ShiftRow 操作試圖以更低的成本實現相同的擴散。)所以我不相信你的分組密碼的性能,不明白為什麼它優於固定 512 位大小的 AES-CBC。

現在,您可能缺少什麼缺陷?

好吧,由於您使用的是 AES ECB,如果您的明文是例如 128 位的重複塊,它將被 AES ECB 加密到同一個 AES 塊中,這意味著您的 Shift 操作將什麼也不做,因為它的所有行將填充相同字節的重複:

111 <-- shift by 0            = 111
222 <-- shift by 1            = 222
333 <-- shift by 2            = 333
444 <-- shift by 3 (equiv. 0) = 444
555 <-- shift by 4 (equiv. 1) = 555
666 <-- shift by 5 (equiv. 2) = 666
777 <-- shift by 6 (equiv. 0) = 777
888 <-- shift by 7 (equiv. 1) = 888

這意味著您最終將得到一個完全相同的塊的多個 AES-ECB 加密塊,這將在您的密文中為您提供有趣的模式,並洩漏資訊,因此您無法實現人們期望的密文不可區分性安全分組密碼。

這基本上意味著“不,這不是可接受的方式”。

你能進一步調整它以避免這個問題嗎?最有可能的是,但如果你想建構更大的分組密碼,你也可以建構一個更大的 AES,並且比將多個 AES 堆疊在一起具有更好的性能。

你應該?恕我直言,不。堅持使用安全的 AES 結構,如 CBC、CTR、GCM 等,或使用安全的流密碼,如 ChaCha。

引用自:https://crypto.stackexchange.com/questions/48343