密碼,作為驗證使用者的身份基本手段,除了少部分的內容型網站沒有會員功能,大部分的個人化網路服務都跟密碼息息相關。而密碼設定的規則,也算是業主常常喜歡發揮的地方,值得開一篇聊聊。
美國國家標準與技術研究院(NIST)的數位身分指南,早已有針對密碼強度做了很多版本的迭代,不過坊間的很多江湖傳言,很多還是停留在早期版本。
以下是 2023 年 10 月的版本所截取出來的建議項目,加上一些本人的見解
建議密碼至少為 8 位元長度;如果是隨機生成的,則至少 6 位元 (允許只有數字)
密碼長度是密碼強度構成的主要因素,太短的密碼容易遭受暴力攻擊以及字典攻擊,尤其 8 位元以下,用戶很容易直接使用特定的真實字彙,所以應該盡可能鼓勵用戶設定長密碼。但也不應規定過長,若限定用戶至少需要設定 12 碼以上(或更長),用戶有很高的機會在個人常用的密碼後面加上 123 ,例如:
password1234
如此一來,其實完全沒有達到長密碼的用意,反而擾民了。
另外,雖然更長的密碼能夠增加密碼強度,但基於合理的開發成本,NIST 建議可把長度上限定為 64 位元。
不應強制使用不同類型字符的組合,例如大寫字母、小寫字母、數字和特殊字符。
當然,你還是得允許用戶設定特殊字符作為密碼。傳統策略經常要求混合不同類型的字符,以增加密碼的隨機性和安全性。但是過於複雜的密碼要求,會鼓勵使用者選擇易於記憶的密碼,反而降低安全性。然後
P@55w0rd
就成為世界上最受歡迎的密碼之一
只有在密碼被懷疑泄露或帳戶存在安全風險時,才建議更換密碼。
定期更改密碼可能導致用戶選擇較弱的密碼,並增加密碼遺忘的風險。傳統策略經常要求定期更換密碼,例如每90天或180天更換一次,再加上長度、複雜度的規則,於是你就會設定這樣的密碼
password1
password2
password3
或者乾脆把密碼用便條紙貼在螢幕上
應限制並減少未經授權的存取嘗試。
為了減少自動化攻擊的風險,應限制密碼輸入的失敗嘗試次數。當單位時間內達到設定的閾值後,應暫時鎖定帳號。鎖定時間可以隨著失敗次數而增加,或者強制用戶變更密碼才能解鎖帳戶 (強制要求變更,比較常出現在金融機構)。
建議提供「顯示密碼」功能。
當系統使用複雜或長密碼的規則,使用情境允許的情況下,應提供用戶「顯示密碼」的功能,避免用戶因輸入錯誤而多次失敗的嘗試,從而提升整體的用戶體驗。
建議在密碼欄位允許「貼上」功能。
早期曾經有過禁止「貼上」功能的建議,猜測是觀察到有人會把密碼寫在記事本 (txt editor) 再貼過去,屬於前面便利貼記密碼的變形,所以建議禁掉「貼上」功能。
隨著密碼管理器的出現,它可以快速產生隨機的複雜長密碼,同時可對不同的網站系統的密碼進行管理,用戶可透過密碼管理器,很容易地建立、記憶個別的長密碼,不用仰賴人腦的記憶。而密碼管理器的運作,會使用到「貼上」的功能。
鼓勵使用密碼管理器,並允許「貼上」功能來輸入密碼,這有助於用戶選擇更強的密碼,並減少密碼遺忘的風險。
對密碼進行黑名單或字典檔的檢查,避免用戶使用已知的常用或被泄露的密碼。
這是一個比較進階的防護方式,需要在系統中維護一份字典檔,用戶在設定密碼時,就檢查是否是高風險的組合,並提出警示或禁止。當然,這需要定期維護字典檔及付出一些運算資源。也可以直接整合外洩密碼查詢的公用服務,如 Have I Been Pwned(HIBP)。
不過要注意的是,檢查密碼這個行為,有可能引起用戶對於系統窺探密碼的疑慮。
使用多個獨立的認證因素來增強安全性。
除了使用密碼外,加入生物識別、實體或虛擬擁有物 (USB Key / 手機) 等複合認證因素,會顯著增加了非授權存取的難度。但相對的,它也是開發成本與維持成本相對高的認證方式,對用戶同樣也會帶來顯著的不便。通常用在企業內部等資訊安全要求較高的情境。
近來有些業主會要求,使用生物識別作為主要登入,確實幾個科技大廠有在提出 No-password 的概念。基於現有多數系統的架構與容錯性的考量,仍會建議用密碼作為標準認證方式,生物識別作為輔助登入,減少密碼的重複輸入。
有趣的是,所謂的 “傳統策略” ,其實大多是來自於 2003 年的 “NIST Special Publication 800-63. Appendix A.”。是的,它們也是來自於 NIST 的指南的早期版本。
但前幾年 (2017年),當初起草 2003年的 NIST 指南的成員 Bill Burr,發表了一個公開道歉。原因是當初訂的規則,現在回頭很看起來不僅無效且造成很多人的困擾。
當時的編撰的背景,很多是基於理論上的計算,例如:「隨機組合的長密碼 "correcthorsebatterystaple",如果每秒猜1000次,電腦要費時550年才能破解。」。 Bill 及當時編撰的成員沒想到的是電腦系統發展的速度,和人的惰性。導致後來不少跟隨這份指南的系統,對密碼的設置要求都讓人覺得,比起防止入侵更像要防止自己登入。現代駭客攻擊的手法,也更多著重在社交工程 (白話:用騙的) ,而不是直接用破解的方式處理。這麼一來,不論多複雜的密碼規則,都完全沒有意義。
當然,也可能是 Bill 的策略確實太安全了,駭客們用騙的比較有效率。