扯蛋的密碼規則

2022-06-28 18:30:15 字數 3185 閱讀 8110

在很多很多關於密碼的糟糕事情中,你知道最扯的是什麼嗎?密碼規則!

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

usernamepassword12

34當然不是!你最近接觸過使用者嗎?

他們孜孜不倦地摧殘著我開發的軟體,簡直無孔不入。是的,沒錯,我知道你們極客非常清楚「熵」的概念(注:熵的本質是乙個系統「內在的混亂程度」)。但是,在乙個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

1q2w3e12

3456

78910

1112

1314

1516

1718

1920

2122

2324

25縱然這份資料洩漏了一些ascii中心主義。我想,數字在任何文化裡都是相同的,但我難以相信普通的中國人會選擇「password」、「qwertyuiop」或「mynoob」作為密碼。因此,上面這份清單必然還會因地區而異。

(乙個有趣的想法是,在長密碼裡去檢索匹配常用的較短密碼,不過,我覺得這會產生太多的誤報。)

如果你再次檢視這份資料,不難得出乙個支援密碼長度的結論。請注意,在最常用的25個密碼中,只有5個超過10字元。因此,如果我們要求密碼長度至少是10,就已經把上黑榜的機率降低了80%。我最早是在為discourse.org做調研時意識到這一點的,那時我收集了數百萬個洩漏出來的密碼,然後把這份清單過濾到只剩下滿足我們新的最低要求(10個字元或更長)的那些密碼,真的是寥寥無幾了!

在此,我想對我們的程式設計師小夥伴們提幾點常識建議:

1. 密碼規則就是扯蛋

它們沒卵用!

它們嚴厲懲罰了你的理想使用者——使用真正的隨機密碼生成器的那些人。你猜啥,那些隨機密碼可能不包含數字或符號。我剛剛翻了一下數學教科書,確認了,這是有可能的。我很肯定!

它們給普通使用者帶來挫敗感。然後,他們就暗生排斥心理,耍起了小聰明,結果使得他們的密碼安全性變差。

它們還常常錯誤百出,所選的規則非常不完整,甚至很愚蠢。

不開玩笑,看在上帝的份上,趁早拋棄這種沒心沒肺、毫無道理的密碼規則吧。如果你不信我的話,看看人家的這份建議。人家也說了,「別用組合規則」。不過,我確實發現乙個問題——應該說是,「別用扯蛋的組合規則」。

2. 密碼要支援unicode,並強制要求最小長度

這條規則,最起碼很容易記,也容易理解和實施。至尊規則喚眾戒,眾戒歸一黑暗中。

前面我已經提到過,所謂「常用」,跟你的使用者和語言有關。但是,如果你讓他們從最常用的1萬、10萬甚至100萬個密碼中挑選自己的密碼,那就等於在坑他們。毋庸置疑,黑客在攻擊行動中會利用這些常用密碼。縱然你對密碼的重試頻次有積極的限制措施,只需用1000個最常用的密碼來碰撞,你又能扛得了多久呢——結果非常令人震驚!

1.4%的人使用了最常用的10個密碼

4.4%的人使用了最常用的100個密碼

9.7%的人使用了最常用的500個密碼

13.2%的人使用了最常用的1000個密碼

30%的人使用了最常用的10000個密碼

你很幸運!成百萬個遭**的真實密碼在那裡等著你去篩選。做這種資料分析還是有點意思的,因為這些不是某些無聊的程式設計師憑空捏造出來的密碼規則,而是被使用者真正使用過的真實密碼。

研究一下吧。收集一下資料。別讓你的使用者把自己坑了。

4. 檢查基本的熵

別異想天開!關於熵的衡量,你內心深處覺得對就行。但是請記住,當使用者無法通過規則檢查時,你必須能向他們解釋清楚。

5. 拒絕特殊密碼

我感到羞愧難當,但我還是得承認:我們在早期開發discourse.org登入模組的時候,忽視了必須要阻止的兩種常見情況:

扯蛋的密碼規則

原文 password rules are bull 在很多很多關於密碼的糟糕事情中,你知道最扯的是什麼嗎?密碼規則!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 ...