RSA или Ed25519: какой SSH-ключ выбрать и почему

Совет заменить ssh-keygen -t rsa на ssh-keygen -t ed25519 часто объясняют одной фразой: Ed25519 новее, короче и быстрее. Этого недостаточно, потому что длины ключей у разных криптосистем нельзя сравнивать напрямую, RSA не перестал быть безопасным в один конкретный день, а часть сообщений об «отключении RSA» на самом деле относится только к старым подписям RSA с SHA-1. Выбор SSH-ключа зависит не только от математики, но и от версий серверов, аппаратных токенов и требований конкретной инфраструктуры.
RSA сделал криптографию с открытым ключом практичной
В 1976 году Уитфилд Диффи и Мартин Хеллман опубликовали идею криптографии с открытым ключом, однако их работа не давала готовой универсальной схемы для шифрования и подписей. В следующем году исследователи MIT Рон Райвест, Ади Шамир и Леонард Адлеман предложили метод, получивший название по первым буквам их фамилий. Статья «A Method for Obtaining Digital Signatures and Public-Key Cryptosystems» появилась в Communications of the ACM в феврале 1978 года.
RSA использует пару больших простых чисел p и q, произведение которых образует модуль n. Перемножить выбранные числа легко, а восстановить их по достаточно большому n считается вычислительно трудной задачей. Эта асимметрия позволяет опубликовать одну часть ключа и сохранить вторую в секрете.
Учебное описание RSA часто сводят к возведению сообщения в степень по модулю, но в реальной системе одной этой операции недостаточно. Безопасное шифрование требует схемы кодирования вроде OAEP, а подписи используют хеширование и определённую схему подписи, например PSS или PKCS #1 v1.5. В SSH RSA-ключ обычно нужен не для шифрования всего трафика. Клиент подписывает данные сеанса и доказывает владение приватным ключом, после чего стороны используют отдельно согласованные симметричные ключи для соединения.
Долгая жизнь RSA объясняется не только возрастом и распространённостью. Формат поддерживают старые SSH-серверы, сетевое оборудование, смарт-карты, HSM и корпоративные политики, где обновление разрешённого набора алгоритмов занимает годы. При корректной длине ключа и современной подписи RSA остаётся рабочим решением, хотя его ключи и подписи заметно крупнее, а генерация и приватные операции обходятся дороже, чем у современных эллиптических схем.
От Curve25519 к Ed25519 без подмены назначения
В 2006 году Дэниэл Бернштейн представил Curve25519 как быстрый и удобный примитив для согласования общего секрета по схеме Диффи и Хеллмана. Сегодня соответствующую функцию обычно называют X25519. Она помогает двум сторонам получить общий секрет, но сама по себе не создаёт цифровые подписи и не заменяет алгоритм аутентификации.
Пять лет спустя Бернштейн, Нилс Дауф, Таня Ланге, Петер Швабе и Бо-Инь Ян опубликовали работу «High-speed high-security signatures» и описали Ed25519, конкретный вариант схемы EdDSA. Ed25519 использует twisted Edwards curve edwards25519 над полем с простым модулем 2²⁵⁵ − 19. Эта кривая эквивалентна Curve25519 после замены координат, поэтому сложность задачи дискретного логарифма у них связана, но протоколы и форматы ключей остаются разными.
Такое различие важно на практике. X25519 согласует секрет для последующего шифрования, тогда как Ed25519 подписывает сообщение и позволяет проверить подпись по открытому ключу. Нельзя взять строку ssh-ed25519 и использовать её как X25519-ключ без специального преобразования и протокола, как нельзя считать подпись заменой обмену ключами только из-за общего числа 25519 в названии.
Что Ed25519 улучшила в цифровых подписях
В январе 2017 года RFC 8032 подробно описал EdDSA, параметры Ed25519 и тестовые векторы. Открытый ключ Ed25519 кодируется 32 байтами, подпись занимает 64 байта, а расчётный уровень безопасности составляет около 128 бит против классического компьютера. По таблице сопоставимых уровней в NIST SP 800-57 Part 1 Rev. 5 примерно тем же 128 битам соответствует RSA с модулем 3072 бита; RSA-2048 оценивается примерно в 112 бит. Поэтому популярное сравнение Ed25519 с RSA-4096 можно использовать лишь как очень грубый ориентир, а не как точное равенство.
Ed25519 также не требует нового случайного nonce для каждой подписи: одноразовое значение детерминированно выводится из закрытого ключа и сообщения. Это устраняет целый класс ошибок, при которых плохой генератор случайных чисел раскрывал ключ в других схемах подписи. Полные формулы сложения точек упрощают написание кода без особых веток для исключительных случаев.
Однако алгоритм не делает любую реализацию автоматически защищённой от побочных каналов. RFC 8032 отдельно требует избегать ветвлений и обращений к памяти, зависящих от секретных данных. Архитектура Ed25519 облегчает constant-time реализацию, но конкретная библиотека всё равно должна выполнить эту работу правильно. По скорости тоже полезна оговорка: генерация ключа и подпись Ed25519 обычно быстры и предсказуемы, тогда как проверка RSA с небольшой открытой экспонентой может быть очень быстрой. Единого превосходства во всех операциях и на всех платформах нет.
Что именно изменилось в OpenSSH
OpenSSH 6.5, выпущенный 30 января 2014 года, добавил Ed25519 как тип пользовательского и серверного ключа. В актуальном руководстве ssh-keygen Ed25519 уже указан как тип по умолчанию. Это хороший выбор для нового ключа, если обе стороны используют современные реализации, но поддержка старых серверов и закрытых устройств по-прежнему требует проверки.
С RSA произошёл другой переход. OpenSSH 7.2 в 2016 году научился использовать подписи RSA с SHA-256 и SHA-512, а OpenSSH 8.8 в 2021 году по умолчанию отключил подпись ssh-rsa, основанную на SHA-1. В примечаниях к релизу прямо сказано, что большинству пользователей не требуется заменять существующие RSA-ключи: тот же ключ автоматически работает с rsa-sha2-256 или rsa-sha2-512, если их понимает другая сторона.
Из этого следует практическое правило. Для нового доступа между современными системами удобно начинать с Ed25519. RSA нужен, когда целевой сервер, токен или политика не поддерживает Ed25519; при этом следует выбирать достаточную длину и убедиться, что соединение использует RSA/SHA-2, а не возвращается к RSA/SHA-1 ради сомнительной совместимости.
Размер в таблице относится к сырому публичному значению или модулю. Строка OpenSSH, контейнер приватного ключа и данные служебного формата всегда занимают больше места. Ни RSA, ни Ed25519 не являются постквантовыми: достаточно мощный квантовый компьютер угрожает обеим математическим задачам, поэтому переход между ними не решает задачу миграции на постквантовую криптографию.
Что делает браузерный Key Pair Generator
Key Pair Generator вызывает Web Crypto API непосредственно в открытой странице и предлагает Ed25519, RSA-2048 или RSA-4096. Для RSA реализация создаёт ключ RSA-PSS с SHA-256 и публичной экспонентой 65537. Затем инструмент собирает открытую строку формата ssh-ed25519 или ssh-rsa, рассчитывает привычный отпечаток SHA256 от SSH blob и позволяет скопировать либо скачать результат.
Приватная часть экспортируется как незашифрованный PKCS#8 PEM. Это не контейнер OpenSSH, который обычно создаёт ssh-keygen, поэтому совместимость приватного файла необходимо проверить в целевой программе; публичная строка и приватный PKCS#8 решают разные задачи. Ключи существуют только в памяти страницы, текущий код не отправляет их на сервер и не записывает в хранилище. Новая генерация заменяет предыдущую пару.
Эти свойства делают инструмент удобным для изучения форматов, сравнения размеров и создания временных ключей в совместимой среде, но не отменяют осторожность. Незашифрованный приватный ключ показывается на экране и сохраняется без парольной фразы, а безопасность онлайн-генерации зависит ещё и от кода страницы, браузера и устройства. Для постоянного доступа к рабочим серверам лучше выполнить ssh-keygen -t ed25519 локально, защитить файл парольной фразой или использовать аппаратный ключ. Если нужна совместимость RSA, параметры следует выбирать по требованиям конкретной системы, а не только по длине строки в генераторе.
Похожие инструменты
Частые вопросы
Что лучше выбрать для нового SSH-ключа: RSA или Ed25519?
Если все нужные клиенты, серверы и устройства поддерживают Ed25519, обычно это удобный выбор для нового ключа: компактный формат, быстрая генерация и примерно 128-битный уровень классической безопасности. RSA остаётся разумным вариантом для старых систем, аппаратных токенов и сред с ограниченным набором разрешённых алгоритмов.
RSA уже считается сломанным?
Нет. RSA достаточной длины с современной схемой подписи остаётся пригодным. В SSH важно не путать RSA-ключ с устаревшим алгоритмом подписи ssh-rsa на SHA-1: OpenSSH 8.8 отключил именно RSA/SHA-1, тогда как тот же RSA-ключ может использовать rsa-sha2-256 или rsa-sha2-512.
Ed25519 и Curve25519 являются одним алгоритмом?
Нет. Curve25519 создавалась для согласования общего секрета, а Ed25519 предназначена для цифровых подписей. Они работают над одним полем и используют эквивалентные кривые в разных координатных формах, но имеют разные протоколы, форматы ключей и назначение.
Когда OpenSSH получил поддержку Ed25519?
OpenSSH 6.5, выпущенный в январе 2014 года, добавил Ed25519 для пользовательских и серверных ключей. Современное руководство ssh-keygen указывает Ed25519 как тип по умолчанию, однако версии в старых операционных системах и сетевом оборудовании могут вести себя иначе.
Подходит ли браузерный Key Pair Generator для рабочего SSH-ключа?
Инструмент не отправляет и не сохраняет ключи, но показывает незашифрованный приватный ключ в PKCS#8, а не в обычном приватном формате OpenSSH. Для долгоживущего рабочего доступа безопаснее использовать локальный ssh-keygen с парольной фразой или аппаратный ключ; браузерный генератор удобен для изучения форматов, тестов и совместимых временных сценариев.
Автор
Alex RelFullstack Engineer
В коммерческой разработке с 2011 года — больше 15 лет. Автор двух SaaS-продуктов: TeleGo.io и LingvoHabit.com. Статьи здесь выросли из реальной клиентской и продуктовой работы.



