ニュース

GitHub Enterprise、SHA-1衝突を実行不能にするパッチを適用へ

SHA-1ハッシュが同一のファイルの格納を検出してブロック

 GitHub.comは、SHA-1衝突を実行するためのプラットフォームとして使用できなくなる。この修正は、GitHub Enterpriseの次のパッチリリースにも含まれるという。

 GitHubではすべてのデータが「オブジェクト」に格納されている。各オブジェクトにはデータのSHA-1ハッシュの名前が付けられており、この名前を用いて互いに参照される。

 ブログによれば、500万人のプログラマーが1秒間に1つのコミットを生成した場合でも、2つのオブジェクトが衝突する可能性は非常に低く、太陽が赤い巨人に変わって地球を腐食する前に、2つの異なるオブジェクトが同一ハッシュを持つ可能性は約50%だという。

 悪意を持った攻撃者がSHA-1衝突を総当たりによって生成するには、現時点では演算コストがかかりすぎるが、GoogleとCWIにより2月末に発表された手法では、SHA-1アルゴリズムの弱点を利用し、より短時間で衝突を検出する。この手法では、衝突するペアの半分のSHA-1を計算するときに検出されるパターンがバイトに残されるが、GitHub.comは、計算するSHA-1に対してこの検出を実行する。

 これにより、オブジェクトが衝突するペアの半分であるという証拠がある場合、操作を中止する。これにより、攻撃者がGitHubを使用して、既存ファイルとSHA-1衝突するファイルをホストできないようにする。GitHubのフェッチまたはプッシュが、衝突するペアの残りの一方を含むリポジトリにオブジェクトを送信しようとすると、受信者は各オブジェクトのバイトを比較して、新しいオブジェクトを拒否できるとのことだ。

 なお、オブジェクト名では、ファイルだけでなく固有のヘッダー情報も考慮されるため、SHAttered開発者が提供したSHA-1衝突テスト用のPDFファイルがリポジトリに追加されても衝突はしないという。

 GitHubでは、SHA-1衝突を検出するライブラリを上流に組み込んでおり、将来のバージョンでは、ほかのホスティングサイトからのフェッチ、パッチの適用、ローカルデータからのオブジェクトの生成などで、SHA-1衝突の一方を検出して拒否できるようになるとのこと。また、既存のリポジトリデータへの混乱を最小限に抑えながら、より安全なハッシュアルゴリズムに移行する計画も策定しているという。