PBKDF 和 SHA 有什麼區別,為什麼要一起使用?
我最近一直在閱讀一些關於散列的內容,根據 AgileBits 的說法,他們在新的保管庫文件中使用“ PBKDF2 中的 SHA512 ”。
我在 Wikipedia 中查看了這兩個名稱,並且我知道 PBKDF2 是一個密鑰派生函式,而 SHA 是一個加密雜湊函式,但我無法真正理解它們的區別以及為什麼它們都在另一個內部一起使用。
任何人都可以為沒有密碼學經驗的人解釋這一點嗎?
(如果有必要,你可以假設我只知道數學)。
SHA-512 是一種加密安全雜湊,PBKDF2 是我們所說的基於密碼的密鑰派生函式。如果生成的秘密不用作密鑰而是用作雜湊值,則它也稱為密碼雜湊。密碼散列不同於安全散列,因為它們包含鹽和工作因子/迭代計數。
加密雜湊和密碼雜湊都是一種方式函式,旨在從給定的輸入創建一個短的、固定大小的輸出。在密碼雜湊的情況下,輸入將是密碼和鹽。salt的大小和迭代次數通常被認為是配置參數;兩者當然都會影響密碼雜湊的輸出。
密碼雜湊通常建立在偽隨機函式或 PRF 之上。PRF 的一種常用形式是基於 HMAC 或散列的消息驗證碼,它又在內部使用散列。當使用基於散列的 PRF(例如 HMAC)時,所使用的散列類型/大小通常是可配置的。然而,密碼散列不需要使用散列來建構。任何其他 PRF,例如基於對稱密碼的 PRF,都可以。例如,bcrypt 建立在 Blowfish 之上,這是一種分組密碼。
密碼散列需要加鹽,這樣相同的密碼就不會映射到相同的散列。因此,它們也阻止了彩虹表(包含預先計算的密碼/雜湊對)的用處。此外,它們包含一個工作因子/迭代計數,因此攻擊者需要執行更多工作來計算每個可能密碼的雜湊值。這是必需的,因為大多數密碼不夠隨機。如果沒有工作因素,攻擊者將能夠使用暴力破解或字典攻擊測試大量可能的密碼。