Collision-Resistance
是否有確定性的單向無衝突加密算法?
我使用使用函式f加密的使用者名作為記錄的 id。使用者查看由f(使用者名)標識的記錄。我一定不知道真實的使用者名。
當具有使用者名u1並且知道f的對手生成另一個使用者名u2使得f (u1) = f (u2),使用此使用者名登錄並查看使用者名u1的使用者數據時,我希望得到保護免受攻擊。
所以,f必須是:
- 確定性:我使用f (x) 作為標識符。它通過丟棄密鑰來拒絕 RSA 加密。
- 單向:我一定無法從加密值中獲得真實值。
- 無碰撞以防止上述攻擊。它拒絕 md5/sha,因為據我了解它們很容易破解,特別是因為我不使用鹽(不可避免的技術原因)。
- 快速計算:我必須每秒處理數万條消息。它拒絕 b/crypt。
請注意,我不關心輸出的長度(它可能是固定的或可變的)。
我正在查看 MAC 和數字簽名算法,但無法弄清楚它們中的哪些具有必需的屬性。
在 SEJPM 中指出,MD5 和 SHA-1 可能具有足夠的抵抗力,讓您永遠不會發生衝突。但是,這並不意味著它們中的任何一個都是安全的。SHA-2 或 SHA-3 都不是。也就是說,鑑於使用者名沒有特殊的結構,難以猜測。
問題是使用者名通常很容易被猜到。所以無論你對它們做什麼,確定性算法都會暴露它們。您可以執行字典攻擊並在儲存的使用者名集中找到結果值。這樣就可以輕鬆找到大多數使用者名。
如果您想保護它們,您可能需要第二個系統(受信任的第三方,使用者或服務提供商以外的實體)執行使用者名加密/解密或密碼散列與胡椒- 一個秘密值,就像一個密鑰。
但總的來說,最好確保知道使用者名會給對手帶來很少的優勢(如果有的話)。在大多數情況下都是這種情況,儘管系統可能不會指示使用者名或密碼是否不正確——這使得猜測兩者的組合有點困難。