簡體   English   中英

如何緩解 Java 上的代碼分支側信道攻擊?

[英]How are code-branch side channel attacks mitigated on Java?

當您使用密鑰時,如果您的代碼分支不均勻,它可能會通過側通道泄露密鑰的位。 因此,對於某些算法,它應該獨立於密鑰進行統一分支。

在 C/C++/Rust 上,您可以使用匯編來確保沒有編譯器優化會干擾分支。 但是,在Java上,情況就很困難了。 首先,它為桌面執行 JIT,並在 Android 上執行 AOT,因此代碼有兩種可能以不可預測的方式進行優化,因為 JIT 和 AOT 總是在變化,並且對於每個設備可能不同。 那么,如何在 Java 上防止利用分支的側信道攻擊?

執行邊信道攻擊時,其中一種主要方法是使用差分功耗分析 (DPA)讀取芯片的功耗。 當您在代碼中有一個分支時,例如 if 語句,這可能會對功率消耗產生不利影響,從而可以對正在做出的選擇進行關聯。 為了阻止這種分析,“線性”功耗符合您的利益。 這可以在一定程度上通過代碼來緩解,但最終取決於設備本身。 根據 Brennan et.al [1],一些人選擇通過緩存指令來解決 java JIT 問題。 在代碼中,您可以做的“最好的”是使用金絲雀進行編程,以迷惑攻擊者,正如 Brennan et.al [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,“檢測和緩解 JIT 誘導的側通道*”,2020 年 IEEE/ACM 第 42 屆軟件工程國際會議:配套論文集 (ICSE-Companion),2020 年,第 143-145 頁。

[2]:T. Brennan、N. Rosner 和 T. Bultan,“JIT 泄漏:通過即時編譯引入時序側通道”,2020 年 IEEE 安全與隱私研討會 (SP),2020 年,第 1207- 1222,內政部:10.1109/SP40000.2020.00007。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM