Hash

使用數據雜湊作為完整性證明並防止衝突

  • September 23, 2021

我不是在與應用程序互動時儲存使用者數據,而是儲存數據的 SHA3-256。這是因為在這個特定環境中的數據儲存非常有限。

數據可以是多個變數,例如 a、b 和 c,但我沒有單獨保存它們,而是保存連接的雜湊值:SHA3(a,b,c)。

當使用者想與系統互動時,他們應該再次發送變數,系統會將被登頂的變數的雜湊值與儲存的雜湊值進行比較。如果它們匹配,則係統假定變數與最初達到的相同。所以,在這個例子中,我最終只保存了一個變數而不是 3 個。

數據是公開的,所以大家都知道。我的問題是通過散列變數的串聯是否存在安全問題(這是否使使用者更容易找到衝突)。如果我改為散列每個變數然後散列散列的串聯,有什麼區別嗎?

綜上所述,我認為這可以讓使用者更容易發現衝突的原因是 a、b 和 c 是不同的類型,並且具有最小值和最大值;例如,如果 c 的值只能在 10 到 1000 之間,則使用者可以嘗試 C 的所有可能值來測試幸運碰撞,而不需要太多努力。這是一個合理的擔憂嗎?

請注意,誰送出數據並不重要,只是登頂的數據與之前登頂的數據完全相同。

只要安全儲存的散列超過數據的規範表示(即變數及其編碼不能重疊),那麼儲存散列是安全的。這將與對數據進行簽名具有類似的安全性,但這些安全性更大。我要確保的一件事是您使用事務儲存雜湊;否則使用者可能會打斷你,讓你不寫或只寫一部分雜湊。

如果您想讓攻擊變得更加困難或想要使用更少的儲存空間,那麼您可以考慮儲存一個帶密鑰的雜湊值,對於 SHA-3,它就是 KMAC。在這種情況下,您可以例如使用 128 位輸出而不是全部 256 位,同時保持 128 位的安全性,但缺點是如果您洩漏密鑰,那麼對輸出的衝突攻擊只會給您留下 64 位的安全性。

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