白盒的理論概念
是否有任何理論上安全的白盒概念?
我最近一直在閱讀有關白盒 [ 1 , 2 , 3 ] 的內容。似乎白盒處理程式碼混淆,並且不知道是否存在完美的白盒。
我對這背後的理論概念感到好奇。對於流密碼,理論概念是 PRF。對於分組密碼,它是 PRP。對於散列函式,它是單向函式。白盒有什麼可比的嗎?
我正在尋找一些不一定實用的東西,但我們實際上可以證明這實現了完美的白盒,比如一個真正的亂碼或其他東西。
**更新。**我依稀記得在網上讀過一些東西
如果存在超大記憶體,白盒是可能的。儲存器可以作為查找表載入,其中明文作為查找密鑰,密文作為查找值。由於查找表中不涉及加密密鑰(它以前已用於創建查找表),因此無法恢復,但仍然可以加密。
但我無法檢索來源。有人知道嗎?
警告:白盒密碼學超出了我的舒適區,我沒有關注該領域的最新發展。以下是我目前的觀點,我希望看到它受到挑戰,並在此過程中學習。
正如我所看到的,白盒密碼學(也是業界最想要的那個)的傳統目標是設計軟體來計算標準公鑰加密轉換(例如密鑰 PRP,理想情況下是 AES)與特定實例密鑰嵌入在軟體中,這樣洩露軟體不會洩露密鑰。
我不知道這是什至接近實現的嚴肅聲明。相反,以 AES 作為 PRP 以 AES 為重點的 WBC 比賽都以快速密鑰提取結束了 AFAIK。
關於這個目標,我們似乎甚至沒有實際上安全的 WBC,因此理論上更不安全的 WBC。與對稱加密中更好的情況相比,我們實際上有安全的 PRP 和 PRF,但可以說沒有從第一原理開始的理論上安全的構造。
然而,如果我們允許在考慮 WBC 的情況下建構密鑰轉換,則上面定義的 WBC 變體實際上是可行的:例如,使 AES-256 與 WES-256 相似的實際安全 WBC 實現是微不足道的,定義為: $$ \begin{align} \text{WES-256}:\quad&{0,1}^{256}\times{0,1}^{128}\to{0,1}^{128}\ &P\mapsto\text{WES-256}(K,P)\underset{\text{def}}=\text{AES-256}(\text{SHA-256}(K),P) \end{align} $$
如果我們採用該變體定義,則 WBC 的安全性遵循更傳統的結構。
我的結論是我對 WBC 的理論目標沒有很好的定義,因此無法回答這個問題!
由於我猜我們是在將其視為一個加密問題,而不是逆向工程,因此我將提供一個正式的答案。
眾所周知,白盒加密的目的是隱藏用於執行某些加密操作的密鑰。這種系統的問題是算法本身必須知道密鑰;使用您不知道的密鑰成功加密或解密某些內容非常困難。
在算法知道用於執行加密操作的密鑰的任何情況下,逆向工程師都可以簡單地從算法的記憶體中獲取密鑰。您可以嘗試阻止逆向工程師這樣做,但逆向工程不是 NP 完全問題;對於具有必要技能的人來說,這實際上很容易。
也許你沒有載入密鑰,而是一些基於密鑰的單向操作……恭喜!您只是使用不同的密鑰,並且沒有更改任何安全屬性。
假設您使用一些輸入,對其執行一些難以理解的計算,然後使用結果值作為鍵……恭喜!你什麼也沒做,因為逆向工程師的全部工作就是破譯看似“難以破譯”的程式碼,而且他們往往很擅長。
*此外,沒有什麼能阻止他們自己簡單地執行計算。他們不需要理解程式碼來執行它。*你可以嘗試各種技術來阻止他們這樣做,這就是所謂的反逆向工程。但它在理論上和實踐上都無法阻止任何體面的逆向工程師。
就在幾天前,我的任務是對一個惡意軟體樣本進行逆向工程,該樣本試圖使用這樣的白盒系統來阻止我理解它的作用。我解密了範例中的每個加密字元串,目前正在等待批准將逆向工程範例上傳到我的公共 GitHub。
簡而言之,白盒加密不起作用。