摘要:報(bào)道中,被攻破的意思就是說(shuō)找到了兩個(gè)不同的內(nèi)容,用算法計(jì)算之后的值是一樣的。
前段時(shí)間被一個(gè)重大的新聞刷屏了,那就是 Google 攻破了 SHA-1。很多人看了后的第一反應(yīng)大概就是:哦,知道了~ 很多事情看起來(lái)跟我們無(wú)關(guān),實(shí)際上卻對(duì)我們產(chǎn)生了巨大的影響,比如川普當(dāng)選總統(tǒng),我們很多人總覺(jué)得這事離我們很遙遠(yuǎn),但其實(shí)就像一滴水滴落水中,很快便會(huì)波及四周。Google 攻破 SHA-1 這事也是,看似跟我們無(wú)關(guān),其實(shí)與我們息息相關(guān)。雞湯不說(shuō)了,下面我們具體地聊一聊這個(gè) SHA-1。
我們先從 HTTP 協(xié)議講起。搞前端的絕大多數(shù)對(duì)此并不陌生,HTTP 協(xié)議就是在網(wǎng)絡(luò)中用于客戶(hù)端和服務(wù)器端之間通信的一種協(xié)議。所謂協(xié)議,就是一種約定,約定通信的雙方由誰(shuí)發(fā)起通信,信件應(yīng)該發(fā)往何處,信件的格式什么樣,怎樣結(jié)束通信等等事項(xiàng)。就好比一個(gè)人要給另一個(gè)人寫(xiě)信,首先要確定信應(yīng)該寄到哪里,再確定信的格式怎么寫(xiě)才能讓對(duì)方看得懂以及怎么確認(rèn)對(duì)方收到信等等問(wèn)題,這些都是 HTTP 協(xié)議所規(guī)定的。
有了這些約定,我們客串之一趙鐵柱按照約定寫(xiě)好信件打算寄給李小花,下面信件就上路了。這個(gè)時(shí)候,問(wèn)題來(lái)了...
這封信件可能半路被張全蛋給偷看了,那可是滿(mǎn)滿(mǎn)的羞羞的情話(huà)啊!
這封信件可能被張全蛋修改了,信的結(jié)尾坦白自己其實(shí)喜歡男的...
李小花收到了信,但她怎么能確定這是趙鐵柱寫(xiě)的,而不是張全蛋或者其他人寫(xiě)的呢?(這個(gè)問(wèn)題這里不談)
好在趙鐵柱進(jìn)廠(chǎng)組裝手機(jī)前干過(guò)鎖匠,他便想出了一個(gè)辦法。
他發(fā)明了一種“鴛鴦鎖”,這種鎖高級(jí)了,有兩把鑰匙,A 鑰匙、B鑰匙,這把鎖如果用 A 鑰匙鎖上的話(huà)只能用 B 鑰匙打開(kāi),而用 B 鑰匙鎖上的話(huà)只能用 A 鑰匙打開(kāi)。這樣,他也為李小花做了一把鴛鴦鎖,并把 A 鑰匙(私鑰)留給了李小花自己,而把 B 鑰匙(公鑰)拿了過(guò)來(lái),每次他寫(xiě)信時(shí)就用 B 鑰匙把信件加密,而解密的鑰匙,即鑰匙 A 只有李小花有,這樣就保證了安全。反過(guò)來(lái),李小花想發(fā)信件,就用趙鐵柱的公鑰加密,然后趙鐵柱用自己的私鑰解密。
這樣還不夠,趙鐵柱還擔(dān)心信在中途被人篡改了,好在他干鎖匠前也干過(guò)碼農(nóng),于是他又想到一種方法。(請(qǐng)注意,下面我們今天的主人公登場(chǎng))
他用計(jì)算機(jī)寫(xiě)了個(gè)算法,這個(gè)算法的特點(diǎn)就是根據(jù)不同的內(nèi)容生成一串字符,就是說(shuō)當(dāng)內(nèi)容一樣時(shí),生成的字符一定是一樣的,而只要內(nèi)容發(fā)生一丁點(diǎn)改變,生成的字符串就完全變了樣。舉個(gè)例子,你們感受下:
我愛(ài)你:5890a73fed38bf09622c34ad9391f1d09c0ec100 我不愛(ài)你:39e22987f658c46a8eab02e6302dc980d9236014
這樣趙鐵柱每次發(fā)信件前會(huì)用這個(gè)算法根據(jù)自己信的內(nèi)容生成一個(gè)字符串,然后把這個(gè)字符串也用上面的加密的方式發(fā)送給李小花。這樣,李小花收到了兩樣?xùn)|西,一個(gè)是信本身,還有一個(gè)是趙鐵柱根據(jù)信件原文生成的字符串。李小花用趙鐵柱給他的這個(gè)算法根據(jù)她收到的信也生成一個(gè)字符串,然后跟收到的字符串比對(duì),如果一樣,那基本肯定這封信的內(nèi)容沒(méi)有被人給篡改過(guò)。
這樣, 趙鐵柱和李小花過(guò)上了安安靜靜談戀愛(ài)的生活~張全蛋卻孤獨(dú)終老...(畫(huà)外音:找個(gè)會(huì)寫(xiě)代碼的男票多重要!)
然而,我們的故事才剛剛開(kāi)始。
上面趙鐵柱發(fā)明的這個(gè)算法叫做 SHA-1,屬于 SHA 家族,SHA-1 是一個(gè) Hash 函數(shù),在這個(gè)使用場(chǎng)景下叫做密碼散列函數(shù)。
SHA-1 的特點(diǎn)就是:1)特定的內(nèi)容生成同樣的結(jié)果(一個(gè)固定長(zhǎng)度的字符串);2)內(nèi)容不一樣則生成的不一樣的結(jié)果。但是,這僅僅是理想情況罷了。特點(diǎn) 1 是沒(méi)有爭(zhēng)議的,但特點(diǎn) 2 真的在所有情況下都這樣嗎?有沒(méi)有一種可能就是,兩個(gè)不一樣的內(nèi)容生成的結(jié)果是一樣的呢?答案是有的。這種情況還有個(gè)專(zhuān)有名詞,“哈希碰撞”,就是用兩個(gè)不一樣的內(nèi)容刻意算出兩個(gè)同樣的 Hash 結(jié)果。報(bào)道中,“SHA-1 被攻破”的意思就是說(shuō)找到了兩個(gè)不同的內(nèi)容,用 SHA-1 算法計(jì)算之后的 Hash 值是一樣的。其實(shí)不僅僅是 SHA-1 算法,包括現(xiàn)在常用的 SHA-256、SHA-384 等等算法都可能產(chǎn)生哈希碰撞。但是為什么說(shuō) SHA-1 被攻破而不是 SHA-256 被攻破呢?因?yàn)樾枰紤]當(dāng)今計(jì)算機(jī)的計(jì)算能力,如果用當(dāng)今計(jì)算機(jī)算 100 年才能發(fā)現(xiàn)某哈希算法的哈希碰撞,那毫無(wú)疑問(wèn)這個(gè)哈希算法是安全的,這也就是 SHA-1 前幾年是安全的,因?yàn)榍皫啄甑挠?jì)算能力還不足夠快到很快能制造哈希碰撞。那問(wèn)題來(lái)了,這“快”到底是多快呢?
SHA-1 的輸出是 40 個(gè)字符組成的字符串,在計(jì)算機(jī)中占 160 bit,那么如果想找出一組碰撞的話(huà),那就需要選 (2^160 + 1) 組不同的數(shù)據(jù)來(lái)計(jì)算他們的 Hash 值,根據(jù)抽屜原理這很好理解,13 個(gè)人當(dāng)中肯定有兩個(gè)人的生日在同一個(gè)月。但是 2^160 是個(gè)什么概念呢,地球上的沙子差不多 2^60 個(gè),乖乖。但如果我們不要求 100% 能找到一組碰撞,我們只要求 50%,那要算多少組呢?根據(jù)概率計(jì)算,大約需要計(jì)算 2^80 組,密碼學(xué)上規(guī)定,如果有一種方法能夠在計(jì)算時(shí)間小于 2^80 內(nèi) 50% 的可能性找到一組碰撞,那么這種哈希算法就不安全了。
但是,不得不提的是,我國(guó)的密碼學(xué)家王小云在 2005 年找到了一個(gè)快速的攻擊方法,使得能夠在 2^69 時(shí)間內(nèi)大概率找到碰撞(此處應(yīng)該有掌聲)。之后又有人發(fā)現(xiàn)其他的攻擊方法,使得時(shí)間縮減到 2^57.5。但問(wèn)題來(lái)了,SHA-1 原來(lái)早就被攻破了,那為毛這次又說(shuō)被 Google 攻破了呢?因?yàn)橐郧芭鲎驳慕Y(jié)果可能是兩個(gè)沒(méi)有意義的內(nèi)容,但這次 Google 構(gòu)造了兩個(gè)有意義但內(nèi)容不同的文件。兩個(gè)文件長(zhǎng)這樣:
文件可以在這里下載,你可以用在線(xiàn)的 SHA-1 工具測(cè)試。
這就厲害了,那有可能你已經(jīng)加密的合同上寫(xiě)的是 100 萬(wàn),結(jié)果有人構(gòu)造了一個(gè) 1000 萬(wàn)的訂單但 Hash 值一樣,你到了法院直呼冤屈。
我們普通人雖然沒(méi)有大單子,但畢竟?fàn)可娴轿覀兊乃矫埽蛦?wèn)你們怕不怕?嘿,不過(guò)也不用怕,現(xiàn)在業(yè)界正在逐漸用更安全的算法替換 SHA-1。
參考:
https://www.zhihu.com/questio...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/11221.html
摘要:閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。并且發(fā)現(xiàn),除了的兩步驗(yàn)證之外,其它兩步驗(yàn)證很多能看到谷歌驗(yàn)證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用node.js實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。 ...
摘要:閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。并且發(fā)現(xiàn),除了的兩步驗(yàn)證之外,其它兩步驗(yàn)證很多能看到谷歌驗(yàn)證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用node.js實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。 ...
閱讀 3543·2021-09-22 15:50
閱讀 3241·2019-08-30 15:54
閱讀 2755·2019-08-30 14:12
閱讀 3064·2019-08-30 11:22
閱讀 2088·2019-08-29 11:16
閱讀 3583·2019-08-26 13:43
閱讀 1196·2019-08-23 18:33
閱讀 929·2019-08-23 18:32