1990年代のブラウザ根証明書に含まれるRSA秘密鍵を因数分解
Matthew McPherrinが1999年にNetscape 4.51に搭載されたE-Certifyの512ビットRSA秘密鍵を因数分解し、その秘密鍵を使用して有効なTLS証明書を発行できることを実証した。
Netscape 4.51に搭載されたE-Certifyの512ビットRSA秘密鍵がMatthew McPherrinによって因数分解され、その秘密鍵でTLS証明書を発行できることが実証されました。CADO-NFSを用いた計算は、Ryzen 9 5950Xデスクトップで約32時間(SSL用)と29時間(S/MIME用)を要しました。
検出された脆弱な秘密鍵
Matthew McPherrinはarchive.orgからInternet ExplorerおよびNetscapeの古いブラウザインストーラーをダウンロードし、Claude Codeを使用してそれらに含まれるすべての根証明書を抽出しました。1999年3月にリリースされたNetscape 4.51には、E-Certifyという長らく廃止されたカナダの認証局からSSL用の512ビットRSA証明書が搭載されていました。またS/MIME用に別の512ビット根証明書も搭載されていました。これらのE-Certify根証明書は2002年にNetscapeによって削除され、2003年10月16日に期限切れとなりました。一方、Internet Explorer 3.02にはVeriSignの「OU=Test VeriSign Commercial Software Publisher CA」というコード署名用のテストCAが搭載されていました。

因数分解と秘密鍵の回収
McPherrinはRyzen 9 5950Xデスクトップ上でCADO-NFSを実行し、E-CertifyのRSA 512 Gold Server for SSLの因数分解に32時間、E-Certify RSA 512 Gold Client for S/MIMEの因数分解に29時間を要しました。この規模の因数分解は、より小規模なコンピュータリソースでも実行可能であることを示しています。参考として、1999年には512ビットのRSA-155が因数分解されており、McPherrinが把握している最大の因数分解はRSA-260(862ビット)です。これに対し、Web PKI標準では現在、最低でも2048ビットのRSAが使用されており、1024ビットRSAは10年以上前に廃止されています。
実装と検証
McPherrinは因数分解した秘密鍵を使用して、Netscape 4.51で有効なTLS証明書を発行できることを実証するため、Goで独自の古風なTLSサーバーを実装しました。テストサイトはe-certify.fly.devで公開されており、因数分解に使用された秘密鍵とツールはhttps://github.com/mcpherrinm/ancientrootsのリポジトリに保存されています。

筆者の見立て
- 小規模なRSA秘密鍵は、一般的なデスクトップコンピュータでも因数分解可能であると解釈している
- 当初、小規模RSA秘密鍵がデスクトップコンピュータで因数分解可能かどうかを予想していた
- E-Certifyの512ビット根証明書は、おそらく最初からあまりに脆弱であり、搭載されるべきではなかったと論じている
- Netscape 4.51で発行証明書が機能することを検証するプロセスそのものが困難だったと論じている
- 1994年のSSL導入時代のシステムでのみ、この秘密鍵による証明書発行が実現可能であることを示唆している
この記事は元記事の事実のみに基づいて自動生成されました。
出典
Matthew McPherrin「I've factored the RSA keys of a Certificate Authority…」https://mcpherrin.ca/2026/09/07/rsa.html