少し前に SHA1 の衝突の話題がありました(Announcing the first SHA1 collision)。 Git はリポジトリ内のオブジェクトの識別にSHA-1ハッシュを使っており、衝突が起きたときにどういう動作になるかが気になったので調べてみました。 (2021.09.22) 実装に手を入れた時の挙動を tags/v2.33.0 で再確認して更新しました。 blob のオブジェクトID Git リポジトリにおいてファイルは blob という種類のオブジェクトで表現されます。まずはじめにSHA1が衝突している2つのファイルがどう扱われるか見てみましょう。 上述のリンク先からPDFファイルをダウンロードすると ファイルサイズが一致 SHA1が一致 ファイルの内容は異なる(SHA256は異なる) という2つのファイルが入手できます。 ~/Downloads$ ls -a . .