Aes
白盒 AES 加密中的密鑰在哪裡?
在對白盒密碼學進行了初步研究之後,特別是圍繞第一篇文章(Chow 等人),我理解了將 AES 查找表轉換為新查找表的每個步驟。
如果我理解正確,其目的是重新定義 AES 算法以在每個步驟中提出新表,並對不同的表執行查找以混淆密鑰。
我無法理解密鑰應該在 AES 的白盒版本中的位置。在將 AES 開發為程式碼期間,密鑰是靜態定義的,還是始終在 AES 執行之前以“預先計算”的方式擴散到表中?
在白盒密碼學中,攻擊者應該有權訪問計算的每個細節,並且此實現的目標是保護密鑰,以 - 通常 - 避免在不同平台上的經典無白盒實現中使用它。
目標是,可以訪問整個計算和中間值的攻擊者無法獲得對加密密鑰的更多了解,因為他將擁有黑盒訪問(對於他選擇的所有輸入只有輸入/輸出)。
創建白盒實現的完美方法是將 AES 製成表格:對於給定的密鑰,獲取所有可能的輸入塊,在受信任的機器上計算加密並將輸出放在表中。在這種情況下,攻擊者只能訪問輸入/輸出,並且計算已在其他地方完成。但是,當然,這張桌子是 $ {HUGE} $ (例如:對於 AES: $ 2^{128} \times 128 $ 位,我什至不知道如何寫這個數量,但可以近似為 $ 2^{92} $ 兆字節)。因此,一個典型的解決方案是以網路方式使用多個查找表(稱為 LUT)。這允許以更少的兆字節(700k)建構實現,即使這個大小相對於標準的非白盒實現來說相當大。AES 算法中應用的白盒簡歷(幻燈片 18 - 24)。
所以你不會在白盒實現中看到密鑰,密鑰被切割、粉碎、嵌入到用於計算單一加密的所有表中。
這也意味著密鑰不會在計算期間載入到某個地方,而是必須在傳遞實現之前嵌入,並且當需要更改/更新密鑰時,他必須傳遞另一個實現(或在其他表集上)。