在用於線上帳戶之前對密碼進行雜湊處理
我真的不知道我在說什麼,所以如果我有任何錯誤,請道歉。目前,我的大多數線上帳戶都有一個密碼命名系統,看起來像這樣:masterpassword + appname,其中 appname 是密碼所針對的任何服務的名稱。前任。
$sickpass123$_SoundCloud
和$sickpass123$_Gmail
。我們的想法是擁有一個易於記住的主密碼和應用程序名稱,因此每個密碼都是唯一的。不過我很擔心,因為如果一個主動的人設法找出我的一個密碼,他們就很容易找出其他密碼,因為它們都包含相同的主密碼。我想通過散列函式執行每個密碼(每次都需要輸入它),因為這樣可以確保每個密碼都是唯一的。前任。
8d9f24e142b33c2f7f3d59fc7c6043a7
和84e08387ef918182154713d388f5ea62
。此外,我可以將雜湊輸出編碼為 base64 或 ascii85 以滿足線上服務中密碼的大寫字母/數字/符號要求。前任。OGQ5ZjI0ZTE0MmIzM2MyZjdmM2Q1OWZjN2M2MDQzYTc=
和ODRlMDgzODdlZjkxODE4MjE1NDcxM2QzODhmNWVhNjI=
。我也知道密碼生成器,但它們每次都會生成一個隨機字元串,而不是可預測的輸出。我寧願每次輸入密碼時都生成相同的輸出。這樣,就很容易記住每個密碼,但散列函式將使每個密碼幾乎都是唯一的。此外,如果僅將雜湊輸出提供給網站,而不是原始密碼,則網站本身將不知道我的模式。
- 使用我建議的方法有什麼問題嗎?如果伺服器加密了我已經加密的密碼,實際上會不會更不安全?
- 我應該以 base64 或 ascii85 或類似的方式對輸出進行編碼嗎?
- 哪種算法最適合這項任務?我是否需要像 SHA-1 這樣更安全的東西,還是更原始的 MD5 就足夠了(有人會關心嘗試破壞散列)嗎?
編輯:感謝所有的答案。他們都提供了很多資訊。我想我可能會嘗試使用密碼管理器,也許是 @Matty 建議的 MasterPasswordApp,因為它更容易管理。
使用我建議的方法有什麼問題嗎?
是的,有幾個。
首先,有些網站會生成首次密碼,甚至是長時間密碼。您可能也想儲存這些。如果網站需要頻繁更新怎麼辦?
如果一個密碼被顛倒,您仍然會失去機密性。
如果伺服器加密了我已經加密的密碼,實際上會不會更不安全?
不,通常不會。如果您不知道伺服器的密鑰,則使用加密輸入不會更改加密。密碼雜湊基本上也是如此。如果您不使用相同的參數(例如鹽)進行操作,那麼您不太可能受到攻擊。
我應該以 base64 或 ascii85 或類似的方式對輸出進行編碼嗎?
目標站點接受的任何內容。這指向另一個問題,因為這些站點可能需要特定格式的密碼。密碼的字母(字元輸入)和大小都可能受到限制。因此,有些站點使用 base64 會更好,有些站點使用 base 85,而其他站點則沒有上述任何一種。例如,一個 8 字元的 base 64 字元串只有 48 位的安全性,允許暴力攻擊。您將如何記住哪種格式最適合特定網站?
哪種算法最適合這項任務?我是否需要像 SHA-1 這樣更安全的東西,還是更原始的 MD5 就足夠了(有人會關心嘗試破壞散列)嗎?
在建構安全協議時,您必須假設有人“關心”。否則你不妨跳過整個事情。也就是說:不,SHA-1 或 MD-5 可能不會對選擇產生太大影響。
綜上所述,儘管存在所有指示的問題,但散列密碼仍然比直接提供帶有副檔名的密碼更安全。但是因為無論如何你都需要一個設備和應用程序,所以我建議使用密碼管理器(例如,在主密碼上應用密碼雜湊或 PBKDF 來解密數據庫)。