草稿:HKDF
您所提交的草稿仍需改善。在2026年9月11日由Didaictor (留言)审阅。
如何改善您的草稿
|
| 您所提交的草稿仍需改善。在2026年8月30日由Lemonaka (留言)审阅。 如何改善您的草稿
|
HKDF 是一種基於HMAC訊息認證碼(message authentication code)的多用途金鑰衍生函式(KDF)。HKDF 採用「先提取後擴展」(extract-then-expand)架構[1],其邏輯上由兩個部分組成:第一階段從輸入的金鑰材料中「提取」出固定長度的偽隨機金鑰;第二階段則將該金鑰「擴展」為多個彼此獨立的偽隨機金鑰,作為 KDF 的輸出。
運作原理
[编辑]HKDF 由兩個函數組成:HKDF-Extract(提取)和 HKDF-Expand(擴展)[2]:
HKDF-Extract
[编辑]說明
[编辑]HKDF-Extract()接收「輸入金鑰材料」或「來源金鑰材料」( 或 ,例如使用迪菲-赫爾曼金鑰交換產生的共享秘密),以及可選的、非秘密的隨機或偽隨機鹽值(),並產生稱為 (「偽隨機金鑰」,pseudorandom key)的密碼學金鑰。HKDF-Extract 的作用相當於一個「隨機性提取器」:它接收一個具有足夠最小熵的輸入值,即使該值的分佈可能不均勻。經過處理後,它會產生一個偽隨機值。從計算上而言,該偽隨機值與均勻隨機值不可區分。[3]隨機性提取器假設攻擊者的計算能力受到限制,且來源的熵可能僅在計算意義下存在。[4]這類提取器可以在適當的假設下利用密碼學函數建構;在一般情況下可使用通用雜湊函數(universal hash function)[5],而在受限場景(如弱熵源)下則可使用隨機預言機(random oracle)進行建模。[6]
鹽值()可作為「與來源無關的提取器」(source-independent extractor),增強 HKDF 的安全性。隨機鹽值可以使輸入金鑰材料()的來源與提取器彼此獨立。只要鹽值不是由攻擊者選擇或操縱,即使在多次使用 HKDF 時使用固定的公開鹽值也是安全的。理想情況下,鹽值應為隨機字串,且長度等於雜湊函數的輸出長度;即使鹽值的熵較低或長度較短,仍能對輸出金鑰材料()的安全性提供額外保障。若沒有鹽值,或鹽值的熵很低,而攻擊者又能影響 的來源,則 HKDF-Extract 可能無法抵禦底層雜湊函數所遭受的特定攻擊。因此,在可能的情況下使用隨機鹽值可以增強 HKDF 的安全性。[7]
HKDF-Extract 是以 為金鑰、以 為訊息計算 HMAC 的結果;如果未提供 ,則使用長度等於底層雜湊函數輸出長度的全零字串作為金鑰。[2]HKDF-Extract 所使用的底層雜湊函數可以與 HKDF-Expand 所使用的不同。建議 HKDF-Extract 使用應用程式可用的最強雜湊函數,因為它主要是「集中」 中已有的熵,而不一定會增加熵。攻擊者被假設已掌握部分 的資訊(例如 Diffie-Hellman 中公開的資訊),或能夠部分控制其內容(例如熵池)。[1]
如果 本身就是密碼學上足夠強的金鑰,則可以省略 HKDF-Extract,直接將其視為 。不過,為了與一般情況保持一致,仍建議執行 HKDF-Extract,尤其是在應用程式可以提供 的情況下。[2]
計算方式
[编辑]HKDF-Extract 的計算方式為:
其中, 為鹽值, 為輸入金鑰材料,而 為產生的偽隨機金鑰。如果未提供鹽值,則使用長度等於底層雜湊函數輸出長度的全零字串作為 。[2]
HKDF-Expand
[编辑]說明
[编辑]HKDF-Expand()接收 (如果省略 HKDF-Extract,則可直接使用其他密碼學上安全的金鑰)、可選的上下文資訊 ()以及所需的輸出長度 ,並產生長度為 的輸出金鑰材料()。使用不同的 可以從同一個 產生多組彼此獨立的輸出金鑰材料; 應與 HKDF-Extract 使用的 保持獨立。
HKDF-Expand 可以視為一個以 為金鑰、具有可變輸出長度的偽隨機函數()。它以 和從 1 開始的 8 位元計數器 作為輸入計算 HMAC;後續計算會將前一次 HMAC 的輸出加入輸入,形成鏈式結構,直到產生足夠長度的 。
每次 HMAC 計算產生的輸出長度取決於底層雜湊函數。例如使用 SHA-256 時,每次產生 256 位元的輸出,因此 的最大長度為:
實際輸出則截取至所要求的長度 。如果 本身已經至少與所需的 一樣長,則可以省略 HKDF-Expand;不過,仍建議執行 HKDF-Expand,以進一步對輸出金鑰材料進行「平滑化」(smoothing)。[2]
計算方式
[编辑]HKDF-Expand 使用 作為 HMAC 的金鑰,並依序計算:
其中, 為第 次 HMAC 計算的輸出, 為可選的上下文資訊, 為以 8 位元表示的計數器。計算從 開始,將各次產生的 依序串接,並截取前 個位元組作為輸出金鑰材料 。最多可以計算 255 個區塊,因此 不得超過 。[2]

標準化
[编辑]HKDF 最初被提出作為各種通訊協定與應用程式的密碼學構建模組,同時旨在避免不同應用程式各自採用不同的金鑰導出機制。[2]
HKDF 於 2010 年正式定義於 RFC 5869,其設計與安全性分析則在 Krawczyk 於同年發表的論文。[1]
NIST 的 NIST SP 800-56C 也規範了可參數化的「先提取後擴展」(extract-and-expand)金鑰導出方案,並指出 RFC 5869 中的 HKDF 是該方案的一種實例。[8]
應用
[编辑]HKDF 被廣泛應用於各種密碼學協定。例如,Signal Protocol 使用 HKDF 產生訊息金鑰,並與三重橢圓曲線迪菲-赫爾曼(X3DH)金鑰協議搭配使用。[9]HKDF 也是 Noise Protocol Framework、Message Layer Security 的重要組成部分[10][11],並應用於 IPsec 的網際網路金鑰交換(IKE)和 TLS 1.3 等協定。[12][13]
HKDF 的「多用途」設計旨在支援需要金鑰提取、金鑰擴展以及金鑰階層的應用,包括金鑰封裝、金鑰交換、偽隨機數生成器(PRNG)和基於密碼的金鑰導出函數(PBKDF)等。
參考文獻
[编辑]- ^ 1.0 1.1 1.2 Krawczyk, Hugo, Rabin, Tal , 编, Cryptographic Extraction and Key Derivation: The HKDF Scheme 6223, Springer Berlin Heidelberg: 631–648, 2010 [2026-08-17], ISBN 978-3-642-14622-0, doi:10.1007/978-3-642-14623-7_34
- ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Hugo Krawczyk; Pasi Eronen. HMAC-based Extract-and-Expand Key Derivation Function (HKDF). Internet Engineering Task Force. 2010-05.
- ^ Dodis, Yevgeniy; Ostrovsky, Rafail; Reyzin, Leonid; Smith, Adam. Fuzzy Extractors: How to Generate Strong Keys from Biometrics and Other Noisy Data. SIAM Journal on Computing. 2008-01, 38 (1) [2026-08-17]. ISSN 0097-5397. doi:10.1137/060651380 (英语).
- ^ Goldreich, O.; Levin, L. A. A hard-core predicate for all one-way functions. ACM Press. 1989 [2026-08-17]. ISBN 978-0-89791-307-2. doi:10.1145/73007.73010 (英语).
- ^ Impagliazzo, R.; Levin, L. A.; Luby, M. Pseudo-random generation from one-way functions. ACM Press. 1989 [2026-08-17]. ISBN 978-0-89791-307-2. doi:10.1145/73007.73009 (英语).
- ^ Bellare, Mihir; Rogaway, Phillip. Random oracles are practical: a paradigm for designing efficient protocols. ACM Press. 1993 [2026-08-17]. ISBN 978-0-89791-629-5. doi:10.1145/168588.168596 (英语).
- ^ Fischlin, Marc; Janson, Christian; Mazaheri, Sogol. Backdoored Hash Functions: Immunizing HMAC and HKDF. IEEE. 2018-07 [2026-08-17]. ISBN 978-1-5386-6680-7. doi:10.1109/CSF.2018.00015.
- ^ Barker, Elaine; Chen, Lily; Davis, Richard. Recommendation for Key-Derivation Methods in Key-Establishment Schemes (PDF) (报告). National Institute of Standards and Technology. 2020-08-18. doi:10.6028/nist.sp.800-56cr2.
- ^ Specifications >> The X3DH Key Agreement Protocol. Signal Messenger. [2026-08-17] (英语).
- ^ Barnes, R.; Beurdouche, B.; Robert, R.; Millican, J.; Omara, E.; Cohn-Gordon, K. The Messaging Layer Security (MLS) Protocol (报告). Internet Engineering Task Force. 2023-07.
|issue=被忽略 (帮助) - ^ Specifications >> The X3DH Key Agreement Protocol. Signal Messenger. [2026-08-17] (英语).
- ^ Rescorla, E. The Transport Layer Security (TLS) Protocol Version 1.3 (报告). Internet Engineering Task Force. 2018-08.
|issue=被忽略 (帮助) - ^ Kaufman, C.; Hoffman, P.; Nir, Y.; Eronen, P.; Kivinen, T. Internet Key Exchange Protocol Version 2 (IKEv2) (报告). Internet Engineering Task Force. 2014-10.
|issue=被忽略 (帮助)
