扯蛋的密碼規則

2021-08-19 12:55:22 字數 3545 閱讀 8462

原文: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 ...