[英]Is a git commit hash trustable?
當在github上使用來自未知第三方的代碼時,我始終確保檢查代碼,以確保不存在明顯的后門程序,這些后門程序可能會損害系統的安全性。
我正在查看的存儲庫的特定狀態可能綁定到git標簽和提交哈希。 眾所周知,git標簽的內容可以輕松更改。 因此,再次下載源代碼並基於版本標記信任它絕對不安全。
我的問題是:在重新下載源代碼時,我是否可以相信,如果我根據完整的提交哈希值檢出特定的提交,那么它與我之前檢查過的代碼是100%相同嗎?
這個問題的重點不是根本上沒有發生sha1沖突的可能性(因為沖突比計算特定的sha1哈希值更容易計算-希望目前尚不可能?),而是每個和每個文件都是此sha1總和的一部分,因此更改始終會觸發不同的哈希。
簡而言之:是的。
在此頁面上,您可以看到sha1和的形成方式。 它由以下組成:
因此,每個文件中的每個更改都包含在sha1sum的計算中。 相信您,對任何文件的任何更改在每種情況下都會給出不同的sha1和。
編輯:我開始通過我的提交之一工作:
git cat-file commit HEAD
給出:
tree 563ccb5109fbf0a01d99517ca1dbe15db349592d
parent 3c6f0800708aeaaeaba804273406ddcd0b3175ad
...
現在git cat-file -p 563ccb5109fbf0a01d99517ca1dbe15db349592d
:
100644 blob d8fe4fa70f618843e9ab2df67167b49565c71f25 .gitignore
100644 blob dba1ba3a31837debf7a28eceb194e86916b88cbc README
040000 tree 37ad71e959c6dadd0e4b7aff8a0c6e85a0eff789 conf
040000 tree 60eca667ab8b5852ecd2dd2d91d198a3956a8b73 etc
040000 tree 634c4c2ec34aec14142b5991bd3a5126110f2cae sbin
040000 tree 256db03954535d25d5f340603e707207170f199c spec
040000 tree 9e1e156f88b842da471f52d4c135f391319b4991 usr
我可以繼續深入: git cat-file -p d8fe4fa70f618843e9ab2df67167b49565c71f25
:
/.project
(這是我的.gitignore文件的內容)或git cat-file -p 256db03954535d25d5f340603e707207170f199c
:
100644 blob 591367a913adbeb1c86d674d240fb08ab8ccf78b base.spec
(這是我的“ spec”目錄的內容)。
所以你可以看到,每一個文件的內容,是在文件的SHA1和遞歸地存在; 然后在源樹的sha1之和中,最后在commit的sha1之和中。
Git對所有內容進行哈希處理,因此您的標題和底線問題是:是的。
碰撞比計算特定的sha1哈希要容易得多-希望-目前這幾乎是不可能的?
兩項均正確。 您甚至可能會丟失“相當多”的部分,對於“是否可以構造具有給定SHA1哈希碼的消息”的答案正確地是“大聲笑,不。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.