密鑰派生設計,避免密鑰洩露
我有第一個從 AES 解密(128 位密鑰)生成密鑰的函式。它
seed
作為輸入:derived_key_1 = AES-DEC(key, seed)
seed
並且key
都是攻擊者無法更改的固定值。攻擊者知道 的價值seed
。他的第一個目標是得到derived_key_1
。他確實有額外的能力。他可以訪問另一個定義如下的函式:
temp_key = AES-DEC(key, chosen_seed) derived_key_2 = AES-DEC(temp_key, seed)
其中
chosen_seed
由攻擊者控制。他可以觀察到derived_key_2。假設 AES 是在硬體中實現的,並且 AES 原語本身沒有定時側通道。此外,攻擊者沒有其他物理側通道(例如,電源、EM、故障等)來觀察這兩個功能的時序。
在這個建築中是否有任何潛在的安全問題?
如果有問題,如果我
seed
將第二個功能更改seed_new
為攻擊者仍然可見但他無法更改的功能,問題是否會消失。
我終於找到了你的要求:
針對AES的特定(有效?)相關密鑰攻擊!
對於這個答案,我稍微改變了符號:
AES-DEC(K,P)
被轉換為 $ D_K(P) $derived_key_X
被轉換為 $ DK_X $seed
(已知)被轉換為 $ S_K $chosen_seed
被轉換為 $ S_C $temp_key
被轉換為 $ K_T $現在答案:
AES 本身在很大程度上不受相關密鑰攻擊的影響(有一些攻擊,但我認為它們至少需要四個相關密鑰,我懷疑關係會那麼複雜)。
所以為了讓攻擊者發現 $ DK_1=D_K(S_K) $ 他需要知道 $ K $ . 沒有其他方法可以做到這一點。
現在你問是否知道 $ DK_2=D_{D_K(S_C)}(S_K) $ 確實有幫助。讓我們解構它。攻擊者可以選擇 $ S_C $ 被解密為 $ K_T=D_K(S_C) $ , 為了學習 $ K_T $ 他需要獲得對 AES 不可行的 K。現在攻擊者沒有機會知道 $ K_T $ 還有一個問題,如果 $ DK_2=D_{K_T}(S_K) $ 無論如何都對他有幫助。他無法推斷 $ K_T $ 從這個等式,因為這將是已知明文攻擊,這在 AES 上是不可行的。最後一個問題是是否有一些奇怪的關係可以幫助攻擊者發現 $ K $ 因此 $ DK_1 $ .
不,他將(也許)能夠通過嘗試一切可能的蠻力 $ S_C $ 直到 $ K_T=D_K(S_C)=K $ 這是極不可能的,因為他無法控制 $ K_T $ .
我希望這回答了你的問題。