使用密碼片語生成加密密鑰的 PBKDF 機制
我想大致了解從密碼生成加密密鑰的機制是如何工作的,我們通過密碼來加密卷或文件。
我熟悉公鑰加密、鹽的概念和密碼驗證的密碼散列方法。鹽防止攻擊者預先計算派生密鑰的字典。
我不明白從密碼中獲取加密密鑰的主要優點,然後我們通過它來加密數據。從我讀到的內容來看,主要優點是關鍵的伸展和加強;更長或更高的熵密鑰比所謂的弱密碼更安全。
我的第一個困惑來自派生加密密鑰的隨機性。這不應該是一個確定性的過程嗎?密碼應該對應於某個唯一的雜湊,以便驗證它?
總的來說,我覺得這個機制目前相當模糊,並且希望能對其進行一些詳細說明。:)
更新
salt 是唯一的隨機組件,它與加密密鑰一起傳遞。因此,密鑰派生密鑰確實是確定性的。
鹽確實是隨機生成的。如果鹽是隨機的,那麼就不可能預先計算散列,從而無法建構查找表散列 -> 稱為彩虹表的密碼。鹽只必須是不可預測的和唯一的,因此依靠鹽唯一的安全性相對較小。
一旦知道鹽,它就會被儲存起來,以便密碼推導是確定性的。這使您可以為相同的鹽和密碼組合(以及相同的工作因子或迭代計數)重新生成相同的雜湊。
可能需要在 PBKDF 中使用鍵拉伸(或者更確切地說,鍵加強),因為輸入鍵材料通常不夠強大,無法用作鍵。密碼通常只有大約 50 位左右的安全性。如果密碼不夠強,密鑰強化可以增加一些安全性。這會為每個測試密碼的對手增加大量工作。
密鑰強化使得對數據庫中的大量雜湊執行字典攻擊是不可行的,因為每個密碼/鹽組合都應該被測試,並且每個測試都將是相對大量的工作。這當然是有代價的:每次生成密碼雜湊時,使用者也會產生工作因素。
請注意,生成的密鑰的輸出大小不會增加輸入密鑰材料的隨機性。因此,僅輸出大量位不會增加安全性。如果輸入密鑰材料的熵比輸入密鑰少得多,則輸出 128 或 256 位 AES 密鑰不會增加安全性。
密碼不應對應於唯一的雜湊。對於給定的密碼散列和工作因子,密碼/鹽組合應該對應於某個散列。
否則,您或其他任何人可能會出於不同目的使用相同的密碼,並且計算出的雜湊值在不同位置將是相同的。這會洩漏有關密碼的資訊,甚至可能導致散列受損,例如,如果有人使用相同的密碼並發現散列在其他地方重複。