Hash
多重雜湊可以削弱密碼嗎?
**問題。**我想要一個比我的散列函式提供的更長的密碼密鑰。
主意。 我想多次散列密碼,每次將字元旋轉一個位置並使用複合鍵。
**問題。**我真的要弱化密碼嗎?
例子:
密碼=carphagen
- Key1 = BCrypt(“carphagen”)=OZrxJo..IAwipd8hHm69IGFiPz/Y/veK
- Key2 = BCrypt(“ncarphage”)=PiG1Qndv8kOHDFoEwhbM.rqtM4O5XNR2
- Key3 = BCrypt(“encarphag”)=Hbrz35n4pwOLsWnMdyuQ7Ze1XMH/QnmC
- . . .
- KeyN = BCrypt (“rphagenca”) = OapAj6P0OS5P0m20f5oAKY482hEvfLhy
N < 小於密碼長度
鍵= 鍵 1 + 鍵 2 +。. . + KeyN
**問題。**攻擊者知道密鑰,他是否獲得密碼幫助?
小更新:BCrypt Salt 是相同的並且是已知的。它從雜湊中刪除,不用作密鑰的一部分
我真的要弱化密碼嗎?
在某種程度上,是的。
該函式被認為是公開的,攻擊者可以用它測試隨機密碼並檢查輸出並將其與您的密鑰進行比較。然後他會找到正確的密碼,即使他實際上只是猜到了您定義的排列之一。在您的範例中:
- 實際密碼是carphagen
- 關鍵是:關鍵是 $ Key = Key1 + Key2 + . . . + KeyN $
- 攻擊者嘗試密碼ncarphage,這是要生成的密碼排列 $ Key2 $ .
- 攻擊者得到輸出: $ Key2+\dots $ .
- 他仍然可以很容易地檢測到部分鍵與給定輸出中的相同,即使它不在同一個位置。
還要考慮一件事:你的想法需要 $ N $ 乘以單個 BCrypt 呼叫的計算時間。但是攻擊者實際上可以通過一次呼叫 BCrypt 來檢查一個密碼(如果他對檢查置換密碼不感興趣)。這很糟糕——為攻擊者測試密碼肯定不應該少於正常使用。
這是另一種想法:
- 使用 BCrypt 生成 $ k_0 $ 從您的密碼 - 有足夠的迭代,它符合您的要求。
- 使用不同的密鑰派生函式來生成值 $ k_1,k_2,k_3,\dots $ , 通過使用 $ k_0 $ 和一個計數器作為輸入。如果函式使用迭代,只需使用一個。
- 如果要增加計算時間,請增加迭代次數以生成 $ k_0 $ , 不要將它們應用於計算 $ k_1,k_2,\dots $ .
對於第二步,KDF 有多種可能性。例如,您可以使用一個鍵控散列函式(也稱為 MAC),一個以CSPRNG為種子的 CSPRNG $ k_0 $ , 一個PRF , …
第二種選擇:使用另一個基於密碼的 KDF,它支持可變長度輸出。BCrypt 已經很老了,並且有更新的替代品,兩個例子是Argon2或scrypt。
我有一個想法(不確定它的密碼安全性):如果 $ x $ 是您的密碼和 $ k $ 是你的鑰匙然後你會計算 $ hash(x) $ 並將其附加到 $ k $ 那麼你會計算 $ hash(x + the previous hash) $ 並將其附加到您的密鑰等等,直到您的密鑰足夠長,並且該系統將解決另一個答案中解釋的漏洞(我認為😂)