Key-Derivation

scrypt 和 hkdf 中的密鑰衝突

  • June 13, 2013

我正在開發一個主要離線的授權系統,該系統使用確定性生成的 AuthKey 來授權使用者,該 AuthKey 派生自 MasterKey,MasterKey 派生自高熵數據塊(128 位)和低熵數據(例如,電子郵件地址)。

連接數據的總長度永遠不會超過 dkLen(256,通過使用 md5 散列低熵數據或使用填充),並且 AuthKey 將用於生成 ECC 非對稱對。

MasterKey = KDF(高熵,低熵)

AuthKey = KDF (MasterKey, keynumber)

為此,為了避免暴力破解,我正在考慮使用 hkdf 或 scrypt。

我主要擔心的是:

  • 密鑰衝突的可能性很大嗎?

我知道只有 128 位的熵就有 3.4028237e+38 種組合,低熵數據的組合更多。

儘管如此,前提是沒有人使用相同的 LowEntropy 值,並考慮:

dkLen=LowEntropy.length+HighEntropy.length

兩個不同的 AuthKey 有可能發生衝突嗎?

¿ 對 256 位數據應用 KDF,得到 256 位數據後,碰撞的機會會減少還是增加?

  • 鑑於先前公開的模型,有什麼理由選擇 HKDF 而不是 scrypt?

據我所知,scrypt 需要更多資源,因此暴力破解成本更高,最近的一個問題表明

不要向使用者詢問記憶體/cpu 因素,如果輸入是高熵,則不需要它們。你也不需要鹽。

問題是我希望 HighEntropy 和 LowEntropy 成為一個令人頭疼的暴力破解,如果可能的話,即使在長期的後量子密碼學未來環境中也是如此。

  • 此外,是否有任何理由將高熵或低熵數據專門用作鍵或散列?

不,您不必擔心碰撞。

只要沒有一對使用者具有相同的 LowEntropy 輸入,他們就會收到不同的 MasterKey。如果 MasterKey 不同,那麼 AuthKey 也會不同。即使使用同一個 MasterKey 生成多個 AuthKey,也不用擔心衝突:只要 keynumber 值不同,派生的 AuthKey 也會不同。

如果您使用的是 128 位加密密鑰,則不需要使用 scrypt(假設加密密鑰是保密的,不會洩露給其他人)。

當您談論多次使用相同的 ECC 密鑰時,我不明白您在問什麼。我認為您應該單獨發布,因為這聽起來像是一個單獨的問題。(在本網站上,我們希望您每個問題發布一個問題;如果您有多個不同的問題,請分別發布。不要忘記閱讀常見問題解答。)

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