Password-Based-Encryption

如果我用自己的函式進行散列怎麼辦?它使不可破解嗎?

  • August 17, 2016

我正在考慮創建自己的雜湊而不是創建加密(弱)。那個散列函式在儲存到數據庫之前有一些神秘的參數嗎?如果我這樣做,它會變得不可破解嗎?

您可以“創建您自己的雜湊”,例如通過使用HMAC與經過充分研究的標準加密雜湊函式(例如SHA-512)和硬編碼的密鑰(例如隨機選擇的 64 字節字元串)。這為您提供了兩全其美:

  • 只要您的程式碼(包含密鑰)沒有洩露,密鑰散列就可以證明是安全的(即在計算上與隨機函式無法區分,但需要對底層散列函式進行一些相對溫和的假設)。
  • 雜湊的安全性不是基於您自己的聰明才智,而是基於經過良好測試(和數學分析)的標準構造,以及密鑰的保密性。特別是,您可以安全地將密鑰之外的所有程式碼送出給第三方安全分析,而不會影響其安全性(而且,由於它基於標準組件和可互換密鑰,因此其他人實際上可以有效地分析它的安全性)。
  • 即使您的 HMAC 秘密密鑰洩露給了攻擊者,系統仍然保留與底層雜湊相同的安全屬性(即衝突和原像抗性)。對於許多目的,這些就足夠了。
  • 如果您的程式碼和密鑰被洩露(或者您懷疑它們可能已經洩露),您唯一需要做的就是讓系統再次完全安全(顯然,除了堵住原來的洩露)就是更改密鑰——您不必重新設計整個散列算法。由於密鑰可以是任何具有足夠熵的隨機字元串,因此更改它非常容易。
  • 您只需更改密鑰即可輕鬆創建多個獨立版本的雜湊算法。它們中的每一個都是同樣安全的(假設密鑰都是隨機選擇的,具有相同的熵),但它們中的任何一個都不能用於破解另一個密鑰。

當然,與其將密鑰直接硬編碼到散列程式碼中,不如將其儲存在例如配置文件中。這樣,您就可以自由地與其他開發人員安全地共享您的程式碼,而不必信任他們的密鑰(或者在共享程式碼之前必須始終對其進行編輯)。

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