Git バージョン コントロール システムは、コードの改ざんを防ぐために、ハッシュ アルゴリズムとして、侵害された SHA-1 ではなく SHA-256 を使用する方向に近づいています。
Gitリポジトリにコードがコミットされるたびに、ソフトウェアはハッシュ値を計算して保存します。コードを取得すると、コードが同一であることを確認するためにハッシュ値が再計算されます。また、Gitはこれらのハッシュ値をデータベースのキーとして使用し、同じコードが2回保存されるのを防ぎます。ハッシュ値が同じであれば、コードは同一であると推定されます。
これは、ハッシュアルゴリズムがGitの機能の中核を成していることを意味します。GitはSHA-1を使用していますが、2017年初頭にGoogleのエンジニアをはじめとするチームによって、SHA-1が破られる可能性があることが示されました。つまり、異なるデータが同じハッシュ値を持つ「衝突」を検出する手法が存在するということです。この点については、こちらで報告しました。
ハッシュの問題:セキュリティ専門家がSHA-1標準を非難、チップコスト約4万5千ドルを理由に重大な衝突を確認
続きを読む
Gitリポジトリ内のコードが検知されずに改ざんされる可能性があるため、潜在的な影響は深刻です。Gitは世界で最も普及しているバージョン管理システムであるため、これは恐ろしい可能性です。
昨年、米国のリアルワールド暗号シンポジウムでは、「実際のプロトコルにとってはるかに脅威となる」SHA-1衝突攻撃のデモンストレーションが行われた。
それでも、そう簡単には破れません。Linus £$%^ Torvaldsに聞いてみてください。
実際には、この脆弱性を悪用するのは容易ではありません。Gitの開発者であるリーナス・トーバルズ氏は当時、「空が落ちてくるわけではありません。セキュリティ署名などに暗号ハッシュを使用することと、Gitのようなコンテンツアドレス指定可能なシステムの『コンテンツ識別子』を生成するために暗号ハッシュを使用することの間には大きな違いがあります」と述べています。
Gitはハッシュアルゴリズムによって保護されておらず、衝突の検出は容易ではありません。さらに、改ざんされたコードで悪意のある目的を達成する衝突を見つけるという課題もあります。Torvalds氏はさらに次のように述べています。「Gitは実際にはデータをハッシュするだけでなく、型/長さのフィールドを先頭に追加します。これにより、結果のサイズを同じにするか、ヘッダーのサイズフィールドも編集できるようにする必要があるため、衝突攻撃ははるかに困難になります。」
しかし、この弱点は現実のものであり、Gitチームはそれを置き換えるために何が必要か調査を始めました。このスレッドをざっと見てみると、既存のリポジトリとの互換性を維持しながらアルゴリズムを置き換えることがいかに困難であるかが分かります。しかし、計画は策定され、Gitハッシュ関数のSHA-256への移行については、こちらで文書化されています。
約3年が経ち、Git開発者のBrian M Carlson氏がGit開発者メーリングリストに「SHA-256実装パート1/3」に関するコメント募集を投稿しました。これは「SHA-256リポジトリを作成することはできますが、読み取ることはできません」という理由で完全な実装ではありません。さらに、「クローン、フェッチ、プッシュのサポートが欠けています。これらは移行計画では目標とされていませんが、テストスイートが合格に近づくためには必須です」と述べています。
Carlson氏は、SHA-1リポジトリとSHA-256リポジトリの相互運用性について解説するパート2と、新バージョンでテストを実行するために不足している部分を提供するパート3を公開することを約束しています。また、進行中の実装全体は、こちらでご覧いただけます。
「このシリーズでは、役に立たないオプション(大型のフットガン)を設定(および文書化)しており、このアプローチについてのフィードバックが欲しいため、このシリーズはRFC(Request for Comments)です」とカールソン氏は述べた。
LWN編集者のジョナサン・コーベット氏は、「この作業がほとんどのGitユーザーのシステムに導入されるのは、まだしばらく先になりそうだ」と述べています。SHA-1の脆弱性を悪用するのは難しいため、緊急性は高くないものの、修正は大いに歓迎されるでしょう。®