Aes

當混合列在密碼中時,位切片如何保持恆定時間

  • May 7, 2016

我正在閱讀有關位切片技術的內容,其中一件事引起了我的注意。

位切片實現的優勢在於(除了它們很快)它們在恆定時間內執行。這排除了基於時間的側通道攻擊。

現在,我的問題是:像 AES 這樣的密碼如何在位切片時以恆定時間執行?MixColumns操作適用 $ GF(2^8) $ ,所以每當矩陣乘法的八位是 $ 1 $ 在乘法之前,結果必須以伽羅瓦域的多項式為模減少,以免溢出。在我看來,密碼的執行時間取決於輸入呢?(我可以理解為什麼SubBytesShiftRows和常量加法是常量時間)。

每次操作後,位切片的解決方案是用多項式減少(XOR),還是有更聰明的技巧?這似乎是一種放緩,因為位切片通常是為了速度而進行的。(我也不是伽羅瓦域的專家,所​​以我不確定每次運算後是否可以對多項式進行異或運算,因為這就像每次都在結果中添加一個值)

感謝您提前開導!關於位切片的文件並不多。似乎每個人都知道它的速度很快並且知道它的存在,但實際上很少有實現嘗試使用它。

編輯:看起來不像,每次乘法後用不可約多項式減少是可以的。如果我將多項式與結果進行異或,則第 9 位是 $ 0 $ (即結果不會溢出),那麼它將溢出,因為 AES 中的不可約多項式是 $ 100011011 $ (以位形式)。

您可以(並且應該)使用掩蔽來減少恆定時間。也就是說,而不是使用以下(非位切片)偽 C 程式碼來進行縮減:

if ((result >> 8) & 1) {
   /* bit 8 is set: clear it and flip bits 0, 1, 3 and 4 */
   result ^= 0x11b;
}

你可以簡單地做:

result ^= 0x11b * ((result >> 8) & 1);

(如果在您的 CPU 架構上更有效,您的編譯器可能會將乘法優化為一系列位操作)。

然後可以對它進行簡單的位切片,例如:

/* bit0 .. bit7 store the 8 bits of the result(s), bit8 is the overflow bit */
bit0 ^= bit8;
bit1 ^= bit8;
bit3 ^= bit8;
bit4 ^= bit8;

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