最新バージョンのGitでは、ファイルのハッシュにSHA-1の代わりにSHA-256を実験的に使用できるため、攻撃者が元のリポジトリと区別できないHEADを持つ偽装リポジトリを偽造できるという長年の脆弱性が排除される。
よく知られているように、GitはSHA-1を使用して各コミットのハッシュを計算している:
たとえば、ファイル、ディレクトリ、およびリビジョンは、ファイルまたはバージョンが連番で参照される他の従来のバージョン管理システムとは異なり、ハッシュ値で参照されます。
他の利点として、Gitのアプローチでは、破損したコンテンツがGitに最初に保存されたのと同じ値にハッシュされないため、整合性チェックが簡単になる。残念ながら、SHA-1は脆弱であることが長い間知られており、数年前、研究者グループは、内容は異なるがハッシュが等しい2つのPDFファイルを作成する攻撃を考案することにより、当初考えられていたよりも安全性が低いことを示した。彼らはまた、Gitが特に危険にさらされていると述べた:
GITは、すべてのファイルオブジェクトとコミットの識別と整合性チェックをSHA-1に強く依存しています。基本的に、同じHEADコミットハッシュと異なるコンテンツを使用して2つのGITリポジトリを作成することは可能です。たとえば、良性のソースコードとバックドアのリポジトリです。
それ以来、Gitチームは、オブジェクトが衝突を生成する目的で作成されたかどうかを検出し、それを拒否することを試みて、SHA-1の実装を強化するために取り組んできた。これにより悪用される可能性は低くなったが、SHA-256などの新しいより安全なハッシュアルゴリズムへの移行は、多くの分析と設計を必要とするような小さな成果ではなかった。
つまり、Gitは、オブジェクト名とコンテンツの両方にSHA-256を使用する新しいリポジトリ形式を導入した。この新しい形式は、ローカルで生成されたSHA-256名とSHA-1名の間の双方向マッピングもプロビジョニングする。これにより、SHA-1名とSHA-256名のいずれかを交換可能に使用してオブジェクトを参照できる。
このアプローチにより、SHA-256対応クライアントが古いSHA-1サーバーと相互運用できるようになる。SHA-1ハッシュコンテンツをフェッチすると、最新のクライアントは自動的にSHA-256フォームを生成する。逆に、プッシュすると、SHA-256オブジェクトがSHA-1に変換されるため、サーバはクライアントが使用しているハッシュアルゴリズムを知る必要がない。
この新しい開発が重要に聞こえるかもしれないが、SHA-1リポジトリとSHA-256リポジトリの間に相互運用性がまだないことを強調することが重要である。さらに、GitHubを含む主要なGitプロバイダは、現在SHA-256対応のリポジトリをサポートしておらず、サポートする計画も発表していない。
いつものように、Gitリリースには、バグ修正、パフォーマンスの改善、新機能などの変更が満載である。詳細については、公式リリースノートをお見逃しなく。