Hacker information
March 28

Асимметричное шифрование. Сравнение алгоритмов и подарки от ЦРУ.

Сегодня поговорим про алгоритмы асимметричного шифрования для создания цифровой подписи, которые затем будут использоваться для входа на VPS или для авторизации в Wi-Fi сетях.

Энтузиасты, хакеры и безопасники давно спорят, что лучше использовать, ed25519 или RSA. Оба алгоритма пока что не смогли ответить на вопрос о грядущей квантовой угрозе, но т.к. они являются стандартом, будем работать с тем, что есть.

Алгоритм RSA создавался 50 лет назад и со временем никак не изменялся, кроме увеличения длины ключа. Дыр в RSA всегда было достаточно, поэтому хвалить я данный алгоритм не буду, вместо этого сразу перейду к недостаткам:

  1. Невозможность масштабирования. Алгоритм возводит в степень огромные числа, из-за чего работает крайне медленно и сильно нагружает CPU. Кроме того, ключ в 4096 бит — это уже относительно непростая нагрузка, а если мы смотрим на 10 лет вперед, то ставить нужно 8192 или 16384, оба варианта неюзабельные. Ключ длиннее 4096 бит также пагубно сказывается на скорости пропускной способности сети, Wi-Fi его просто выплюнет.
  2. Уязвимость к квантовым компьютерам. Существует математически доказанный алгоритм(метод Шора), который позволяет квантовому компьютеру быстро разлагать большие числа на множители. Лет через 5, максимум 10 — у атакующих появится достаточно вычислительной мощности для того, чтобы щелкнуть RSA моментально.
  3. Корреляция. Уже существуют инструменты, позволяющие проанализировать, какое количество электроэнергии потребляет процессор, а на основе полученных данных вычислить ключ. То же самое делают и по временной корреляции. "Но есть же padding" — скажешь ты и будешь абсолютно не прав, RSA детерминирован из коробки, а добавление случайных чисел зачастую приводит к ошибке.
  4. Плохая реализация. RSA критически зависим от качества генератора случайных чисел. Если на новом железе(например VPS) было мало энтропии(движения мыши, как в VeraCrypt), то при генерации ключа или создании подписи — вы обнаружите, что ключ можно угадать, а при отсутствии соли вообще два раза создать один и тот же ключ.
  5. Сомнительная репутация. Ходит слух, что спецслужбы внедрили бэкдор в алгоритм RSA, позволяющий по публичному ключу расшифровывать секрет. Эта теория небезосновательна, т.к. раньше США запрещали использовать компаниям ключи длиннее 512 бит. Лично я задался вопросом, почему в 2025 году Calyx Institute использовали на своих публичных XMPP серверах именно ключи RSA.

Переходим к современному решению, а именно ed25519. Алгоритм относительно молодой(15 лет) и кардинально сменил подход, отказавшись от громоздких чисел в пользу эллиптической кривой curve25519, созданной Дэниелом Бернштейном. В своей вступительной части я уже упомянул, что ed25519 также неэффективен против квантовой угрозы, как и RSA, однако в остальном — алгоритм практически лишен недостатков. Перечислю достоинства современного стандарта:

  1. Огромный потенциал масштабирования. Публичный ключ весит 256 бит, что позволяет втиснуть его в любое поле. Процесс подписи и проверки происходит в десятки раз быстрее, чем у RSA. Кроме того, ed25519 практически не нагружает CPU, из-за чего тысячу одновременно запущенных процессов будут быстрее, чем один у RSA. Любая авторизация превращается в песню и пролетает за один пакет, не вызывая сбоев.
  2. Антикорреляция. Новый алгоритм детерминирован и здесь это реализовано правильно. Ed25519 имеет фиксированное время и одинаковое потребление электроэнергии для любой подписи, отчего любые корреляции идут ДОМООООЙ!
  3. Отличная реализация. Подпись генерируется на основе хеша от вашего закрытого ключа и самого сообщения, это значит, что плохой алгоритм рандомизации чисел и низкая энтропия устройства — не повлияют на стойкость криптографии.
  4. Прозрачность. Алгоритм был спроектирован по такому сценарию, что никакие спецслужбы не могут оказать давление, вшить бэкдор и сознательно снизить криптографическую устойчивость ключа.

Теперь перейдем от теории к практике и сгенерируем максимально защищенный ключ для ssh.

Для этого выполним в терминале:

ssh-keygen -t ed25519 -a 1000 -o -C "VPS"

-t ed25519 - алгоритм
-a - этот флажок наш главный друг, который увеличивает количество раундов хеширования пароля, отчего брут становится невероятно сложным. 1000 это экстремальное значение, можно использовать 200.
-o - заставляет использовать новый формат OpenSSH, который гораздо безопаснее, чем древний PEM.
-C - комментарий, который добавляется в конце ключа. Можно написать что угодно, например дату или название сервиса. При большом массиве ключей, данный флажок позволяет не запутаться.

Мой канал в telegram

Поддержать автора

Как отключить вход по паролю на сервере расписывать не буду, т.к. данный пункт совсем простой и не требует комментариев. Оставлю его вам для самостоятельного изучения.