密码强度计算策略
文章目錄
- 密碼強度計算策略
- 1 基于密碼組合
- 2 基于被破解時間
- 3 基于信息熵
密碼強度計算策略
大學上課時,老師就提到千萬不要小看登錄、注冊模塊,設計起來也是會很復雜的。那時候編程剛入門沒體會,心想登錄、注冊不就幾個input,提交兩個表單就完事了嘛。哈哈哈,現在想起來真是年輕!后來慢慢知道了表單校驗、圖形驗證碼、郵箱驗證等等。
今天這個問題,同樣來自于看似簡單的注冊模塊,在注冊賬號設置密碼時,根據輸入的密碼顯示其安全系數。那么是怎么計算密碼強度?就來一起探索下這個規則大致都是這么設計的吧!
(這是一個圖片!)
首先說明,密碼的強度越高,代表的是越不容易被猜測攻擊給破解,而不能防止惡意程序或按鍵記錄器竊取。
1 基于密碼組合
組合規則很簡單也最常見,即要求密碼中至少包含4類字符中的3類,即:
- 大寫字符[A-Z]
- 小寫字符[a-z]
- 數字[0-9]
- 特殊字符:~!@#$%^&*_-+=`|(){}[]:;"’<>,.?/
由于之前做過一題oj,所以設計的時候最開始就想到了這個方法。題目是:牛客網——密碼強度等級(這個題目好像是來自于華為OJ,如果鏈接掛了可以直接百度題目)。
這種方式的優點就是較為簡單,代碼復雜度低,可以很容易的自定義得分計算規則,并且規則可以設置加分項和減分項。
但缺點也非常明顯,一是會降低用戶體驗,用戶輸入的密碼不能太簡單也不能太復雜,太簡單通不過規則,太過復雜難以記憶。如下圖lastpass(在線密碼管理器)注冊界面中主密碼輸入框:
二是隨著計算機運算能力的成倍提高,通過復雜的組合規則防止破解的作用也越來越小,且規則只會變得越來越復雜。
2 基于被破解時間
日常中我們見到的幾乎都是基于復雜規則進行計算密碼強度,且已習慣這種方式,甚至認為只要密碼足夠復雜,就足夠安全。但我們反過來想,要保證密碼安全,最主要是保證密碼不被破解不就行了!
zxcvbn便是基于密碼被破解時間計算密碼強度,名字的來源其實就是字母鍵區最底層從左至右5個字母。zxcvbn是github上擁有10k star的開源項目,使用方便,且幾乎支持所有開發語言(github地址)。
官方的介紹說得非常明白,這里就不一一翻譯原文了。大概意思是,zxcvbn通過結合模式匹配(即字典,字典包含有常用密碼、常用英文詞匯等)和估計被破解時間這兩種方式,來計算得到密碼強度。開發它的目的就是用來替代密碼組合規則的,相比之下zxcvbn更安全、靈活和好用。
在下一篇文章里,我將詳細介紹zxcvbn的具體使用。
3 基于信息熵
信息熵的思路與第二種方式相同,信息熵越大,越不容易被破解,則密碼的強度越高。
這個熵值指的是信息熵,由香農引入到信息論中,又被稱為香農熵,與熱力學的熵無關。大學學習壓縮算法時接觸到了信息熵這個概念,熵值是不確定性的量度,即熵值越大,不確定性就越高。
在密碼系統中,熵值計算公式為如下,其中K代表密鑰空間大小。
H(K)=log2KH(K) = log_2^K H(K)=log2K?
即密碼所在密鑰空間越大,熵值越高,密碼的不確定性越大,越不易被破解。
參考文獻:基于熵的密碼強度估計
github上發現的一個項目:A Password Strength Calculator Based On Shannon Entropy
總結
- 上一篇: 现代电视原理期末复习
- 下一篇: 51单片机4位抢答器_倒计时可调仿真设计