Git是否考慮到SHA1碰撞的問題了?

雖然碰撞概率很小,但是一旦出現碰撞很可能會出現很嚴重的後果吧?就是當發現SHA1相同之後是否會逐位比較?不過感覺好像可以通過一些手段不用逐位比較也能發現是否相同,特別是據說Git就像是一個小型的文件系統。我好像有點杞人憂天了。


How would git handle a SHA-1 collision on a blob?

可以看這裡的解答.


google用pdf去碰撞,本身就有投機取巧的成分。pdf文件內部有大量位元組可以任意修改而不影響顯示,所以linus說這些opaque data多導致攻擊容易。這個攻擊跟比特幣挖礦類似,讓你不停地通過改變某些bits去尋找一個小於目標值的sha256。

想要有意義地攻擊git,有本事偽造C源碼,長度一樣而且還要能編譯通過。

結論:pdf格式不安全,發合同還是用純文本。


2017年2月23日,SHA-1 演算法已經在谷歌的幫助下碰撞成功 ,對於此事,Hacker News 上已經炸了,很多人第一反應就是使用了 SHA-1 的 Git 怎麼處理這個事情。新聞發布後不久,Git創始人 Linus Torvalds 已經在郵件列表進行了回應,大體意思是Git除了hash了數據之外,還在文件頭部存儲了數據長度等信息,想要騙過Git除了SHA-1值要相同之外,數據長度也要一致才行,這大大增加了碰撞難度,至少比生成兩個不同內容相同SHA-1的PDF要難得多。Linus說碰撞是通過增刪一些可有可無的不透明數據來實現的,所以 Git 以後需要加強對不透明數據的檢查,讓這些碰撞無處可藏。

---------------------------------------------

3月20日更新:

Git 的開發者已經開始討論加入新的 HASH 機制,詳細內容參見此處:Another proposed hash function transition plan


git中一個commit的sha-1的內容包括這次的文件的內容,subject,上一個commit的sha-1作者,等方方面面的信息。如果每一個commit都是經過review的話。發生碰撞的可能性,還是杞人憂天了。而且commit用sha-1並不是出於安全的目的。而是為了分散式的提交。


綜合最近的G+ (Linus那個帖子) 和近期和以前的git郵件組的討論:

- 使用SHA1主要的目的是為相同內容生成唯一地址 (dedup) 和防損壞 (checksum)。防篡改只是順便的,即使發現SHA1的碰撞方法也不壞根本。

- git的官方實現不會覆蓋相同sha1的文件 (但git的其他實現,及非git的軟體未必也這樣。webkit的SVN repo因為一個相近問題已經撲了)

- 無論有意無意,產生一個相同sha1且能通過編譯的代碼文件仍然很困難

- 對於無意的碰撞: 發現和繞過 (blob加個空格, commit換個時間) 都不是問題

- linus 有計劃增加其他hash,且可能不需要遷移已有的git repo,但因為以上原因並不緊急


原諒我不清自來。

我個人認為這沒有啥意義。

對於git這種文件比較來說,基本上md5就夠用了。

不信你舉一個2個不同的源代碼,md5還是一樣的?!

如果我設計git,用md5就好,幹嘛用sha?

哼哼。

————————

回到主題,這個對git並無影響是真的。google說這個破解的意義是ssl/https

破解https證書是有一點意義的。但是沒有破解人家一樣可以監聽https.因此意義有限得很。

SHA-1的安全性一直廣受質疑,此次破解對於廣泛使用SHA-1演算法的協議如TTL,SSL,SSH都有影響。


我司倉庫遇到過git sha短碼碰撞


谷歌要是能搞出兩份不同邏輯的代碼,編譯後的可執行文件具有相同的摘要信息,這就太牛逼了。


推薦閱讀:

TAG:Git | GitHub | SHA-1 | 哈希函數 |