Aes
是否可以在記憶體中辨識 Serpent 加密密鑰?
已經表明,可以在記憶體中辨識正在使用的 AES 密鑰。這種辨識依賴於發現記憶體中包含在密鑰調度中的預期輪密鑰。
我的問題是:我們是否可以通過擴展假設相同的技術,至少在理論上,可以用於從記憶體中提取 Serpent 和 Twofish 密鑰,因為它們也有一個密鑰時間表?
(另請參閱從系統記憶體中提取 RC4 和 3DES 密鑰。)
是的,Serpent 還進行了確定性眾所周知的密鑰擴展。所以應該可以辨識記憶體中的子鍵。您將想知道您正在尋找什麼實現,因為關鍵材料的合理順序不止一個。
是的,可以從記憶體中的輪密鑰中辨識 Serpent 或 Twofish 密鑰,它們可能存在於針對速度優化的純軟體實現中(但不存在於假設的硬體實現中,也不一定存在於針對 RAM 或程式碼優化的實現中尺寸)。
Serpent 輪密鑰是 132 個 32 位的字,由 256 位(可能是填充的)密鑰的函式輸出。這是暗示 $ 132\times32-256=3968 $ 子鍵中的冗餘位。一般來說,密鑰擴展功能越簡單,冗餘越多,就越容易辨識冗餘並恢復所有密鑰位(有影響;這是每一個,在任何密碼中都沒有被故意削弱)。本質上,我們需要一個快速區分函式的輸出,然後將其反轉。該函式是線性的,線性擴展階段後跟 S-box。它很容易被攻擊,但我不知道以什麼速度。
這也適用於 Twofish。它的密鑰擴展從主密鑰的不同位生成 S 盒和輪密鑰(兩者都非常冗餘)。如果擴展密鑰都在具有固定佈局的記憶體塊中,我們可以攻擊任何一種來辨識擴展密鑰;但是我們必須區分兩者,否則無論如何都需要反轉兩者以恢復完整的密鑰。