簡體   English   中英

git commit hash是可信的嗎?

[英]Is a git commit hash trustable?

當在github上使用來自未知第三方的代碼時,我始終確保檢查代碼,以確保不存在明顯的后門程序,這些后門程序可能會損害系統的安全性。

我正在查看的存儲庫的特定狀態可能綁定到git標簽和提交哈希。 眾所周知,git標簽的內容可以輕松更改。 因此,再次下載源代碼並基於版本標記信任它絕對不安全。

我的問題是:在重新下載源代碼時,我是否可以相信,如果我根據完整的提交哈希值檢出特定的提交,那么它與我之前檢查過的代碼是100%相同嗎?

這個問題的重點不是根本上沒有發生sha1沖突的可能性(因為沖突比計算特定的sha1哈希值更容易計算-希望目前尚不可能?),而是每個和每個文件都是此sha1總和的一部分,因此更改始終會觸發不同的哈希。

簡而言之:是的。

此頁面上,您可以看到sha1和的形成方式。 它由以下組成:

  • 提交的源樹( 解散到所有子樹和Blob
  • 父提交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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM