Password-Hashing
在密碼片語上執行 SHA256 的密碼生成器有多安全
我正在研究密碼管理器是如何工作的,在我看來,它們都儲存了密碼(儘管是加密的)。
當您根據您的主密碼和一些可以從網站名稱生成的鹽來請求密碼時,密碼管理器總是生成密碼的方案有多安全。例如像
密碼 = sha256 (“mymasterpassword”+md5 (“facebook”))
微不足道,它似乎並不比普通方案更容易受到攻擊,攻擊者仍然需要猜測我的主密碼,那麼我錯過了什麼安全漏洞?
確實 存在具有類似方案的密碼管理器,被稱為“確定性密碼管理器”。雖然這個想法通常確實有效,但這篇博文列舉了一些相當大的實際缺點,我將總結其中兩個:
- **主密碼片語洩露的可能性:**如果您的主密碼被洩露,您的所有密碼現在都會立即洩露。比較經典的基於磁碟的密碼管理器:在這裡,攻擊者需要訪問文件以及主密碼片語。
此外,只需訪問一個密碼(以及其種子,即用於哪個站點),攻擊者就可以開始嘗試通過暴力破解主密碼。尤其是像 SHA256 這樣的快速散列函式,而不是像 Argon2 或 PBKDF 這樣的故意慢速密鑰派生函式,這意味著您的主密碼最好是非常好的- 因此建議使用隨機生成的加密密鑰而不是人工生成的密碼*。該密鑰需要儲存在某個地方,從而破壞了該方案的全部要點。
- 如果沒有儲存狀態,您將失去一些非常重要的功能:一旦生成,現在不可能更改密碼,而無需記住更改的種子。例如,如果您的 facebook 密碼被洩露,您現在必須記住輸入“facebook1”而不是“facebook”。這很糟糕,因為它會阻止使用者更改他們懷疑可能已被洩露的密碼。
此外,密碼要求因站點而異。有些可能需要特殊字元,有些可能完全禁止它們。為了適應這一點,您還必須記住每個網站的確切密碼生成器設置。
總之,從密碼學的角度來看,您的想法可能是合理的,但前提是主密碼包含足夠的熵(該量遠高於僅線上暴力攻擊場景)。但是在現實世界中,與普通的密碼管理器相比,有很多安全性和可用性考慮使其通常不太實用。
- 當然,可以生成一個相當長的隨機密碼片語,它既具有高熵,又具有人類可讀性。但它很可能超出您對密碼合理長度的期望。