基於機器學習的密碼強度檢測

2021-02-13 T00ls

原文:Machine Learning based Password Strength Classification

地址:http://web.archive.org/web/20170606022743/http://fsecurify.com/machine-learning-based-password-strength-checking/

近期,我想做一些機遇機器學習和網絡安全的項目。這是另一個與信息安全和機器學習有關的項目。

各公司的密碼強度檢測都不近相同。但所有的這些檢測都是基於規則的。一個密碼在Google這邊可能是強密碼但在Dropbox就變成了弱密碼。我在想我們能否讓機器學習算法來決定一個密碼是弱密碼還是強密碼。於是,這個帖子誕生了。讓我們開始吧。

數據收集

此次分析所使用的密碼數據來自於000webhost洩漏,此數據可在網上下載。那麼我們是如何決定哪些密碼是高強度的哪些密碼是低強度的呢?Well,Georgia Tech university開發了一款名叫PARS的工具,這款工具集成了各大公司所使用的密碼強度檢測規則。這些文件有兩行數據,密碼和強度。

我在此使用的密碼強度檢測算法來自於Twitter,微軟和暴雪。這個算法與其他檢測儀有什麼區別呢?首先,它是純粹基於機器學習而不是密碼規則的。其次,我只保留了那些三種檢測儀都認為強度是弱、中等、強的密碼。這意味著所有用來訓練的密碼的強度都確實是弱、中等、強的。

下面是一些用來訓練模型的密碼樣本:

0 for weak, 1 for medium and 2 for strong
lamborghin1,1
AVYq1lDE4MgAZfNt,2
u6c8vhow,1
v1118714,1
universe2908,1
as326159,1
asv5o9yu,1
intel1,0
612035180tok,1
jytifok873,1
WUt9IZzE0OQ7PkNE,2
lsdlsd1,0

我原本有300萬條密碼數據,但是過濾出滿足三個密碼強度檢測儀後只剩下70萬條密碼數據了,我將這些數據分為了80%的訓練集和20%的測試集。其中過濾掉了許多數據是因為我只用了那些被三個分類算法都認為是相同強度的密碼。

數據分析

我將使用Tf-idf分數而不是整條密碼,我將使用每個字符作為一個token。其他我沒用到的指標有密碼長度,特殊字符的數量,包含數字的數量等。這是一個自定義的令牌解析器(tokenizer)。

def getTokens(inputString):
tokens = []
for i in inputString:
tokens.append(i)
return tokens

加載數據。

filepath = 'your_file_path_containing_passwords_and_labels'
data = pd.read_csv(filepath,',',error_bad_lines=False)

data = pd.DataFrame(data)
passwords = np.array(data)

現在打亂數據集,然後獲取y和X向量。

random.shuffle(passwords)
y = [d[1] for d in passwords]
allpasswords= [d[0] for d in passwords]

現在在我們的密碼語料庫(corpus)上使用Tfidvectorizer分割數據。

vectorizer = TfidfVectorizer(tokenizer=getTokens)
X = vectorizer.fit_transform(allpasswords)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

That's it. 現在我們需要做的就是應用機器學習算法然後我門就擁有了一個基於機器學習的密碼強度檢測器。開工!由於我想讓算法運行更快一些,在此我使用了多分類的邏輯回歸算法。

lgs = LogisticRegression(penalty='l2',multi_class='ovr')
lgs.fit(X_train, y_train)
print(lgs.score(X_test, y_test))

我們的準確率(accuracy)大概有81%,這可能是由於我們沒有使用大量的數據。這代表80%的情況下,我們算法能夠將密碼正確分類(與三個商業的密碼檢測器分類結果相同)。讓我們來看看這個算法是如何將我們的密碼分類的。

X_predict = ['faizanahmad','faizanahmad123','faizanahmad##','ajd1348#28t**','ffffffffff','kuiqwasdi','uiquiuiiuiuiuiuiuiuiuiuiui','mynameisfaizan','mynameis123faizan#','faizan','123456','abcdef']
X_predict = vectorizer.transform(X_predict)
y_Predict = lgs.predict(X_predict)
print y_Predict

來看看結果。

faizanahmad [medium]
faizanahmad123 [medium]
faizanahmad
ajd1348
ffffffffff [easy]
kuiqwasdi [medium]
uiquiuiiuiuiuiuiuiuiuiuiui [easy]
mynameis123faizan
faizan [easy]
abcdef [easy]

看起來我們的算法知道字母、數字和特殊符號的組合是一個好的密碼。很好,結果看起來很好,不是嗎?

有一些需要注意的地方,由於此模型是從已經存在的檢測算法中的規則訓練的,但我組合了三種不同的檢測方法來使他更可靠(robust)。它不只是基於算法模仿了一個規則。它綜合了廣泛使用的許多密碼強度檢查算法。

這個項目是我在閒暇時間做的,它肯定是不完全的。這只是實現我心中的一個想法,然後分享與你們大家。我相信這個項目可以進一步擴展為更強大,更有意義的密碼檢測器/分類器。

代碼和數據可以在此找到:

https://github.com/faizann24/Machine-Learning-based-Password-Strength-Classification

相關焦點

  • 微服務架構系列二:密碼強度評測的實現與實驗
    系列二依據系列一中講述的相關技術,進行了業務原理分析和建模,然後一步步實現了基於機器學習的密碼強度評測服務,搭建相關環境並部署編排服務和進行了相關驗證,最後對微服務架構設計進行了總結和展望,並簡單概述了後續系列的工作。隨著網際網路技術的迅猛發展和廣泛應用,在數據信息日益敏感的當下,網絡安全問題也變得日益嚴峻。
  • 在OpenCV中基於深度學習的邊緣檢測
    在這篇文章中,我們將學習如何在OpenCV中使用基於深度學習的邊緣檢測,它比目前流行的canny邊緣檢測器更精確。邊緣檢測在許多用例中是有用的,如視覺顯著性檢測,目標檢測,跟蹤和運動分析,結構從運動,3D重建,自動駕駛,圖像到文本分析等等。什麼是邊緣檢測?
  • Facebook基於機器學習的應用程式
    原文連結:http://aiehive.com/facebooks-human-like-learning-applications/研究人員越來越傾向用機器學習的方法來解決現實世界的問題
  • Alink:基於Flink的機器學習平臺
    Alink是由阿里計算平臺事業部研發的基於Flink的機器學習算法平臺,名稱由Alibaba Algorithm AI Flink Blink 單詞的公共部分組成。
  • 【機器視覺】人工智慧檢測設備實現手機外觀缺陷全自動檢測、基於人工智慧的PCB表面瑕疵檢測
    目前,手機整機外觀全檢基本上處於全人工肉眼檢測的狀態。由於手機整機的精密工業檢測需求,使得傳統機器視覺系統難以通過編程來解決以上這些缺陷檢測問題。手機整機外觀檢測涉及曲面以及複雜紋理圖像中細微劃痕的檢測需求,只能通過人工肉眼二次復檢來完成,進而增加了額外成本。
  • 【代碼藝術】帶視覺特效的js密碼強度檢測開源庫
    這是一款帶視覺特效的js密碼強度檢測特效。
  • 機器視覺邊緣檢測算法詳解
    :  1、濾波:邊緣檢測算法主要是基於圖像強度的一階和二階導數,但導數的計算對噪聲很敏感,因此必須使用濾波器來改善與噪聲有關的邊緣檢測器的性能。需要指出,大多數濾波器在降低噪聲的同時也導致了邊緣強度的損失,因此,增強邊緣和降低噪聲之間需要折中。  2、增強:增強邊緣的基礎是確定圖像各點鄰域強度的變化值。增強算法可以將鄰域(或局部)強度值有顯著變化的點突顯出來。邊緣增強一般是通過計算梯度幅值來完成的。
  • 谷歌發布基於機器學習的Android APP安全檢測系統:Google Play Protect
    此前阿里聚安全小編就報導了2例關於惡意軟體偽裝在Google Play上的事件《Google Play商店的「系統更新」隱藏間諜軟體,數百萬用戶中招》《打開手機電筒就洩露了銀行卡密碼?》一旦用戶從應用市場下載APP到手機上後,谷歌便無法監視和檢測應用程式的惡意行為。
  • 基於機器視覺的手機產品條碼檢測方案,來學習一下!
    本方案將搭建一個基於機器視覺的流水線檢測手機條碼平臺,把產品放置於流水線上
  • 一個基於 FPGA 的機器學習平臺及其使用方法
    與此同時,他們可以保持所需的靈活性,以跟上機器學習發展的步伐。本文將介紹 ML 處理的要求,以及為何 FPGA 能解決許多性能問題。然後,將介紹一個合適的基於 FPGA 的 ML 平臺及其使用方法。機器學習算法和推理引擎在 ML 算法中,卷積神經網絡 (CNN) 已成為圖像分類的首選解決方案。
  • 基於 Milvus 的釣魚網站檢測
    現有的比較典型的檢測釣魚網站的方法有:基於黑白名單機制的檢測,基於文本特徵或網頁圖像特徵的匹配檢測,和基於機器學習的分類檢測。然而,基於黑白名單的檢測方法時效性較差,名單範圍也存在著不足;基於特徵的算法的準確性和魯棒性又不是很理想。近年來,機器學習應用於各領域並取得巨大成功,尤其是將深度學習應用於檢測識別可以有效得提高檢測效率。
  • 基於OpenCV和深度學習的人臉檢測
    在今天的博客文章的其餘部分,我將討論:這個「隱藏」的深度學習人臉檢測器存在於OpenCV圖書館如何使用OpenCV和深度學習進行圖像中的人臉檢測如何利用OpenCV和深度學習實現視頻中的人臉檢測正如我們將看到,很容易交換Haar級聯為他們更準確的深度學習臉部檢測器同行。
  • 機器學習應用深度剖析
    綜合分類的6種類型1.2.2 基於學習策略的分類學習策略是指學習過程中系統所採用的推理策略。一個學習系統總是由學習和環境兩部分組成。由環境(如書本或教師)提供信息,學習部分則實現信息轉換,用能夠理解的形式記憶下來,並從中獲取有用的信息。
  • 周末推薦丨用100行代碼寫個密碼強度檢測器
    很多網站在用戶註冊帳號的時候為了保證帳戶的安全,都會自動檢測用戶密碼的強度並給出提醒讓用戶設置一個相對安全的密碼,你是不是很好奇這個密碼強度檢測是怎麼開發的
  • 機器視覺圖像處理——基於LabVIEW系統校準與圖像校正
    ,存在起伏· 漸暈(vignetting):光源不能提供均勻光照· 採集圖像灰度分布不均:傳感器有雜質或者目標表面非均勻 機器視覺系統的校準多基於對各種畸變或相機進行建模完成,不同校準方法效果因使用場合而異。
  • 機器視覺在工業檢測中的應用現狀
    機器視覺中,缺陷檢測功能,是機器視覺應用得最多的功能之一,主要檢測產品表面的各種信息。在特徵生成上,很多新算法不斷出現,包括基於小波、小波包、分形的特徵,以及獨二分量分析;還有關子支持向量機,變形模板匹配,線性以及非線性分類器的設計等都在不斷延展。
  • 機器視覺如何檢測螺牙缺陷?
    在目前的市場,推出基於機器視覺的檢測方法,檢測原理是通過CCD相機拍照,軟體進行圖像分析,這種方法高效、高速、非接觸的檢測。本文分享螺牙的缺陷檢測。實現的過程如下圖: 1. 採集圖像。圖34. 螺紋檢測。添加「螺紋檢測」工具至位置補正與結束補正之間,螺絲方向選擇水平方向,如下圖5所示。
  • 【學習筆記】一種基於快速激活的硬體木馬檢測法
    圍繞硬體木馬檢測,研究人員已經做了很多工作,但目前學術界仍缺少相應的用於評估各種木馬檢測方法有效性的評價準則[1]。現有的硬體木馬檢測技術主要可分為基於物理分析的檢測方法、基於ATPG(自動測試矢量生成)的檢測方法,以及基於旁路信號分析的檢測方法。基於物理分析的方法是一種破壞性的方法,對晶片進行反向工程,還原出原始設計的電路,這種方法工作量很大,效果也不太好。
  • 我連夜用Python製作密碼強度檢查器!
    點上方「菜鳥學Python
  • Python使用集合運算檢測密碼字符串的安全強度
    封面圖片:《Python程序設計基礎與應用》(ISBN:9787111606178),董付國,機械工業出版社圖書詳情:密碼字符串的安全強度不僅取決於字符串長度