В последнее время меня всерьез стала беспокоить безопасность RSA. Криптография RSA держится на сложности факторизации большого полупростого числа, но какое именно число можно считать достаточно «большим» — вопрос интересный. Web PKI отказалась от 1024-битного RSA больше десяти лет назад, и хотя я не знаю никого, кто факторизовал бы ключ такого размера, это вполне по силам какому‑нибудь правительству или другой организации с большим количеством машин. Буквально пару дней назад кто‑то факторизовал 862-битный ключ RSA-260 в рамках конкурса RSA Factoring Challenge. Это самая крупная факторизация, о которой я слышал. Сегодня во всем мире используют RSA с длиной ключа минимум 2048 бит, но и это скоро устареет из‑за риска, который представляют квантовые компьютеры в будущем.
И вот я подумал: небольшие ключи RSA можно факторизовать даже на скромном персональном компьютере. А в ранние годы Web PKI не было ни стандартов, ни минимальных требований. Netscape реализовала поддержку SSL в 1994 году, IE — вскоре после. Это все еще была эпоха экспортных ограничений на криптографию. Найдутся ли ключи, достаточно маленькие, чтобы я мог их факторизовать? Если что я не руководствуюсь ничем, кроме простого интереса.
Спойлер: конечно, да, но сначала нужно найти ключ, который мы будем взламывать.
К счастью, корневые сертификаты поставлялись вместе с установщиками браузеров, и на archive.org есть архивы и Internet Explorer, и Netscape. Архивы неполные, но должны дать неплохое покрытие старых корневых сертификатов. Я скачал обе коллекции и поручил Claude Code извлечь все корневые сертификаты. Я выложил сгенерированную Claude веб‑страницу со всеми этими старинными корневыми сертификатами здесь. Я не проводил тщательной проверки вывода LLM, но выглядит вполне правдоподобно.
С помощью фильтров на этом сайте мы можем найти маленькие ключи, которые использовались для SSL.

Ага! Цель найдена. В марте 1999 года Netscape 4.51 поставлялся с 512-битным RSA доверенным для SSL, и еще одним — для S/MIME. Оба корневых сертификата принадлежали давно почившему канадскому удостоверяющему центру E‑Certify.
Позже в том же году был факторизован 512-битный RSA-155, так что даже для своей эпохи он был слишком слабым и, вероятно, не должен был поставляться вообще.
512-битные корневые сертификаты от E‑Certify были удалены Netscape в 2002 году. К сожалению, Internet Explorer, судя по всему, никогда не поставлял 512-битные корневые сертификаты для SSL, так что веселье ограничится Netscape и относительно небольшим периодом времени.
Факторизация публичных ключей из корневых сертификатов даст мне два простых числа, необходимых для восстановления приватного ключа. Я запустил CADO‑NFS на своем персональном компьютере с Ryzen 9 5950X: факторизация E‑Certify RSA 512 Gold Server для SSL заняла 32 часа, а E‑Certify RSA 512 Gold Client — еще 29 часов. Полученные приватные ключи приведены ниже.
После того как вы установите CADO‑NFS по инструкции, запустить его несложно. Нужно извлечь из сертификата модуль, который будем факторизовать. Это делается с помощью пары строк на Python:
from cryptography import x509f = open("gold-server.pem", "rb").read()pubkey = x509.load_pem_x509_certificate(f).public_key()print(pubkey.public_numbers().n)
Полученное значение N передается в CADO‑NFS, примерно так:
./cado-nfs.py $N -t 32 --workdir /data/cert1
Если вы каким‑то чудом используете Netscape 4.51 с часами, выставленными до истечения срока действия корневых сертификатов E‑Certify (16 октября 2003 года), вы можете использовать эти приватные ключи для выпуска сертификатов. Под эту категорию подпадает ноль людей на планете… кроме виртуалки, которую я сам настроил.
Проверка того, что выпущенные сертификаты заработают в Netscape 4.51, сама по себе оказалась приключением: TLS‑функционал у Netscape 4.51 и любого современного TLS‑стека не пересекаются вообще. Так что пришлось снова звать на помощь Claude Code, чтобы тот написал нам ретро TLS‑сервер на Go. Сайт публично доступен по адресу e‑certify.fly.dev — можете посетить его с помощью своей копии Netscape. В любом другом современном браузере он просто не загрузится.

А если хотите попробовать поднять собственный сайт на этих старых ключах — все ключи и инструменты лежат в репозитории https://github.com/mcpherrinm/ancientroots. Или сделайте что‑нибудь похуже: например, MitM для SSL всех тех пользователей Netscape 4.51, у которых часы выставлены на 25 лет назад…
Скрытый текст
C=CA, O=E-Certify, OU=RSA Gold Server, CN=E-Certify RSA 512 Gold Server-----BEGIN CERTIFICATE-----MIIByjCCAXSgAwIBAgIBATANBgkqhkiG9w0BAQQFADBjMQswCQYDVQQGEwJDQTESMBAGA1UEChMJRS1DZXJ0aWZ5MRgwFgYDVQQLEw9SU0EgR29sZCBTZXJ2ZXIxJjAkBgNVBAMTHUUtQ2VydGlmeSBSU0EgNTEyIEdvbGQgU2VydmVyMB4XDTk4MTAxNjEzMzc1M1oXDTAzMTAxNjEzMzc1M1owYzELMAkGA1UEBhMCQ0ExEjAQBgNVBAoTCUUtQ2VydGlmeTEYMBYGA1UECxMPUlNBIEdvbGQgU2VydmVyMSYwJAYDVQQDEx1FLUNlcnRpZnkgUlNBIDUxMiBHb2xkIFNlcnZlcjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDNVQ93Ev7zgNaJAR1Z7gCydU6mky1e/B4EbY1NsdtfsitU9cELqg5uRJDPA40nCDPeOyil1lJ5N8hekcqJAkkXAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADQQB09SV6OeeDEP8Je3DOLNZ24U98NHqIBTDyB4sRpDmNdHum+3rm4AYtznBxG5hEShO89bcWi3yJtBITGuTRDnMq-----END CERTIFICATE----------BEGIN RSA PRIVATE KEY-----MIIBOgIBAAJBAM1VD3cS/vOA1okBHVnuALJ1TqaTLV78HgRtjU2x21+yK1T1wQuqDm5EkM8DjScIM947KKXWUnk3yF6RyokCSRcCAwEAAQJAWZ2FOWf+A9K4T2VAJS69+SU/pW3YwHrysuYJZN56K0Iz+Hqd1hBhCeJ3/T+/cvXq+ctD0x3uOxU1rDSeCoMOKQIhAPdbc1wTm3twWDYi1iXmRBXz97MYxRFld/KFr8x5+tK9AiEA1IG09a+oVg6jNMDj6GD7spaD4q9t1wk/Nyq/MTLPkmMCIEzzYjvuzZvlI0wUIlLAA8Zgk1pgBk6XJm2IMVyHRgRxAiEAjZKgCTHuVu7HgiSjcTPzW0X1NTckWSc66zjaSR+Ns/sCICxTyXoTXWQCWL6BMpf2no7IlvoEnBIrED2Frq3PxlEA-----END RSA PRIVATE KEY-----
C=CA, O=E-Certify, OU=RSA Gold Client, CN=E-Certify RSA 512 Gold Client-----BEGIN CERTIFICATE-----MIIByjCCAXSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADBjMQswCQYDVQQGEwJDQTESMBAGA1UEChMJRS1DZXJ0aWZ5MRgwFgYDVQQLEw9SU0EgR29sZCBDbGllbnQxJjAkBgNVBAMTHUUtQ2VydGlmeSBSU0EgNTEyIEdvbGQgQ2xpZW50MB4XDTk4MTAxNjEzMzQwOFoXDTAzMTAxNjEzMzQwOFowYzELMAkGA1UEBhMCQ0ExEjAQBgNVBAoTCUUtQ2VydGlmeTEYMBYGA1UECxMPUlNBIEdvbGQgQ2xpZW50MSYwJAYDVQQDEx1FLUNlcnRpZnkgUlNBIDUxMiBHb2xkIENsaWVudDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQBwCcT1iYlNyKPywB/kffD8esiCzGYJxSnTXQjU6ej/XxnA+9yqjzAMPtqFd094wM89Vsmz9YOWSO6Qn6wOAs45AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADQQAdktdM5AzW+0o96eHCHwD3UfzxPvjKxPEjiI/QTn+njHt/BEJb9yZatONRckglVc9v8P8Dy8HZGQD0+Pn0uxhW-----END CERTIFICATE----------BEGIN RSA PRIVATE KEY-----MIIBOQIBAAJAcAnE9YmJTcij8sAf5H3w/HrIgsxmCcUp010I1Ono/18ZwPvcqo8wDD7ahXdPeMDPPVbJs/WDlkjukJ+sDgLOOQIDAQABAkASXZeaxFPsm0I8zb+snfR9/saVolnrqhVEH5EODdXy3nSm6fpdrsDwQDDg52biXjIUizQYdd3OourOn0/PyyiBAiEAyW4gFFgM0dJ+Y//vrIyQutLeH/5c/Vq3Lbcxv7R908kCIQCOZAAv8OCG/2oHyKaYj/EoxcFZ9csVh/kjicO/JIX+8QIhAMEzAkvhBDLALYAmvDCJBkxa8rhHFdPfjbCodGwGZ2WZAiB//XmBnlZkYl/PoVfGmNRgHun+0AZ9UxzqCeJvBQiBMQIgHWlr0Sh1a8K2pQP2ktgmL3RH5+1Qd2wLx/hhGWtwPvU=-----END RSA PRIVATE KEY-----
В качестве бонуса Internet Explorer 3.02 поставлялся с удостоверяющим центром для подписи кода под названием OU=Test VeriSign Commercial Software Publisher CA. Точно не знаю, для чего он предназначен, но факторизуется так же легко. В репозитории ancient roots есть еще несколько похожих на тестовые 512-битных RSA‑ключей — попробуйте факторизовать что‑нибудь еще или придумать, как их можно применить!
Стив Вайс (Steve Weis) факторизовал этот ключ примерно за час на GPU‑кластере.
Скрытый текст
L=Internet, O=VeriSign, Inc., OU=Test VeriSign Commercial Software Publisher CA-----BEGIN CERTIFICATE-----MIIByDCCAXKgAwIBAgIQIsTi2AgEp+1OkpqVLROnazANBgkqhkiG9w0BAQQFADBlMREwDwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLlRlc3QgVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNoZXIgQ0EwHhcNOTYwNTAyMTcwMTUyWhcNOTcwNTAyMTcwMTUyWjBlMREwDwYDVQQHEwhJbnRlcm5ldDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLlRlc3QgVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNoZXIgQ0EwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA1XqTpg1hQWq6IKvBXLor12GBTH6y4BHyOJjyMJISn0ZWBqkbZiEfoWgaWXhEwrvxMWonLA2vYFHijofFG4YIjwIDAQABMA0GCSqGSIb3DQEBBAUAA0EAKxuR/KPJPDNJgw0ORqqM7SlvIeqnVP71OEFytqPaZw/3TPEi9oK6PzBvPdLBZlnjRd/hf58FW2+/PXxsFl78Mg==-----END CERTIFICATE----------BEGIN RSA PRIVATE KEY-----MIIBOwIBAAJBANV6k6YNYUFquiCrwVy6K9dhgUx+suAR8jiY8jCSEp9GVgapG2YhH6FoGll4RMK78TFqJywNr2BR4o6HxRuGCI8CAwEAAQJAYM8tlegLarcToS1CiuKCbzHwiNgMFkENL01sx0n21/MhmA6pBiSwVn3Pu6yvx6EMB1zbCsaBHs/VTyofMbRWQQIhAOqdAX3bVZwAlZ5FDWyfGwgE0FXEIQ85kjcihrFeDs49AiEA6PBfC0YuNMSaM135mH+MEY1GEmQe9xHcXpiYAPazCrsCIQDDtuw6oJEfDYHCwRn8xhGXs+RT18Q4Xi9yXRP9vFgfhQIhAIYUTfD0XYZcIBIvJosj56D2u328iaJXcow0s1Hirp4fAiAGbza0Qcc27d/0OzKOqep3JrDl/L5HidTj2XEqEXmnXw==-----END RSA PRIVATE KEY-----
И напоследок: вот что SSL Labs думает о моем тестовом сайте:

ссылка на оригинал статьи https://habr.com/ru/articles/1082322/