セキュリティ
90年代の認証局(CA)のRSA鍵をファクタリングした
I've factored the RSA keys of a Certificate Authority from the 90s (mcpherrin.ca)
要約
著者は、現代のデスクトップコンピュータで、1990年代に発行された認証局(CA)のRSA鍵をファクタリングすることに成功しました。具体的には、Netscape 4.51にバンドルされていたカナダのE-Certify社の512ビットRSA鍵を、それぞれ約30時間かけて分解し、秘密鍵を再構築しました。これらの鍵は当時すでに脆弱と見なされていましたが、現代では容易に破れることを示しています。
全文翻訳
Home | About Matthew McPherrin
2026-09-07
90年代の認証局のRSA鍵をファクタリングしました。
最近、RSAのセキュリティについて考えていました。RSAの暗号化は、大きな半素数を素因数分解することの難しさに依存していますが、「大きい」とはどの程度を指すのかは興味深い問題です。Web PKIは10年以上前に1024ビットRSAを非推奨としましたが、そのサイズの鍵をファクタリングする人はいないと思いますが、政府や多数のコンピュータを持つ組織にとっては可能性の範囲内です。ほんの数日前、RSAファクタリングチャレンジの862ビットRSA-260鍵がファクタリングされました。これは私が知る限り最大の素因数分解です。現在、世界では少なくとも2048ビットのRSAが使用されていますが、将来の量子コンピュータのリスクにより、それもすぐに非推奨になるでしょう。
これが、小さなRSA鍵なら、たとえ控えめなデスクトップコンピュータでも素因数分解できるのではないか、という疑問につながりました。そして、Web PKIの初期には、標準もなく、最小要件もありませんでした。Netscapeは1994年にSSLサポートをリリースし、IEもそれに続きました。これはまだ暗号化に対する輸出規制の時代でした。
素因数分解できるほど小さな鍵は存在するのでしょうか?それを実行する良い理由はありませんが、楽しそうだと思いました。
ネタバレはもちろん「はい」ですが、まず cracking する鍵を見つける必要があります。幸いなことに、ルート証明書はブラウザのインストーラにバンドルされており、archive.org には Internet Explorer と Netscape の両方のアーカイブがあります。アーカイブは網羅的ではありませんが、古いルートCAを十分にカバーしているはずです。
私は両方のコレクションをダウンロードし、Claude Code にすべての古い、古代のルート証明書を抽出させました。このLLMの出力が完全に信頼できるかは検証していませんが、かなりもっともらしいように見えます。そのサイトのフィルターを使用して、SSLで信頼されている小さな鍵を見つけることができます。
ありました!ターゲットです。1999年3月、Netscape 4.51 は、SSLで信頼されている512ビットRSA証明書認証局と、S/MIME用の別の証明書をバンドルしていました。これら2つのルートは、どちらもカナダの長らく廃止された認証局である E-Certify のものでした。その年の後半、512ビットRSA-155がファクタリングされたので、当時の基準でもこれは弱すぎ、そもそもバンドルされるべきではなかったでしょう。E-Certify の512ビットルートは2002年にNetscapeによって削除されました。
残念ながら、Internet Explorer はSSL用の512ビットルートをバンドルしたことがないようですので、私たちの楽しみは比較的短い期間のNetscapeに限定されます。
ルート証明書の公開鍵をファクタリングすることで、秘密鍵を再構築するために必要な2つの素数を得ることができます。私は Ryzen 9 5950X デスクトップで CADO-NFS を実行しました。E-Certify RSA 512 Gold Server for SSL のファクタリングに32時間、E-Certify RSA 512 Gold Client for S/MIME のファクタリングにさらに29時間かかりました。
結果として得られた秘密鍵は以下から入手できます。
E-Certify RSA 512 Gold Server for SSL
C=CA, O=E-Certify, OU=RSA Gold Server, CN=E-Certify RSA 512 Gold Server
-----BEGIN CERTIFICATE-----
MIIByjCCAXSgAwIBAgIBATANBgkqhkiG9w0BAQQFADBjMQswCQYDVQQGEwJDQTES MBAGA1UEChMJRS1DZXJ0aWZ5MRgwFgYDVQQLEw9SU0EgR29sZCBTZXJ2ZXIxJjAk BgNVBAMTHUUtQ2VydGlmeSBSU0EgNTEyIEdvbGQgU2VydmVyMB4XDTk4MTAxNjEz Mzc1M1oXDTAzMTAxNjEzMzc1M1owYzELMAkGA1UEBhMCQ0ExEjAQBgNVBAoTCUUt Q2VydGlmeTEYMBYGA1UECxMPUlNBIEdvbGQgU2VydmVyMSYwJAYDVQQDEx1FLUNl cnRpZnkgUlNBIDUxMiBHb2xkIFNlcnZlcjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC QQDNVQ93Ev7zgNaJAR1Z7gCydU6mky1e/B4EbY1NsdtfsitU9cELqg5uRJDPA40n CDPeOyil1lJ5N8hekcqJAkkXAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADQQB09SV6OeeDEP8Je3DOLNZ24U98NHqIBTDyB4sRpDmNdHum +3rm4AYtznBxG5hEShO89bcWi3yJtBITGuTRDnMq
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAM1VD3cS/vOA1okBHVnuALJ1TqaTLV78HgRtjU2x21+yK1T1wQuq Dm5EkM8DjScIM947KKXWUnk3yF6RyokCSRcCAwEAAQJAWZ2FOWf+A9K4T2VAJS69 +SU/pW3YwHrysuYJZN56K0Iz+Hqd1hBhCeJ3/T+/cvXq+ctD0x3uOxU1rDSeCoMO KQIhAPdbc1wTm3twWDYi1iXmRBXz97MYxRFld/KFr8x5+tK9AiEA1IG09a+oVg6j NMDj6GD7spaD4q9t1wk/Nyq1MTLPkmMCIEzzYjvuzZvlI0wUIlLAA8Zgk1pgBk6X Jm2IMVyHRgRxAiEAjZKgCTHuVu7HgiSjcTPzW0X1NTckWSc66zjaSR+Ns/sCICxT yXoTXWQCWL6BMpf2no7IlvoEnBIrED2Frq3PxlEA
-----END RSA PRIVATE KEY-----
E-Certify RSA 512 Gold Client for S/MIME
C=CA, O=E-Certify, OU=RSA Gold Client, CN=E-Certify RSA 512 Gold Client
-----BEGIN CERTIFICATE-----
MIIByjCCAXSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADBjMQswCQYDVQQGEwJDQTES MBAGA1UEChMJRS1DZXJ0aWZ5MRgwFgYDVQQLEw9SU0EgR29sZCBDbGllbnQxJjAk BgNVBAMTHUUtQ2VydGlmeSBSU0EgNTEyIEdvbGQgQ2xpZW50MB4XDTk4MTAxNjEz MzQwOFoXDTAzMTAxNjEzMzQwOFowYzELMAkGA1UEBhMCQ0ExEjAQBgNVBAoTCUUt Q2VydGlmeTEYMBYGA1UECxMPUlNBIEdvbGQgQ2xpZW50MSYwJAYDVQQDEx1FLUNl cnRpZnkgUlNBIDUxMiBHb2xkIENsaWVudDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC QQBwCcT1iYlNyKPywB/kffD8esiCzGYJxSnTXQjU6ej/XxnA+9yqjzAMPtqFd094 wM89Vsmz9YOWSO6Qn6wOAs45AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADQQAdktdM5AzW+0o96eHCHwD3UfzxPvjKxPEjiI/QTn+njHt/ BEJb9yZatONRckglVc9v8P8Dy8HZGQD0+Pn0uxhW
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJAcAnE9YmJTcij8sAf5H3w/HrIgsxmCcUp010I1Ono/18ZwPvcqo8w DD7ahXdPeMDPPVbJs/WDlkjukJ+sDgLOOQIDAQABAkASXZeaxFPsm0I8zb+snfR9 /saVolnrqhVEH5EODdXy3nSm6fpdrsDwQDDg52biXjIUizQYdd3OourOn0/PyyiB AiEAyW4gFFgM0dJ+Y//vrIyQutLeH/5c/Vq3Lbcxv7R908kCIQCOZAAv8OCG/2oH yKaYj/EoxcFZ9csVh/kjicO/JIX+8QIhAMEzAkvhBDLALYAmvDCJBkxa8rhHFdPf jbCodGwGZ2WZAiB//XmBnlZkYl/PoVfGmNRgHun+0AZ9UxzqCeJvBQiBMQIgHWlr 0Sh1a8K2pQP2ktgmL3RH5+1Qd2wLx/hhGWtwPvU=
-----END RSA PRIVATE KEY-----
仮に、E-Certifyのルート証明書が2003年10月16日に失効する前に時計が設定されたNetscape 4.51を実行している場合、これらの秘密鍵を使用して証明書を発行できます。これは地球上の誰にも当てはまりませんが、私がセットアップしたこのVMだけです。
発行された証明書がNetscape 4.51で機能することを検証すること自体が冒険でした。Netscape 4.51と最新のTLSスタックの間にはTLS機能の重複が全くないためです。そこで、Claude Codeに戻って、Goでカスタムの古いTLSサーバーを作成しました。
このサイトはe-certify.fly.devで公開されており、Netscapeのコピーをお持ちの方は自由に試すことができますが、最新のブラウザでは読み込めません。あるいは、これらの古い鍵を使用して独自のウェブサイトをホストしたい場合は、鍵とツールはすべてリポジトリ(https://github.com/mcpherrinm/ancientroots)にあります。あるいは、もっと悪いことに、25年前に時計が設定されたすべてのNetscape 4.51ユーザーのSSLをMitMするなどです。
ボーナスとして、Internet Explorer 3.02はOU=Test VeriSign Commercial Software Publisher CAというコード署名CAをバンドルしていました。それが何に使われているのかはわかりませんが、同様に簡単にファクタリングできます。古いルートリポジトリには、テスト用の512ビットRSA鍵が他にもいくつかありますので、さらにいくつかファクタリングしたり、何に使用できるかを確認したりしてみてください。
L=Internet, O=VeriSign, Inc., OU=Test VeriSign Commercial Software Publisher CA
-----BEGIN CERTIFICATE-----
MIIByDCCAXKgAwIBAgIQIsTi2AgEp+1OkpqVLROnazANBgkqhkiG9w0BAQQFADBl MREwDwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1 BgNVBAsTLlRlc3QgVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNo ZXIgQ0EwHhcNOTYwNTAyMTcwMTUyWhcNOTcwNTAyMTcwMTUyWjBlMREwDwYDVQQH EwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLlRl c3QgVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNoZXIgQ0EwXDAN BgkqhkiG9w0BAQEFAANLADBIAkEA1XqTpg1hQWq6IKvBXLor12GBTH6y4BHyOJjy MJISn0ZWBqkbZiEfoWgaWXhEwrvxMWonLA2vYFHijofFG4YIjwIDAQABMA0GCSqG SIb3DQEBBAUAA0EAKxuR/KPJPDNJgw0ORqqM7SlvIeqnVP71OEFytqPaZw/3TPEi 9oK6PzBvPdLBZlnjRd/hf58FW2+/PXxsFl78Mg==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBANV6k6YNYUFquiCrwVy6K9dhgUx+suAR8jiY8jCSEp9GVgapG2Yh H6FoGll4RMK78TFqJywNr2BR4o6HxRuGCI8CAwEAAQJAYM8tlegLarcToS1CiuKC bzHwiNgMFkENL01sx0n21/MhmA6pBiSwVn3Pu6yvx6EMB1zbCsaBHs/VTyofMbRW QQIhAOqdAX3bVZwAlZ5FDWyfGwgE0FXEIQ85kjcihrFeDs49AiEA6PBfC0YuNMSa M135mH+MEY1GEmQe9xHcXpiYAPazCrsCIQDDtuw6oJEfDYHCwRn8xhGXs+RT18Q4 Xi9yXRP9vFgfhQIhAIYUTfD0XYZcIBIvJosj56D2u328iaJXcow0s1Hirp4fAiAG bza0Qcc27d/0OzKOqep3JrDl/L5HidTj2XEqEXmnXw==
-----END RSA PRIVATE KEY-----
最後に、SSL Labs は私のテストサイトを素晴らしいと評価しています。