Key-Derivation

Argon2 如何用於密鑰派生?

  • November 5, 2021

根據我的理解,密鑰派生是當您獲取一些數據(例如密碼)並使用函式將其轉換為可以用作橢圓曲線密碼學中的密鑰的數字時。Argon2 在散列時使用隨機鹽,這需要儘管使用相同的密碼,但每次散列都不同。如果散列不同,如何用它來表示相同的密鑰?

根據我的理解,密鑰派生是當您獲取一些數據(例如密碼)並使用函式將其轉換為可以用作橢圓曲線密碼學中的密鑰的數字時。

是的,這是正確的,但是請記住,您的密碼應該有足夠的強度來防止暴力破解。一種常見的方法是使用dicewireBip39 之類的密碼機制,參見xkc936

一旦你派生出密鑰 $ k $ ,那麼這是你的私鑰,並且 $ [k]G $ 是您在 ECC 中的公鑰和基點 $ G $ 的曲線。擦除 $ k $ 使用後千萬不要存入記憶體,請妥善保管您的密碼!

Argon2 在散列時使用隨機鹽,這需要儘管使用相同的密碼,但每次散列都不同。

是的,這也是正確的。您可以考慮使用 Argon2 的所有參數,執行確定性函式。相同的輸入將產生相同的輸出。這就是我們想要的散列函式、密碼散列函式和隨機預言機;確定性;相同的輸入必然導致相同的輸出。

使用不同的鹽用於從密碼中派生多個密鑰。同時,鹽是適用於彩虹表的一個很好的對策。

如果散列不同,如何用它來表示相同的密鑰?

要獲取相同的密鑰,需要使用相同的參數;相同的密碼、相同的鹽、相同的迭代、相同的記憶體使用和相同的並行化。除密碼外的參數不一定是秘密的,它們可以公開儲存。例如,這種資訊儲存在LUKS header中,重要的部分是始終對您的密碼保密。

當從密碼中導出密鑰時,必須儲存這些參數。

Argon2 如何用於密鑰派生?

首先,確定你的目標安全;即你想要多少攻擊者的生命是困難的。根據您的目標安全性調整迭代次數、並行化程度和記憶體使用情況。一旦你決定了,生成一個統一的隨機鹽。確定所需的密鑰大小,例如 256 位(或 32 字節)。現在您已準備好將 Argon2 與此資訊一起使用。

您向 Argon 提供您的資訊並決定您的目標安全性;

Usage:  ./argon2 [-h] salt [-i|-d|-id] [-t iterations] [-m memory] [-p parallelism] [-l hash length] [-e|-r] [-v (10|13)]
       Password is read from stdin
Parameters:
       salt            The salt to use, at least 8 characters
       -i              Use Argon2i (this is the default)
       -d              Use Argon2d instead of Argon2i
       -id             Use Argon2id instead of Argon2i
       -t N            Sets the number of iterations to N (default = 3)
       -m N            Sets the memory usage of 2^N KiB (default 12)
       -p N            Sets parallelism to N threads (default 1)
       -l N            Sets hash output length to N bytes (default 32)
       -e              Output only encoded hash
       -r              Output only the raw bytes of the hash
       -v (10|13)      Argon2 version (defaults to the most recent version, currently 13)
       -h              Print argon2 usage

請注意,Argon2 有三種類型;

  • Argon2d 速度更快,並且使用依賴數據的記憶體訪問。數據依賴性立即啟用旁道。這適用於不受側通道攻擊威脅的加密貨幣和應用程序。
  • Argon2i 使用與數據無關的記憶體訪問,這是密碼散列和基於密碼的密鑰派生的首選。
  • Argon2id 在第一次迭代的前半部分用作 Argon2i,其餘用作 Argon2d。這實現了邊通道保護和時間記憶體權衡。

並形成草案-irtf-cfrg-argon2-03;

如果您不知道它們之間的區別,或者您認為側通道攻擊是可行的威脅,請選擇 Argon2id。

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