Key-Derivation
如何使用熵的種子從一組字元中繪製?
給定一個種子字元串 S,我想確定性地生成以下形式的密碼:
N 個字元,每個字元選自一組字元 C
不幸的是,N 和 C 的基數都不一定能很好地處理 2 的冪,我想避免在 C 中引入對任何特定字元的偏見。
以下是生成這些具有均勻分佈的密碼的合理方法,還是已經有一種眾所周知的方法來執行此操作?
要選擇密碼的第 i_th 個字元,我將為 C 中的每個字元 c 計算值 sha256(S + i + c),然後選擇具有最大雜湊值的字元 c。
是的,這種策略有效,因為它生成具有適當分佈的每個字元,並且沒有微不足道的攻擊(需要注意的是,使用的格式必須允許明確找到 $ S $ , $ i $ 和 $ c $ 從串聯 $ S|i|c $ ; 格式化 $ i $ 和 $ c $ 就像固定寬度的欄位一樣)。然而
- 我們沒有強有力的安全論據:為此,我們需要一個由 $ S $ ,例如使用 $ \operatorname{HMAC-SHA256}(S,i|c) $ ; HMAC構造將散列轉換為 MAC,並帶有證明。
- 沒有熵拉伸,也沒有鹽,就像標準的基於密碼的密鑰派生一樣;因此猜測 $ S $ 可以在知道密碼的情況下以較低的錯誤機率進行檢查,並且 $ i $ ; 如果種子字元串 $ S $ 是低熵(如主密碼),這是一個大問題。
- 我們可以用更少的雜湊值獲得合適的分佈;看到這個。
第 2 點是迄今為止最令人擔憂的。