來吧, 駭客! 這下換我玩死你!
身處於網路時代, 到哪裡都需要使用帳號與密碼。我曾經小小估算了一下, 我曾經註冊過的網站至少有一百多個, 經常使用的也有將近五十個。這麼多的網站, 你要如何記得住密碼? 別說五十個了; 只要五個, 如果你不是每天都需要登入的話, 恐怕就會經常搞混。
其實我們不只是密碼記不住, 帳號也經常記不住。不過, 現代的網站和瀏覽器都允許我們把帳號記起來, 只要你不是把瀏覽器中個人資料清除掉, 我們通常比較不擔心記不記得自己帳號的問題。
至於密碼, 問題就比較麻煩。首先, 每個網站的密碼規則有很大的不同, 有些網站的規定很寬鬆, 像 1234 這種懶人密碼都不限制; 有些則很龜毛, 要求你的密碼非要有八個字元以上, 其中必須夾雜大小寫英文、數字, 還有標點符號。其次, 有些網站則會硬性規定你的密碼必須每三十天更改一次, 而且新密碼不能跟前幾次的舊密碼重複。坦白說, 我自己都曾經被搞得從此拒絕上那個網站。
不過, 話說回來, 你的密碼設計得愈複雜、愈難令人猜中, 確實有助於提高安全性。所以就「取密碼」這件事來講, 如果我們只拿安全性和方便性來比的話, 這兩者還真難取捨。
密碼愈複雜愈好
我曾在「從 LinkedIn 密碼外洩事件看網站的保密策略」一文中分析過駭客破解密碼的手法。如果你完整地看過這一篇的話, 我相信你一定很了解取一個複雜密碼的重要性。很可惜的, 密碼愈複雜, 人腦就愈記不起來; 如果你還遇上那個硬性規定你定期更換密碼, 而且新密碼不得與舊密碼重複的那種網站, 那麼能不崩潰的人恐怕不多。當然, 有法就有破; 我想大多數人會採取一種偷懶的做法, 就是把每個註冊過的網站、帳號和密碼都寫在一個文字檔裡面, 如此就不會忘記。我想恐怕有八、九成的網路用戶都是這麼做的。但是這麼做有一個相當大的風險, 就是一旦你這個檔案被有心人拷貝走 (而且你不知道), 你的所有秘密就通通拱手讓人了。如此一來, 只要一個檔案被偷, 你的全部機密通通隨之而去! 這樣的風險會不會太大了一點?
如果我教你一個方法, 讓你可以大大方方的把你的密碼照樣寫在一個文字檔裡面, 卻不用煩惱是否被人家偷走, 甚至如果內容被別人不小心看到也不用擔心的話, 你覺得如何?
不怕被偷走的密碼
如果是我的話, 我不會把我的密碼表放在文字檔裡面, 而是至少放在 Word 檔案裡, 而且使用密碼保護。如果被偷走, 那麼那個小偷必須先解決 Word 密碼的問題 (相信我, 光是這一關就可以卡死大部份初級駭客, 除非你又使用了懶人密碼)。等到他解決了這個問題, 他還會發現他辛辛苦苦破解的內容, 通通是垃圾!同樣的內容, 對他而言是垃圾, 對我卻是資訊。怎麼辦到的?
訣竅在於, 我的密碼看起來是明碼, 實際上是暗碼; 只有我知道如何解那個暗碼。
例如: 我的 FB 密碼在我的「密碼表」裡看起來寫的是 1234, 但是他打 1234 卻無法登入。道理很簡單, 因為我的密碼並不是 1234。
那麼, 為什麼我的密碼不是 1234, 我卻寫做 1234 呢? 難道我是在騙我自己嗎?
當然不是! 事實上, 我的真正的密碼是 "_1Yc2k?(3ZU4i28!"。我在自己腦袋裡有一本字典, 其中
- 1 = _1Yc
- 2 = 2k?
- 3 = (3ZU
- 4 = 4i28!
或許你想問, 你怎麼可能記得住這張表? 如果忘記了, 不就全部完蛋?
我必須這麼說: 你不可以忘記這張表! 如果你忘記這張表, 你真的會完蛋!
但是話說回來, 我並沒有要求你記住我寫的那張對照表。你可以自己訂你的字典, 使用你記得住的邏輯。例如, 你可以這樣訂:
- 1 = 1Qa!
- 2 = 2Ws@
- 3 = 3Ed#
- 4 = 4Rf$
不過, 很可惜的, 我揭露這個邏輯之後, 你就不能用了! 因為駭客也有可能看到這篇文章, 然後把這個邏輯學走; 如果你使用這個邏輯, 風險就大了。所以, 以下我就不再舉其它例子了。
不管如何, 你應該自訂你的邏輯, 而且愈不可能有人猜得出來愈好。事實上, 如果你的這張表是根本沒有邏輯的, 那才是最好的。不要怕記不住, 人的記性沒有你想像的那麼糟。
除此之外, 你還可以自己再把你的編碼邏輯加上混亂因子 (我稱之為「干擾子」)。例如你可以把密碼寫作 "-1234", 表示它是倒著走的, 實際上這個密碼是 4321。或者像 "123-24", 表示它實際上是 3124 (3-2 表示 3 往前退兩位); 如此, 駭客可能會以為你想表示 99 (123 減 24), 這麼一來, 駭客除了得去猜測你的字典之外, 還得去猜測你的干擾子邏輯。
老話一句, 你必須自己去制訂你自己的干擾子邏輯, 我已經揭示的做法千萬不能拿去用。而且我也不能再示範更多的邏輯。每個人都可以有他自己各種千奇百怪的邏輯跟做法; 如果每個人都一樣, 那麼你也防不了駭客了。
有 IoC 的味道
寫程式的人都知道什麼是 IoC (Inversion of Control, 控制反轉); 當然我在這裡示範的取密碼技巧跟 IoC 一點關係也沒有, 但是我要取 IoC 在字面上的意思, 就是藉由簡單的編碼技巧, 我們和駭客之間敵暗我明的形勢被一舉反轉了! 事實上, 我們花費的功夫一點都不大, 但是駭客必須花的功夫卻是暴增了。而且, 當駭客輕鬆地取得你的「密碼表」(而且看起來像是明文) 時, 一定會很興奮的拿去測試, 卻沒想到掉到一個難以自拔的泥淖裡面。這時候到底是誰在駭誰都不知道了!
如果你再狠一點, 你可以做五百個「密碼表」, 當然, 其中只有一個是真的 (呃... 也可以通通不是真的, 其實) -- 不過駭客並不知道。來吧, 駭客! 這下換我玩死你!
同時, 一旦你背好少數幾個密碼項目 (我建議你準備十個), 如果每個項目平均有四個字元的話, 那麼光是 1234 就可以表示 16 個字元的密碼。相信我, 16 個隨機字元的密碼就足以讓絕大多數駭客止步了。而且, 我建議你不妨把這個位數提高到 20 個字元以上。從此以後, 我不相信還有任何駭客會對你有興趣了 -- 除非你是美國總統; 但你並不是。
你的密碼要花多久才被破解?
Intel 開發了一個網站, 可以計算出你的密碼要花多久才會被使用暴力法予以破解。你可以去測試看看你的密碼需要多久才會被破解。如果小於兩個禮拜, 那麼你的密碼就是危險的。相對的, 如果使用我在上面教你的技巧, 光是採用 1234 組合出來的 16 字元密碼, 它就需要這麼多的時間, 才會被破解 :
如果你進一步採用 12345 組合出來的 20 字元密碼, 它需要的破解時間, 更會變成天文數字 :
所以, 快去修改你的密碼吧!