停止對 AES 的定時攻擊:為什麼防止作業系統中斷 AES 計算很重要?
我閱讀了AES 上的記憶體定時攻擊論文(Daniel J. Bernstein 撰寫),但我似乎並不了解所有內容。作者用很長的篇幅介紹瞭如何防止作業系統中斷 AES 計算。但這如何洩露任何資訊?是的,計算比平時花費更多時間,但它不依賴於輸入?
(這是AES 定時攻擊的後續。)
論文解釋了原因。防止作業系統中斷 AES 計算是 Bernstein 提出的防禦基於記憶體的定時攻擊方法的一部分。讓我為你勾勒出論點:
- 論文的前半部分解釋說,如果時間是可變的,那麼它就會引入定時攻擊的風險。第 3-6 節證明了這種攻擊實際上是可行的。
- 這就提出了一個問題,即如何為我們已經停止這些攻擊提供高度保證——不僅是我們知道的攻擊,而且是整個定時攻擊類別。Bernstein 認為,針對此類攻擊的最佳防禦是確保 AES 計算的執行時間是恆定的,並且獨立於輸入。見第 8 節。
- 因此,這就提出了我們需要做些什麼來確保 AES 計算與時間無關的問題。其餘部分確定了一些挑戰,並概述了解決方案。
- 特別是,第 10-11 節指出記憶體效應會導致時序變化。而且,很容易看出這會如何影響安全性:記憶體效應意味著所花費的時間取決於您查找的地址,而 AES 的設計意味著(如果您以明顯的方式使用表查找)您查找的地址up 取決於關鍵。事實上,這幾乎可以肯定正是導致第 3-6 節中的攻擊的效果。
- 那麼下一個問題是,我們如何確保記憶體效應不會引入時序可變性?自然的解決方案是:將整個表載入到 L1 記憶體中,將其鎖定到 L1 記憶體中,並確保它在 AES 計算期間的任何時候都不會被踢出。然而,這種自然的解決方案在分時作業系統上存在問題:作業系統可能隨時搶占我們並執行其他任務。如果發生這種情況,它會通過從 L1 記憶體中清除我們預載入的值來破壞我們的防禦。
特別是,如果我們的預載入值被從 L1 記憶體中清除,我們又回到了我們開始時的脆弱情況。現在所花費的總時間取決於查找的地址序列。例如,如果您在表中查找相同的索引兩次,它會比查找兩個單獨的索引更快——因此我們可能會洩露有關表查找使用相同索引還是不同索引的資訊。然而,在 AES 的(自然實現)中,這些索引是依賴於密鑰的。因此,這種時序洩漏可能會洩漏有關鍵相關值的資訊:它會洩漏兩個中間值是否相等,其中兩個中間值都依賴於某些鍵材料。這些洩露的資訊可以合理地用於了解有關關鍵材料的部分資訊,
- 為了防止這種情況發生,我們需要有一些方法來確保這種糟糕的結果不會發生。顯而易見的方法是引入某種機制來確保 AES 計算不會被中斷。如果 AES 計算不能被中斷,那麼我們就消除了基於這種中斷的攻擊風險。所以,這就是伯恩斯坦的提議。
- Bernstein 繼續爭辯說,這是他所知道的唯一滿足要求的解決方案。特別是,這裡的關鍵要求是“我們需要一種方法來確信(高度保證)沒有攻擊”。
這是否意味著我可以肯定地告訴你沒有其他辯護?當然不是。這只是意味著聰明的人對此進行了研究並得出結論,目前,最高保證的解決方案似乎是防止作業系統中斷。如果其他人想爭辯說這是不必要的,那麼他們有責任證明他們的替代方案保證不會受到攻擊。
請理解,密碼學的一個重要原則是:你想不到任何攻擊,並不意味著沒有攻擊是可能的。在密碼學中,“沒有證據表明攻擊是可能的”與“證據表明沒有攻擊是可能的”有很大的不同。基於設計者無法想到攻擊(換句話說,無法找到任何可能發生攻擊的證據)被破解的密碼方案被證明是合理的,這種情況並不少見。出於這個原因,謹慎的密碼學家經常以可證明的證據為目標,證明系統是安全的(找到沒有攻擊可能的積極證據)。這更難,但為安全奠定了更堅實的基礎。
也就是說,重要的是要理解這篇論文代表了伯恩斯坦的建議,這與社區其他人的傳統智慧有些不一致。大多數加密社區並不關心阻止作業系統中斷 AES 計算,理論上他們不知道任何足夠實用的攻擊,足以對他們在野外部署的系統構成重大風險。基本上,他們判斷這種攻擊的風險足夠低,以至於他們願意接受風險。他們可能是對的。或者他們可能不會。無論哪種方式,我上面的回答都是基於你想理解伯恩斯坦的論點的假設,這樣你就可以就你是否信服形成你的看法。一世'