這是增加分組密碼的塊大小的可接受方式嗎?
**注意:**這一切都是為了娛樂和學習。這些都不會進入生產程式碼。
我正在研究一些受益於大塊大小的東西(特別是海綿函式)。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。