使用秘密主密鑰從公共數據中派生密鑰
我係統中的使用者將獲得一個包含 128 位 AES 使用者密鑰的設備。使用者密鑰將來自與使用者相關的 64 位公共數據,這是唯一但非常可預測的(即順序的使用者 ID 值)。使用者密鑰的值必須對使用者保密。我假設使用者完全知道使用者 ID 用於密鑰派生並且他們知道它的值。中央控制的“主”AES 密鑰將用於派生每個設備中的使用者密鑰。使用者將無權訪問此密鑰。
我被要求設計推導方案。目標是確保使用者沒有希望根據 64 位公共數據確定他們的密鑰。
我目前對此推導的計劃是將“上下文”字節連接到使用者 ID,然後使用主密鑰對其進行加密,使用 ECB 模式和 PKCS #7 填充並將結果用作使用者密鑰。
這種簡單的推導方案是否符合我的設計目標?在不了解主密鑰的情況下,我無法理解使用者如何從公共數據中推斷出有關使用者密鑰的任何資訊。然而,我的設計的簡單性讓我擔心。
我遇到過可能合適的密鑰派生方案,例如RFC 5869 。如果有人能指出合適的標準,我會更樂意使用同行評審的方法,而不是自己設計。
我還是會選擇HKDF。由於您已經有一個好的統一主密鑰,您可以跳過提取步驟。
所以 HKDF 簡單地變成了
HMAC-SHA-2(masterKey, info+\x01)
我會從info
一個標識你使用的字元串開始,然後添加使用者特定的資訊。只要您只產生一個輸出塊,您的系統就應該是安全的。本質上,使用者特定資訊充當類似於 AES-CTR 的模式的 IV。
NIST Special Publication 800-56C - Recommendation for Key Derivation through Extraction-then-Expansion定義了類似於 AES 的方案,但對於您的方案而言,它可能不必要地複雜。
理想:
從一個空列表開始;每當給定一個新
輸入 時,生成一個隨機元素 $ :{0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128}: $ , $ : $ 並輸出它並將該輸入和該輸出對添加到列表中;每當給定先前看到的輸入(通過查看列表確定)時,
給出與之前為該輸入給出的相同的輸出。
Hybrid_I :
從一個空列表開始;每當給定一個新輸入時,重複
生成 $ :{0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128}: $ 直到獲得一個以前沒有作為輸出給出的元素,
並輸出該元素;每當給定先前看到的輸入(
通過查看列表確定)時,給出與之前為該輸入給出的相同的輸出。
Hybrid_R_(pad) :
Hybrid_R_(pad) 是 Hybrid_I 與 $ : $ 軟墊 $ : $ .
Real(pad) :
選擇一個隨機鍵 $ r $ ,然後充當 $ : x\mapsto \operatorname{AES}(r,\hspace{-0.01 in}x) :: $ .
(顯然,混合動力車只對最多 $ 2^{128} $ 查詢,
並且 Real(pad) 僅在以下情況下才有意義 $ :\operatorname{Range}(\hspace{.01 in}\text{pad}) \subseteq {0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128} ; $ .)
只要 Hybrid_I 有意義,Ideal 和 Hybrid_I 之間的區別僅
在隨機選擇的元素時才重要 $ :{0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128}: $ 重複。 $ ;; $ (見生日攻擊。)
發生這種情況的機率最多為 $ q $ 查詢最多 $ :\frac{\binom{q}{2}}{2^{128}}: $ (見二項式係數)。
對全部 $ q $ , $ ;; $ 如果 $ :0< q: $ 然後 $ :\frac{\binom{q}{2}}{2^{128}} < \frac{q^{\hspace{.01 in}2}}{2^{129}}:: $ .
由於 Hybrid_I 關於其輸入是對稱的,
因此 Hybrid_R_(pad) 的行為將與 Hybrid_I 相同 $ : $ 軟墊 $ : $ 是單射的,Hybrid_I 是有意義的。
對於任何預言機對手 $ \mathcal{A} $ 為了區分 Real(pad) 和 Ideal,考慮
預言機對手 $ \mathcal{B} $ 適用的 $ : $ 軟墊 $ : $ 到 $ \mathcal{A} $ 的 oracle 查詢在將它們發送到 oracle 之前,
將 oracle 的響應轉發到 $ \mathcal{A} $ ,並輸出與 $ \mathcal{A} $ .
如果 $ : q\leq 2^{128} : $ 和 $ : $ 軟墊 $ : $ 是內射的並且 $ :\operatorname{Range}(\hspace{.01 in}\text{pad}) \subseteq {0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128}: $ ,
那麼這樣一個 $ \mathcal{B} $ 不使用解密,最多 $ q $ 加密查詢以
將 AES 與隨機排列區分開來,其數量最多為 $ :\frac{\binom{q}{2}}{2^{128}}: $ 少於
這樣的數量 $ \mathcal{A} $ 將 Real(pad) 與 Ideal 區分開來。
所以, $ : $ 如果 $ : q\leq 2^{128} : $ 和 $ : $ 軟墊 $ : $ 是內射的並且 $ :\operatorname{Range}(\hspace{.01 in}\text{pad}) \subseteq {0,\hspace{-0.04 in}1\hspace{-0.02 in}}^{128}: $ , $ ; $ 那麼
上一段給出了一個從最多產生的對手的建設性減少 $ q $
區分 Real(pad) 和 Ideal 的鍵 $ :\epsilon+\frac{\binom{q}{2}}{2^{128}}: $ 對不進行解密查詢的對手
,最多 $ q $ 至少將 AES 與隨機排列區分開來的加密查詢 $ \hspace{.01 in}\epsilon $ ,
其唯一的額外計算最多是 $ q $ 的評價 $ : $ 軟墊 $ : $ .
正如 CodesInChaos 所提到的,即使 $ :\frac{\binom{q}{2}}{2^{128}}: $ 很大,沒有已知的
方法可以利用鍵之間的區別關係。