Key-Derivation

使用 Argon2i 1.3 最大化記憶體使用或通過次數是否更好?

  • April 4, 2021

我編寫了一個小應用程序,它使用 Argon2i 導出對稱密鑰以加密本地文件和秘密 Curve25519 密鑰。根據我能找到的最新論文,如果通過次數低於 10,Argon2i v1.3 容易受到 TMTO 攻擊:https ://eprint.iacr.org/2016/759.pdf

當然,理想情況下,我會同時增加兩者。但是,我試圖在各種機器上找到最大化安全性的參數,其中一些受 CPU 的限制比受 RAM 的限制更大,例如舊筆記型電腦。假設我的目標是計算時間約為 10 秒。如果通過次數為 3,我可以使用更多的 RAM,這是 Argon2i 推薦的最小值。但是,這似乎允許 TMTO 攻擊,根據上述論文減少 RAM 使用量。如果我將傳遞次數增加到 > 10,我必須使用更少的 RAM 來實現相同的計算時間,但是,上面的 TMTO 攻擊不適用。

在快速 CPU 上,增加通過次數並不是什麼大問題,因為我仍然可以使用大量 RAM。在慢速 CPU 上,它可能更重要。作為一個實際範例,我在 T23 ThinkPad 上進行了嘗試。結果如下。

Tcost=3 Mcost=128 MiB 並行度=1 計算時間:10 秒

Tcost=11 Mcost=40 MiB 並行度=1 計算時間:10 秒

鑑於上述 Alwen-Blocki 論文中最近的 TMTO 攻擊,使用 GPU 的攻擊者在攻擊第一個範例還是第二個範例時獲得更多優勢?ASIC 怎麼樣?

作為參考,這裡是 Argon2d,只有 1 次通過,目標為 10 秒

Tcost=1 Mcost=448 MiB 並行度=1 計算時間:10 秒

(我強烈考慮去 Argon2d)

截至 2017 年 10 月,我發現最有用的資源對於快速、實際地了解 Argon2 如何選擇參數是(仍是草案)RFC,特別是第 9 節,它提供了此指南(在 9.2 中):

對 1-pass 和 2-pass Argon2i 的最佳攻擊是低儲存攻擊

$$ CBS16 $$,這將時間區域積(使用峰值記憶體值)減少了 5 倍。對 3-pass 和更多 Argon2i 的最佳攻擊是$$ AB16 $$縮減因子是記憶體大小和通過次數的函式。對於 1 GB 記憶體:3 次通過 3,4 次通過 2.5,6 次通過 2。記憶體大小每增加一倍,減少因子就會增加約 0.5。完全防止時空權衡$$ AB16 $$,通過次數必須超過記憶體的二進制對數減去 26。

自從 $ \log_2(128\ \mathrm{MiB}) = 27 $ ,這實際上表明您應該能夠使用 $ t = 3 $ , $ m = 128\ \mathrm{MiB} $ 正如您的第一個替代方案所建議的那樣。(是的, $ 27 - 26 = 1 $ ,但你至少需要三遍才能擊敗

$$ CBS16 $$攻擊。) 還值得完整引用第 9.3 節:

9.3. 時限防御者的安全性

使用密碼散列函式的系統的瓶頸通常是函式延遲而不是記憶體成本。然後,一個理性的防御者將最大化攻擊者的暴力成本,該攻擊者配備了一系列雜湊、鹽和時間資訊,用於防御者機器上的固定計算時間。攻擊成本估計來自$$ AB16 $$這意味著對於 Argon2i,對於大多數合理的記憶體大小來說,3 次傳球幾乎是最佳的,而對於 Argon2d 和 Argon2id,1 次傳球可以最大限度地提高防守時間不變的攻擊成本。

RFC 草案沒有說明他們認為合理的記憶體大小,但他們確實在整個草案中反複使用 1 GiB 作為參考數字。例如,第一個引用中給出的縮減因子基於 1 GiB,並且引用指出這些會隨著記憶體的增加而增加- 但您建議使用的記憶體比這更少。


或者,正如您提出的問題和意見一致,您可能會考慮不使用 Argon2i。事實上,RFC 草案建議 Argon2id 優於 2i 或 2d。然後你只需要一次通過,因為對 2d 和 2id 進行權衡攻擊的優勢不取決於通過次數(第 9.2 節):

最佳權衡攻擊 $ t $ -pass Argon2d 是排名權衡攻擊,它將時間面積乘積減少了 1.33 倍。

Argon2id 的最佳攻擊可以通過將 1-pass Argon2i 的最佳攻擊與多通道 Argon2d 的最佳攻擊相補充來獲得。因此,對 1-pass Argon2id 的最佳權衡攻擊是組合低儲存攻擊(針對記憶體的前半部分)和排名攻擊(針對後半部分),它們的因子約為 2.1。對 t-pass Argon2id 最好的權衡攻擊是排名權衡攻擊,它將時間面積乘積減少了 1.33 倍。

因此,對於 1 GiB 記憶體大小,您需要 Argon2i 六次通過才能將攻擊者優勢降低到與一次通過 Argon2id(2 對 2.1)相似的水平,並且兩者仍然落後於 Argon2d(1.33)。這強烈支持 Argon2id,並且可能是 RFC 草案推薦它的原因。

您應該使用使用者可以容忍的盡可能多的時間,以及使用者可用於計算的盡可能多的記憶體。根據您的限制,這會使攻擊者的成本最大化。使用者可用的資源越多,攻擊就越難。

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