如果我輸入的密碼不正確,但在散列時與密碼衝突,它會讓我進入嗎?
假設沒有使用鹽或胡椒並且密碼是純雜湊的,輸入錯誤的密碼會不會讓我進入?我知道加鹽/加胡椒技術的一種用途是,除了使蠻力更加耗時之外,還可以防止一個雜湊危害所有使用同一通行證的使用者。但它如何防止衝突密碼被互換使用?換句話說,這些技術是不正確的通行證不會讓你進入的原因還是它無論如何都不起作用?
是的,它會,但是(對於任何一半體面的密碼散列函式)實際上不可能找到這樣的衝突。
密碼散列函式是具有一些額外屬性的加密散列函式。
加密散列函式具有單一輸入,並且具有衝突、原像和第二原像抗性。
碰撞阻力意味著不可能找到導致相同輸出的任何兩個不同輸入。即不可能找到任何一對消息 $ m \neq m’ $ 這樣 $ H(m)=H(m’) $ .
原像阻力意味著不可能找到任何散列到預先指定的輸出的輸入。即給定任何輸出 $ y $ , 很難找到消息 $ m $ 這樣 $ H(m)=y $ .
第二原像電阻意味著不可能找到與指定輸入具有相同輸出的任何第二輸入。即給了一個消息 $ m $ , 再找一條消息是不可行的 $ m’ \neq m $ 這樣 $ H(m)=H(m’) $ .
密碼散列函式具有(至少)三個輸入,密碼、鹽和難度參數。如果它們打算用作密鑰派生函式,它們也可能具有某種域分離輸入。難度參數讓程序員增加執行函式所需的計算能力,從而減慢一些攻擊。salt 確保具有相同密碼的不同使用者將獲得不同的雜湊值,因此獲得雜湊數據庫訪問權限的攻擊者無法分辨哪些使用者共享密碼。鹽還可以防止一些更複雜的攻擊,比如使用彩虹表。
密碼散列函式仍然遵循密碼散列函式的所有屬性,因此無法找到給定密碼的第二個原像,甚至無法找到具有相同散列的兩個密碼。
它會讓你進去嗎?我懷疑是的。作為一名軟體開發人員,我很確定這從未發生過,因此這種情況未經測試,因此不得而知。(作為軟體開發人員,您可以修改散列函式,使其將包含字元串“smith”的任何內容散列為數字 0,然後看看會發生什麼。)
但這不會發生。說有 $ 2^{64} $ 可能的密碼和 $ 2^{256} $ 可能的雜湊值。如果你猜出一個密碼並且它有正確的雜湊值,那麼機率是 $ 1 - 2^{-192} $ 你實際上猜對了密碼。