一篇文章讓你知道被 Google 攻破的 SHA-1 是什麼

前段時間被一個重大的新聞刷屏了,那就是 Google 攻破了 SHA-1。不少人看了後的第一反應大概就是:哦,知道了~ 不少事情看起來跟咱們無關,實際上卻對咱們產生了巨大的影響,好比川普當選總統,咱們不少人總以爲這事離咱們很遙遠,但其實就像一滴水滴落水中,很快便會波及四周。Google 攻破 SHA-1 這事也是,看似跟咱們無關,其實與咱們息息相關。雞湯不說了,下面咱們具體地聊一聊這個 SHA-1。前端

咱們先從 HTTP 協議講起。搞前端的絕大多數對此並不陌生,HTTP 協議就是在網絡中用於客戶端和服務器端之間通訊的一種協議。所謂協議,就是一種約定,約定通訊的雙方由誰發起通訊,信件應該發往何處,信件的格式什麼樣,怎樣結束通訊等等事項。就比如一我的要給另外一我的寫信,首先要肯定信應該寄到哪裏,再肯定信的格式怎麼寫才能讓對方看得懂以及怎麼確認對方收到信等等問題,這些都是 HTTP 協議所規定的。算法

有了這些約定,咱們客串之一趙鐵柱按照約定寫好信件打算寄給李小花,下面信件就上路了。這個時候,問題來了...安全

  • 這封信件可能半路被張全蛋給偷看了,那但是滿滿的羞羞的情話啊!服務器

  • 這封信件可能被張全蛋修改了,信的結尾坦白本身其實喜歡男的...網絡

  • 李小花收到了信,但她怎麼能肯定這是趙鐵柱寫的,而不是張全蛋或者其餘人寫的呢?(這個問題這裏不談)函數

好在趙鐵柱進廠組裝手機前幹過鎖匠,他便想出了一個辦法。工具

他發明了一種「鴛鴦鎖」,這種鎖高級了,有兩把鑰匙,A 鑰匙、B鑰匙,這把鎖若是用 A 鑰匙鎖上的話只能用 B 鑰匙打開,而用 B 鑰匙鎖上的話只能用 A 鑰匙打開。這樣,他也爲李小花作了一把鴛鴦鎖,並把 A 鑰匙(私鑰)留給了李小花本身,而把 B 鑰匙(公鑰)拿了過來,每次他寫信時就用 B 鑰匙把信件加密,而解密的鑰匙,即鑰匙 A 只有李小花有,這樣就保證了安全。反過來,李小花想發信件,就用趙鐵柱的公鑰加密,而後趙鐵柱用本身的私鑰解密。測試

這樣還不夠,趙鐵柱還擔憂信在中途被人篡改了,好在他幹鎖匠前也幹過碼農,因而他又想到一種方法。(請注意,下面咱們今天的主人公登場)加密

他用計算機寫了個算法,這個算法的特色就是根據不一樣的內容生成一串字符,就是說當內容同樣時,生成的字符必定是同樣的,而只要內容發生一丁點改變,生成的字符串就徹底變了樣。舉個例子,大家感覺下:spa

我愛你:5890a73fed38bf09622c34ad9391f1d09c0ec100
我不愛你:39e22987f658c46a8eab02e6302dc980d9236014

這樣趙鐵柱每次發信件前會用這個算法根據本身信的內容生成一個字符串,而後把這個字符串也用上面的加密的方式發送給李小花。這樣,李小花收到了兩樣東西,一個是信自己,還有一個是趙鐵柱根據信件原文生成的字符串。李小花用趙鐵柱給他的這個算法根據她收到的信也生成一個字符串,而後跟收到的字符串比對,若是同樣,那基本確定這封信的內容沒有被人給篡改過。

這樣, 趙鐵柱和李小花過上了安安靜靜談戀愛的生活~張全蛋卻孤獨終老...(畫外音:找個會寫代碼的男票多重要!)

然而,咱們的故事纔剛剛開始。

上面趙鐵柱發明的這個算法叫作 SHA-1,屬於 SHA 家族,SHA-1 是一個 Hash 函數,在這個使用場景下叫作密碼散列函數

SHA-1 的特色就是:1)特定的內容生成一樣的結果(一個固定長度的字符串);2)內容不同則生成的不同的結果。可是,這僅僅是理想狀況罷了。特色 1 是沒有爭議的,但特色 2 真的在全部狀況下都這樣嗎?有沒有一種可能就是,兩個不同的內容生成的結果是同樣的呢?答案是有的。這種狀況還有個專有名詞,「哈希碰撞」,就是用兩個不同的內容刻意算出兩個一樣的 Hash 結果。報道中,「SHA-1 被攻破」的意思就是說找到了兩個不一樣的內容,用 SHA-1 算法計算以後的 Hash 值是同樣的。其實不只僅是 SHA-1 算法,包括如今經常使用的 SHA-25六、SHA-384 等等算法均可能產生哈希碰撞。可是爲何說 SHA-1 被攻破而不是 SHA-256 被攻破呢?由於須要考慮當今計算機的計算能力,若是用當今計算機算 100 年才能發現某哈希算法的哈希碰撞,那毫無疑問這個哈希算法是安全的,這也就是 SHA-1 前幾年是安全的,由於前幾年的計算能力還不足夠快到很快能製造哈希碰撞。那問題來了,這「快」究竟是多快呢?

SHA-1 的輸出是 40 個字符組成的字符串,在計算機中佔 160 bit,那麼若是想找出一組碰撞的話,那就須要選 (2^160 + 1) 組不一樣的數據來計算他們的 Hash 值,根據抽屜原理這很好理解,13 我的當中確定有兩我的的生日在同一個月。可是 2^160 是個什麼概念呢,地球上的沙子差很少 2^60 個,乖乖。但若是咱們不要求 100% 能找到一組碰撞,咱們只要求 50%,那要算多少組呢?根據機率計算,大約須要計算 2^80 組,密碼學上規定,若是有一種方法可以在計算時間小於 2^80 內 50% 的可能性找到一組碰撞,那麼這種哈希算法就不安全了。

可是,不得不提的是,我國的密碼學家王小云在 2005 年找到了一個快速的攻擊方法,使得可以在 2^69 時間內大機率找到碰撞(此處應該有掌聲)。以後又有人發現其餘的攻擊方法,使得時間縮減到 2^57.5。但問題來了,SHA-1 原來早就被攻破了,那爲毛此次又說被 Google 攻破了呢?由於之前碰撞的結果多是兩個沒有意義的內容,但此次 Google 構造了兩個有意義但內容不一樣的文件。兩個文件長這樣:

圖片描述

圖片描述

文件能夠在這裏下載,你能夠用在線的 SHA-1 工具測試。

這就厲害了,那有可能你已經加密的合同上寫的是 100 萬,結果有人構造了一個 1000 萬的訂單但 Hash 值同樣,你到了法院直呼冤屈。

咱們普通人雖然沒有大單子,但畢竟牽涉到咱們的私密,就問大家怕不怕?嘿,不過也不用怕,如今業界正在逐漸用更安全的算法替換 SHA-1。

參考:

  1. https://www.zhihu.com/questio...

相關文章
相關標籤/搜索