通密之所以不應該被過分指責,是因為有其存在的道理,沒有哪種方案的管理成本比它更低,它不需要購買昂貴的1password,不需要擔心臨時用的時候突然想不起來,而且,只要這個密碼足夠強壯並且使用環境足夠安全,大多數情況下也不會有什麼問題。通密的問題在於它的風險成本太高,一旦一處洩漏,所有使用這個密碼的地方都不安全。

另一個極端是,使用很複雜的密碼,每個賬號都不同,甚至用密碼生成工具生成完全沒有規律的隨機字符串。這種方案的安全性很高,高到連你自己都記不住。

所以我需要這樣一套好的方案,它應該在安全性和易用性之間取得一個比較好的平衡,並且隨著方法論和工具鏈的進化,這個平衡可以無限逼近黃金分割點。

首先,密碼應該是複雜但容易記住的。密碼的複雜度和記憶負擔並不成正比,例如如果你實在記不住“ppnn13%,dkstFeb1st”,那麼這樣呢——“娉娉裊裊十三余,豆蔻梢頭二月初”。密碼只是一個字符串,如果不去死記最終的值,而是字符串背後的規律,記憶的壓力就會小很多。

但考慮到每個賬號都想一個這樣的密碼是不現實的,而且怎麼解決記憶密碼和賬號的對應關係的問題?所以進一步,可以用這樣的密碼當前綴,每個密碼的前綴都一樣,然後針對每個賬號創造一個後綴,這個後綴應該是每個賬號都不同的,且和賬號有某種只有你自己才知道的關聯,這樣你可以隨時根據賬號計算出它的後綴。例如,可以用賬號拼音首字母(當然,實際的規則應該更複雜一點)。

這樣你就有了足夠複雜、每個賬號都不同並且很容易記住的密碼。進一步地,在私有設備上可以利用文本替換功能(例如:Alfred for Mac的Snippets功能)快速輸入通用前綴,某些支持按鍵編程的機械鍵盤會有更好的體驗。

不過好記性不如爛筆頭,為防萬一,還是需要一個Plan B。主流的密碼管理工具主要有這麼幾種:

  • 瀏覽器的賬號記憶功能
  • 操作系統的keychain
  • 在線密碼管理工具
  • 離線密碼管理工具

瀏覽器一般是把密碼以明文存儲在本地的,firefox雖然有個主密碼,但只是個幌子,別人仍然可以拿到它記錄密碼的數據庫文件。這種做法的邏輯在於,設備上存儲的數據的安全性由操作系統和用戶負責,換句話說,用戶不應該允許他人用自己的權限登錄設備。但實際上很難避免這種情況,而且還要考慮到系統被入侵的可能。所以,只應該讓瀏覽器記住那些最不重要的賬號。

相對來說,操作系統的keychain一般有自動鎖定的功能,會更安全一些。但是仍無法完全避免上述問題。而且keychain只能記錄賬號和密碼,無法存儲更多的附加信息。所以這種工具也只應該存儲一些不重要的賬號。

最著名的在線密碼管理工具應該是Lastpass。關於它的安全性有很多種說法,不過我覺得但凡是敏感數據都不要存儲到線上,所以這種方式不予考慮。

我傾向於使用離線的密碼管理工具。1password據說很好用,但是太貴了,而且開源免費的keepass已經完全夠用了。我在Mac上用KeePassXC,在iOS中用MiniKeePass,私鑰文件離線存儲,然後數據庫文件用Dropbox同步就可以了。

此外,對於重要的賬號,如果支持兩步驗證,一定要開啓,然後用Authy管理即可。

最終的方案是:

  • 方法論:統一的複雜但有規律的前綴+根據賬號計算出來的後綴
  • 工具鏈:KeePass + Authy + Dropbox