你的密碼真的安全?看看當(dāng)年三百萬樣本中的弱密碼規(guī)律
編者按:昨天,烏云漏洞報告平臺宣布網(wǎng)易郵箱漏洞過億數(shù)據(jù)泄漏,數(shù)據(jù)達(dá)億級別。阿里巴巴可視化工程師周寧奕(主攻 webgl、海量數(shù)據(jù)可視化、地理相關(guān)可視化,曾在參數(shù)化事務(wù)所 hhd-fun 工作)寫了一篇文章,討論了下現(xiàn)在最常被使用的各種不合理密碼,以及究竟什么密碼才比較安全。
昨天,烏云漏洞報告平臺宣布網(wǎng)易郵箱漏洞過億數(shù)據(jù)泄漏,據(jù)說有億級別的用戶密碼流出。現(xiàn)在網(wǎng)易官方與烏云各執(zhí)一詞,真相估計還需要時間,但小編反問,你的密碼設(shè)計合理嗎?
2011 年起有一系列重大網(wǎng)站密碼泄露,csdn 社區(qū)、人人網(wǎng)、多玩網(wǎng)、微博的部分密碼數(shù)據(jù)都被掛到了網(wǎng)上(數(shù)據(jù)請自行 google,本文討論思路,展示結(jié)果,不泄露信息)。
我們以當(dāng)時微博的3315156 條用戶名密碼數(shù)據(jù),開始分析之旅。
工具(可以選擇略過這段!)
而我們下載到的文件類似于 csv (逗號分隔) 或 tsv 格式(空格分隔)數(shù)據(jù),如下:

數(shù)據(jù)很大,需要的查詢可能很復(fù)雜,純腳本處理很難勝任,我們需要數(shù)據(jù)庫, 本文用 mongoDB。
我們可以在命令行里使用 mongoimport 命令導(dǎo)入數(shù)據(jù),也可以使用腳本(我用 node.js)導(dǎo)入,腳本更靈活。導(dǎo)完后,可以直接在命令行(如 mac 的 terminal)查詢:

以上,括號里面的叫查詢條件,這在本文中很重要,我們可以在查詢條件里插入正則表達(dá)式(網(wǎng)上資料大大的),讓查詢變得更復(fù)雜:

最后,有時候我們要統(tǒng)計,比如密碼以 a、b、c、d..,各有多少,這時我們需要用 mapreduce 進(jìn)行累加。
嘿嘿,工具只是手段,白貓黑貓,能抓老鼠的就是好貓。
讓我們啟程!
密碼top 100
首先跑出重復(fù)率前 100 的密碼, 以下是前 20:

很容易發(fā)現(xiàn)規(guī)律,俺將密碼主人分五大派系:
極懶派 手勢派 規(guī)律派 手機派 生日派 情感派
一、極懶派
這 3 萬多同學(xué)真是懶的令人發(fā)指,也刷新了哥的常識,喝喝...

1. 那時候微博竟然能通過一個字的密碼。
2. password 也是老外的高頻詞,我不知道是不是某些網(wǎng)站輸入框里 password 提示詞,或是很多設(shè)備默認(rèn)密碼是這個。
3. 單字重復(fù)型,如 11111,讓我們深入發(fā)掘下。
4. 最有意思的是 163.com 和 @qq.com 出現(xiàn)的頻率,而這 1000 多用戶,密碼=用戶名后半部分... 醉了
極懶派之 一字重復(fù) n 次
統(tǒng)計形如 ‘aa’, ‘11111’, 'ssssssss’ 這類若干個相同單字的密碼總數(shù):

我統(tǒng)計了 1、2、3、4、5、6、7、8、9、0、q、a、z、w、s、d 的頻率分布,其中用 11111 型的用戶最多,這些密碼總計 6w 多人,占 2%。

極懶派之 用戶名=密碼
上述統(tǒng)計不包含用戶名和密碼相同的密碼,這部分密碼共有多少呢? 以 abcd@qq.com 為例,我們統(tǒng)計 abcd@qq.com / abcd / @qq.com 這 3 種模式的數(shù)量之和:
99671 個人,有點意外,整整占了 3% 呢!#p#
二、手勢派
密碼太長,能在鍵盤上排成一種形狀,記憶成本就大大壓縮,在密碼排行榜上,和圖形有關(guān)的密碼是哪些? 123456 云云者,勉強算吧,在數(shù)字鍵盤劃一字。同理 qwerty 開頭的也是這個原理。

對此,我看到一位老外很牛逼地總結(jié)了 20 種模式:

這個模式很牛逼,圖上是鍵盤密碼。但 11年 已經(jīng)有很多人用手機上微博了。有不少這種手機鍵盤:

因此很多密碼的原理就迎刃而解了:

三、規(guī)律派
記住一串?dāng)?shù)字的規(guī)律,我們就可以把一串簡單的數(shù)字演繹成復(fù)雜密碼,而你記住規(guī)則就好。
很勉強,123456 就是個等差數(shù)列 fn = n 而 13579 是 fn = 2*n-1
很多人會用疊詞 如 123123,112233,或疊加后對稱 123321 。
高分密碼有這些:

可以引申下,同樣是數(shù)列,用了中學(xué)知識就不一樣啦,假設(shè)我們讓 fn = n^2, 我們就可以構(gòu)造一個數(shù)列了:
1 2 3 4 5 6 -> 1 4 9 16 25 36…
我查詢了含有 1491625 的所有密碼,共找到 30 幾個,真是海內(nèi)存知己(因為曾經(jīng)我也是這么設(shè)計的)
同理 1 8 27 64 125 的只有 3 個人,高手啊
如果你拿 12345 開根號、取三角函數(shù)、取對數(shù),忘記密碼,在手機計算機里算一遍(別忘了公式)。
海內(nèi)無知己,天涯只有你,你贏了!
四、手機派
使用自己和親人的生日、電話、手機做密碼,已是我對普通密碼的印象了,這部分人究竟多不多?
用手機做密碼,一開始我設(shè)置了 11 位的數(shù)字的條件,但是有很多錯誤的結(jié)果。好在網(wǎng)上有對手機號碼檢測的正則表達(dá)式,包含了 2013年 前所有的手機字段:
移動:139 138 137 136 135 134 147 150 151 152 157 158 159 178 182 183 184 187 188
聯(lián)通: 130 131 132 155 156 185 186 145 176
電信: 133 153 177 180 181 189
虛擬運營商:170
因此大哥整理了一個可以查詢手機號的正則表達(dá)式:

親測有效哦,出來的密碼幾乎都是手機號, 172418 個同學(xué)用手機號做密碼 占比 5%。#p#
五、生日 / 紀(jì)念日派
我們查詢所有包含年份的密碼,這些年份都以 19 和 20 開頭,且有 4 位連續(xù)數(shù)字, 考慮到 5201314 (我愛你一生一世) 也是高頻密碼,且密碼數(shù)據(jù)的時間為 2011年,此時 2013 不該出現(xiàn),所以排除 2011年 以后的年份,我們得到如下結(jié)果:

543559 個密碼使用了年份,占總量的 18%。 真不是小數(shù)字,但數(shù)據(jù)還是很復(fù)雜,有大量年份和字母,符號混合的,也不一定就是年份。那我們縮小范圍,如果包含生日的有多少人?
月份比較復(fù)雜,1月1日 出生的,也許寫 11,也許寫 0101,也有 1.1、1-1 的。但后者其實比較少,且在在一篇分析人人和 csdn 密碼的文章里看到 YYMMDD 型的生日是最多的:

那我們的查詢?nèi)缦拢?nbsp;

318022 個密碼符合條件 占總量的 10%。
這批密碼還是頗為復(fù)雜,因為很多人在字母和其他數(shù)字后加入生日的,僅以生日作為密碼的人會有多少?

答案是 137697, 4%的人用自己生日做密碼,而其中,也有些奇葩的答案,如好幾個 19190504。我去,這是 xx 團(tuán)委的公眾號么…
六、情感派
寫一句有含義的密碼,寫什么重復(fù)率最高?

現(xiàn)實里壓抑的我們難得一說我愛你,不論國內(nèi)國外,都有很多人對著服務(wù)器許愿,說出 wo ai xx,這些我愛你型密碼的總數(shù)讓我非常震驚。
這份密碼數(shù)據(jù)里,woaini 以 2659 次重復(fù)榮居意義型密碼榜首,iloveyou 則不到 woaini 的一半。 但事實上文字版的都弱爆了,位居第五名的 5201314(我愛你一生一世)有 15000 個人同時使用,還有各種變體…其中第 13 名最缺愛 7758521(親親我吧愛我吧)
除了我愛你,我還愛誰? 讓我們查詢?nèi)魏魏?woai(我愛)的密碼,還是基本都是在各種愛你… 偶爾有 woaiwojia woaishui woainima… 有意思的是我愛我家,這中介公司的名字取得真是合理。

如果我們查詢含有 ‘wo’ 字的密碼,也會發(fā)現(xiàn)我最喜歡做的事情就是愛 xx… 除了愛你,我還愛誰呢,老公、老婆、媽媽、爸爸?…
woailaopo + laopowoai 的人數(shù)有 291 人 。
laogongwoai 和 woailaogong 的人數(shù)有 98 人。
這些都是少數(shù)派密碼了。
我們試試我愛媽媽 (201) 和我愛爸爸 (60) 的比例,竟然也是 3:1。
出于好奇,我又統(tǒng)計了密碼里包含’ laopo’ 的和包含’ laogong’ 的比例:
老公: 454
老婆: 1118
包含老公的密碼基本都是形如: ‘zuiailaogong’、 ‘qinaidelaogong’、 ‘pplaogong’,我擦看不下去了,真是一部 show 恩愛寶典…
愛老婆的數(shù)量還是完勝,可惜,這是一組良莠不齊的密碼, 還是有不少形如 laopo38、 laoposhizhu choulaopo laopocaolei sblaopo777 的密碼…(總數(shù)還是不算多)
相反,罵人的人比例很少,fuck shit cao 說的人都不算多。而這其中,也有些有趣的點:
魯迅在雜文《論他媽的》中說他媽的是中國的國罵,但是時代變了,也許是受了上古十大神獸草泥馬(當(dāng)年暴走漫畫王尼瑪還沒火吧),nima 的頻率 2714 次遠(yuǎn)高于 tama 101 次。也完勝 ‘fuck’、 ‘shit’、 'wocao’ 這些 400-500 次之間的詞。
用什么字做密碼最安全
我不是黑客,不知破解算法是怎么做的,但只要鍵入一個字,就讓你的密碼與眾不同,你會怎么敲? 我們對密碼里用到的所有字進(jìn)行統(tǒng)計,得出下圖:

1 是第一名,被 300 多萬用戶累計輸入 300 多萬次,1 是一個很有趣的數(shù)字,超過 60%的人密碼會用到 1,而 30%的人會以 1 作為密碼開頭, 可以看到’.’ ‘@’ 等特殊字符,在符號里排名很靠前。曾經(jīng)看到說用’_‘在密碼里較為安全,因為比’-‘少,事實上也的確如此,但你何必按 shift 打_號呢,’,'的比例比前面所有的標(biāo)點符號都少。
我們可以看到,數(shù)據(jù)下降非常快速,有規(guī)律可循嗎?將柱狀圖的大小全部取對數(shù),那么四大陣營的階梯形一覽無余: 1-9 排在了所有的字母之前,幾乎所有的字母排在了大寫字母之前:

最后,糾正一個數(shù)據(jù)錯誤,我們看到 ‘E’ 和 ‘+’ 的比例非常異常,他們理應(yīng)沒有那么多,為什么?

好,看到這里,你應(yīng)該覺得很熟悉, 5201314,123456, 都是熟悉的密碼,而 E+13 這種也很熟悉。excel 里輸入一個長度超過 11 位的純數(shù)字,excel 會自動將數(shù)字轉(zhuǎn)化為這個樣子的。這份數(shù)據(jù)應(yīng)該是被誰用 excel 打開后又保存了,所以,大寫字母最多的應(yīng)該是 ‘A’,而 '+'的用量也排不到符號類的第二名。
你的密碼安全嗎
回到 2011年,我在微博上找一個郵箱,然后破解你的密碼,哥成功的概率有多大?
前 100 名的密碼,第一名的密碼 123456 共 165882 條,占 5%。前 10 名的密碼有 316085 條,占 10%,而前 100 條密碼共 442555 條,占 15%
累計 15%的人能被這 100 個密碼破解。
用戶名和密碼匹配(包含之前提到的前綴相同,后綴相同和 后綴 +@ 相同)共 99671 人。
累計計 18%的用戶都會在 103 次窮舉后被破解。
近 100年 的生日有 365*100 個,如果我遍歷那么多次,總有一個是對的,這樣我可以破解 4%的密碼。
累計 22%的人已經(jīng)被破解。
倘若我知道你的手機號碼,5%的人的密碼會被破解,累計 27%
如果我知道你的名字 (這份數(shù)據(jù)無法分析你的名字和密碼的關(guān)系) 這個比例會更高。
2011年,1/3 的人密碼是不安全的。
你覺得你的密碼設(shè)計的科學(xué)嗎?
參考:
[ZIPF 分布、PARETO 分布和冪律分布]
[CSDN 及人人網(wǎng)的用戶密碼分析]
[最新手機號碼驗證正則表達(dá)式]