以秘密順序訪問數組元素是否容易受到定時攻擊?
假設有一個包含字節 0…255 的數組。假設使用隨機數據的鍵對該數組進行混洗。
由於這是使用秘密數據索引表的元素,它是否容易受到定時攻擊?
如果是這樣,假設數組再次被洗牌。由於第二次 shuffle 開始時的狀態是秘密的,字節 0…255 的隨機排列,這第二次 shuffle 是否也容易受到定時攻擊?
基本上,問題的核心是基於秘密數據訪問數組的索引嗎?了解相關數組/表的內容是此類攻擊的先決條件嗎?或者還有其他的東西嗎?
背景
更具體地說,我很好奇以下構造對定時攻擊的脆弱性:
shuffle(Z256, key) # this randomizes key too output = Z256[Z256[index]] for index 0...255 repeat
我看到的問題是基於秘密數據的索引,無論是在洗牌階段還是輸出階段。但是,由於set每次都洗牌,key隨機化,set完全迭代通過,我覺得應該是抗性吧?我的理由是,由於該集合是完全迭代的,因此無論訪問發生的順序如何,訪問它所花費的時間總和應該或多或少相同。但我不確定究竟是什麼導致漏洞開始.
容易受到特定時間攻擊不是構造的屬性,而是實現的屬性。不難想像一個微處理器總是需要 X 時間來訪問一個字節的記憶體。這樣的實現可能不會受到定時攻擊(但可能會受到其他各種攻擊,如功率分析)。但也有一些高級語言可以重新組織你的數據,這將使分析變得更加容易,即使是在你洗牌的時候。
所以從現在開始,讓我們假設現代 PC 類 CPU 和一個編譯為本機程式碼(彙編)的編譯器。在這種情況下,編譯器很可能會讓數據以我們在表中看到的方式出現在記憶體中(出於優化目的)。
現代 CPU 在不止一個級別上記憶體對 ram 的訪問。通常高速記憶體行有 64 字節。由於您的所有數據可能不適合單個記憶體行,因此根據數據的位置可能需要不同的時間來訪問。所以它會洩露一些關於索引的數據。如果您執行雙重取消引用,它不會改變任何東西 - 它仍然會洩漏有關 index.html 的資訊。
但這並不自動意味著它必須是脆弱的。一些 RSA 庫(如 OpenSSL)不會有這個問題,因為它們交錯了數據,因此每個秘密都位於下一個記憶體行。這樣 CPU 將始終訪問相同的記憶體行,而不依賴於索引。這當然也會導致性能下降,並且不太可能由編譯器完成。
因此,假設正常的記憶體組織(為了速度,而不是為了抵抗),你的方案可能仍然容易受到攻擊,但改組可能會阻止大多數攻擊。你的密鑰會因為洗牌而洩露,只要有足夠的耐心,就有可能檢索密鑰然後學習索引。這樣的攻擊不太可能發生,但是洗牌數據的成本是非常大的。所以最好的想法是遵循針對此類問題的既定協議(RSA 以存在此問題而聞名,因此我建議朝那個方向研究)。