原文:password rules are bull****在很多很多關於密碼的糟糕事情中,你知道最扯的是什麼嗎?密碼規則!
2023年8月11日,我曾在twitter上說過:「在我的有生之年,如果我們沒有幫使用者解決密碼問題,我死後變成鬼,也要纏著你!」
今日我再提讓這句誓言,想讓它成為網際網路上的永久記錄。我不知道是否有來世,但我很快就會知道的,我打算如地獄惡魔般出來遊蕩……
這世界充斥著糟糕透頂的密碼規則(例如:唉,不提也罷!你越是使用真正隨機的密碼產生工具(想必我們這樣的極客都在用吧),你越有可能在這種機制下承受過巨大的痛苦,而且這種痛苦日復一日地還在繼續。
在xkcd.com上看過這樣一幅關於密碼的漫畫嗎?
經過20年的努力,我們已經把所有人成功馴化成:
使用人類難以記憶而電腦容易猜到的密碼。
我們當然可以對「correct horse battery staple」這樣的密碼策略是否有效提出質疑,不過,這裡的點主要還是說跟密碼長度有關係。
講真,密碼長度確實重要!我竟然在一篇博文裡爆粗說道,你的密碼太tm短了!如今這個時代,鑑於雲計算的發展水平和基於gpu的雜湊運算能力,任何不超過8個字元的密碼跟不設密碼真的差別不大,非常危險!
那麼,我們或許有了乙個規則,那就是:密碼不能太短。長密碼比短密碼可能會安全得多。是這樣嗎?
下面這個4字元的密碼怎麼樣?
下面這個8字元的密碼又怎麼樣?
或者,這種7個字元的密碼呢——阿拉伯文、中文、泰文、韓文、克林貢文、wingdings字型、表情符各取乙個字元?
如果你把上面那4個unicode的表情符,貼上到你最常用的登入框裡——現在就去試一試——你可能會被驚到!你會發現,其實不止4個字元哦……
親,我們的老朋友unicode又來搗蛋了!瞧瞧這個:
事實證明,即使像「密碼必須要有合理的長度」這樣的簡單規則,也未必就這麼簡單。尤其是,如果我們不像腦子裡只有ascii字元的老美那樣思考問題。
話說回來,那些看起來不錯的長密碼呢?它們就一定安全嗎?
aaaaaaaaaaaaaaaaaaa
0123456789012345689
passwordpassword
usernamepassword
當然不是!你最近接觸過使用者嗎?
他們孜孜不倦地摧殘著我開發的軟體,簡直無孔不入。是的,沒錯,我知道你們極客非常清楚「熵」的概念(注:熵的本質是乙個系統「內在的混亂程度」)。但是,在乙個unicode和表情符的世界裡,把你們對熵的熱愛表達成下述稀奇古怪、糟糕透頂的密碼規則,真是憑空想象出來的乙個巨大錯誤!
我同時也主張,拿使用者的密碼跟10萬個最常用的密碼進行比對。如果你看一看2023年被**的1000萬個密碼,你會發現用得最多的前25個密碼是:
123456
123456789
qwerty
12345678
111111
1234567890
1234567
password
123123
987654321
qwertyuiop
mynoob
123321
666666
18atcskd2w
7777777
1q2w3e4r
654321
555555
3rjs1la7qe
google
1q2w3e4r5t
123qwe
zxcvbnm
1q2w3e
縱然這份資料洩漏了一些ascii中心主義。我想,數字在任何文化裡都是相同的,但我難以相信普通的中國人會選擇「password」、「qwertyuiop」或「mynoob」作為密碼。因此,上面這份清單必然還會因地區而異。
(乙個有趣的想法是,在長密碼裡去檢索匹配常用的較短密碼,不過,我覺得這會產生太多的誤報。)
如果你再次檢視這份資料,不難得出乙個支援密碼長度的結論。請注意,在最常用的25個密碼中,只有5個超過10字元。因此,如果我們要求密碼長度至少是10,就已經把上黑榜的機率降低了80%。我最早是在為discourse.org做調研時意識到這一點的,那時我收集了數百萬個洩漏出來的密碼,然後把這份清單過濾到只剩下滿足我們新的最低要求(10個字元或更長)的那些密碼,真的是寥寥無幾了!
在此,我想對我們的程式設計師小夥伴們提幾點常識建議:
1. 密碼規則就是扯蛋
2. 密碼要支援unicode,並強制要求最小長度
這條規則,最起碼很容易記,也容易理解和實施。至尊規則喚眾戒,眾戒歸一黑暗中。
3. 與常用密碼進行校對
前面我已經提到過,所謂「常用」,跟你的使用者和語言有關。但是,如果你讓他們從最常用的1萬、10萬甚至100萬個密碼中挑選自己的密碼,那就等於在坑他們。毋庸置疑,黑客在攻擊行動中會利用這些常用密碼。縱然你對密碼的重試頻次有積極的限制措施,只需用1000個最常用的密碼來碰撞,你又能扛得了多久呢——結果非常令人震驚!
你很幸運!成百萬個遭**的真實密碼在那裡等著你去篩選。做這種資料分析還是有點意思的,因為這些不是某些無聊的程式設計師憑空捏造出來的密碼規則,而是被使用者真正使用過的真實密碼。
研究一下吧。收集一下資料。別讓你的使用者把自己坑了。
4. 檢查基本的熵
別異想天開!關於熵的衡量,你內心深處覺得對就行。但是請記住,當使用者無法通過規則檢查時,你必須能向他們解釋清楚。
5. 拒絕特殊密碼
我感到羞愧難當,但我還是得承認:我們在早期開發discourse.org登入模組的時候,忽視了必須要阻止的兩種常見情況:
與此類似,你可能也應該阻止其他的特殊情況,比如:
簡而言之,試著跳出密碼輸入框去思考,就像使用者那樣。
扯蛋的密碼規則
在很多很多關於密碼的糟糕事情中,你知道最扯的是什麼嗎?密碼規則!2015年8月11日,我曾在twitter上說過 在我的有生之年,如果我們沒有幫使用者解決密碼問題,我死後變成鬼,也要纏著你!今日我再提讓這句誓言,想讓它成為網際網路上的永久記錄。我不知道是否有來世,但我很快就會知道的,我打算如地獄惡魔...
oracle的密碼規則
oracle的密碼規則 在為sys,system,dbsnmp等使用者設定密碼的時候,注意oracle的密碼限制 1.必須是字母或者數字 2.長度在4 30之間 3.不能與使用者名稱相同 4.不能是oracle的保留字 oracle中的常用埠 5620 ultrasearch 超文字檢索 5620 ...
oracle的密碼規則
oracle的密碼規則 在為sys,system,dbsnmp等使用者設定密碼的時候,注意oracle的密碼限制 1.必須是字母或者數字 2.長度在4 30之間 3.不能與使用者名稱相同 4.不能是oracle的保留字 oracle中的常用埠 5620 ultrasearch 超文字檢索 5620 ...