Hash

將胡椒添加到雜湊中:作為字元串或緩衝區,我應該計算胡椒純文字的雜湊嗎?

  • September 28, 2019

我正在使用 abcryptjs生成一個計算速度較慢的雜湊函式來儲存密碼:

BCRYPT.hash(plainTextPassword, HASH_ROUNDS_NUM);

現在我想在計算雜湊之前添加一個胡椒:

BCRYPT.hash(pepperedPassword, HASH_ROUNDS_NUM);

在哪裡pepperedPassword = plainTextPassword + PEPPER;

問題:

  1. 我應該將 a 表示PEPPER為 astring還是 a buffer
  2. 要計算 apepperedPassword我可以只連接兩個值:
pepperedPassword = concate(plainTextPassword, PEPPER);

或連接它們,然後計算它的快速散列(除了 bcrypt):

const concatPassPepp = concate(plainTextPassword, PEPPER);

const hashedConcatPassPepp  = crypto.createHash("SHA3-512").update(concatPassPepp, "utf8").digest("base64");

在發送到之前計算密碼-胡椒連接的快速散列是一個有用的想法bcrypt嗎?我應該更喜歡哪種場景?

這兩個問題都是從安全和性能的角度提出的。

  1. 要計算pepperedPassword,我可以連接兩個值:

Bcrypt 限制密碼。這意味著如果密碼太長(超過 56 個字節),它將被截斷。如果您只是將辣椒附加到密碼上,那麼發生這種情況的風險很高。然後辣椒的安全收益甚至可能在不被注意的情況下失去。

使用 HMAC 甚至雜湊函式來組合密碼和辣椒。

  1. 我應該將 PEPPER 表示為字元串還是緩衝區?

這取決於你,但如果你使用 HMAC 或雜湊函式,很明顯不要使用字元串。

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