Key-Derivation

我是否需要清理使用者輸入以進行 scrypt 或一般的 PBKDF?

  • September 2, 2021

我想允許使用者提供一個密碼作為一些PBKDF的輸入,我將使用它來構造一個用於文件加密的密鑰(目前使用 aes-256-ctr。它可能會隨著我了解更多而改變)。

我正在考慮使用 scrypt。我是否需要對將傳遞給 scrypt 的使用者輸入進行任何轉義、清理或其他檢查?

更一般地說,PBKDF 通常是否需要對使用者提供的輸入進行任何安全檢查?

不,您不需要對作為使用者輸入傳遞給這些函式的數據進行轉義或清理。它們接受任意字節序列,因此您傳遞的任何任意字節序列都是可以接受的,並且不應該因此存在安全風險。通常,加密算法對任意字節序列(可能具有特定大小)進行操作,並且不需要標準的轉義或安全處理(儘管它們可能需要填充、範圍或其他類型的檢查),使用數據的系統可能需要這個。

但是,如果您接受包含非 ASCII 字元的密碼,您可能希望對字元串進行某種 Unicode 規範化(可能是 NFC),因為通常有多種方法可以表示相同的邏輯字元。例如,您可以將“é”表示為單個程式碼點 (U+00E9) 或兩個程式碼點 (U+0065 U+0301),並且規範化會將它們重寫為相同的字元串。同樣,這並沒有安全問題,但是因為當這兩個密碼具有不同的字節序列時,使用者會認為這兩個密碼是相同的,因此執行規範化可以讓您的系統也將它們視為相同的密碼。

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