Key-Derivation

使用 PBKDF2-HMAC-SHA256 派生 512 位 XTS 密鑰是否有問題?

  • August 23, 2019

如果輸出以具有平坦鍵空間的方式使用,則僅應使用 PBKDF2 生成比其使用的散列函式更大的輸出。據我所知,XTS 沒有平面鍵空間,輸入的前半部分比後半部分靈敏得多,後半部分只是調整鍵。假設在 XTS 模式下使用 PBKDF-HMAC-SHA256 為 256 位密碼派生 512 位密鑰的磁碟加密實用程序錯誤,我是否正確?

如果是這樣,他們能做些什麼呢?他們能否直接從 KDF 的 256 位輸出中導出密碼密鑰和主密鑰,例如ķ1=H(D‖0) $ K_1 = H(D \mathbin| 0) $ 和ķ2=H(D‖1) $ K_2 = H(D \mathbin| 1) $ 用於 PBKDF2 摘要D $ D $ ?

背景。 PBKDF2 有一個愚蠢的設計,其中生成兩個輸出塊的合法使用者成本是生成一個輸出塊的兩倍,而不必為對手確認密碼猜測的任務增加額外的成本。這是因為 PBKDF2 輸出的每個塊都是通過在不同的初始輸入上迭代 PRF 來生成的,這防止了共享工作來生成每個塊:PBKDF2(F,s,p,n,b)=[n⨁一世=1Fp一世(s‖1)]‖⋯‖[n⨁一世=1Fp一世(s‖b)].$$ \operatorname{PBKDF2}(F, s, p, n, b) = \Bigl[\bigoplus_{i=1}^n {F_p}^i(s \mathbin\Vert 1)\Bigr] \mathbin\Vert \cdots \mathbin\Vert \Bigl[\bigoplus_{i=1}^n {F_p}^i(s \mathbin\Vert b)\Bigr]. $$ 這裡Fp一世 $ {F_p}^i $ 是個一世 $ i $ -PRF的折疊迭代F $ F $ :Fp0(σ)=σ $ {F_p}^0(\sigma) = \sigma $ ,Fp一世+1(σ)=Fp一世(Fp(σ)) $ {F_p}^{i+1}(\sigma) = {F_p}^i(F_p(\sigma)) $ .

使用 HKDF-Extract 和 HKDF-Expand 將計算分為兩個階段會更明智,就像 HKDF 所做的那樣(用於不同但相關的目的):一次生成主密鑰的昂貴計算,然後是一組廉價計算生成每個輸出塊。但是 PBKDF2 沒有這樣做。

一般來說,PBKDF2 的愚蠢設計損害了安全性:如果合法使用者有能力計算n $ n $ PRF 的迭代和需求b $ b $ 輸出塊,合法使用者可以獨立花費在每個塊上的迭代次數最多為n/b $ n/b $ . 如果對手有一種廉價的方法來確認給定任何一個輸出塊的密碼猜測,例如在密碼雜湊中,那麼就好像合法使用者的預算只有n/b $ n/b $ 迭代而不是n $ n $ PRF的迭代。

這對 XTS 有影響嗎? XTS 是在調整中定義的可調整的 128 位分組密碼(一世,j) $ (i, j) $ 就分組密碼而言和 $ E $ 經過XTSķ1,ķ2(磷,一世,j)=和ķ1(磷+噸一世j)+噸一世j,在哪裡噸一世j=和ķ2(一世)⋅Xj.$$ \operatorname{XTS}{k_1,k_2}(P, i, j) = E{k_1}(P + T_{ij}) + T_{ij}, \quad\text{where}\quad T_{ij} = E_{k_2}(i) \cdot x^j. $$ 這裡算術在GF(2128) $ \operatorname{GF}(2^{128}) $ 由不可約多項式表示X128+X7+X2+X+1 $ x^{128} + x^7 + x^2 + x + 1 $ ,用你最喜歡的標識選擇{0,1}128 $ {0,1}^{128} $ 和GF(2128) $ \operatorname{GF}(2^{128}) $ ,例如小端。(密文竊取的細節被省略,因為我們對所有內容都使用了合理的塊大小。)

假設您使用 XTS 加密您的筆記型電腦,而對手,一個小偷,偷走了您的筆記型電腦。他們有一個密碼的候選猜測,為此他們花費了計算成本ķ1 $ k_1 $ 或者ķ2 $ k_2 $ ,但不是另一個。使用這些部分資訊來確認密碼猜測的成本是多少,而不是花費額外的成本來計算剩餘的ķ2 $ k_2 $ 或者ķ1 $ k_1 $ 並使用完整的候選密鑰資訊確認密碼猜測?假使,假設磷 $ P $ ,一世 $ i $ , 和j $ j $ 是固定的並為對手所知。

  1. 對手有候選人ķ1 $ k_1 $ 但不是ķ2 $ k_2 $ . 問題是功能是否φ:ķ2↦和ķ1(磷+和ķ2(一世)⋅Xj)+和ķ2(一世)⋅Xj$$ \phi\colon k_2 \mapsto E_{k_1}(P + E_{k_2}(i) \cdot x^j) + E_{k_2}(i) \cdot x^j $$是一個偽隨機生成器。 定義F:σ↦和ķ1(磷+σ⋅Xj)+σ⋅Xj $ f\colon \sigma \mapsto E_{k_1}(P + \sigma \cdot x^j) + \sigma \cdot x^j $ , 以便φ(ķ2)=F(和ķ2(一世)) $ \phi(k_2) = f(E_{k_2}(i)) $ . 讓一個 $ A $ 成為推定的區分者φ $ \phi $ . 定義一個0(○)=一個(F(○(一世))) $ A_0(\mathcal O) = A(f(\mathcal O(i))) $ 作為推定的 PRP 鑑別劑和 $ E $ . 注意一個(φ(ķ2))=一個(F(和ķ2(一世)))=一個0(和ķ2),$$ A(\phi(k_2)) = A(f(E_{k_2}(i))) = A_0(E_{k_2}), $$以便 進階PRP和(一個0)=|公關[一個0(和ķ2)=1]−公關[一個0(圓周率)=1]|=|公關[一個(φ(ķ2))=1]−公關[一個(F(圓周率(一世)))=1]|,$$ \begin{align*} \operatorname{Adv}^{\operatorname{PRP}}E(A_0) &= \left|\Pr[A_0(E{k_2}) = 1] - \Pr[A_0(\pi) = 1]\right| \ &= \left|\Pr[A(\phi(k_2)) = 1] - \Pr[A(f(\pi(i))) = 1]\right|, \end{align*} $$ 在哪裡圓周率 $ \pi $ 是均勻隨機排列。那麼,如果在 $ U $ 是一個統一的隨機 128 位字元串, 進階PRGφ(一個)=|公關[一個(φ(ķ2))=1]−公關[一個(在)=1]|≤|公關[一個(φ(ķ2))=1]−公關[一個(F(圓周率(一世)))=1]|+|公關[一個(F(圓周率(一世)))=1]−公關[一個(在)=1]|=進階PRF和(一個0)+進階PRGF(一個).$$ \begin{align*} \operatorname{Adv}^{\operatorname{PRG}}_\phi(A) &= \left|\Pr[A(\phi(k_2)) = 1] - \Pr[A(U) = 1]\right| \ &\leq \left|\Pr[A(\phi(k_2)) = 1] - \Pr[A(f(\pi(i))) = 1]\right| \ &\quad + \left|\Pr[A(f(\pi(i))) = 1] - \Pr[A(U) = 1]\right| \ &= \operatorname{Adv}^{\operatorname{PRF}}_E(A_0)
  • \operatorname{Adv}^{\operatorname{PRG}}f(A). \end{align*} $$ 因此,它有效地減少了是否F $ f $ 是一個PRG。這接近於是否σ↦圓周率(σ)+σ $ \sigma \mapsto \pi(\sigma) + \sigma $ 是一個 PRG,如果我們建模和ķ1 $ E{k_1} $ 通過均勻隨機排列圓周率 $ \pi $ ,這本質上是Black、Rogaway 和 Shrimpton 在 2002 年研究的Matyas-Meyer-Oseas 構造。通過搖擺不定的論點,我斷言這對於大多數分組密碼來說似乎是一個合理的模型(注意相關密鑰攻擊不相關),我猜想答案是否定的,對手無法有效地確認僅知道的猜測****ķ1 $ k_1 $ 無需計算ķ2 $ k_2 $ 除非它們壞了和 $ E $ .
  1. 對手有候選人ķ2 $ k_2 $ , 但不是ķ1 $ k_1 $ . 問題是是否ψ:ķ1↦和ķ1(磷+和ķ2(一世)⋅Xj)+和ķ2(一世)⋅Xj$$ \psi\colon k_1 \mapsto E_{k_1}(P + E_{k_2}(i) \cdot x^j) + E_{k_2}(i) \cdot x^j $$是一個偽隨機生成器。 這直接降低了 PRP 安全性和 $ E $ . 給定一個 PRG 鑑別器一個 $ A $ ,定義PRP-distinguisher 一個1(○)=一個(○(磷+和ķ2(一世)⋅Xj)+和ķ2(一世)⋅Xj)=一個(一個(○(一個(磷))))$$ \begin{align*} A_1(\mathcal O) &= A(\mathcal O(P + E_{k_2}(i) \cdot x^j) + E_{k_2}(i) \cdot x^j) \ &= A(\alpha(\mathcal O(\alpha(P)))) \end{align*} $$ 在哪裡一個:σ↦σ+和ķ2(一世)⋅Xj $ \alpha\colon \sigma \mapsto \sigma + E_{k_2}(i)\cdot x^j $ 是一個排列,所以一個1(和ķ1)=一個(ψ(ķ1)) $ A_1(E_{k_1}) = A(\psi(k_1)) $ , 和 進階PRP和(一個1)=|公關[一個1(和ķ1)=1]−公關[一個1(圓周率)=1]|=|公關[一個(ψ(ķ1))=1]−公關[一個(一個(圓周率(一個(磷))))=1]|,$$ \begin{align*} \operatorname{Adv}^{\operatorname{PRP}}E(A_1) &= \left|\Pr[A_1(E{k_1}) = 1] - \Pr[A_1(\pi) = 1]\right| \ &= \left|\Pr[A(\psi(k_1)) = 1] - \Pr[A(\alpha(\pi(\alpha(P)))) = 1]\right|, \end{align*} $$ 在哪裡圓周率 $ \pi $ 是均勻隨機排列。顯然自從一個 $ \alpha $ 是一個排列,一個(圓周率(一個(磷))) $ \alpha(\pi(\alpha(P))) $ 分佈均勻,所以 進階PRGψ(一個)=|公關[一個(ψ(ķ1))=1]−公關[一個(在)=1]|≤|公關[一個(ψ(ķ1))=1]−公關[一個(一個(圓周率(一個(磷))))=1]|+|公關[一個(一個(圓周率(一個(磷))))=1]−公關[一個(在)=1]|=|公關[一個(ψ(ķ1))=1]−公關[一個(一個(圓周率(一個(磷))))=1]|=進階PRP和(一個1).$$ \begin{align*} \operatorname{Adv}^{\operatorname{PRG}}_\psi(A) &= \left|\Pr[A(\psi(k_1)) = 1] - \Pr[A(U) = 1]\right| \ &\leq \left|\Pr[A(\psi(k_1)) = 1] - \Pr[A(\alpha(\pi(\alpha(P)))) = 1]\right| \ &\quad + \left|\Pr[A(\alpha(\pi(\alpha(P)))) = 1] - \Pr[A(U) = 1]\right| \ &= \left|\Pr[A(\psi(k_1)) = 1] - \Pr[A(\alpha(\pi(\alpha(P)))) = 1]\right| \ &= \operatorname{Adv}^{\operatorname{PRP}}_E(A_1). \end{align*} $$ 答案是否定的,對手無法有效地確認僅知道的猜測ķ2 $ k_2 $ 並不是ķ1 $ k_1 $ 除非它們壞了和 $ E $ .

為什麼我們不能做ķ2 $ k_2 $ 像靜脈注射一樣公開? 如果我們這樣做了,下面的選擇明文區分器會輕易破壞它:送出(磷,一世,j) $ (P, i, j) $ 和(磷+d,一世,j′) $ (P + \delta, i, j’) $ 對於挑戰,在哪裡j≠j′ $ j \ne j’ $ 和d=和ķ2(一世)⋅Xj′−和ķ2(一世)⋅Xj $ \delta = E_{k_2}(i) \cdot x^{j’} - E_{k_2}(i) \cdot x^j $ ,並測試它們的密文是否相差d $ \delta $ .

雖然這證明保留ķ2 $ k_2 $ 一般來說,在密碼系統中的秘密,並不清楚對手的這種能力是否與*猜測被盜筆記型電腦磁碟加密的密碼有關:*對於他們猜測的每個密碼,偷走你筆記型電腦的小偷必須向你送出一個選定的明文加密以便他們確認該密碼。除非你願意幫我從我認識的一位尼日利亞王子那裡追回一大筆錢,否則很難想像這怎麼會發生。

但筆記型電腦磁碟加密並不是磁碟加密的唯一應用。您可能在網路上使用 iSCSI,而攻擊者可能在您不知情的情況下入侵了 iSCSI 儲存伺服器,並且可能能夠控制 iSCSI 客戶端寫入的數據塊。在這種情況下,攻擊者可能能夠送出從ķ2 $ k_2 $ 對於他們猜測的每個密碼,並使用客戶端作為預言機以比再次評估 PBKDF2 來計算更低的成本來確認密碼ķ1 $ k_1 $ .

結論。 在使用 AES-XTS 進行筆記型電腦磁碟加密的情況下,PBKDF2 的愚蠢設計似乎並沒有像一般情況下那樣傷害它。但這需要做更多的工作來證明(並且存在一些差距:例如,如果對手有許多輸出塊來確認猜測,是否會有所不同?-重寫φ $ \phi $ 和ψ $ \psi $ 作為 PRF 的(磷,一世,j) $ (P, i, j) $ )。有可能我提出了錯誤的問題,或者在回答我提出的問題時犯了錯誤:畢竟,這是一隻假名的網際網路家禽,對你胡說八道,而不是戴著眼鏡的密碼學家在受人尊敬的同行評議期刊上寫作。並且有一些可以想像的磁碟加密應用程序,使用 PBKDF2確實會損害安全性。使用 PBKDF2 派生主密鑰,然後使用 HKDF 從中派生子密鑰會更安全。

PS 你應該使用 scrypt 或 argon2,而不是 PBKDF2。他們比這種狡辯有更大的不同!他們也沒有這種愚蠢的設計。那,或者只是從≥2128 $ {\geq}2^{128} $ 可能性。

引用自:https://crypto.stackexchange.com/questions/59508