[轉]常見的用戶密碼加密方式以及破解方法

?

【作者】張輝,就職于攜程技術中心信息安全部,負責安全產品的設計與研發。

作為互聯網公司的信息安全從業人員經常要處理撞庫掃號事件,產生撞庫掃號的根本原因是一些企業發生了信息泄露事件,且這些泄露數據未加密或者加密方式比較弱,導致黑客可以還原出原始的用戶密碼。目前已經曝光的信息泄露事件至少上百起,其中包括多家一線互聯網公司,泄露總數據超過10億條。

要完全防止信息泄露是非常困難的事情,除了防止黑客外,還要防止內部人員泄密。但如果采用合適的算法去加密用戶密碼,即使信息泄露出去,黑客也無法還原出原始的密碼(或者還原的代價非常大)。也就是說我們可以將工作重點從防止泄露轉換到防止黑客還原出數據。下面我們將分別介紹用戶密碼的加密方式以及主要的破解方法。

一、用戶密碼加密

用戶密碼保存到數據庫時,常見的加密方式有哪些,我們該采用什么方式來保護用戶的密碼呢?以下幾種方式是常見的密碼保存方式:

1、直接明文保存,比如用戶設置的密碼是“123456”,直接將“123456”保存在數據庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能采取的是這種方式。
2、使用對稱加密算法來保存,比如3DES、AES等算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經泄露了,密鑰很可能也會泄露,當然可以將一般數據和密鑰分開存儲、分開管理,但要完全保護好密鑰也是一件非常復雜的事情,所以這種方式并不是很好的方式。

圖片描述

3、使用MD5、SHA1等單向HASH算法保護密碼,使用這些算法后,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都采用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。

圖片描述

4、特殊的單向HASH算法,由于單向HASH算法在保護密碼方面不再安全,于是有些公司在單向HASH算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對于加了“固定鹽”的HASH算法,需要保護“鹽”不能泄露,這就會遇到“保護對稱密鑰”一樣的問題,一旦“鹽”泄露,根據“鹽”重新建立彩虹表可以進行破解,對于多次HASH,也只是增加了破解的時間,并沒有本質上的提升。

圖片描述

5、PBKDF2算法,該算法原理大致相當于在HASH算法基礎上增加隨機鹽,并進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。使用PBKDF2算法時,HASH算法一般選用sha1或者sha256,隨機鹽的長度一般不能少于8字節,HASH次數至少也要1000次,這樣安全性才足夠高。一次密碼驗證過程進行1000次HASH運算,對服務器來說可能只需要1ms,但對于破解者來說計算成本增加了1000倍,而至少8字節隨機鹽,更是把建表難度提升了N個數量級,使得大批量的破解密碼幾乎不可行,該算法也是美國國家標準與技術研究院推薦使用的算法。

圖片描述

6、bcrypt、scrypt等算法,這兩種算法也可以有效抵御彩虹表,使用這兩種算法時也需要指定相應的參數,使破解難度增加。

下表對比了各個算法的特性:

圖片描述

二、用戶密碼破解

用戶密碼破解需要針對具體的加密方式來實施,如果使用對稱加密,并且算法足夠安全(比如AES),必須獲取到密鑰才能解密,沒有其它可行的破解方式。

如果采用HASH算法(包括特殊HASH),一般使用彩虹表的方式來破解,彩虹表的原理是什么呢?我們先來了解下如何進行HASH碰撞。單向HASH算法由于不能進行解密運算,只能通過建表、查表的方式進行碰撞,即將常用的密碼及其對應的HASH值全計算出來并存儲,當獲取到HASH值是,直接查表獲取原始密碼,假設用MD5算法來保護6位數字密碼,可以建如下表:

圖片描述

全表共100W條記錄,因為數據量不大,這種情況建表、查表都非常容易。但是當密碼并不是6位純數字密碼,而是數字、大小寫字母結合的10位密碼時,建立一個這樣的表需要(26+26+10)^ 10 ≈ 83億億(條記錄),存儲在硬盤上至少要占用2000W TB的空間,這么大的存儲空間,成本太大,幾乎不可行。有什么辦法可以減少存儲空間?一種方法是“預計算哈希鏈”,“預計算哈希鏈”可以大幅減少HASH表的存儲空間,但相應的增加了查表時的計算量,其原理大致如下:

建表過程:

圖片描述

先對原始數據“000000”進行一次HASH運算得到“670B1E”,再對HASH值進行一次R運算,R是一個定制的算法可以將HASH值映射到明文空間上(這里我們的明文空間是000000~999999),R運算后得到“283651”,再對“283651”進行hash運算得到“1A99CD”,然后在進行R運算得到“819287”,如此重復多次,得到一條哈希鏈。然后再選用其它原始數據建立多條哈希鏈。最終僅將鏈頭和鏈尾保存下來,中間節點全都去掉。

查表過程:假設拿到了一條HASH值“670B1E”,首先進行一次R運算,得到了“283651”,查詢所有鏈尾是否有命中,如果沒有,則再進行一次HASH、一次R,得到了“819287”,再次所有鏈尾,可以得到看出已經命中。這樣我們就可以基本確認“670B1E”對應的明文就在這條鏈上,然后我們把這條鏈的生成過程進行重新計算,計算過程中可以發現“000000”的HASH值就是“670B1E”,這樣就完成了整個查表過程。這種表就是“預計算哈希鏈”。這種方式存在一個問題,多條鏈之間可能存在大量的重復數據,如下圖所示:

圖片描述

為了解決這個問題,我們將R算法進行擴展,一條鏈上的多次R運算采用不同的算法,如下圖:

圖片描述

一條鏈上的每個R算法都不一樣,就像彩虹的每層顏色一樣,因此取名的為彩虹表。

當然彩虹表除了可以用戶破解HASH算法外,理論上還可以用于破解對稱加密算法,比如DES算法,由于DES算法密鑰比較短,建立彩虹表破解是完全可行的;但對于AES算法,由于密鑰比較長,建表幾乎不可行(需要耗時N億年)。

三、小結

采用PBKDF2、bcrypt、scrypt等算法可以有效抵御彩虹表攻擊,即使數據泄露,最關鍵的“用戶密碼”仍然可以得到有效的保護,黑客無法大批量破解用戶密碼,從而切斷撞庫掃號的根源。當然,對于已經泄露的密碼,還是需要用戶盡快修改密碼,不要再使用已泄露的密碼。

(關注攜程技術中心微信公號ctriptech,獲知更多攜程技術人一手干貨~)


---------------------
作者:攜程技術
來源:CSDN
原文:https://blog.csdn.net/ctrip_tech/article/details/80125741
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H5學習筆記

什么是 HTML? HTML 是用來描述網頁的一種語言。 HTML 指的是超文本標記語言 (Hyper Text Markup Language)HTML 不是一種編程語言,而是一種標記語言 (markup language)標記語言是一套標記標簽 (markup tag)HTML 使用標記標簽來描述網頁關鍵字&#xff1a…

【ArcGIS遇上Python】ArcGIS Python獲取某個字段的唯一值(獲取指定字段的不同屬性值)

以土地利用數據為例,DLMC字段為每個圖斑的用地類型,怎樣用Python代碼獲取該字段的屬性唯一值? Python代碼實現結果: Python源代碼: import arcpy from arcpy import env arcpy.gp.overwriteOutput=

一張圖解決Android Studio 項目運行按鈕灰色

轉載于:https://juejin.im/post/5a31ee46f265da430406a166

java學習筆記8--接口總結

生活中的接口&#xff1a; 什么是接口? 一個Java接口是一些方法特征的集合&#xff0c;但沒有方法的實現。 在類中實現接口可以使用關鍵字implements&#xff0c;其基本格式如下&#xff1a; [修飾符] class <類名> [extends 父類名] [implements 接口列表]{}修飾符&…

.NET自定義認證雖然簡單,但好用

前言有這樣一種場景&#xff0c;就是新項目已經集成了認證中心&#xff0c;或者是都用了統一的認證方式(比如現在常用的JWT)&#xff0c;這樣對于項目之間的對接就顯得比較方便&#xff0c;至少在認證這塊還是能減少一些工作量的。但當上線的老項目需要對接新項目時&#xff0c…

C語言試題187之實現strspn函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

一張圖對比騰訊、阿里、百度的薪資職級

作為中國互聯網三大巨頭的騰訊、阿里、百度&#xff0c;他們的職級薪資福利等等等一直都是個謎&#xff0c;不為外界所知。今天&#xff0c;我就來為大家全面揭曉—— Here we go&#xff5e; 公司總部 - 騰訊&#xff1a;總部在深圳南山科技園&#xff0c;CBD地段&#xff1…

旺財速啃H5框架之Bootstrap(五)

在上一篇<<旺財速啃H5框架之Bootstrap&#xff08;四&#xff09;>>做了基本的框架&#xff0c;<<旺財速啃H5框架之Bootstrap&#xff08;二&#xff09;>>篇里也大體認識了bootstrap.css樣式&#xff0c;下面我們來學習常見的CSS操控內容篇幅。。。。…

【專升本計算機】最新甘肅省專升本考試C語言部分復習題帶答案

最新甘肅省專升本考試C語言部分復習題帶答案 考點1.1-1.2 1、 C 語言源程序文件經過 C 編譯器編譯之后生成一個后綴為( )的文件 A. .c B. .obj C. .exe D. .bas 2、 C 語言源程序文件經過 C 編譯器連接之后生成一個后綴為( )的文件 A. .c B. .obj C. .exe D. .bas 3、完成 …

浮點數一些設計原理

摘要&#xff1a;本篇文章會講述浮點數的設計原理&#xff0c;比如如何存儲二進制的問題&#xff0c;從而幫助我們更好的編碼。 __1. deading code __ console.log(1.0-0.9 0.1); //輸出 false console.log(1.0-0.9, 0.1); //輸出 0.09999999999999998 0.1 //所以判斷浮點運算…

Atitit. http 代理原理 ?atiHttpProxy ?大木馬

Atitit. http 代理原理 atiHttpProxy 大木馬 1. 面這張圖可以清晰地闡明HttpProxy的實現原理&#xff1a;1 2. 代理服務器用途1 3. 其中流程具體如下&#xff1a;2 4. 設計規劃3 5. 結束語4 1. 面這張圖可以清晰地闡明HttpProxy的實現原理&#xff1a; 2. 代理服務器用途 代…

[轉]一文揭秘阿里、騰訊、百度的薪資職級

上周&#xff0c;阿里巴巴董事長兼CEO逍遙子發布內部郵件&#xff0c;宣布了阿里巴巴新一輪組織部晉升名單&#xff0c;涉及所有晉升到P10、P11、P12的高P的人員。其中晉升到M7/ P12的高級管理者包括&#xff1a;淘寶、天貓、阿里媽媽事業群總裁蔣凡、阿里本地生活服務公司CEO王…

C語言試題188之實現strcspn函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

【ArcGIS微課1000例】0014:ArcGIS中如何將kml(kmz)文件轉shp,并進行投影轉換?

KML(Keyhole Markup Language,Keyhole 標記語言)最初是由Google 旗下的Keyhole 公司開發和維護的一種基于XML 的標記語言,利用XML 語法格式描述地理空間數據(如點、線、面、多邊形和模型等),適合網絡環境下的地理信息協作與共享。2008 年4月,KML的最新版本2.2 被OGC 宣布為開…

寫一鍵部署bash腳本

因為我開源的一鍵部署應用到linux服務器的AntDeploy&#xff0c; 在linux部署是需要安裝一個agent服務(systemctl服務)如果是手動第一次安裝的話 需要敲下載 wget解壓 tar修改配置文件的token復制到指定安裝目錄設置權限設置systemd設置systemctl清除臨時文件至少這8中類型的命…

UITableView的使用及代理方法

在App開放中我們經常會使用到UITabbleView&#xff0c;常用于數據展示。那么使用時不得不引入兩個代理方法<UITableViewDataSource,UITableViewDelegate>。 下面我們來簡單的創建一個TableView并介紹下其基本屬性。 property (nonatomic,strong) UITableView * myTable; …

Java集合和泛型練習及面試題——博客園:師妹開講啦

給定一段JAVA代碼如下&#xff1a;要打印出list中存儲的內容&#xff0c;以下語句正確的是&#xff08; B &#xff09; ArrayList list new ArrayList( ) list.add(“a”) list.add(“b”) Iterator it list.iterator( ) A.while(it. Next( ) )   system.out.prin…

對于經常需要truncate的表進行固定統計信息

為什么80%的碼農都做不了架構師&#xff1f;>>> 大家做過統計的一些存儲過程可能會知道&#xff0c;我們經常有這類表&#xff0c;要先truncate它&#xff0c;執行插入&#xff0c;再在執行相關sql&#xff0c;這就會導致有一個時間誤差&#xff0c;如果在truncate…

ArcGIS實驗教程——實驗四十一:ArcGIS區域分析統計直方圖(土地利用--坡度分級柱狀統計圖的制作)

文章目錄 一、任務描述二、實驗數據三、實驗過程一、任務描述 在實際工作中,通常需要統計不同類型的土地利用數據與坡度的關系。本實驗中以土地利用landuse和數字高程模型dem數據為例,基于ArcGIS平臺,統計了村莊、風景名勝、林地、草地、旱地等多種類型土地利用數據所占用的…

[轉]圖片格式WEBP全面解析

前言 不管是 PC 還是移動端&#xff0c;圖片一直是流量大頭&#xff0c;以蘋果公司 Retina 產品為代表的高 PPI 屏對圖片的質量提出了更高的要求&#xff0c;如何保證在圖片的精細度不降低的前提下縮小圖片體積&#xff0c;成為了一個有價值且值得探索的事情。 但如今對于 JP…