Факторизация RSA-ключей центра сертификации 90-х годов
Криптография RSA основана на сложности факторизации больших полупростых чисел, но что означает «большие» — интересный вопрос. Web PKI отказался от 1024-битных RSA более десяти лет назад. Хотя нет сведений о факторизации ключей такого размера, это вполне возможно для государства или организации с большим количеством компьютеров. Несколько дней назад кто-то факторизировал 862-битный RSA-260 из задачи RSA Factoring Challenge — это крупнейшая известная факторизация. Сегодня мир использует RSA размером не менее 2048 бит, но скоро это также будет признано устаревшим в связи с риском квантовых компьютеров.
Возник вопрос: маленькие RSA-ключи можно факторизировать даже на скромном настольном компьютере. А в ранние дни Web PKI не было стандартов и минимальных требований. Netscape выпустил поддержку SSL в 1994 году, Internet Explorer вскоре после этого. Это была эпоха экспортных ограничений на криптографию. Могут ли быть ключи достаточно маленькие для факторизации на домашней машине? Нет веских причин это делать, но звучит забавно.
Спойлер: да, но сначала нужно найти ключ для взлома.
К счастью, корневые сертификаты поставлялись с установщиками браузеров. На archive.org есть архивы Internet Explorer и Netscape. Архивы не полные, но должны обеспечить хорошее покрытие старых корневых ЦСов. Я загрузил обе коллекции и запустил Claude Code для извлечения всех корневых сертификатов. Хост-провайдер разместил веб-страницу с древними корневыми сертификатами. Хотя я не проверил полную надежность вывода 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 часа, и еще 29 часов для E-Certify RSA 512 Gold Client для S/MIME. Приватные ключи приведены ниже.
При условии, что вы как-то запускаете Netscape 4.51 с установленными часами до истечения корней E-Certify 2003-10-16, можно использовать эти приватные ключи для выдачи сертификатов. Это описывает ноль людей на планете… кроме виртуальной машины, которую я создал.
Проверка того, что выданные сертификаты будут работать в Netscape 4.51, была сама по себе приключением, поскольку нет никакого перекрытия возможностей TLS между Netscape 4.51 и любым современным стеком TLS. Пришлось снова прибегнуть к Claude Code для создания пользовательского древнего TLS-сервера на Go. Этот сайт публично размещен на e-certify.fly.dev, который вы можете попробовать со своей копией Netscape, но он не загружается в современных браузерах.

Или, если хотите разместить собственный веб-сайт, используя эти древние ключи, ключи и инструменты находятся в репозитории на https://github.com/mcpherrinm/ancientroots. Или делайте хуже, как перехватывать SSL все тех пользователей Netscape 4.51 с часами, установленными на 25 лет назад…
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/Nyq/MTLPkmMCIEzzYjvuzZvlI0wUIlLAA8Zgk1pgBk6X
Jm2IMVyHRgRxAiEAjZKgCTHuVu7HgiSjcTPzW0X1NTckWSc66zjaSR+Ns/sCICxT
yXoTXWQCWL6BMpf2no7IlvoEnBIrED2Frq3PxlEA
-----END RSA PRIVATE KEY-----
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/HrIgsxmCcUp000I1Ono/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-----
Бонус: 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+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-----
