Nist

如何指定 NIST SP 800-108 KBKDF

  • April 27, 2014

可能是奇怪的問題,但假設我想指定一個符合 NIST SP 800-108 的協議。這列出了一整套基於密鑰的密鑰派生函式,具有一組非常鬆散的參數。

我應該如何辨識使用的 KDF?似乎本文件中的 KDF 既沒有名稱、OID 也沒有 ASN.1 模組。世界上是否有任何符合描述且確實具有名稱/OID/ASN.1 的兼容 KDF?

還是我必須自己做這項工作,然後根據可用的測試向量測試自己?

背景

在定義符合NIST SP 800-108的協議時,您只需選擇適合您的協議的合適選項。

如果需要與特定的現有協議兼容,您可能需要查看NIST SP 800-135Rev1,它定義了應用程序特定的密鑰派生函式。值得注意的是,某些NIST SP 800-135Rev1密鑰派生函式是有效的NIST SP 800-108,並選擇了特定選項。

辨識 KDF 的最佳方法是實際列出NIST SP 800-108 KBKDF 中的所有適用選項。(使用三個函式(CTR、FB、Pipeline)中的哪一個;組件的順序、標籤的內容是什麼以及標籤是否以零結尾等。)最好用清晰的例子來說明協議規範,其中顯示在密鑰派生中使用的NIST SP 800-108函式(或替代顯示底層 MAC 函式的呼叫)的對應關係。

測試 NIST SP 800-108 實施

推薦的測試方法是通過CAVP(加密算​​法驗證程序)。測試需要很長時間,並且將由 CST(認證測試實驗室)執行,這需要花錢。但是您可以非常具體地選擇要測試的內容(從相當大的選項空間中),如果您通過測試,您將獲得算法驗證證書

對於最常見的選項,更便宜、更快捷的方法可能是針對NIST/CAVP中預先存在的非官方測試向量進行測試。

如果實施不僅需要符合 FIPS 標準,還需要獲得美國政府認證 (FIPS 140-2),則需要適用算法的算法證書。

如果您的 KBKDF “實例化”需要一組測試向量,一種方法是首先使用上述機制之一確保實現的正確性,並使用“似乎正確”的實現來生成官方測試向量,並將測試向量附加到協議規範中。

在KBKDFVS(KBKDF 驗證系統)中解釋了確定測試向量中使用的順序、元素大小等的方法。

KBKDFVS 用於回饋模式的參數是(從 KBKDFVS 中提取):

  1. IUT 支持的偽隨機函式

  2. 列出 CMAC AES 128、192、256

  3. CMAC TDES 2、3

  4. HMAC SHA1、SHA224、SHA256、SHA384、SHA512

  5. 派生密鑰材料 K0 的 L 長度(以字節為單位) – 輸入所有適用項:

  6. 支持的完整塊長度的最小值和最大值

  7. 支持的部分塊長度的最小值和最大值

  8. 支持生成 K 的方法:

  9. SP800-56A

  10. SP800-56B

  11. SP800-90A

  12. 經批准的 RNG

  13. N/A – 超出算法實施範圍

  14. IUT 是否支持將計數器用作輸入?如果是,計數器 i 的二進製表示的長度是多少。

  15. 8 位。

  16. 16 位。

  17. 24 位。

  18. 32 位。

  19. IUT 是否支持在迭代變數之前和/或之後和/或在固定輸入數據之後出現的計數器?

其他模式(即)計數器和雙流水線的資訊類似。這些資訊不足以對 KDF 函式的所有已知資訊進行編碼,但已經是一個好的開始。

最後解決你的問題

  • 通過指定 NIST SP 800-108 中的選項來辨識 KDF。您還應該有允許正確實施的範例(可能還有測試向量)。
  • 名稱是NIST SP 800-108和所用模式的名稱(或部分)。
  • 我也不知道 OID/ASN.1 適用。(但也許有人已經為他們的NIST SP 800-108實現定義了一些東西。沒有 OID/ASN.1 涵蓋了NIST SP 800-108的所有可能選項。)
  • 如果您的協議需要 OID 或 ASN.1 模組,現在可能最容易定義自己的模組。
  • SP 800-108的實現可能可以使用 CAVP 或非官方的 CAVP 測試向量進行測試。
  • KBKDFVS可以作為一個很好的例子來了解 NIST 如何在測試向量的上下文中指定參數。也許您可以對協議使用類似的方法和術語?

香港國防軍

旁注:根據您使用 HKDF 的方式,您經常使用NIST SP 800-108NIST SP 800-56C :HKDF“僅擴展”可以被認為是NIST SP 800-108 KBKDF 的變體。NIST SP 800-56C基本上是嘗試在 NIST 術語中定義完整的 HKDF(並添加 AES-CMAC)。

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