Timing-Attack
通過隨機睡眠緩解定時攻擊
你能通過一個簡單的加密實現來緩解所有的定時攻擊嗎?例如,如果您的實現看起來很可靠,但您不確定下一個 CPU 記憶體漏洞即將到來,這是否是一種合法的緩解策略?
澄清一下,這將是從算法開始之前測量的隨機延遲,因此您不是簡單地將模糊添加到執行時。
首先,讓我們定義當有人談論“隨機延遲”時通常是什麼意思(如果我沒有理解你的實際意思,請糾正我)。如果你想有效地隱藏你的函式的實時執行,你想添加 $ x $ 秒在哪裡 $ x $ 接近平均執行時間(否則很容易被注意到)。你提出問題的方式,我也會假設你的 $ random $ 函式是統一的,即所有值都具有相同的被繪製機率。
使用此設置,添加隨機延遲只會減慢攻擊速度,因為平均分佈仍然是可區分的。但是,攻擊者可能需要收集更多樣本才能消除您引入的噪音。
我邀請您查看此展示文稿(此處提供幻燈片),該展示文稿對問題進行了很好的說明,並進一步探索基於延遲的不同對策。
考慮到攻擊者能夠探測你的記憶體(即指令),他將能夠確定何時呼叫了真正的函式,何時呼叫了睡眠函式,因此這種對策毫無用處。
通常,為避免此類漏洞,建議確保您的程式碼沒有任何依賴於秘密的分支和記憶體訪問。一個簡單的延遲不會有太大作用,即使您使用它來平滑整個時間執行(這可能會非常棘手,因為正如 Yehuda Lindell 所說,時間將取決於平台)。
注意:如果你想考慮 CPU 記憶體漏洞,你需要的不僅僅是簡單的延遲。也就是說,您需要避免依賴秘密的分支和記憶體訪問。