如何評價一個密碼的質量?
阿恆
現代人是一種沒有密碼不能存活的生物,我們接觸的所有電腦系統,都要依靠密碼來鑑定訪客的身份,辦公室的大門、家裏保險箱的門鎖,可能都要靠密碼來啟動,甚至商號提供的會員證,也要憑密碼鑑定你的身份。密碼既然如此重要,專家們很久以前便提供了各式各樣的建議幫助我們建立安全可靠的密碼,例如混合使用大小寫的英文字母,甚至加入數字和標點符號,增加密碼的長度,避免使用跟個人資料有關的文字或數字,定期更改密碼,不要重複使用以前的密碼,使用 L33t 技術……曾經有人慨歎,若果完全依照專家的建議,創造出來的密碼必定是難以記憶,用戶們最終會把密碼寫在某個地方(電腦旁邊的小紙條或者錢包裏面),反而變成保安上的大漏洞。怎樣才是好的密碼?高質量的密碼應該具備甚麼條件?
好的密碼應該是以用戶為本,即是說即使沒有把密碼抄寫下來,相隔很久仍然能夠記得。每個人的生活經歷、體驗、背景、成長環境、興趣、願望、理想等都不相同,這些都是建構密碼的好材料,加點油、糖、醋、鹽,把材料炒一下便是一道好密碼,這樣的密碼用戶不難記憶,問題是這樣的密碼足夠複雜嗎?最好能夠有一種客觀的標準來評價密碼的複雜程度。
現時很多系統都設有密碼複雜程度,或者稱為密碼質量的指標,系統內所有密碼都必須達到指定的質量要求,例如 Domino、Microsoft Windows、Linux 等,以 Microsoft Windows 為例,啟動了「密碼複雜性需求」後,所有密碼必須最少有六個字符,其中包含大小寫英文字母、數字、標點符號、或 Unicode 字符,否則不被接納。PassPack 網站要求所有新帳號的密碼質量達到一定的水平才被接納,用戶一面輸入密碼,一個代表密碼複雜程度的數字會實時顯示,當數值達到 80 或以上時便會變成綠色,用戶可以隨時儲存這個密碼,PassPack 沒有詳細解析這個數字的計算方法,但估計字串越長、包含的字符種類越多這個數字便越大。
網上也有一些 JavaScript 寫成的密碼質量檢定程式 JavaScript 寫成的密碼質量檢定程式,根據密碼的長度、包含的字符類別、是否有連續遞增或遞減的字符串(abc、XYZ、321 等)、是否在鍵盤上相連的字符串(qwert、asdf 等)、是否有連續重複的字符等,來決定是否接納一個密碼。也有網站提供密碼質量評價服務,輸入字串後系統會提供詳盡的分析報告,然後給予一個評分,表示該字串作為密碼的優良程度。網上也有很多單獨運行的密碼質量評價程式免費下載。
IBM 有一篇技術論文討論 Domino 的密碼質量計算方法,Domino 會為每一個密碼計算一個質量數值,系統管理員可以設定新密碼的最低質量要求,質量的評價方法首先根據密碼的長度得到一個基本數值,然後根據密碼的複雜程度把這個數值倍大,例如包含大小寫英文字母、數字、或標點符號其中一項會把數值倍大 25%,最多不超過 50%,但是第一個英文字母為大寫與及由數字結束的密碼均沒有獎勵,重複的字符或者包含字典中的字則會被扣分。
綜觀不同的密碼質量評價方法,雖然不盡相同,但是原則大同小異。透過要求特定的密碼質量,用戶便有了客觀的指標來判斷何謂好的密碼,不用接受由機器隨機產生的古靈精怪字串,或者被迫在 8 個字符的限制內創造一些難記的字串。期望將來所有系統都有類似 PassPack 的設計,由用戶自行設定足夠複雜但容易記得的密碼。