Key-Derivation
Blake2B 作為 KDF
如何使用香草鍵控 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 定義的最大值)或者您的info
Blake2 實現僅支持鍵輸入,它會變得更有趣。在這種情況下,您想要的是使用適當的配對功能,以便 salt of
0xDEADBEEF
不會產生與 salt of0xDEAD
和個性化相同的結果0xBEEF
。現在,最簡單的這種配對函式將包括輸入的長度。因此,您將散列info_length || salt_length || info || salt
長度為 32 位或 64 位整數(常量大小!)的地方。或者,您可以為任一輸入固定一個最大長度,然後用0xFF(0x00)*
.