インドの認証局 eMudhra の中間 CA 8 個で、秘密鍵が 1〜255 のどれかだった。 誰でも 255 回試せば秘密鍵がわかり、どのドメインの証明書でも偽造できた。
1. 前提: 証明書の仕組み
- 秘密鍵で署名し、公開鍵で検証する。公開鍵から秘密鍵は逆算できない(今回ここが崩れた)
- 証明書: 「example.com の公開鍵はこれ」に CA が署名したもの
- 端末はルート CA を最初から信じている(トラストストア)。そこから署名をたどって信用がつながる
[ルート] emSign ECC Root CA - G3 ← 端末が最初から信じる
▼ 署名
[中間] EM DV TLS CA - G3B など ← 秘密鍵が割れた
▼ 署名
[サーバ] example.com
中間 CA はどのドメインの証明書でも発行できる。
2. 攻撃
偽 Wi-Fi などで接続の間に入った攻撃者が、割れた中間 CA の鍵で「example.com の公開鍵 = 攻撃者の公開鍵」という証明書を作る。
- 証明書の検証: 本物の中間 CA の署名なので通る
- 本人確認(その公開鍵に対応する秘密鍵で署名できるか): 攻撃者は自分の秘密鍵を持っているので通る
URL も鍵マークも正常なまま、通信を全部読まれ、書き換えられる。
3. なぜ割れたか
- 公開鍵 = 決まった点に、秘密鍵の回数だけ同じ計算を繰り返した結果(楕円曲線暗号)
- 本来の秘密鍵は約 116 桁の数なので試しきれない。鍵生成スクリプトのバグで 1〜255 になっていた
- 1 回計算するたびに公開鍵と比べれば、最大 255 回で一致する
4. 影響と対応
- ブラウザは当日に対策済み
- 危ないのは curl・pip・Node・Java・Go(Linux)。トラストストアをアプリごとに持つので(curl は
/etc/ssl/cert.pem、Node は本体に埋め込み)、個別に更新が要る - Mozilla / Google は G3 ルートを削除。eMudhra は証明書事業から撤退
参考資料
- eMudhra のインシデントは Web にとって何を意味するのか | blog.jxck.io
- 8 eMudhra certificates are compromised. Here’s what you need to know | Cloudflare Blog
- Our Response To The eMudhra Key Disclosure Incident | The Go Blog
- PHPの影に隠れたもう一つの重大インシデント「eMudhra」の証明書問題、どう対処すれば? - やじうまの杜 - 窓の杜
- eMudhra事件でWebアプリ開発者が点検すべきこと - Qiita
- eMudhraの中間CAの秘密鍵が公開された証明書から復元可能と判明、pip・uvなどの開発ツールに修正版 | gihyo.jp
- 認証局eMudhra、SSL/TLS証明書事業から撤退へ 秘密鍵問題受け──既存顧客の証明書は無償で置き換え - ITmedia NEWS
- eMudhraで侵害された8つの認証局すべての秘密鍵はなんとたった「1バイト」で秘密鍵の1つは「4」… - GIGAZINE
- Protecting Chrome and Android Users from Compromised eMudhra Intermediate CA Certificates | Google
- Bug 2083449(eMudhra 中間 CA 鍵侵害のインシデント報告) | Mozilla Bugzilla
- eMudhra Intermediate CA Compromise(チェックツール・修正済みソフト一覧)
- Press Release | eMudhra
- eMudhra 公式サイト
- eMudhra - Wikipedia