Hash
將胡椒添加到雜湊中:作為字元串或緩衝區,我應該計算胡椒純文字的雜湊嗎?
我正在使用 a
bcryptjs
生成一個計算速度較慢的雜湊函式來儲存密碼:BCRYPT.hash(plainTextPassword, HASH_ROUNDS_NUM);
現在我想在計算雜湊之前添加一個胡椒:
BCRYPT.hash(pepperedPassword, HASH_ROUNDS_NUM);
在哪裡
pepperedPassword = plainTextPassword + PEPPER;
問題:
- 我應該將 a 表示
PEPPER
為 astring
還是 abuffer
?- 要計算 a
pepperedPassword
我可以只連接兩個值:pepperedPassword = concate(plainTextPassword, PEPPER);
或連接它們,然後計算它的快速散列(除了
bcrypt
):const concatPassPepp = concate(plainTextPassword, PEPPER); const hashedConcatPassPepp = crypto.createHash("SHA3-512").update(concatPassPepp, "utf8").digest("base64");
在發送到之前計算密碼-胡椒連接的快速散列是一個有用的想法
bcrypt
嗎?我應該更喜歡哪種場景?這兩個問題都是從安全和性能的角度提出的。
- 要計算pepperedPassword,我可以連接兩個值:
Bcrypt 限制密碼。這意味著如果密碼太長(超過 56 個字節),它將被截斷。如果您只是將辣椒附加到密碼上,那麼發生這種情況的風險很高。然後辣椒的安全收益甚至可能在不被注意的情況下失去。
使用 HMAC 甚至雜湊函式來組合密碼和辣椒。
- 我應該將 PEPPER 表示為字元串還是緩衝區?
這取決於你,但如果你使用 HMAC 或雜湊函式,很明顯不要使用字元串。