密碼強度查看源代码讨论查看历史
密码强度,指一个密码对抗猜测或是暴力破解[1] 的有效程度。一般来说,指一个未授权的访问者得到正确密码的平均尝试次数。密码的强度和其长度、复杂度及不可预测度有关。强密码可以降低安全漏洞的整体风险,但并不能降低采取其他安全措施的需要。
攻击者提交猜测密码的速率是衡量一个系统安全性的重要因素。有的系统在多次尝试失败后会暂停登入一段时间,在没有其他安全缺陷时,这种系统可以用相对简单的密码保护。但是系统必须以某种形式儲存用户密码,当这些数据被竊取时,就有極大的危险。
密码验证
使用密码进行身份认证的系统都一定有一套验证输入密码的机制,如果这些密码只是简单地以明文儲存在系统上,一个拥有足够权限的攻击者就可以获取在系统上儲存的所有用户名和密码,使得整个系统向攻击者敞开,甚至会危及其他使用同样或相似的密码的系统。一个减少危险的办法就是用密码散列函数加密密码。诸如SHA的函数是很难由散列值算出原文的,一定程度上防范了攻击。然而攻击者可以用碰撞的方法猜测明文,如今的密码破解程序也可以通过暴力破解的方式从散列值找出明文密码。
日益进步的计算机科学也加快了测试密码的速度。2007年8月,Elcomsoft|ElcomSoft公司发明了使用普通的繪圖卡反向计算密码的技术并开始使用,随后在美国申请了专利。2010年,喬治亞技術研究所|Georgia Tech Research Institute使用GPGPU使得破解密码的速度提升。2011年,商业产品也宣称他们可以在一台普通的桌上型電腦上使用高階的GPU来每秒测试高达2,800,000,000个密码,这样的设备可以在一天之内破解一个由10个字母组成的密码。並且可以并行在多台计算机上进行处理来提高速度。
改变常见散列的算法可以相对地增加一些计算的时间,但并未广泛采用。
弱密碼
弱密码是易于猜测的密码,主要有以下几种:
- 顺序或重复的字符:“12345678”、“111111”、“abcdefg”、“asdf”、“qwer”键盘上的相邻字母。
- 使用数字或符号的仅外观类似替换,例如使用数字“1”、“0”替换英文字母“i”、“O”,字符“@”替换字母“a”等。
- 登录名的一部分:密码为登录名的一部分或完全和登录名相同。
- 常用的单词:如自己和熟人的名字及其缩写,常用的单词及其缩写、宠物的名字等。
- 常用数字:比如自己或熟人的生日、证件编号等,以及这些数字与名字、称号等字母的简单组合。
下面是一些常見的弱密碼:
- admin —— 太容易猜出
- 123 —— 同上
- abcde —— 同上
- abc123 —— 同上
- 123456 —— 由于文化因素极其常用
- 1234 —— 同上
- 888888 —— 同上
- 1234567890 —— 同上
- susan —— 常見人名
- DonaldJTrump —— 高知名度人物
- monkey —— 常见动物名且正好六位
- password —— 經常被使用,極易猜出
- p@$$\/\/0rd —— 簡單的字母替換,易被軟件破譯
- rover —— 寵物的常用名稱,也是一個單詞
- 12/3/75 —— 日期
- nbusr123 —— 可能是用戶名,如果是這樣的話很容易被猜出
- asdf —— 常用鍵盤的鍵排列
- qwerty —— 常用鍵盤的鍵排列
- aaaaa —— 重複的字母,極易被破解
- Taiwan —— 地名
- administrator ——太容易猜出
以上僅列舉了極少部分弱密碼。
一家美国公司SplashData曾经总结出2011年最弱的25个密码,部分已列於上方。而像let me in这样的密码由于属于常见词组,很容易被破译。據統計,3.8%的密碼是字典裡的單詞,12%的密碼是單詞加一個數字,其中2/3的機會密碼是數字1。
很多用戶不更換預設密碼,而大部分計算機系統的預設密碼可以在網路上找到,極易被破解。如果用戶使用個人資訊(例如學號、朋友的名字、熟人的生日、電話號碼或駕駛執照號碼等)作為密碼,那麼密碼便會很容易被破解,因為如今很多個人資訊都可以在網路上找到。
太短的密碼,雖然容易輸入,但是也很容易被攻破。
强密码
一个强密码通常长度足够长,排列随机,这样就需要花很多时间才能够破解。下面是强密码的一些例子(由于以下实例已经公開,所以已经不具备安全性,只作为说明例子):
- t3MEIfreryeT45410A ——不是字典的单词,既有数字也有字母
- w2M1gD1cxJhs5UH4pQh1EgjOU9yWYRkk ——同上
- Convert_100£ to Euros! ——足够长,并且有扩展符号增加强度
- *ot$fet÷×’Fr54⅛9&%u ——含键盘上没有的字符
- 9fad37a6aab5912dfa273521d11e0175fa0e8c95 ——隨機字串
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbccdeertttteferwrwerewrwererewreew ——很长的字串几乎不可能在短時間之內被破解
- hellomicrosoftwikiwikipediaandadminadmintestactioneditsection ——同上
- RBDeT9hqRfS9gw9bEXmRhBrkkgCs2NMfpzWfQXfN3MPZW25wSsHWEsbexVpYtsWs ——同上
- ru0 ej03m06vm03rm3vu04u3d9 g3fu/32u03h3w.6qul4 ——同上,對於兩者之間使用不同輸入法的人極難以破解
- correcthorsebatterystaple——夠長且無意義的句子或單詞組合
上面列出的强密码的例子的共同特点是相对较长,使用大小写字母、数字和符号的组合。密码越长,使用的符号种类越多,就越难破解。值得注意的是,有些系统不支援例如:「#」、「@」和「!」等等符號作为密码中的字符,因为这些字元可能在有些键盘很难找到。在这种情况下,增加其它的数字或字母可以达到同样的安全效果。
一个10位长的随机密码,比如「BpR#e!ai@$」,雖然強度遠弱於上面列出的密码,但由于常用键一共为95个,因此有<math>95^{10}</math>种组合,是不可能在短时间内通过全部列举来破译的。
目前的密碼建議為:即使沒有使用大小寫字母或加入其他符號,只要密碼夠長,使用一些無意義但便於記憶的句子或單詞組合也足夠安全。例如上例的「correcthorsebatterystaple」就是由四個英文單詞組成。
國家標準技術研究所改正建議
2017年6月,國家標準技術研究所(NIST)發佈新的《800-63》指引第三版,改正已沿用超過十年、受各大政府機構、銀行、業界採用的舊建議,不再強調使用人腦難以記憶的特別符號、數字的無意義組合,而且亦不再建議密碼需每九十日汰換,因為經研究證明此項指引並沒有對系統安全帶來有益的效果。NIST文件的舊版原作者伯爾(Bill Burr)並在《華爾街日報》訪問中公開道歉,稱當時他並無得到可靠的數據作嚴謹研究,只依靠來自八十年代、不合時宜的舊文件作為參考,而他的建議亦沒有考慮到一般人的生活習慣及思考模式。負責撰寫新版指引的NIST顧問格拉西(Paul Grassi)指出,舊的要求不利使用,對抵擋駭客攻擊的作用不大;如果用戶能夠在腦海中構想出一幅其他人無法想像的圖畫,以此作為密碼便是最好的,一句夠長的完整句子,會優於較短的字母、數字及符號混合密碼。華爾街日報引用廣泛流傳的xkcd漫畫,指出只要密碼夠長,拼合幾個看似無意義、但便於該用戶記憶的字詞作為密碼,更能有效抵擋駭客攻擊,暴力破解會需要更久的時間。
保护用户密码
通常,计算机用户被建议“不要在任何地方因任何原因写下密码”或“不要在不同的帐号使用同一个密码”。实际上,一个计算机用户通常有十几个受密码保护的帐号,并使用同一个密码。而那些试图使用不同密码的用户往往由于密码太多,而记不清哪个帐户和哪个密码相对应。2005年的一次安全会议上,来自微软的一个专家提出:“我认为密码策略应改为你可以写下你的密码。我有68个不同的密码,如果我不允许将他们写下来,我将怎么办?我不得不使用同样的密码”。比较好且实际的建议是在一个低安全性的帐号(如bbs)使用简单的密码,在高安全性的程序(例如:網路銀行)使用强密码。
一旦密码被写下来,用户不能将它放在一些明显的地方,如通信录,抽屉等。最糟糕可能也是最常见的情况是密码被写在一张便条纸上,放在计算机附近。比较安全的做法是放在保險箱裡。
亦可使用密碼管理器管理密碼。
创建密码
密码可以被自動(使用隨機方式)或人为创建出来,后一种更为常见。暴力破解隨機密码的强度可以精确计算,而计算人类产生的密码强度是比较难的。一般而言,人在创建一个新账户时都被要求输入密码。因为一般人創建密碼時都會有某種固定模式,粗略地估计这种密码的强度是可能的,而掌握这些模式就可以方便攻击者進行破解。
另外,密码破解器经常从常用密码表中选取密码,这些密码表包含各种人类语言的词典、许多被竊取数据库中的商业或社交账户的明文或散列密码,与其他常见的密码。因此,所有在表上的或与其相似的密码都被认为是弱密码。数十年来,对多用户计算机系统的密码调查表明,40%甚至更多密碼使用计算机程序就可以破解出来|time=2019-10-31T18:40:01+00:00,并且当某个账户已被侵入时更加容易。