Асимметричное шифрование. Сравнение алгоритмов и подарки от ЦРУ.
Сегодня поговорим про алгоритмы асимметричного шифрования для создания цифровой подписи, которые затем будут использоваться для входа на VPS или для авторизации в Wi-Fi сетях.
Энтузиасты, хакеры и безопасники давно спорят, что лучше использовать, ed25519 или RSA. Оба алгоритма пока что не смогли ответить на вопрос о грядущей квантовой угрозе, но т.к. они являются стандартом, будем работать с тем, что есть.
Алгоритм RSA создавался 50 лет назад и со временем никак не изменялся, кроме увеличения длины ключа. Дыр в RSA всегда было достаточно, поэтому хвалить я данный алгоритм не буду, вместо этого сразу перейду к недостаткам:
- Невозможность масштабирования. Алгоритм возводит в степень огромные числа, из-за чего работает крайне медленно и сильно нагружает CPU. Кроме того, ключ в 4096 бит — это уже относительно непростая нагрузка, а если мы смотрим на 10 лет вперед, то ставить нужно 8192 или 16384, оба варианта неюзабельные. Ключ длиннее 4096 бит также пагубно сказывается на скорости пропускной способности сети, Wi-Fi его просто выплюнет.
- Уязвимость к квантовым компьютерам. Существует математически доказанный алгоритм(метод Шора), который позволяет квантовому компьютеру быстро разлагать большие числа на множители. Лет через 5, максимум 10 — у атакующих появится достаточно вычислительной мощности для того, чтобы щелкнуть RSA моментально.
- Корреляция. Уже существуют инструменты, позволяющие проанализировать, какое количество электроэнергии потребляет процессор, а на основе полученных данных вычислить ключ. То же самое делают и по временной корреляции. "Но есть же padding" — скажешь ты и будешь абсолютно не прав, RSA детерминирован из коробки, а добавление случайных чисел зачастую приводит к ошибке.
- Плохая реализация. RSA критически зависим от качества генератора случайных чисел. Если на новом железе(например VPS) было мало энтропии(движения мыши, как в VeraCrypt), то при генерации ключа или создании подписи — вы обнаружите, что ключ можно угадать, а при отсутствии соли вообще два раза создать один и тот же ключ.
- Сомнительная репутация. Ходит слух, что спецслужбы внедрили бэкдор в алгоритм RSA, позволяющий по публичному ключу расшифровывать секрет. Эта теория небезосновательна, т.к. раньше США запрещали использовать компаниям ключи длиннее 512 бит. Лично я задался вопросом, почему в 2025 году Calyx Institute использовали на своих публичных XMPP серверах именно ключи RSA.
Переходим к современному решению, а именно ed25519. Алгоритм относительно молодой(15 лет) и кардинально сменил подход, отказавшись от громоздких чисел в пользу эллиптической кривой curve25519, созданной Дэниелом Бернштейном. В своей вступительной части я уже упомянул, что ed25519 также неэффективен против квантовой угрозы, как и RSA, однако в остальном — алгоритм практически лишен недостатков. Перечислю достоинства современного стандарта:
- Огромный потенциал масштабирования. Публичный ключ весит 256 бит, что позволяет втиснуть его в любое поле. Процесс подписи и проверки происходит в десятки раз быстрее, чем у RSA. Кроме того, ed25519 практически не нагружает CPU, из-за чего тысячу одновременно запущенных процессов будут быстрее, чем один у RSA. Любая авторизация превращается в песню и пролетает за один пакет, не вызывая сбоев.
- Антикорреляция. Новый алгоритм детерминирован и здесь это реализовано правильно. Ed25519 имеет фиксированное время и одинаковое потребление электроэнергии для любой подписи, отчего любые корреляции идут ДОМООООЙ!
- Отличная реализация. Подпись генерируется на основе хеша от вашего закрытого ключа и самого сообщения, это значит, что плохой алгоритм рандомизации чисел и низкая энтропия устройства — не повлияют на стойкость криптографии.
- Прозрачность. Алгоритм был спроектирован по такому сценарию, что никакие спецслужбы не могут оказать давление, вшить бэкдор и сознательно снизить криптографическую устойчивость ключа.
Теперь перейдем от теории к практике и сгенерируем максимально защищенный ключ для ssh.
Для этого выполним в терминале:
ssh-keygen -t ed25519 -a 1000 -o -C "VPS"
-t ed25519 - алгоритм-a - этот флажок наш главный друг, который увеличивает количество раундов хеширования пароля, отчего брут становится невероятно сложным. 1000 это экстремальное значение, можно использовать 200.-o - заставляет использовать новый формат OpenSSH, который гораздо безопаснее, чем древний PEM.-C - комментарий, который добавляется в конце ключа. Можно написать что угодно, например дату или название сервиса. При большом массиве ключей, данный флажок позволяет не запутаться.
Как отключить вход по паролю на сервере расписывать не буду, т.к. данный пункт совсем простой и не требует комментариев. Оставлю его вам для самостоятельного изучения.