偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一次忘記密碼引發(fā)的算法思考

安全 數(shù)據(jù)安全 算法
服務(wù)器是不會(huì)明文存儲(chǔ)你的用戶密碼的,那么在數(shù)據(jù)庫存儲(chǔ)的到底是什么?它應(yīng)該是被某種算法加密過的密文,并且無法進(jìn)行反向破解,保證了被黑客拿到了也能保證數(shù)據(jù)的相對(duì)安全。而這個(gè)算法,就是我們接下來要介紹對(duì)哈希算法。

前兩天準(zhǔn)備登陸某網(wǎng)站的時(shí)候,在嘗試了幾次常用密碼失敗后,我點(diǎn)擊了“忘記密碼”,嫻熟地填入手機(jī)號(hào)碼,隨即就收到了一條來自陌生號(hào)碼的短信,里面包含著一個(gè)六個(gè)數(shù)字串,我將這個(gè)數(shù)字串填入網(wǎng)站提供的輸入框,就進(jìn)入了密碼重置流程。

[[253582]]

這里有一點(diǎn)細(xì)節(jié),值得我們注意,為什么我忘記了密碼,你不直接把原密碼返回給我?而是給我一個(gè)不相關(guān)的口令來重置密碼?

前段時(shí)間,華住(某大型連鎖酒店)再次發(fā)生脫庫事件。由于內(nèi)部程序員失誤,將數(shù)據(jù)庫密碼公開于Github上,讓人拿走了數(shù)億用戶的開戶記錄和他們的登陸信息(包括密碼)。假如這些密碼用明文存儲(chǔ),那不法分子盜取數(shù)據(jù)庫后,拿到明文密碼,就可以輕而易舉的拿郵箱和密碼去嘗試登陸你的各種社交網(wǎng)站,甚至各種金融帳戶。要知道有很多人其實(shí)對(duì)賬戶安全不夠重視,金融賬戶和社交賬號(hào)都使用同一個(gè)密碼。在如此數(shù)量級(jí)下(上億)的帳戶密碼泄露,對(duì)于互聯(lián)網(wǎng)安全將是一場(chǎng)巨大的浩劫。

如此看來,服務(wù)器是不會(huì)明文存儲(chǔ)你的用戶密碼的。這也就能解釋,為什么不干脆直接將原密碼返回給你了。因?yàn)榫瓦B他們也不知道。

那么問題來了,在數(shù)據(jù)庫存儲(chǔ)的到底是什么?它應(yīng)該是被某種算法加密過的密文,并且無法進(jìn)行反向破解,保證了被黑客拿到了也能保證數(shù)據(jù)的相對(duì)安全。而這個(gè)算法,就是我們接下來要介紹對(duì)哈希算法。

哈希(Hash)算法,由于其不可反向破解的特性被廣泛用于私密信息的保護(hù)和校驗(yàn)。

哈希算法是一個(gè)比較泛的概念,他的具體實(shí)現(xiàn)有許多種,大家所熟知的有 MD5,SHA256等。

現(xiàn)在拿 MD5來舉例,MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value)。

但是人類實(shí)在看不慣二進(jìn)制,所以128位的二進(jìn)制通常會(huì)表示成32位的十六進(jìn)制(由0-9,a-f組成),他們是等價(jià)的。

說了那么多,這個(gè)散列值到底長(zhǎng)啥樣呢。

在 Python 中

  1. import hashlib    
  2.  
  3. m1 = hashlib.md5()    
  4. m1.update("hello")    
  5. print(m1.hexdigest()) 
  6. # 5d41402abc4b2a76b9719d911017c592 

用 shell 就更簡(jiǎn)單了

  1. echo -n hello | md5sum             
  2. # 5d41402abc4b2a76b9719d911017c592  - 

有不少人會(huì)將 哈希(Hash) 和 加密(Encrypt)混淆起來,其實(shí)它們是不一樣的:

  • 哈希:將目標(biāo)文本轉(zhuǎn)換成具有相同長(zhǎng)度的、不可逆的字符串,也叫消息摘要,是一對(duì)多的映射關(guān)系(即多個(gè)明文可能對(duì)應(yīng)同一個(gè)哈希值)。
  • 加密:將目標(biāo)文本轉(zhuǎn)換成具有不同長(zhǎng)度的、可逆的密文,是一對(duì)一的映射關(guān)系(即一個(gè)密文只能對(duì)應(yīng)一個(gè)明文)

由于哈希算法是一對(duì)多的映射,所以不同的輸入是有可能得到了同一個(gè)哈希值,這時(shí)候就發(fā)生了"哈希碰撞"(collision)。

哈希碰撞雖然發(fā)生概率小,但是一旦發(fā)生,就會(huì)產(chǎn)生嚴(yán)重的安全問題:

案例一

很多網(wǎng)絡(luò)服務(wù)會(huì)使用哈希函數(shù),產(chǎn)生一個(gè) token 用于標(biāo)識(shí)用戶的身份和權(quán)限。

如果兩個(gè)不同的用戶,得到了同樣的 token,就發(fā)生了哈希碰撞。服務(wù)器將把這兩個(gè)用戶視為同一個(gè)人,這意味著,用戶 B 可以讀取和更改用戶 A 的信息,這無疑帶來了很大的安全隱患。

案例二

我們都用過網(wǎng)絡(luò)支付工具,假如我現(xiàn)在從 A 帳戶轉(zhuǎn)給帳戶 B 1000塊錢,交易信息在網(wǎng)絡(luò)中進(jìn)行傳輸,有可能被黑客給截持并篡改我們的數(shù)據(jù),將目標(biāo)帳戶改成黑客自己的帳戶。如此一來,我們的金錢就被竊取了。

如果使用哈希算法,就可以在客戶端處,將轉(zhuǎn)賬的信息進(jìn)行處理,處理方法是,將要加密的數(shù)據(jù)加上一個(gè)約定好的字符串一起進(jìn)行哈希,生成一個(gè)信息摘要。

假如在網(wǎng)絡(luò)傳輸過程中不幸被黑客修改了目標(biāo)帳戶和轉(zhuǎn)帳金額,等到了支付平臺(tái)的服務(wù)器端,會(huì)將傳輸過來的信息和之前約定好的字符串再次進(jìn)行哈希。然后和之前那個(gè)哈希進(jìn)行比對(duì),由于之前的數(shù)據(jù)已經(jīng)被篡改了,所以驗(yàn)證不通過,轉(zhuǎn)帳失敗。從而保證了我們的資金安全。

前面講到了許多哈希在實(shí)際生活中的應(yīng)用,可以發(fā)現(xiàn),哈希被廣泛的應(yīng)用在安全領(lǐng)域。那哈希真的沒有辦法破解嗎?

當(dāng)然有,這里舉三個(gè)常見的例子。

1. 暴力窮舉法

暴力窮舉法,就是簡(jiǎn)單粗暴的枚舉出所有的原文,并計(jì)算其哈希值,然后將計(jì)算結(jié)果與目標(biāo)哈希值一一比對(duì)。由于原文的可能性有無數(shù)多種,所以這種方法時(shí)間復(fù)雜度高得離奇,極不可取。需要大量的計(jì)算,因此破解速度非常慢,以14位字母和數(shù)字的組合密碼為例,共有1.24×10^25種可能,即使電腦每秒鐘能進(jìn)行10億次運(yùn)算,也需要4億年才能破解。

就算有一天,真找到一個(gè)和目標(biāo)哈希值相等的原文,這個(gè)原文也不一定是答案,因?yàn)楣_突的存在,多個(gè)原文是有可能有著同一個(gè)哈希值。

2. 字典法

反思暴力枚舉法,它其實(shí)做了太多無用的計(jì)算。一般人的密碼都會(huì)取一些有特殊意義的字符,比如生日,名字縮寫等。有人就會(huì)把這些常用的高頻率的密碼組合,試先計(jì)算并存儲(chǔ)起來。等到要用的時(shí)候,直接到數(shù)據(jù)庫里查詢對(duì)應(yīng)的哈希值就行了。

如果說暴力枚舉法,是時(shí)間換空間,那字典法就是空間換時(shí)間。

需要海量的磁盤空間來儲(chǔ)存數(shù)據(jù),仍以14位字母和數(shù)字的組合密碼為例,生成的密碼32位哈希串的對(duì)照表將占用2.64 * 10^14 TB 的存儲(chǔ)空間。如何增加密碼長(zhǎng)度或添加符號(hào),需要的時(shí)間或磁盤空間將更加難以想象,顯然這兩種方法是難以讓人滿意的。

  1. (62^14*192)/8/1024/1024/1024/1024=2.64 * 10^14 (GB) 

3. 彩虹表法

暴力枚舉和字典法,都只適用于長(zhǎng)度較短,組合簡(jiǎn)單的密碼。

接下來為大家介紹一種高效的密碼攻擊方法:彩虹表。它可以用于復(fù)雜一點(diǎn)的密碼。

彩虹表實(shí)質(zhì)上還是屬于字典破解的一種,不過不再是簡(jiǎn)單的明文—密碼的對(duì)應(yīng),為了節(jié)省字典存儲(chǔ)空間,彩虹表省去了能通過計(jì)算得出的數(shù)據(jù),達(dá)到這點(diǎn)的關(guān)鍵在于設(shè)計(jì)出一個(gè)函數(shù)族Rk(k=1、2、3、4……)將hash密文空間映射回明文的字符空間。

彩虹表的存儲(chǔ)空間是字典法的 k 分之一,代價(jià)是運(yùn)算次數(shù)至少是原來的 k 倍。

彩虹表確實(shí)像它的名字一樣美好,至少黑客眼里是這樣。下表是7位以內(nèi)密碼在不同字符集下構(gòu)造出的彩虹表的情況,彩虹表中哈希鏈的長(zhǎng)度和個(gè)數(shù)隨著字符集的增長(zhǎng)而增長(zhǎng),彩虹表的大小和生成時(shí)間也隨之成倍增加。7位數(shù)字組合在彩虹表面前簡(jiǎn)直就是秒破,即使最復(fù)雜的7位密碼不到一個(gè)小時(shí)就能破解,如果采用普通的暴力攻擊,破解時(shí)間可能需要三周。

這篇文章,寫得比較通俗易懂,其中借鑒了網(wǎng)上一些不錯(cuò)的文章,算是一篇科普文,想要深入了解,你還需要自己做更多的研究與思考。

責(zé)任編輯:趙寧寧 來源: 黑客技術(shù)與網(wǎng)絡(luò)安全
相關(guān)推薦

2019-11-04 10:37:53

MongoDB宕機(jī)日志

2022-11-29 21:26:26

跨域配置

2015-07-17 10:05:03

面試思考

2021-11-01 17:29:02

Windows系統(tǒng)Fork

2017-08-24 17:37:18

DNS緩存分析

2019-10-09 11:42:10

分布式取錢異步流程

2023-07-13 09:12:37

CNCF項(xiàng)目云原生

2024-05-13 08:37:17

炫技H5UI

2018-09-12 09:07:43

服務(wù)器數(shù)據(jù)RAID5

2022-12-26 10:42:00

康普中國(guó)

2019-06-25 14:44:11

分布式事務(wù)數(shù)據(jù)庫

2021-11-22 08:33:27

微信聊天離婚

2021-03-17 00:17:16

命令應(yīng)急響應(yīng)

2019-01-16 09:20:42

架構(gòu)設(shè)計(jì)JVM FullGC宕機(jī)事故

2020-01-06 09:43:14

賠償TSB遷移

2018-07-16 22:29:29

代碼迭代質(zhì)量

2021-12-20 10:15:16

zip密碼命令網(wǎng)絡(luò)安全

2022-09-03 18:29:49

開發(fā)技術(shù)

2022-12-17 19:49:37

GCJVM故障

2022-06-14 08:00:28

切換包管理器版本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)