深度:為什麼Google急著殺死加密演演算法SHA-1

ADVERTISEMENT

復旦大資料

雜湊演演算法的希爾伯特曲線圖(由Ian Boyd提供)

Google官方部落格宣佈,將在Chrome瀏覽器中逐漸降低SHA-1證書的安全指示。但有意思的是Google.com目前使用的也是SHA-1簽名的證書,但證書將在3個月內過期,Google將從2015年起使用SHA-2簽名的證書。SHA-1演演算法目前尚未發現嚴重的弱點,但偽造證書所需費用正越來越低。

大部分安全的網站正在使用一個不安全的演演算法,Google剛剛宣稱這將是一個長週期的緊急情況。

大約90%採用SSL加密的網站使用SHA-1演演算法來防止自己的身份被冒充。當你去訪問網址時,保證了你正在訪問的確實是正品Facebook,而不是把自己的密碼傳送給攻擊者。然而不幸的是,SHA-1演演算法是非常脆弱的,長期以來都是如此。該演演算法的安全性逐年降低,卻仍然被廣泛的應用在網際網路上。它的替代者SHA-2足夠堅固,理應被廣泛支援。

最近穀歌聲明如果你在使用Chrome瀏覽器,你將會注意到瀏覽器對大量安全的網站的警告會不斷發生變化。

證書有效期至2017年的站點在Chrome中發生的變化

首批警告會在聖誕節之前出現,並且在接下來6個月內變得越來越嚴格。最終,甚至SHA-1證書有效期至2016的站點也會被給予黃色警告。

通過推出一系列警告,穀歌這正在宣佈一個長週期的緊急情況,並督促人們在情況惡化之前更新他們的網站。這是件好事情,因為SHA-1是時候該退出歷史舞臺了,而且人們沒有足夠重視SHA-1的潛在風險。

如果你擁有一個使用SSL的網站,你可以使用我建立的SHA-1測試小工具來測試你的網站,它會告訴你應該怎麼做。即使你沒有網站,我仍然推薦你去讀一讀。在接下來的博文,我會介紹網站上SSL和SHA-1是如何一起工作的,為什麼如穀歌說的那麼緊急,和瀏覽器正在採取的措施。

同樣重要的是,安全社群需要讓證書更換過程少些痛苦和麻煩,因為網站的安全升級不必那麼緊急和匆忙。

FreeBuf科普:安全雜湊演演算法與SHA-1

安全雜湊演演算法(英語:Secure Hash Algorithm)是一種能計算出一個數字訊息所對應到的,長度固定的字元串(又稱訊息摘要)的演演算法。且若輸入的訊息不同,它們對應到不同字元串的機率很高;而SHA是FIPS所認證的五種安全雜湊演演算法。這些演演算法之所以稱作“安全”是基於以下兩點(根據官方標準的描述):

1、由訊息摘要反推原輸入訊息,從計算理論上來說是很困難的。 2、想要找到兩組不同的訊息對應到相同的訊息摘要,從計算理論上來說也是很困難的。任何對輸入訊息的變動,都有很高的機率導致其產生的訊息摘要迥異。

SHA (Secure Hash Algorithm,譯作安全雜湊演演算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 釋出的一系列密碼雜湊函數。

SHA-1簡介

要理解替換SHA-1為什麼這麼重要,首先把自己站在一個瀏覽器的角度上。

當你訪問一個使用的網站,該網站向瀏覽器出示一個檔案(類似於我們的身份證)即一個SSL證書。這個證書用來做兩件事:加密訪問網站的連線,並驗證網站真實身份。

ADVERTISEMENT

任何證書都可以用來加密連線。但是為了驗證你訪問的是真實的Facebook(不是山寨的),你的瀏覽器必須通過某種方式決證書是否可信的,然後再向你顯示一個綠色的小鎖。

為了完成驗證工作,你的瀏覽器查明網站的證書是否由權威機構(證書簽發機構,簡稱“CA”)頒發的。CA向網站頒發證書檔案通常是收費的。你的瀏覽器信任來自超過56個CA(根CA)建立和擔保的證書,如Verisign、GoDaddy、美國國防部等,還有經由56個根CA的授權的成千上萬的中間CA。如你所料,這是一個有很大缺陷的系統,但確實是實際情況。

在Chrome中點選網址前面的綠色小鎖時所顯示的內容

此網站的CA在當時是Comodo,通過Namecheap購買的。當網站的SSL證書宣稱是自己由某個CA頒發給該網站時,你的瀏覽器需要進行另一項關鍵的測試:此證書本身能夠證明這個事實嗎?

普遍情況下,網際網路通過數學來證明事實。當一個證書被頒發時,CA通過使用一個私鑰簽名該證書提供了身份證明。從某種程度上說,隻有真正的CA能夠完成這個簽名(除非私鑰丟了,哈哈,我經常丟鑰匙),而瀏覽器能夠驗證該簽名。

但是CA實際上不簽名原始的證書:它首先執行“單向雜湊”演演算法(如MD5、SHA-1、SHA-256)把證書壓縮成一個唯一的欄位。

Chrome瀏覽器中的證書片段

單向雜湊演演算法能夠壓縮資訊:例如,把《戰爭與和平》3.2MB版本通過SHA-1運算,你將得到:

baeb2c3a70c85d44947c1b92b448655273ce22bb

MD5file.com(一個有趣的線上雜湊計算器)的運算結果

類似SHA-1,單向雜湊演演算法被用來產生唯一的不可逆的資料塊(原文為slug,彈頭的意思)。你不能夠再從aeb2c3a70c85d44947c1b92b448655273ce22bb反推出《戰爭與和平》的內容(即雜湊運算不可逆)。同樣重要的是,沒有其他檔案能夠產生相同的資料塊(即指紋具有唯一性)。甚至內容修改一小部分也會導致SHA-1運算的結果發生很大的變化,難以尋找前後的關聯性。

如果兩個檔案經過同一個雜湊運算生成相同的值,這種現象被稱作是一個“碰撞”。碰撞具有理論上的可能性,但概率過低而被認為是在現實中是不可能存在的。

當瀏覽器遇到一個證書時,它會計算證書資訊的SHA-1值,然後與被證書用作身份證明的原始SHA-1值作比較。因為SHA-1結果的唯一性,如果兩個值是相同的,瀏覽器就確信提供的證書和CA籤發的證書是同一個,沒有經過篡改。

如果你設計了一個證書,能夠與目標站點的證書發生碰撞,然後再誘騙CA給你頒發此證書。最終,你就可以使用此證書來冒充目標站點,即使瀏覽器也無法區分真偽。

具體詳情:如果你想要瞭解簽名演演算法和SSL證書的具體細節,喬舒亞·戴維斯有一個極其詳盡的解釋,具體連結如下: http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art012

ADVERTISEMENT

SHA-1攻擊

在2005年,密碼學家證明SHA-1的破解速度比預期提高了2000倍。但是破解仍然是極其困難和昂貴的。但是隨著計算機變得越來越快和越來越廉價,在網際網路上停止使用SHA-1演演算法隻是時間的問題。

後來,網際網路繼續使用SHA-1。在2012年,Jesse Walker寫了一份評估報告,關於偽造一個SHA-1證書所花費的成本。該評估參照亞馬遜Web服務的價格和摩爾定律。

當時沃克預計一個SHA-1的碰撞在2012年需花費2,000,000美元,在2015年需花費700,000美元,在2018年需花費173,000美元,在2021年需花費43,000美元。基於這些數字,施奈爾暗示到2018年就會有犯罪集團能夠偽造證書,到2021年就會有科研院校具備這種能力。

在有關更替SHA-1的規劃和爭論中,沃克的評估和施奈爾的推斷被廣泛的引用。一個由主流CA組成的組織:CA安全理事會(CA Security Council),近來使用沃克和施奈爾的結論來抱怨穀歌的時間表。CA把評估結果當作反駁的利器,認為 “等到2018年這種攻擊才會實際出現”。

我發現CA安全理事會所採取的立場簡直像卡通片一樣幼稚。他們隻像在掩飾問題,因為他們深知加快的更換過程給他們帶來很大的不便(直白點就是時間和金錢)。

沃克和施奈爾的評估是在斯諾登事件之前,在人們弄明白原來政府也是敵人之前。基於他們的評估,在2014年偽造一個證書的成本要少於2000.000美元,許多一線的明星大腕都能支付得起這個數目。

我們怎麼確信他們會這樣做呢?因為他們已經做了。(反正給我這麼多錢,我不是幹這種傻事的)

卡巴斯基實驗室監控到已感染火焰病毒的計算機

在2012年研究人員發現了大名鼎鼎的火焰病毒。華盛頓郵報報道這是美國和以色列的合作,用於從伊朗蒐集情報,阻撓伊朗核武器計劃。一份洩露的NSA檔案似乎證實了這一觀點。火焰病毒依賴於一個偽造的SSL證書,實現了一個MD5(SHA-1的前任)的碰撞。令人不安的是,它使用了一個在當時鮮為人知的方法,儘管人們對MD5已經做了多年的研究。此事件給我們的提示是,我們應該假設最危險的漏洞是未知的。

關於MD5,有一個有趣的故事。因為像SHA-1一樣,很早之前人們就發現MD5存在脆弱性, 而且和SHA-1一樣,從網際網路上移除MD5所花費的時間令人吃驚。

在1995年,MD5首次被披露存在理論上的脆弱性,並隨著時間推移變得越來越脆弱,但直到2008年,MD5仍被一些CA所使用。

在Chrome中通過chrome://settings/certificates

雖然這是一個很危急的情況,可是一直到2011年Chrome仍然不能取消對MD5的支援-距離首次證明MD5不可信的時間已過去16年了。

在網際網路上更換籤名演演算法存在一個特有的挑戰:隻要瀏覽器支援SHA-1,任何人的證書都可能被偽造。你可以使用一個SHA-1簽名的偽造證書來冒充一個SHA-2簽名的證書,因為瀏覽器隻會檢視SHA-1簽名的偽造證書,並不知道存在一個“真正的”證書或證書應該使用SHA-2簽名。(簡言之,為了冒充目標站點的證書,偽造證書的資訊和目標站點的證書一模一樣,隻是簽名演演算法改為SHA-1)換句話說,防止利用SHA-1偽造證書的唯一方式就是瀏覽器取消對SHA-1的支援。

各瀏覽器的響應

ADVERTISEMENT

微軟是第一個宣佈了SHA-1棄用計劃,在2016年之後Windows和IE將不再信任SHA-1證書。Mozilla也做了同樣的決定。雖然微軟和Mozilla向使用者昭示了問題的存在性,但都沒表明將要改變使用者介面。

另一方面,最近穀歌丟出一個爆炸性新聞,宣佈因為SHA-1太脆弱了,Chrome瀏覽器會向使用者顯示警告:

“我們計劃通過Chrome中Https安全指示器來強調SHA-1不能滿足當初的設計要求的這一事實。我們正在採取一種可量化的方法,逐漸下調安全指標器並逐漸推進時間表”

在兩週前,穀歌的Ryan Sleevi首先公佈了Chrome的預期策略。建議大家閱讀一下完整的討論過程,具體連結如下:

你會發現許多CA和大規模網站的運維人員露面,並試圖和Ryan Sleevi進行辯論,因為Ryan Sleevi告訴他們現在就應該停止頒發脆弱的證書,而不是推遲到明年。

這是穀歌發起的一個大膽的舉動,同時也伴隨著巨大的風險。瀏覽器移除簽名演演算法為什麼如此艱難,其主要原因是:當瀏覽器告訴使用者一個重要的站點存在風險時,使用者卻認為瀏覽器出問題了,然後去更換瀏覽器。穀歌似乎在打賭使用者對Chrome的安全性足夠信任和對Chrome足夠的喜歡,以致能夠接受該計劃帶來的不便。(畢竟是第一個吃螃蟹,向穀歌致敬!)

Opera 表示支援穀歌的計劃。Safari團隊正在觀望(俗稱“圍觀群眾”)並未表態。

指導建議

為了幫助遷移,我搭建了一個小型站點,用於檢查你的站點是否使用了SHA-1,以及是否需要更新。

字母A的數目是一個不可預測的大素數(作者為啥選擇個數字讓我費解,也許你能告訴我答案!嘿嘿)

你需要提交一個新證書請求,讓你的CA頒發一個使用SHA-2的新證書。使用你現有的私鑰:

openssl req -new -sha256 -key your-private.key -out your-domain.csr

其中-sha256標誌會使用SHA-2簽名CSR,但CA才能決定是否向你頒發一個使用SHA-2簽名的證書。我一直在關注有關從不同的CA獲得SHA-2證書的問題和解決方案。如果你遇到的問題在網站上沒有提到,請在這裡反饋,我會及時更新網站。

你可能更新所有的SHA-1中間證書,因為它們也需通過數字簽名來驗證。這也就意味著你要追蹤你的CA是否頒發了SHA-2中間證書,並發向哪裡了。我也一直在追蹤不同的CA頒發的SHA-2中間證書的位置。如果你發現了網站上未提到的,或者你的CA沒有中間證書的話,也請在這裡反饋。

如果你有一個站點,但其他公司控製著證書,你可以向他們的客服傳送郵件告知。傳送穀歌聲明的連線,並詢問他們的時間表。當然我也需要一些幫助,你如果願意的話,檢視網站上的開放問題,助我一臂之力。

SHA-1根證書:你不必擔心瀏覽器自帶的SHA-1根證書,因為它們的完整性不是通過數字簽名驗證的。

結論

這種推動SHA-1退役的計劃早就應該啟動了。隨著壓力不斷被放大而引發的所有麻煩應該被導向到CA,而不是讓穀歌作替罪羊,因為長久以來CA都不能採取有效的措施。

對於個人而言,獲得證書應該像購買域名一樣容易,安裝它應該向開啟一個網站那樣簡單,並更換它能夠實現自動化。這些思路提供了一些非常明確的商業機會和開源工具的需求。

對於組織,在他們的基礎設施的設計和更新過程中,頻繁的證書輪換是需要優先考慮的。出色完成這項工作的組織應該廣開言路,共享他們的工作成果。

與此同時,網站經營者應該更新證書和利用暫無像Heartbleed級別的緊急情況為契機,重新審視自己的SSL配置,並開啟“正向加密”(forward secrecy)之類的配置。

1:一百多篇大資料檔案下載!

2:超全資料分析資料免費下載!(包括SQL,R語言,SPSS,SAS,python,資料分析和資料挖掘)

3:清華大學資料科學院講座內容集錦免費下載!

4:Python超全資料分享!

» 復旦大資料

ADVERTISEMENT