SHATTERED

前から言われていたSHA1ハッシュ関数の衝突耐性について、Googleがついに「SHA-1ハッシュが同じ2つのPDFファイル」を公開しました。

以下は[SHATTERED](https://shattered.it/)の日本語訳です。

# SHATTERED

## SHA-1突破しちゃったわーつれーわー

SHA-1ハッシュ関数は、デジタル署名やファイルの完全性検証に用いられ、クレジットカード取引、電子文書、OSSリポジトリ、ソフトウェアアップデートなど、幅広いソフトウェア資産の保護に活躍しています。

我々は、ふたつのSHA-1ハッシュが同じPDFファイルを作り出すことに成功しました。
1枚目のPDFファイルのSHA-1ハッシュを2枚目で有効な署名として悪用することができます。

たとえば、家賃が異なる2枚の賃貸契約書を作成し、安い方にサインしたつもりが高い方が有効になっていた、といった行為が可能になります。

[視覚情報](https://shattered.it/static/infographic.pdf) | [論文](https://shattered.it/static/shattered.pdf)

## 攻撃成功の証明

ここに2枚のPDFを用意した。
中身は異なるがSHA-1ハッシュは同じだ。

[PDF1](https://shattered.it/static/shattered-1.pdf) | [PDF2](https://shattered.it/static/shattered-2.pdf)

## ファイルテスト

ドラッグ&ドロップで衝突攻撃の可能性があるか調べられるぞ。
アップしたファイルは保存したりしてないから安心せい。

# Q&A

## SHA-1ハッシュはなくなるの？

2005年に理論的な攻撃方法が発見されたものの、未だに多くのアプリケーションがSHA-1を使っています。
SHA-1はNISTが2011年に非推奨に指定しました。
この攻撃の実例を見て認識を改め、SHA-256のようなより安全な方法に速やかに移行することを願います。

## 自分自身をどうやって守ればいいの？

上のファイルテスターを使ってファイルをチェックすることができます。
Chromeを使うと、安全でないTLS/SSL証明書は[自動的に却下](https://security.googleblog.com/2016/11/sha-1-certificates-in-chrome.html)されます。
[Firefox](https://blog.mozilla.org/security/2016/10/18/phasing-out-sha-1-on-the-public-web/)も2017年初頭に予定しています。
Gmailで添付したファイルや、Googleドライブで保存したファイルについては、既にこの攻撃に対して自動的にテストを行っています。

## どんなシステムが影響を受けるん？

デジタル署名、ファイルの整合性チェック、ファイル識別にSHA-1ハッシュを使っているアプリケーションは脆弱です。
たとえば以下のようなアプリです。
・デジタル証明書の署名
・電子メールのPGP/GPG署名
・ソフトウェアベンダーの署名
・ソフトウェアのアップデート
・ISOチェックサム
・バックアップシステム
・重複排除システム
・git
・その他諸々

## TLS/SSL証明書はアウト？

[CA/Browser Forum](https://cabforum.org/)の規定ではSHA-1ハッシュは[許可されていません](https://cabforum.org/2014/10/16/ballot-118-sha-1-sunset/)。
さらに、認証局は証明書の[serialNumberフィールド](https://www.ipa.go.jp/security/fy10/contents/over-all/02/21.html)に最低64ビットのランダム値を挿入しなければなりません。
これが適切に実装されていれば、攻撃を防ぐのに役立ちます。

## ブラウザに警告が表示される？

2017年1月のChrome56から、SHA-1証明書は安全でないと見なして[警告します](https://security.googleblog.com/2016/11/sha-1-certificates-in-chrome.html)。
[Firefox](https://blog.mozilla.org/security/2016/10/18/phasing-out-sha-1-on-the-public-web/)では2017年初頭に予定されています。

## gitはどんな影響を受ける？

gitはファイル識別と完全性チェック、そしてcommitについてSHA-1に強く依存しています。
理論上は、中身が全く違うのに同じハッシュのcommitを作ることが可能です。
攻撃者は
攻撃者は自分のコリジョンを計算する必要があります。

## 自分の作ったアプリの対策方法は？

SHA-256やSHA-3など、より安全なハッシュ関数を使ってください。

## この攻撃をどうやって検出するの？

上記オンラインツールにファイルをアップし、SHA-1のコリジョン攻撃をチェックすることができます。
実際のコードは[GitHub](https://github.com/cr-marcstevens/sha1collisiondetection)で公開されてるよ。
これはCWIの[Marc Stevens](https://marc-stevens.nl/)と、Microsoftの[Dan Shumow](https://www.microsoft.com/en-us/research/people/danshu/)によって作成されました。

これは[Counter-cryptanalysis](https://marc-stevens.nl/research/papers/C13-S.pdf)という概念に基づいていて、衝突するファイルのペアの片方が与えられた場合、既知および未知のSHA-1衝突攻撃を検出できます。

## この攻撃はどれくらい広がってますか？

我々の知る限り、実際の衝突例はこれまでに初めて作成されたものです。

## 野生の悪用例はありますか？

我々の知る限り存在しません。

## `Hardened SHA-1`は脆弱ですか？

いいえ、`Hardened SHA-1`は、コリジョンが発見された場合、安全なハッシュになるようにSHA-1の計算を調整します。
コリジョンのないファイルについては通常のSHA-1ハッシュを計算します。

## こんな攻撃誰ができる？

この攻撃には9,223,372,036,854,775,808回のSHA-1計算が必要でした。
これはシングルCPUで6500年とシングルGPUで110年分の計算量です。

## ブルートフォース攻撃とどう違うんだ？

SHAttered攻撃は、[誕生日のパラドックス](https://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E6%97%A5%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9)を利用するブルートフォース攻撃より10万倍高速です。
ブルートフォース攻撃は12000000GPU年を要するので実用的ではありません。

## PDFフォーマットをどう活用した？

百聞は一見にしかず、[こう](https://shattered.it/static/pdf_format.png)だ。

## 研究チームについて

これは、[Cryptology Group at Centrum Wiskunde & Informatica](https://www.cwi.nl/research-groups/Cryptology)-オランダ国立情報工学・数学研究所と、[Google Security, Privacy & Abuse Research](https://research.google.com/teams/spa/)チームの長期的な協力の結果です。
2年前、Googleの不正防止研究チームを率いている[Marc Stevens](https://marc-stevens.nl/research/)と[Elie Bursztein](https://elie.net/)が、Googleの専門知識とインフラを利用して、SHA-1ハッシュに対するMarcの暗号解読攻撃を実践することにしました。
以来、多くのCWI研究者とGoogle社員がこのプロジェクトに協力してくれました。
解読とプロトタイプの実装を行った[Pierre Karpman](http://pages.saclay.inria.fr/pierre.karpman/)、PDF攻撃を発見した[Ange Albertini](http://corkami.github.io/)、分散CPUコードを担当した[Yarik Markov](https://ymarkov.me/)、ユーザ保護のために衝突検出器を実装した[Alex Petit-Bianco](http://serialhacker.org/)、オンラインファイルチェッカーを作成した[Luca Invernizzi](https://lucainvernizzi.net/)、計算の確実性を監督したClement Blaisse。


# 感想

これは強衝突耐性が突破されたということでいいのかな。
でもgitにも脆弱性ってことは、やったつもりのcommitが別の中身に入れ替えられるってことだから弱衝突耐性だよな？
よくわからん。

で、実例が出てきたのはいいが、数年後はわからんけど現状で6500年は現実的な脅威なのだろうか。

あと`Hardened SHA-1`って情報が全く出てこないんだがなんだろう。
全てのSHA-1が脆弱なわけではなく、何らかの条件に合致するものが問題になる？