Passwords

如何為商品硬體配置 Argon2d?

  • June 1, 2019

您可能已經聽說過:KeePass v2.35支持一種新的數據庫格式 ( KDBX4 ),它允許使用Argon2(更準確地說:Argon2d)作為基於密碼的密鑰派生函式 (PBKDF)。

然而 Argon2 在 GUI 中具有三個獨立的參數,稱為迭代次數、記憶體使用並行度。此外,它還提供了衡量它可以在一秒鐘內進行多少次迭代。但是,如果您“只是”為此按下按鈕,它將使用 1MB 和2的並行值。

所以我的問題是:“只是”調整迭代計數是從 Argon2 中獲得最大安全性的最佳策略,還是有更好的方法?


好的,這裡是搜尋最佳策略的更具體的情況:x86 架構 PC,具有基本上無限量的 RAM(讓我們將 4GB+ 作為無限量的近似值*)*,具有非常有限數量的並行核心和高達 1 秒的非常“緊張”的時間預算。

現在來定義“最佳”一詞:鑑於上述情況,參數選擇的最佳策略是允許基於 GPU-/FPGA-/ASIC 的最大負擔的策略(就時間區域而言-product) 攻擊者同時適應約束。

由於這也旨在為沒有太多加密背景的人提供資源,因此請盡可能具體地保留可能的策略。

首先要注意的是KeePass 使用Argon2d,它是 Argon2 的變體,具有數據相關的記憶體訪問。

現在最好(大致)遵循Argon2 規範(RFC 草案)中列出的指南:

  • 計算出每次呼叫可以啟動的最大執行緒Argon2數。 core, … 如果您在 CPU 上啟用了(真正的)超執行緒,則應該將該值加倍。
  • **可選:**如果您想在較低功率的設備(例如您的手機)上使用密鑰派生,您需要首先弄清楚它在平均使用期間有多少*可用RAM。*這將是您的記憶體使用上限。
  • **可選:**如果您的機器上的 RAM 少於 8GB,請計算出平均使用期間可用的記憶體量。這個和前一點的最小值將是記憶體的上限。
  • 選擇 1 到 5 之間的迭代計數。您選擇的越高,攻擊者就越難減少所需的記憶體。分析表明,較低的個位數值是好的,但在嘗試減少記憶體使用時,稍微高一點應該會增加懲罰。但是不要無限期地提高這個值,因為雖然它會增加攻擊者減少記憶體的懲罰,但它很可能會在你使用 25MB 和 500MB 的記憶體和 500MB 的“中等”減少懲罰之間產生差異。對於攻擊者來說比 25MB 更糟糕,因為減少的懲罰是“高”的。
  • 找出實際的記憶體使用參數。為此,您選擇一個相當低的值,例如 100MB 或最大預算的十分之一,並測試需要多長時間。如果花費的時間不夠長,請增加記憶體使用量。使用的時間將大致與記憶體使用量成線性比例,也就是說,如果你將記憶體使用量翻倍,你將獲得雙倍的時間。您想根據自己的喜好調整此時間值,但建議為磁碟加密或密碼數據庫設置大約 1 秒。
  • 如果你達到了最大記憶體預算,不要超過它(認為會很糟糕),而是現在增加迭代次數。這裡還要注意,使用的時間將與迭代次數成線性關係,也就是說,迭代次數加倍,大約需要兩倍的時間。

總體而言,您的參數可能需要一秒鐘才能在您必須經常解鎖數據庫的預期使用機器上進行計算。

所以…

TL;博士:

將並行度設置為您的執行緒數(如果您有超執行緒,則將核心數加倍),將迭代次數設置在 1-5 範圍內,並將記憶體使用率設置為盡可能高,同時保持時間和記憶體預算。


感謝axapaxa指出應該使用執行緒數。

感謝Luis Casilla我指向 RFC 草案並讓我改進了這個答案

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