Hash

使用散列函式創建 UID - 最合適的散列算法?

  • January 4, 2017

我有大約 100 萬個數據點,每個數據點都有一個 6 到 24 位的唯一整數:

exampleDataPointOne: 655092
exampleDataPointTwo: 333402221 
exampleDataPointThree: 332021
...
exampleDataPointN: 903232211 

我想通過雜湊函式執行這些唯一整數中的每一個,其目標是 1)保持唯一性,2)模糊底層整數值和 3)具有長度為 <= 34 的雜湊輸出。

我四處尋找適合的潛在雜湊算法,例如 BLAKE、md5 和 sha 系列雜湊。

鑑於我的要求,最可取的雜湊算法是什麼?

我想通過雜湊函式執行這些唯一整數中的每一個,其目標是 1)保持唯一性,2)模糊底層整數值和 3)具有長度為 <= 34 的雜湊輸出。

你需要非常清楚你所說的“模糊”是什麼意思。這裡的基本問題是您的值看起來很可能會受到暴力猜測攻擊——就像密碼一樣。這意味著,如果你對你的值應用一個公開的、無密鑰的散列函式,你就會使自己遭受對密碼非常成功的攻擊——特別是對未加鹽密碼的攻擊。

如果通過“模糊”你真的意味著攻擊者不應該能夠找出每個雜湊對應的數字,那麼你的解決方案需要包含一個密鑰,並且該密鑰需要受到保護。這使用 SHA-2 還是Blake2重要得多。(PS:不要將 MD5 用於任何事情!如果您需要將秘密合併到計算中,請不要以臨時方式進行 - 使用 HMAC-SHA2 或 Blake2 的可選密鑰支持)。

注意:此答案之前建議使用作為 SHA-3 一部分標準化的 SHAKE 函式,但由於我誤解了 FIPS-202 中使用的符號,因此已對其進行了編輯

我建議使用鍵控 MAC,截斷到適當的長度。該密鑰將用作此案例的“域分隔符”,並防止字典​​攻擊針對小輸入空間(如果這是一個問題)。如果第三方也需要為您的應用程序計算雜湊值,您可以與第三方共享密鑰。

如果您正在處理最近的 x64 硬體,由於片上 SHA2-256 的硬體支持,我會根據需要選擇截斷的HMAC-SHA2-256 。

在沒有硬體 SHA2-256 指令的平台上,鍵控BLAKE2可能是性能更高的選擇(BLAKE2 可以直接鍵控並用作安全 MAC,而無需使用 HMAC 結構)。

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