摘要:方案簡單方案算法通過密碼構成分析,結合權重分派,統(tǒng)計得出密碼強度得分。
簡言
用正則表達式做用戶密碼強度的通過性判定,過于簡單粗暴,不但用戶體驗差,而且用戶帳號安全性也差。那么如何準確評價用戶密碼的強度,保護用戶帳號安全呢?本文分析介紹了幾種基于規(guī)則評分的密碼強度檢測算法,并給出了相應的演示程序。大家可以根據(jù)自己項目安全性需要,做最適合于自己的方案選擇。
1 方案1 (簡單)方案1算法通過密碼構成分析,結合權重分派,統(tǒng)計得出密碼強度得分。得分越高,表示密碼強度越大,也就越安全。方案1算法思想簡單,實現(xiàn)容易。
1.1 方案1評分標準一、密碼長度:
5 分: 小于等于4 個字符
10 分: 5 到7 字符
25 分: 大于等于8 個字符
二、字母:
0 分: 沒有字母
10 分: 全都是?。ù螅懽帜?/p>
20 分: 大小寫混合字母
三、數(shù)字:
0 分: 沒有數(shù)字
10 分: 1 個數(shù)字
20 分: 大于1 個數(shù)字
四、符號:
0 分: 沒有符號
10 分: 1 個符號
25 分: 大于1 個符號
五、獎勵:
2 分: 字母和數(shù)字
3 分: 字母、數(shù)字和符號
5 分: 大小寫字母、數(shù)字和符號
1.2 方案1等級劃分根據(jù)密碼評分,將密碼劃分成以下7個等級:
>= 90: 非常安全(VERY_SECURE)
>= 80: 安全(SECURE)
>= 70: 非常強(VERY_STRONG)
>= 60: 強(STRONG)
>= 50: 一般(AVERAGE)
>= 25: 弱(WEAK)
>= 0: 非常弱( VERY_WEAK)
該評分標準及等級劃分,實際使用時,可小做調整,但不建議做大的變動。
1.3 方案1演示程序演示程序
1.4 方案1測試分析// 評分 25,純小寫字母無法通過驗證 console.log("aaaaaaaa".score()); // 評分 45,純數(shù)字無法通過驗證 console.log("11111111".score()); // 評分 47,小寫+數(shù)字無法通過驗證 console.log("aa111111".score()); // 評分 45,小寫+大寫無法通過驗證 console.log("aaaaAAAA".score()); // 評分 50,4位密碼不可能通過驗證 console.log("11!!".score()); // 評分 70,5位密碼可通過驗證 console.log("0aA!!".score()); // 評分 67,小寫+大寫+數(shù)字可通過驗證(8位) console.log("aA000000".score()); // 評分 70,數(shù)字+符號可通過驗證 console.log("000000!!".score());
從以上測試結果中,我們可以看出算法是十分的有效的,基本能夠保證密碼具有一定的安全性。但是存在的問題也很明顯,其中最主要的問題是對重復或連續(xù)的字符評分過高。以測試用例中最后一個為例: 000000!! 可以得到70分,但顯然并不是一個非常強壯的密碼。
另外,方案1最高可以得到95分,也就是說沒有100分(絕對安全)的密碼,這一點也是很有智慧的設計。
2 方案2針對方案1中的不足,方案2中引入了減分機制。對于重復出現(xiàn),連續(xù)出現(xiàn)的字符給予適當?shù)臏p分,以使得密碼評分更準確。同時在方案2中密碼的評分基數(shù)及計算過程都十分的復雜,要想理解其中每一步的含義,請保持足夠的耐心。
2.1 方案2加分項一、密碼長度:
公式 :+(n*4),其中n表示密碼長度
二、大寫字母:
公式:+((len-n)*2),其中n表示大寫字母個數(shù),len表示密碼長度
三、小寫字母:
公式:+((len-n)*2),其中n表示小寫字母個數(shù),len表示密碼長度
四、數(shù)字:
公式:+(n*4),其中n表示數(shù)字個數(shù)
條件:滿足n < len,才能得到加分,len表示密碼長度
五、符號:
公式:+(n*6),其中n表示符號個數(shù)
六、位于中間的數(shù)字或符號:
公式:+(n*2),其中n表示位于中間的數(shù)字或符號個數(shù)
七、最低條件得分:
公式:+(n*2),其中n表示滿足的最低條件條目數(shù)
條件:只有滿足最低條件,才能得到加分
其中最低條件的條目如下:
1.密碼長度不小于8位
2.包含大寫字母
3.包含小寫字母
4.包含數(shù)字
5.包含符號
最低條件要求滿足條目1并至少滿足條目2-5中的任意三條。
2.2 方案2減分項一、只有字母:
公式:-n,其中n表示字母個數(shù)
二、只有數(shù)字:
公式:-n,其中n表示數(shù)字個數(shù)
三、重復字符數(shù)(大小寫敏感):
該項描述復雜,具體計算方法見如下示例程序:
var pass = "1111aaDD"; //示意密碼 var repChar = 0; var repCharBonus = 0; //得分 var len = pass.length; for(var i = 0; i < len; i++) { var exists = false; for (var j = 0; j < len; j++) { if (pass[i] == pass[j] && i != j) { exists = true; repCharBonus += Math.abs(len/(j-i)); } } if (exists) { repChar++; var unqChar = len - repChar; repCharBonus = (unqChar) ? Math.ceil(repCharBonus/unqChar) : Math.ceil(repCharBonus); } }
四、連續(xù)大寫字母:
公式:-(n*2),其中n表示連續(xù)大寫字母出現(xiàn)的次數(shù)
舉例:如輸入AUB,則n=2
五、連續(xù)小寫字母:
公式:-(n*2),其中n表示連續(xù)小寫字母出現(xiàn)的次數(shù)
舉例:如輸入aub,則n=2
六、連續(xù)數(shù)字:
公式:-(n*2),其中n表示連續(xù)數(shù)字出現(xiàn)的次數(shù)
舉例:如輸入381,則n=2
七、正序或逆序字母:
公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
正序或逆序是指字母表中的順序
不區(qū)分大小寫
條件:只有連續(xù)3個字母或以上,才會減分,
例1:如輸入ABC,則n=1
例2:如輸入dcBA,則n=2
八、正序或逆序數(shù)字:
公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
條件:只有連續(xù)3個數(shù)字或以上,才會減分
例1:如輸入123,則n=1,
例2:如輸入4321,則n=2
例3:如輸入12,則不會減分
九、正序或逆序符號:
公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
條件:只有連續(xù)3個符號或以上,才會減分
2.3 方案2等級劃分根據(jù)密碼評分,將密碼劃分成以下5個等級:
>= 80: 非常強(VERY_STRONG)
>= 60: 強(STRONG)
>= 40: 好(GOOD)
>= 20: 弱(WEAK)
>= 0: 非常弱( VERY_WEAK)
2.4 方案2演示程序演示程序
2.5 方案2測試分析// 評分 0 console.log("11111111".score()); // 評分 2 console.log("aa111111".score()); // 評分 38 console.log("000000!!".score()); // 評分 76 console.log("Asdf2468".score()); // 評分 76 console.log("Mary2468".score()); // 評分 60 console.log("@dmin246".score());
從以上測試可以看出方案2較方案1有了比較大的改進和提升,尤其是對連續(xù)或重復字符上表現(xiàn)出色。但是方案2也存在明顯的不足,主要缺點包括對人名(Mary)、單詞(Story)、鍵盤上相連的鍵(Asdf)、L33T(@dmin)沒法識別。
L33T:是指把拉丁字母換成數(shù)字或是特殊符號的書寫形式。例如把E寫成3、A寫成@、to寫成2、for寫成4。
3 方案3 zxcvbn 3.1 簡要說明針對方案2中的不足,引入了方案3,進一步的提長密碼強度。方案3完全引入一個第三方檢驗工具zxcvbn。
zxcvbn是一個受密碼破解啟發(fā)而來的密碼強度估算器。它通過模式匹配和保守估計,大概可以識別大約30K左右的常規(guī)密碼。主要基于美國人口普查數(shù)據(jù),維基,美國電影,電視流行詞以及其它一些常用模式,像日期,重復字符,序列字符,鍵盤模式和L33T會話等。
從算法的設計思想上,該方案完全秒殺基于構成的統(tǒng)計分析方法(前兩種方法)。同時zxcvbn支持多種開發(fā)語言。因其模式的復雜及字典的存在,當前版本的zxcvbn.js大約有800多K。
要了解項目的詳情及算法見zxcvbn官網(wǎng):
github zxcvbn
3.2 方案3演示程序演示程序
以上是三胖對密碼強度檢測算法和方案的理解和分析,不足之處還請大家多多指正!
原文鏈接
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/93502.html
摘要:非對稱加密算法的安全性往往需要基于數(shù)學問題來保障,目前主要有基于大數(shù)質因子分解離散對數(shù)橢圓曲線等經(jīng)典數(shù)學難題進行保護。消息認證碼基于對稱加密,可以用于對消息完整性進行保護。 Hash 算法與數(shù)字摘要 Hash (哈希或散列)算法它能將任意長度的二進制明文串映射為較短的(通常是固定長度的)二進制串(Hash值),并且不同的明文很難映射為相同的Hash值。 Hash 定義 Hash (哈希...
摘要:結果,我們當時非常抱以厚望的就是卷積神經(jīng)網(wǎng)絡模型,或者說是。單反相機可以讓攝影師調節(jié)透鏡類型和光圈大小,更好地控制把相片里的哪個部分作為焦點。更進一步,單反相機的傳感器更大,對光線更敏感,即使在非?;璋档沫h(huán)境下也可以拍出非常漂亮的相片。 Yelp的數(shù)據(jù)庫中已經(jīng)存儲了幾千萬張相片,用戶們現(xiàn)在每天都會上傳大概十萬張,而且速度還在不斷加快。事實上,我們發(fā)現(xiàn)相片的上傳增長率大于相片的查看率。這些相片...
摘要:是你學習從入門到專家必備的學習路線和優(yōu)質學習資源。的數(shù)學基礎最主要是高等數(shù)學線性代數(shù)概率論與數(shù)理統(tǒng)計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經(jīng)典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...
閱讀 1567·2025-02-07 13:29
閱讀 1002·2024-11-07 18:25
閱讀 131496·2024-02-01 10:43
閱讀 1328·2024-01-31 14:58
閱讀 1144·2024-01-31 14:54
閱讀 83571·2024-01-29 17:11
閱讀 3869·2024-01-25 14:55
閱讀 2390·2023-06-02 13:36