Implementation

當查找表適合記憶體行時,查找表是否安全?

  • January 26, 2017

現代 x86 機器的典型高速記憶體行大小為 64 字節。如果表不超過記憶體行大小並且相應地對齊,那麼使用帶有秘密數據的查找表是否安全?

我在考慮如何進行恆定時間的 GHASH (GCM) 實現。我想要一個 128x4 128 位條目的表。被相乘的塊的每兩位將確定四個條目中的哪一個被異或到結果中。重複 64 次,你已經將塊乘以 $ H $ .

據我所知,這應該不受定時攻擊,因為秘密數據在任何時候都不會確定讀取哪個記憶體行。

現代 x86 機器的典型高速記憶體行大小為 64 字節。

這可能不適用於所有處理器。如果你想知道,你應該從系統中檢索它。理想情況下,您應該進一步拆分數據,在您的範例中,您可以每 16 個字節將其拆分為一個位,因此您將支持每台記憶體線大小為 16 或更大的機器(並且 16 字節是 SSE 寄存器的大小,因此大多數帶有 SSE 的機器應該有那個記憶體大小 - 所以這個千年中的大多數 CPU)。

據我所知,這應該不受定時攻擊,因為秘密數據在任何時候都不會確定讀取哪個記憶體行。

我們只能希望。

**x86 和 x64 處理器不是安全設備。**它們不提供任何數據訪問時間保證或任何恆定時間保證。事實上,眾所周知,他們會盡其所能避免時間固定,如果可能的話,他們希望做得更快。

但是希望(例如 OpenSSL RSA 依賴於此)這確實是一個恆定的時間。英特爾和 AMD 沒有任何保證。但據我們了解他們生產的處理器 - 到目前為止確實如此。

但是,您應該小心。在你的程式碼中引入計時攻擊並不難——如果你使用的不是彙編,甚至可以很容易地根據秘密引入分支。您可以做的最好的事情是測試您的機器上是否確實存在恆定時間。這並不意味著它總是需要相同的時間。相反,從長遠來看,不同的秘密不應該花費不同的時間。

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