我個人習慣為每一個網站或服務設定一組獨一無二的密碼,這表示每一個密碼看起來都是隨機而互不相干。以現代的資訊量,要把這種密碼全部記在腦海中完全不可能,就連要寫在紙上都是很困難的事。因此我是採用類似之前介紹過的 Salty.PW 服務來製造+管理密碼,只不過,我不假它人之手,我也盡量不手動,我主要是用「腦動」的方法生成+管理密碼。
邏輯大概是這樣。把密碼的組成分成兩到三個部分,例如「句首」與「句尾」,或「句首」、「句中」與「句尾」(把密碼當做一個句子)。「句首」或「句中」的部分可以依照網站或服務的聯想性來設計,稱它們做「關鍵字」好了,例如 Google 的帳號關鍵字就用 google。「句尾」則使用一組夭壽長的無意義英數字串來代替,稱它做「共同碼」好了,例如使用自己的學號或準考證號之類的。「共同碼」千萬別用手機、生日、或身份證字號這種個資上就有的東西。以我來說,我就用過 N 年前考大學的準考證號,也用過某個人生階段中鄰居家的電話,我也用過音樂的和弦組這種莫名奇妙的英文字串。總之,「共同碼」要是一組自己記得起來,但別人幾乎無從聯想的字串。

以最簡單的網站名稱加上無意義數字串這種「句首+句尾」的組合,例如「google55669487」,密碼長度通常都可以到 12 位以上。這種密碼一般來說要花個好幾年才能暴力破解。一般駭客早就對你沒興趣了。
BUT!上面這種「腦動」式的密碼生成法,雖然可以維持密碼的易記性與複雜度,不過一旦碰上用戶資料沒加密的網站或服務,「共同碼」只要被拿到,一下子就能透過觀察密碼的組成來進行其它網站的破解。也就是說,即使可以相信自己,別人仍可能是豬隊友。
多找幾組數字串來做為「共同碼」恐怕是個不切實際的方式,可能搞到連生辰八字都拿出來用,最後卻連一個網站也登不進去。「共同碼」的設計關鍵是「易記」+「除了你沒有人知道」。因此對付上面那種情況,只能針對「關鍵字」來下手了。
對於電腦或人腦來說,「關鍵字」是字典攻擊最好的目標。例如某人用了「Google」當做 gmail 的密碼組成,駭客大概就會去猜某人的 iCloud 密碼組成可能也包含像「Apple」或「apple」或「APPLE」這些字串。這個時候雜湊演算的概念就可以拿出來用:生成一個很難反向推估字串,換句話說,要發展屬於自己的「密碼學」。
打個比方。我是無蝦米的使用者。Google 的帳號我會用「Wotiv」來當字首,Facebook 我則用「Uoaedo」。這只是把 Google 的中文服務名「谷歌」透過無蝦米拆碼而成,Facebook 則用「臉書」來拆碼。剩下的就是把很多網站都會要求的密碼裡要有大寫套第在一個字母上。
之前我曾經做更複雜的事,像是把英文母音全部進行變換:a 變 @、e 變 1、i 變 !、o 變 0、u 變 7。上面的 Google 就會變成「W0t!v」,Facebook 就會變成「U0@1d0」。如果你可以接受每次輸入密碼都像在做智力測驗的話,你可以試看看。不然光是無蝦米這一層「密碼學」其實就夠強悍了。
不過有些網站或服務沒有對應的或大家慣稱的中文名,例如 Tumblr 或 Pinterest。這個時候就只能自己取了,像是「湯不熱」與「頻吐屎特」,無蝦米拆碼後變成「Wepbayf」與「Zstoyecmnsya」,不過這種自己取的諧音很容易忘記,這時候就很仰賴手寫的或電子的筆記了。這種筆記完全不用擔心被推敲出什麼訊息,你只是打個「Tumblr = 湯不熱」,這對其它人來說毫無意義。
透過這種「句首」+「句尾」的組合,就可以不假他人之手完成算是強健的密碼生成+管理系統,同時又保有易記性。你可以生成出像這種密碼「Pnsownjbadivoix55669487」,或是這種密碼「5566nkaneiuowqgztqtq8787」。這邊再提醒一次,密碼的內容要盡量排除「字典」字,長度建議超過 12 位,這種密碼一般不花個一年半載是無法暴力破解的。「共同字」的部分也可以依情況做更換。
因為使用密碼的機會實在太多了,多到即使有上述的密碼管理的手段也無法應付了,所以我現在大多數的帳號密碼都是交由專用的軟體來管理了(我用 LastPass)。我覺得比較重要的或是財務相關的,我才會自己透過上面那一套來處理(你要反過來也沒差,自己開心就好)。
密碼管理軟體的好處是,可以產生一組幾乎不可能被破解的密碼,像是「lA623#C&z4$lqH4Kr6Dp」。而且你不需要去記它,記憶的工作讓密碼管理軟體來就好。另一個好處就是可以更專注的管理自己需要去維護的那些密碼。
以上簡單分享自己在密碼管理方面的見解,也歡迎大家心得分享。
補充:測試自己的密碼要多久才能破解:How Secure Is My Password?
發表迴響