⭐️eMudhraの中間CAの秘密鍵が公開された証明書から復元可能と判明⁠⁠した件を改めて整理

インドの認証局 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 は証明書事業から撤退

参考資料