Hash

關於 argon2 選項的問題

  • January 29, 2019

因此,因為我目前正在開展一個將使用 Argon2 的項目,所以我需要一些關於 Argon2 選項的問題的答案。

我沒有找到關於他們的任何資訊。

  1. 並行選項到底有什麼作用?
  2. 記憶體選項到底有什麼作用?
  3. Iterations 選項到底有什麼作用?它是如何工作的?只是重新散列嗎?

像 Argon2 這樣的密鑰派生函式的全部意義在於增加了創建密鑰所需的時間(難度),並且作為副作用,增加了攻擊密鑰所需的資源。

其他關鍵函式(如 PBKDF2)的問題在於,您只能設置所需的總迭代次數,雖然這對於許多應用程序來說都很好,但對於密碼雜湊來說並不理想。使用特定設備可以輕鬆更快地對 PBKDF2 進行雜湊處理。顯卡被設計成能夠相對快速地執行重複動作。這使得散列成為一項簡單的任務,可以讓 GPU 快速通電。然而,雖然 GPU 可以訪問許多邏輯處理器,但它們在訪問快速記憶體方面非常有限。

Argon2 在設計時就考慮到了這一點,它允許三個不同的參數以最佳方式與您的硬體一起啟用。因此,它具有三個不同的可調整因素(稱為成本):

  • Iterations:總時間成本,要求 Argon2 在收到輸出之前執行一定的時間,允許您調整生成輸出所需的時間。
  • 記憶體:系統資源成本。記憶體被指定為散列函式的每個執行實例所需的設定量。與迭代不同,記憶體不是可以優化的東西,它是一個物理限制,需要一定數量的物理記憶體(通常是 RAM)可用,並且可以免費進行散列。除非未來發生高速儲存密度革命,否則這將是您最難承受的成本之一
  • 並行度:為了生成輸出而一次執行的執行緒總數。如果您有大量可用的邏輯處理器,則增加此成本需要攻擊者一次處理不太一致的攻擊,或者購買更昂貴的設備。

(同樣重要的是要注意,除了列出的輸入之外,還有幾個不同的輸入,但這些輸入主要用於 Argon2lib 的低級 API 使用,可以在此處找到)

配置 Argon2 成本的快速指南:

  1. **將記憶體成本設置得盡可能。**如果您最多希望有 10 個使用者在專用伺服器上同時登錄並且總共有 20 GB 的可用記憶體,那麼每次執行函式總共發出 1.5 GB 的記憶體。此外,請始終記住對擴展友好:如果您有 20Gbs 的記憶體,並且目前在任何給定時間只有 10 個使用者登錄,但您希望將來一次有超過 100 個使用者,請設置參數以支持此類事件.
  2. **根據您的硬體可以支持的內容設置並行度。**我有一台 4 核電腦,因此,我將 KeePass 的並行度設置為 4 個執行緒,您的需求將取決於每秒的總登錄次數以及您的硬體可以做什麼。
  3. **根據您的應用程序,將您的迭代設置為合理的時間。**從像 10 這樣的低值開始,執行你的函式,看看接收輸出需要多長時間,如果感覺太快,增加你的迭代。繼續重複這個過程,直到調整好。您需要根據應用程序的需要設置迭代。如果您在 Web 服務上為客戶端執行密碼雜湊,您可能希望每個雜湊大約 0.2 秒。但是,如果您正在為本地儲存加密進行客戶端散列,您可能希望瞄準幾秒鐘,因為您可能只希望一次執行一個函式並且每天執行很少次。

希望這會有所幫助,我為您解釋得很好!

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