摘要:沒錯(cuò),年的破解就是證明了在碰撞上面不可靠,也就是可以通過某種方式快速的找到具有相同散列值的另一個(gè)信息。好,第二個(gè)不安全的誤區(qū)來(lái)了上述破解過程對(duì)于絕大多數(shù)散列函數(shù)來(lái)說(shuō),基本上都是一個(gè)道理。
轉(zhuǎn)載請(qǐng)注明出處 http://www.paraller.com
原文排版地址 點(diǎn)擊獲取更好閱讀體驗(yàn)
轉(zhuǎn)載: http://blog.sina.com.cn/s/blog_77e8d1350100wfc7.html
沒知識(shí)真可怕——應(yīng)用密碼學(xué)的笑話之MD5+Salt不安全這段時(shí)間諸多爆庫(kù)的新聞,里面有許多饒有趣味的事情。那些用簡(jiǎn)單密碼,或者一個(gè)密碼走天下的笑話就不說(shuō)了,咱說(shuō)點(diǎn)有內(nèi)涵的。(這篇文章是給IT界的人看的,如果你看不懂,我會(huì)準(zhǔn)備一個(gè)簡(jiǎn)單的“如何辨別密碼安全糟糕的網(wǎng)站”的方法給你,另文描述。)
爆庫(kù)之后哀鴻遍野,一大堆人都在里面嗷嗷亂叫,當(dāng)然也包括我在內(nèi)。但是當(dāng)我嗷了一陣子之后,發(fā)現(xiàn)我的G點(diǎn)和大家的居然不一樣,就靜下心來(lái)觀察。結(jié)果發(fā)現(xiàn)就連大多數(shù)IT界的人對(duì)密碼學(xué)這個(gè)玩意兒居然都是一無(wú)所知的狀態(tài),各種人云亦云的笑話此起彼伏。當(dāng)然了,能看懂的也沒幾個(gè)。
就比如說(shuō)MD5不安全這個(gè)笑話。
其實(shí)也不知道這怎么就跟爆庫(kù)的事情扯到一塊去了,但總歸那幾天就有一堆人上來(lái)恨恨地說(shuō):MD5不安全,現(xiàn)在還有人用來(lái)做密碼的散列……好吧,大概對(duì)于有些人來(lái)說(shuō)有點(diǎn)深了,這個(gè)知識(shí)以后我補(bǔ)。咱接著說(shuō),“簡(jiǎn)直是遜爆了”。當(dāng)然,原文不是如此,但也差不多了。
言下之意,就是他的知識(shí)告訴他MD5是不安全的,而用這些的人大概是沒知識(shí)的。而事實(shí)上是,這么說(shuō)的人同樣沒有知識(shí)。為什么?首先要搞清楚所謂的“不安全”是指哪些問題?
誤區(qū)一:MD5被破解啦2004年的國(guó)際密碼學(xué)會(huì)議(Crypto’2004)王小云證明了MD5可以被碰撞,至此,MD5不再安全。沒錯(cuò),確實(shí)不安全了,但是具體是什么意思呢?大概多數(shù)人根本搞不清楚,也就不知道這個(gè)不安全是在哪一個(gè)場(chǎng)景底下的了。
要說(shuō)明這個(gè)問題,首先要搞懂MD5是一個(gè)什么概念。所謂的MD5實(shí)際上是一個(gè)散列函數(shù),具體說(shuō)特點(diǎn)如下:
無(wú)論多長(zhǎng)多隨意的信息,最后都轉(zhuǎn)換成一個(gè)固定長(zhǎng)度的散列值;
對(duì)于大量不同的信息,最后出來(lái)的散列值呈平均分布;
對(duì)于特定的一個(gè)信息,最后出來(lái)的散列值都是相同的。
根據(jù)上面的特點(diǎn),人們通??梢缘玫较旅娴慕Y(jié)論:
不可逆(用一個(gè)固定長(zhǎng)度的數(shù)值,怎么可能表示任意長(zhǎng)度的信息呢);
難碰撞(假如散列值有效范圍是從0到9,那么對(duì)于已知的一個(gè)明文平均需要嘗試11 5次才能找到一個(gè)相同的信息,對(duì)于任意兩個(gè)隨機(jī)明文的碰撞概率大概是1/N,即1/10。但是,一般來(lái)說(shuō)散列值有效范圍都在2的64次方以上,即0到18,446,744,073,709,551,616之間,甚至更多,你可以說(shuō)是一個(gè)天文數(shù)字);
可代表(既然不可逆,難碰撞,你用散列值是猜不出原來(lái)的信息,更不太可能偽造一個(gè)信息,其散列值完全相同。于是你出示一個(gè)散列值,就可以證明你持有某個(gè)有效信息,比如密碼)。
好,到這里你大概能發(fā)現(xiàn),上面結(jié)論中的難碰撞貌似不對(duì)。沒錯(cuò),2004年的破解就是證明了MD5在碰撞上面不可靠,也就是可以通過某種方式快速的找到具有相同散列值的另一個(gè)信息。比方說(shuō):
已知原來(lái)的信息是aaaaaaaaaa,散列值是10;
通過某方法,能迅速的找到一個(gè)信息aaaXaaaXaa,散列值也是10。
那么這會(huì)造成什么影響呢?這就需要先說(shuō)明一下,散列函數(shù)都可以用來(lái)做什么:
簽名認(rèn)證,證明某段信息沒有被修改;
密碼驗(yàn)證,證明你確實(shí)知道某個(gè)密碼;
其他,比如用在哈希表的散列過程等(這一個(gè)場(chǎng)景在某一類稱之為(D)DOS攻擊的場(chǎng)景下有關(guān),但跟密碼安全這種隱私/劫持相關(guān)的安全問題沒關(guān)系,咱就不討論了)。
所謂簽名認(rèn)證就是給出一個(gè)信息A,然后運(yùn)算H(A)=S,同時(shí)將A和S記錄起來(lái)。當(dāng)需要校驗(yàn)信息A有沒有被篡改的時(shí)候,只要計(jì)算H(A)=S",看S"是否等于S,就知道了。實(shí)際上過程比這個(gè)復(fù)雜,需要運(yùn)用非對(duì)稱加密才能保證安全。但總歸可以看出來(lái),如果我知道A和S,就能快速推算出一個(gè)A"出來(lái),使得H(A")=S,那么這個(gè)簽名認(rèn)證過程就失效了,或者說(shuō)就可以偽裝沒有篡改了。
就是給定一個(gè)密碼A,經(jīng)過散列運(yùn)算H(A)=S,此后,每一次用戶登錄的時(shí)候輸入A",計(jì)算H(A")=S",看看S"是否就是S。如果相等,那就說(shuō)明用戶知道密碼A,否則就是不知道。在這種應(yīng)用里面,如果我知道正確的密碼A,我還需要費(fèi)半天功夫搞出個(gè)A",使得H(A")=S嗎?完全沒必要。
換句話說(shuō),2004年那個(gè)MD5碰撞問題,對(duì)于密碼驗(yàn)證來(lái)說(shuō),根本就沒多大干系。那些拿著這個(gè)來(lái)說(shuō)MD5在密碼應(yīng)用上不安全的,壓根就沒搞懂MD5的碰撞不安全是怎么回事。下次有人再這么說(shuō)的時(shí)候,你大可以嘲笑一下對(duì)方,哪怕你不知道我上面在說(shuō)什么,你只要質(zhì)問一下“碰撞是什么意思,請(qǐng)不惜賜教”,多半就啞巴了。
誤區(qū)二:已經(jīng)有很大的MD5密碼(碰撞)庫(kù),有7.8萬(wàn)億個(gè)密碼呢!另一個(gè)拿來(lái)說(shuō)事的,就是MD5密碼庫(kù)如何如何大,比如包含了7.8萬(wàn)億個(gè)密碼。可是……你曉得英文大小寫+數(shù)字+2標(biāo)點(diǎn)共計(jì)64種字符,長(zhǎng)度是10個(gè)字符,總共會(huì)有多少個(gè)不同的密碼嗎?答案是1,152,921,504,606,846,976個(gè),也就是1,152,921.5萬(wàn)億個(gè)。那個(gè)7.8萬(wàn)億個(gè)密碼的密碼庫(kù),只占有這里面的百萬(wàn)分之6.7。
可為什么大家的密碼還老是泄露呢?那是因?yàn)椋?br>人的記性很差,所以總會(huì)選用比較好記的密碼,也就是弱密碼;
人的記性很差,所以總會(huì)選擇極有限的幾個(gè)密碼用在無(wú)窮多的網(wǎng)站上;
沒讀過書的人總是那么多,于是總用很差勁的方式來(lái)對(duì)待系統(tǒng)的安全部分,尤其是密碼部分。
先說(shuō)弱密碼,因?yàn)槟憧們A向于記生日、人名、單詞,于是你的密碼通常會(huì)是:
4位純數(shù)字,總計(jì)1萬(wàn)個(gè)不同的密碼;
6位純數(shù)字,總計(jì)100萬(wàn)個(gè)不同的密碼;
8位以內(nèi)的小寫字母,而且還是某種拼音或者單詞,總計(jì)估計(jì)不超過1000萬(wàn)個(gè)不同的密碼;
即便是8位小寫字母加數(shù)字,也就是時(shí)2.8萬(wàn)億個(gè)不同組合。
所以,一個(gè)7.8萬(wàn)億個(gè)密碼的密碼庫(kù),足以覆蓋大部分用戶的弱密碼了??墒牵瑔栴}沒那么簡(jiǎn)單,如果密碼保存和驗(yàn)證的過程正確,即便有一個(gè)7.8萬(wàn)萬(wàn)億的密碼庫(kù),黑客也不會(huì)搞出你的密碼來(lái)——不是不能,而是沒有興趣。
為什么?那就先要搞清楚,密碼是怎么被破解的。假設(shè)明文成為P,密鑰為k,加密過程為E(P, k),得到的密文是C,而解密過程為D(C, k)=P。那么破解的手段大致有如下幾種:
暴力窮舉:最笨最慢的方法,讓P"=0...X,找到E(P", k)=C;
算法分析:研究E(),找到其中的弱點(diǎn),然后P"=0...Y,找到E(P", k)=C,Y
密文分析:根據(jù)C1,C2,...Cn,找到里面的蛛絲馬跡,直接找到能解密的 替代函數(shù)D"(),或者直接解出C的部分明文P";
已知明文攻擊:有選擇的給出明文P1,P2,...Pn,讓對(duì)方用E(p, k)計(jì)算出C1, C2, ...Cn,通過分析找到k",使得D(C, k")=P;
生日攻擊:有選擇的給出明文P1,P2,...Pn,然后直接用這些明文嘗試用戶U1, U2, ...Un,恰巧某些用戶Ux就是用的其中一個(gè)明文。這是后面要講的其中一個(gè)重點(diǎn),所謂加鹽就是要解決類似的問題;
偷聽:監(jiān)聽鏈路,等用戶U給出P時(shí)即可直接獲得,或者用戶給出的是E(P,k)=C,則下次也可以用同樣的協(xié)議給出C,偽裝用戶U。什么QQ盜號(hào)木馬,就屬于這種形式;
整鍋端:通過后門漏洞等,直接拿到所有數(shù)據(jù)和程序,然后進(jìn)行上面的各種分析和攻擊。本次CSDN為開端的,多數(shù)是這種;
間諜(找到人,用各種賄賂,直接拿到E()、D()和k,甚至所有移植的C和P,或者自己拿著這些東西出去賣錢)。
上面的攻擊難度和耗費(fèi)時(shí)間和成本基本上是遞減的,其中整鍋端的這種攻擊,可以使得攻擊者可以選擇更簡(jiǎn)單快速的攻擊方式,這取決于密碼保管方采用的什么保管策略和協(xié)議。如果做得好,那么能做的頂多就是已知明文攻擊,或者針對(duì)個(gè)別用戶做生日攻擊。如果做得不好,比如說(shuō)像這次爆發(fā)的結(jié)果看,就直接拿到明文密碼了。
很顯然,如果用暴力破解,那么結(jié)果就是對(duì)每個(gè)用戶嘗試超過1,152,921萬(wàn)億個(gè)不同的密碼,這是極其費(fèi)時(shí)而不現(xiàn)實(shí)的。所以,大多數(shù)情況下會(huì)選擇生日攻擊這種形式,因?yàn)榇蠖鄶?shù)人會(huì)選擇那些比較好記的密碼,而這些密碼占總體密碼只是一個(gè)極有限的一部分。這就是為什么說(shuō)7.6萬(wàn)億個(gè)密碼的庫(kù),就可以攪得大多數(shù)網(wǎng)站天翻地覆。那么這種攻擊具體是如何實(shí)施的呢?我來(lái)舉一個(gè)例子:
比如說(shuō)大家可能很喜歡使用123456,那么經(jīng)過MD5散列之后就可以得到一個(gè)散列值,比如說(shuō)是qwerty。于是乎當(dāng)我們拿到一個(gè)網(wǎng)站的數(shù)據(jù)庫(kù),發(fā)現(xiàn)里面有為數(shù)不少的用戶,其密碼列保存的是qwerty。這說(shuō)明幾個(gè)問題:
該站點(diǎn)密碼保存的方式不好,很可能是計(jì)算C=E(P),保存C;
這些用戶的密碼很可能是相同的。
你只要嘗試一下用qwerty登錄其中一個(gè)用戶,發(fā)現(xiàn)登錄不了,就可以得出如下結(jié)論:
該站點(diǎn)不是使用明文保存密碼;
該站點(diǎn)使用的是MD5;
該用戶的密碼就是123456。
剩下來(lái)要做的事情,就是用那個(gè)7.6萬(wàn)億的密碼庫(kù),逐一比對(duì)每個(gè)用戶的密碼列了。
好,第二個(gè)MD5不安全的誤區(qū)來(lái)了:上述破解過程對(duì)于絕大多數(shù)散列函數(shù)來(lái)說(shuō),基本上都是一個(gè)道理。比如說(shuō)SHA1,用同樣的密碼樣本,也可以制作出一個(gè)7.6萬(wàn)億的密碼庫(kù),然后接下來(lái)的事情就和MD5一樣了。那么當(dāng)大家用這個(gè)方法都不安全的時(shí)候,何來(lái)一個(gè)說(shuō)法說(shuō)MD5就不安全呢?
總結(jié):如果有人跟你說(shuō)7.6萬(wàn)億個(gè)密碼的密碼庫(kù),你大可以通過“你知道什么是生日攻擊或者碰撞攻擊嗎”來(lái)嘲笑他,哪怕上面那堆東西你看不懂一個(gè)字。
誤區(qū)三:MD5加鹽不安全!還有人會(huì)說(shuō)MD5+salt(就是俗稱的加鹽)不安全,理由是MD5運(yùn)算很快云云。這樣說(shuō)的人,肯定不知道MD5+salt要避免的問題是什么,或者說(shuō)MD5+salt為什么就安全了,甚至大概連MD5+salt的salt是個(gè)什么東西,應(yīng)該怎么個(gè)加法都不知道。
要搞明白這些個(gè)問題,首先要了解兩個(gè)最基本的知識(shí):
密碼學(xué)的理論安全,是建立在就算你知道了所有其他的信息包括E()、D()
的具體算法,整個(gè)加解密的協(xié)議,以及保存密文的方法,乃至所有程序源代碼、數(shù)據(jù)庫(kù),你只要不知道密鑰k是什么,對(duì)于待破解的密文C是不能得到明文P的,甚至用任意其它明文P"計(jì)算出相應(yīng)的密文C",你也得不到待破解密文C所對(duì)應(yīng)的明文P是什么;
密碼學(xué)的應(yīng)用安全,是建立在破解所要付出的成本遠(yuǎn)超出能得到的利益上的。
對(duì)于保存用戶密碼所用的散列函數(shù)來(lái)說(shuō),是沒有k這回事的。就算有那也是保存在服務(wù)端,一鍋端的時(shí)候就會(huì)拿到。所以要保證理論的安全,就必須要求算法本身不能通過密文C能得到明文P,這個(gè)散列算法本身就可以做到。另外一個(gè)要保證的事情,那就是通過各種可以公開讓大家知道的保存密碼方法,和驗(yàn)證協(xié)議,做到不遭受包括生日攻擊在內(nèi)的各種攻擊。然而很不幸的是,這種保證實(shí)際上是做不到的,或者說(shuō)無(wú)法在面對(duì)這種攻擊的時(shí)候,讓針對(duì)單個(gè)用戶的破解達(dá)到近似暴力破解所需時(shí)間的程度。關(guān)于這個(gè)問題舉一個(gè)例子:
據(jù)說(shuō)現(xiàn)在隨便一臺(tái)好點(diǎn)的機(jī)器,每秒鐘可以計(jì)算700萬(wàn)個(gè)密碼的MD5值。也就是說(shuō)7.6萬(wàn)億的密碼庫(kù),需要運(yùn)算大概1百萬(wàn)秒,也就是11天半。如果你被FBI,克格勃,或者國(guó)家安全局盯上的話,他們肯定會(huì)用性能強(qiáng)大萬(wàn)倍以上的機(jī)器來(lái)對(duì)付你。也就是說(shuō),這個(gè)時(shí)間會(huì)縮短到大概2分鐘。
于是,實(shí)際上密碼保存的著眼點(diǎn)是應(yīng)用安全。還是上面的例子,比如說(shuō),如果黑客A花5000買了個(gè)機(jī)器,而這臺(tái)機(jī)器大概能用2年。如果他用11天半破解了你的賬號(hào),那么成本大概就等于5000元/2年*11天半=79元。但如果拿到你的賬號(hào)密碼之后,里面能獲取的利益也就5毛,這個(gè)黑客A就虧了。虧本生意是不會(huì)有人去做的,就算做了,他的損失也比你大。所以應(yīng)用安全的重點(diǎn)就是提高破解的門檻,手段包括:
前一種方法也不是不行,但是這種方法并不從根本上解決生日攻擊的問題?;蛘哒f(shuō),產(chǎn)生一個(gè)密碼庫(kù)的時(shí)間從1臺(tái)普通機(jī)器用11天半,增加到用一個(gè)超級(jí)計(jì)算機(jī)集群用1年,但是只要有了這個(gè)庫(kù)之后,對(duì)已有的密碼散列值進(jìn)行生日攻擊只要10秒鐘,那還是很劃算的。因?yàn)楫a(chǎn)生密碼庫(kù)的成本是一種沉沒成本,和用戶量有多少完全沒有關(guān)系。比如說(shuō),用這個(gè)密碼庫(kù)去對(duì)比一個(gè)瑞士銀行賬戶的密碼,只要有幾個(gè)沙特王子的密碼在這個(gè)密碼庫(kù)里面,你就可以買下幾百個(gè)超級(jí)計(jì)算機(jī)集群了。
而后者,則是將生成密碼庫(kù)的沉沒成本變成邊際成本,也就是說(shuō):如果需要為每一個(gè)用戶生成一遍密碼庫(kù),那整個(gè)破解的成本就會(huì)隨著用戶量的提高而急劇增加。比如生成一個(gè)用戶的密碼庫(kù)需要花11天半的時(shí)間,一共有1萬(wàn)個(gè)用戶,全部破解就需要315年的時(shí)間。就算生成密碼庫(kù)的時(shí)間壓縮到10分鐘,全部破解也需要70天的時(shí)間。那怎么做到呢?方法就是加鹽,也就是那個(gè)誤區(qū)“md5+salt不安全”。
加鹽怎么加呢?方法如下:
針對(duì)每一個(gè)用戶U,生成一個(gè)隨機(jī)值Salt,并且在以后永遠(yuǎn)保持不變,任意兩個(gè)用戶的鹽不能相同。然后當(dāng)用戶設(shè)置密碼的時(shí)候,根據(jù)明文密碼P,計(jì)算MD5(P+Salt)=C。而登錄的時(shí)候用戶也給出明文密碼P",服務(wù)器拿到之后同樣計(jì)算MD5(P"+Salt)=C",看C"是否等于C。我們來(lái)看一下這樣是否就達(dá)到目的了:
假設(shè)有兩個(gè)用戶A和B,密碼都是123456,但鹽分別是aaaa和bbbb,于是MD5(123456+aaaa)=X8jv8o,而MD5(123456+bbbb)=8go489,而不再是標(biāo)準(zhǔn)的qwerty。這時(shí)候:
黑客拿到的只是:用戶A的鹽是aaaa,散列值是X8jv8o。用戶B的鹽是bbbb,散列值是8go489;
首先,標(biāo)準(zhǔn)的密碼庫(kù)失效了;
其次,每個(gè)用戶的散列值都不一樣,你無(wú)法根據(jù)相同散列值數(shù)量的多少得出哪些是弱密碼;
再次,鹽是aaaa,散列值是X8jv8o,是無(wú)法推導(dǎo)出密碼是123456,還是abcdef,還是別的什么東西,不像在簡(jiǎn)單MD5的情況下,看到qwerty就知道那是123456;
于是,黑客剩下兩個(gè)選項(xiàng):
針對(duì)每個(gè)用戶進(jìn)行暴力破解;
針對(duì)每一個(gè)用戶的鹽,比如aaaa,分別根據(jù)弱密碼明文庫(kù),計(jì)算MD5(弱密碼明文+aaaa)=鹽aaaa對(duì)應(yīng)的散列值,然后再用這個(gè)密碼庫(kù)去對(duì)用戶A進(jìn)行生日攻擊。對(duì)用戶B還得重新根據(jù)新的鹽bbbb生成密碼庫(kù)……
看,這就是加鹽的作用。
總結(jié):如果你要嘲笑這類人,你可以質(zhì)疑他 “你知道沉沒成本和邊際成本嗎”,或者“加鹽之后如何進(jìn)行生日攻擊或者碰撞攻擊”,即便上面寫的東西你都沒看懂。
嗯,其實(shí)在這個(gè)誤區(qū)下面還有一些有意思的分支誤區(qū):
說(shuō)實(shí)話,什么叫做加固定鹽我一開始沒看懂,直到后來(lái)看到說(shuō)給每個(gè)用戶加隨機(jī)鹽我才恍然大悟。那意思是說(shuō),給每一個(gè)用戶都用一樣的鹽,比如用戶A使用鹽aaaa,用戶B也使用aaaa,……用戶ZZZ還是使用aaaa。你如果看懂了上面我說(shuō)的內(nèi)容,大概你就知道鹽是用來(lái)防止一個(gè)密碼碰撞庫(kù)可以用在所有用戶身上。這種“固定鹽”打一開始就違反了上述原則,根本就不是鹽。所以,在應(yīng)用密碼學(xué)的書里面壓根就沒有“固定鹽”這樣的說(shuō)法。
之所以產(chǎn)生固定鹽的想法,大概源于不讓已有的簡(jiǎn)單MD5碰撞庫(kù)能用在你身上,并且鹽是不會(huì)泄露的。鹽這種不是只有用戶自己才知道的東西,不是密鑰k,如果你的安全性就指望在沒人知道你的“固定鹽”是多少,那就違反了密碼學(xué)的準(zhǔn)則了,都不需要用腦袋想就知道這是不安全的。而且,人家連你的密碼庫(kù)都能拿到,鹽還不是輕而易舉的事情么?
還有說(shuō)不知道我的算法是什么,老大,人家能攻破你的系統(tǒng)登進(jìn)來(lái),把你的整套數(shù)據(jù)庫(kù)拿走,還差程序不成?告訴你,剩下的問題只是你的庫(kù)里面有多少價(jià)值而已。如果是一個(gè)不要說(shuō)是銀行庫(kù)、淘寶庫(kù),就算是一個(gè)社交庫(kù),里面的價(jià)值(比如釣釣魚)都足夠請(qǐng)一個(gè)“安全專家”來(lái)審閱你的代碼了。不要把這個(gè)安全專家想象的太高級(jí),隨便找個(gè)有點(diǎn)想象力的技術(shù)人員就可以了,比如這樣的思路:
我已經(jīng)有你的程序了;
找到生成密碼散列值的入口函數(shù)Fuck();
拿一個(gè)明文密碼庫(kù),在一個(gè)用戶賬號(hào)上面不停地改密碼,也就是用每一個(gè)P不斷地Fuck(P);
好了,密碼碰撞庫(kù)就出來(lái)了。
固定鹽這種想法還不是最搞笑的,還有下面這一個(gè):
我都懶得說(shuō)什么,這種說(shuō)法除了暴露你的愚昧無(wú)知之外,還能有什么意義呢?這說(shuō)明你不了解:
什么是MD5;
加鹽是干什么的;
密碼學(xué)的準(zhǔn)則之一是不能依賴于你的算法不被公開;
什么樣的算法是安全的,怎么樣算是安全。
有沒有高雅一點(diǎn)的誤區(qū)?也有:
好吧,這也許管用,因?yàn)槌杀敬_實(shí)挺高的。但是:
單純的使用這種算法不加鹽,只不過增加了沉沒成本,邊際成本是不會(huì)變的,生日攻擊還是存在的;
1秒鐘算3個(gè)密碼,雖然破解時(shí)的成本大大增加了,但是你自己的系統(tǒng)的運(yùn)行成本也會(huì)大大的增加。比如說(shuō):原來(lái)用MD5時(shí)一臺(tái)服務(wù)器解決用戶登錄問題負(fù)載剛好100%,你用這個(gè)該死的bcrypt算法就需要該死的上萬(wàn)臺(tái)服務(wù)器才能解決問題。
其實(shí)這回歸到一個(gè)簡(jiǎn)單的問題上:你的庫(kù)里面價(jià)值幾何?如果你是銀行,興許值得。但對(duì)于大部分的站點(diǎn)來(lái)說(shuō),這么搞只會(huì)過度增加自己的成本,MD5加鹽就已經(jīng)可以讓大部分黑客完全喪失興趣了。
還有一些類似的說(shuō)法,也是一樣的。比如說(shuō):MD5加鹽多算幾遍。其實(shí)這麼做無(wú)非就是增加了一些計(jì)算成本而已,和bcrypt思路無(wú)差異。(當(dāng)然,也有人以為這樣多算幾遍因?yàn)樗惴ú粯?biāo)準(zhǔn),人家不知道,于是就安全了。請(qǐng)參見誤區(qū)三點(diǎn)一。)
其實(shí),只要你加的是真正意義上的鹽——每個(gè)用戶都不相同、隨機(jī)的,那其余的手段基本上不是花拳繡腿,就是在表演如何自己砸自己的腳。當(dāng)然了,不排除有些真的很天才的想法,但大部分人的說(shuō)法都不在這個(gè)范疇內(nèi)。
總結(jié)陳詞如果你沒讀過某個(gè)領(lǐng)域的至少一本書,最好別隨便發(fā)言,否則別人一眼就能看出你是個(gè)什么青年;
MD5+salt對(duì)于大部分中小網(wǎng)站來(lái)說(shuō)已經(jīng)足夠安全了;
你實(shí)在信不過MD5,那就用點(diǎn)SHA1之流,在密碼驗(yàn)證這種場(chǎng)景里面,已經(jīng)足夠了,除非你是開銀行或者開淘寶的;
身份驗(yàn)證只是安全的其中一個(gè)環(huán)節(jié),想想這些庫(kù)都是怎么被偷出來(lái)的,想想各種QQ木馬……
你在網(wǎng)絡(luò)上看到的大部分言論基本上屬于在此領(lǐng)域完全無(wú)知的人所想象出來(lái)的錯(cuò)誤言論,比如說(shuō)搜索“MD5不安全”,除了極少數(shù)個(gè)別的抄正規(guī)網(wǎng)站的報(bào)道外,以及個(gè)別真正的安全網(wǎng)站里面的信息外,幾乎都是各種笑話;
在安全這方面,只要你不是專家,你還是當(dāng)他不存在比較好。和食品安全一樣,在網(wǎng)絡(luò)安全方面,其實(shí)大部分網(wǎng)站這方面做得都很糟糕,你要知道了真實(shí)的情況,恐怕沒法用網(wǎng)絡(luò)上的東西了。
文章核心MD5的作用是 簽名驗(yàn)證和密碼驗(yàn)證
MD5的破解指的是 簽名驗(yàn)證這一塊可以被偽造(但只是特定的)
了解沉沒成本,一次性生成密碼庫(kù), 邊際成本,對(duì)于每個(gè)人都需要付出成本
只要MD5+隨機(jī)salt,針對(duì)一個(gè)用戶,基本沒有辦法破解,如果明文是十位的密碼,就是無(wú)解
對(duì)于MD5的密碼破解,只有一種辦法 生日彩虹表攻擊
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11302.html
摘要:認(rèn)為要從的結(jié)果中取得原文才算破解,本身就是對(duì)摘要算法的誤解。摘要算法與上面兩種完全不同,前面兩種密碼是用于防止信息被竊取,而摘要算法的目標(biāo)是用于證明原文的完整性,也就是說(shuō)用于防止信息被篡改。當(dāng)進(jìn)行摘要算法后,信息就丟失了。 轉(zhuǎn)載請(qǐng)注明出處 http://www.paraller.com 原文排版地址 http://www.paraller.com/2016/05/22/%5B%E8...
摘要:背景介紹相信很多人手機(jī)上都收到過一些營(yíng)銷短信,短信里面有時(shí)候會(huì)附帶一些網(wǎng)址,如下圖這些網(wǎng)址往往都是非常短,但是當(dāng)我們打開之后,如果你仔細(xì)觀察,中間會(huì)有跳轉(zhuǎn),最終瀏覽器地址欄顯示的網(wǎng)址并不是你短信里面看到的網(wǎng)址,這就是短網(wǎng)址原理和應(yīng)用短網(wǎng)1.背景介紹 相信很多人手機(jī)上都收到過一些營(yíng)銷短信,短信里面有時(shí)候會(huì)附帶一些網(wǎng)址,如下圖 showImg(https://user-gold-cdn.xitu...
摘要:哈希摘要算法哈希函數(shù)也稱散列函數(shù),是一種根據(jù)任意長(zhǎng)度數(shù)據(jù)計(jì)算出固定簽名長(zhǎng)度的算法,比如,系列。除了算法,還存在很多其他形式的哈希函數(shù)算法,比如系列,他們的設(shè)計(jì)思路大體相同。 前言 最近在看一些NPM庫(kù)的時(shí)候總是看到各種哈希簽名算法,之前工作中也有用到過簽名算法,但并沒有深入理解過其中的原理,于是找了點(diǎn)資料稍微了解了一下,總結(jié)了這篇文章。 哈希摘要算法 哈希函數(shù)(也稱散列函數(shù)),是一種根...
摘要:是一個(gè)極度純凈的上傳插件,通過簡(jiǎn)單調(diào)整就可以融入到任何項(xiàng)目,支持多文件上傳上傳速率動(dòng)態(tài)控制真實(shí)進(jìn)度監(jiān)控分塊生成分塊上傳校驗(yàn)秒傳暫停取消等。 跨域?qū)W習(xí)筆記 前言: 當(dāng)一個(gè)資源,向與之所在服務(wù)器不同的域或端口請(qǐng)求另一個(gè)資源時(shí),這個(gè)HTTP請(qǐng)求,我們認(rèn)為是跨域的請(qǐng)求。出于安全考慮,瀏覽器會(huì)限制腳本發(fā)起的跨域HTTP請(qǐng)求。 那天后端讓我把token放到http請(qǐng)求頭字段里,說(shuō)是為了和RN端統(tǒng)一...
摘要:支付平臺(tái)支付成功后,會(huì)往網(wǎng)站的某個(gè)回調(diào)發(fā)送數(shù)據(jù)?;卣{(diào)接收數(shù)據(jù)并根據(jù)隊(duì)則,生成檢驗(yàn)串,并判斷合法性。返回散列值字符串。 基本介紹 用途廣泛,很多網(wǎng)站都繼承了在線支付功能,如paypal,網(wǎng)銀在線,易寶支付,支付寶,快錢等第三方平臺(tái). 原理 基本上,每個(gè)銀行都有自家的支付接口,為什么不直接連接到銀行的接口去支付,而需要通過第三方支付? 銀行眾多,每家的銀行用的技術(shù)不一樣,比如招行使用.n...
閱讀 2409·2021-11-23 09:51
閱讀 1220·2021-11-22 13:54
閱讀 3432·2021-09-24 10:31
閱讀 1099·2021-08-16 10:46
閱讀 3632·2019-08-30 15:54
閱讀 713·2019-08-30 15:54
閱讀 2896·2019-08-29 17:17
閱讀 3172·2019-08-29 15:08