Scrypt 和 PBKDF2 有什麼區別?
在閱讀了這 兩個資源後,我想知道我是否了解 Scrypt 和 PBKDF2 之間的所有差異。
據我了解,相似之處是:
- 兩者都是基於密碼的密鑰派生函式。
區別在於:
- Scrypt 對資源的要求更高。
我錯過了什麼嗎?
PBKDF2和scrypt都是密鑰派生函式(KDF),它們通過故意降低計算速度,特別是通過具有可調節參數來控制緩慢度來實現密鑰拉伸。
不同之處在於,scrypt 還被設計為需要大量(且可調整的)記憶體來高效計算。這樣做的目的是使破解使用GPGPU或定制ASIC / FPGA硬體等設備更難並行化。此類設備可能有數百甚至數千個並行處理單元,每個處理單元都能夠使用不需要太多記憶體的傳統 KDF 散列不同的密碼,例如 PBKDF2。然而,事實證明,至少使用目前技術,為這些並行單元中的每一個提供大量儲存空間比製造這些單元本身要困難和昂貴得多。
PBKDF2 和 scrypt 之間的另一個區別是 PBKDF2 是用於轉換任何加密散列函式(實際上是偽隨機函式)的通用構造,但獲得 PBKDF2 的 PRF 的最常見方法是使用HMAC構造從散列函式中建構一個) 轉換為鍵拉伸 KDF。因此,您使用的實際 KDF 可能是例如 PBFKD2-HMAC-SHA256,這意味著基於SHA-256雜湊函式的 HMAC 建構的 PBKDF2 。
另一方面,Scrypt 是一種特定的密鑰派生函式,“內部沒有使用者可更換的元件”。雖然 scrypt 確實使用了一些標準函式和結構(事實上,它在內部使用 PBKDF2-HMAC-SHA256 進行狀態擴展和壓縮階段),但 scrypt 規範並沒有考慮到,例如,將散列函式更改為SHA-256 以外的東西。這是一個“接受或離開”的交易。
也就是說,原則上,可以使用scrypt 論文中描述的原則定義一個新的 KDF ,但使用不同的組件。特別是,scrypt 論文將 scrypt 定義為稱為 MFcrypt 的更通用結構的實例,使用 HMAC-SHA256 和記憶體硬混合函式 SMix(也在論文中定義)進行實例化。可以使用帶有SHA-3而不是 SHA-256 的 MFcrypt 實例,但該函式將不再是論文中定義的“scrypt”。