Hash

如果 argon2id 存在,為什麼要使用 argon2i 或 argon2d?

  • September 3, 2019

所以我目前正在處理我的一個 GitHub 項目,我想實現 Argon2。問題是我真的不太了解它。網際網路研究並沒有真正的幫助,因為 Argon2 只有 2 歲,所以真正存在的只是科學論文和 GitHub 頁面。

但在我繼續使用 argon2 進行開發之前,我需要回答一些重要的問題。我將從第一個開始:

如果 Argon2id 是 Argon2i 和 d 的混合版本,那麼為什麼人們甚至使用其他兩個中的一個,使用能夠抵抗側通道攻擊和 gpu 破解的東西不是更安全嗎?

我認為目前的Argon2 RFC 草案為這個問題提供了一個很好的、相當簡短的答案。TL;DR:大多數人確實想使用 Argon2id 而不是“純”變體。

簡介很好地總結了這些問題:

Argon2 有一個主要變體:Argon2id,以及兩個補充變體:Argon2d 和 Argon2i。Argon2d 使用依賴於數據的記憶體訪問,這使其適用於加密貨幣和工作量證明應用程序,而不會受到側通道定時攻擊的威脅。Argon2i 使用與數據無關的記憶體訪問,這是密碼散列和基於密碼的密鑰派生的首選。Argon2id 在記憶體上的第一次迭代的前半部分作為 Argon2i 工作,在其餘部分作為 Argon2d 工作,從而提供側通道攻擊保護和由於時間-記憶體權衡而節省的蠻力成本。Argon2i 對記憶體進行了更多的傳遞,以防止權衡攻擊。

基本上,考慮了兩種攻擊:

  1. 側通道定時攻擊。
  2. 時間記憶權衡(TMTO)攻擊。

Argon2d 容易受到定時攻擊,但對 TMTO 的抵抗力最好(第 9.2 節):

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

Argon2i 對側通道定時攻擊無懈可擊,但對 TMTO 的攻擊較弱:

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

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

Argon2id 介於兩者之間:

1-pass Argon2id 的最佳折衷攻擊是組合低儲存攻擊(針對記憶體的前半部分)和排名攻擊(針對後半部分),它們的因子約為 2.1。

由於 Argon2 執行時間隨著傳遞次數呈線性增長,因此 6 次傳遞的 Argon2i 的速度大約是 1 次傳遞的 Argon2id 的六倍。

RFC 草案還聲明(沒有解釋)Argon2id 抵抗定時攻擊,並推薦它作為主要變體,並明確告訴你(第 4 節,“參數選擇”)如果你不知道使用哪個,你應該選擇氬2id。您可能應該等到 RFC 獲得批准才能完全承諾任何事情,但與此同時,如果您正在編寫一些早期程式碼,那麼偏向於 Argon2id 是有意義的。

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