1

未知のサード パーティのコードを github で使用する場合、システムのセキュリティを危険にさらす可能性のある明らかなバックドアが存在しないことを常に確認します。

私がレビューしているリポジトリの特定の状態は、おそらく git タグとコミット ハッシュにバインドされています。ご存知のように、git タグの内容は簡単に変更できます。したがって、ソース コードを再度ダウンロードし、バージョン タグに基づいて信頼することは、確実に安全ではありません。

私の質問は: ソース コードを新たにダウンロードするとき、完全なコミット ハッシュに基づいて特定のコミットをチェックアウトした場合、これが以前にレビューしたコードと 100% 同一であると信頼できますか?

この質問の焦点は、sha1 衝突が発生する可能性にまったくありません (特定の sha1 ハッシュを計算するよりも衝突を計算する方がはるかに簡単であるため、現時点ではほとんど不可能である可能性があります)。すべてのファイルはこの sha1 サムの一部であるため、変更は常に異なるハッシュをトリガーします。

4

2 に答える 2

5

要するに:はい。

このページでは、このsha1合計がどのように形成されるかを見ることができます. 以下で構成されています。

  • コミットのソース ツリー (すべてのサブツリーとブロブに展開)
  • 親コミット sha1
  • 作者情報
  • コミッター情報 (そうです、それらは異なります!)
  • コミットメッセージ

したがって、すべてのファイルのすべての変更が sha1sum の計算に含まれます。私の知る限り、任意のファイルを変更すると、すべての場合に異なる sha1 サムが得られると信頼できます。

編集:私は自分のコミットの1つから作業を開始しました:

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

(これは私の「スペック」ディレクトリの内容です)。

ご覧のとおり、すべてのファイルの内容は、ファイルの sha1 sum に再帰的に存在します。次に、ソース ツリーの sha1 サムで、最後にコミットの sha1 サムで。

于 2016-02-22T10:40:57.843 に答える