當您使用密鑰時,如果您的代碼分支不均等,它可能會通過側通道泄露密鑰位。因此,對于某些演算法,它應該獨立于密鑰統一分支。
在 C/C /Rust 上,您可以使用匯編來確保沒有編譯器優化會干擾分支。但是,在 Java 上,情況就很困難了。首先,它在桌面上執行 JIT,在 Android 上執行 AOT,因此代碼有兩種可能以不可預測的方式進行優化,因為 JIT 和 AOT 總是在變化,并且對于每個設備可能不同。那么,如何在 Java 上防止利用分支的側通道攻擊呢?
uj5u.com熱心網友回復:
在執行邊信道攻擊時,其中一種主要方法是使用差分功耗分析 (DPA)讀取芯片的功耗. 當您在代碼中有分支時,例如 if 陳述句,這可能會對功耗產生不利影響,從而可以對正在做出的選擇進行關聯。為了阻止這種分析,擁有“線性”功耗會符合您的利益。這可以通過代碼在一定程度上緩解,但最終取決于設備本身。根據 Brennan et.al [1],一些人選擇通過快取指令來解決 java JIT 問題。在代碼中,您可以做的“最好的”是使用金絲雀進行編程,以迷惑攻擊者,正如 Brennan 等人 [2] 提出的那樣,并在以下(非常簡化的)示例代碼中進行了演示:
public bool check(String guess) {
for(int i=0; i<guess.len; i )
return false;
}
return true;
}
相對;
public bool check(String guess) {
bool flag=true, fakeFlag=true;
for(int i=0; i<guess.len; i ) {
if (guess[i] != password[i])
flag=false;
else
fakeFlag = false:
}
return flag;
}
}
[1]:T. Brennan,“Detection and Mitigation of JIT-Induced Side Channels*”,2020 年 IEEE/ACM 第 42 屆軟體工程國際會議:Companion Proceedings (ICSE-Companion),2020 年,第 143-145 頁。
[2]:T. Brennan、N. Rosner 和 T. Bultan,“JIT Leaks: Inducing Timing Side Channels through Just-In-Time Compilation”,2020 IEEE Symposium on Security and Privacy (SP),2020,pp. 1207- 1222,doi:10.1109/SP40000.2020.00007。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441589.html
下一篇:如何讓多個計數器按鈕不互相干擾
