Key-Derivation

Blake2B 作為 KDF

  • February 5, 2019

如何使用香草鍵控 Blake2B 作為具有高熵輸入的 KDF。假設我無法使用更專業的算法,例如 blake2XB、HKDF 等。

  • Salt - 每次加密的高熵鹽(32 字節)
  • IKM - 高熵靜態輸入鍵控材料(32 字節)
  • Info - 派生密鑰的個性化字元串

Blake2B(輸入: $ (\text{Salt} \parallel \text{Info}) $ , 鑰匙: $ \text{IKM} $ ) 是健全的?

考慮到 Blake2 不易受到長度擴展攻擊,上述構造與 Blake2B(input: $ (\text{Salt} \parallel \text{Info} \parallel \text{IKM}) $ )?

實際上,如果您的實現支持完整規範 (PDF)(由RFC 7693標記為可選),那麼您想要的可以使用普通的 Blake2b 實現。

如果是這種情況,您將執行以下映射:

  • info數據輸入personalization參數塊的 - 部分。
  • salt數據輸入salt參數塊的 - 部分。
  • IKM數據輸入 Blake2b 的鍵輸入。

或者,您也可以只將info輸入到主散列輸入中。

請注意,密鑰的大小限制為 64 字節(Blake2b 的最大值)。因此,如果您希望您的數據經常比這更大,那麼強制對您的數據進行直接預散列以使其適合IKM可能是有意義的。IKM

salt如果您的大小超過 16 個字節(這是為 Blake2b 定義的最大值)或者您的infoBlake2 實現僅支持鍵輸入,它會變得更有趣。

在這種情況下,您想要的是使用適當的配對功能,以便 salt of0xDEADBEEF不會產生與 salt of0xDEAD和個性化相同的結果0xBEEF。現在,最簡單的這種配對函式將包括輸入的長度。因此,您將散列info_length || salt_length || info || salt長度為 32 位或 64 位整數(常量大小!)的地方。或者,您可以為任一輸入固定一個最大長度,然後用0xFF(0x00)*.

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