Два современных шифра
AES — блочный шифр, принятый как стандарт и используемый почти везде: от шифрования дисков до защищённых соединений. ChaCha20 — потоковый шифр, разработанный как альтернатива, которая хорошо работает на любых процессорах без особой поддержки со стороны оборудования. Обычно он используется вместе с кодом аутентификации Poly1305.
Оба шифра считаются надёжными при правильном применении, а известных практических атак на них при корректной реализации нет. Поэтому вопрос сводится не к стойкости, а к производительности и удобству.
Скорость и роль процессора
Современные процессоры для компьютеров и серверов имеют аппаратные инструкции для AES. С их помощью шифрование выполняется очень быстро и с малой нагрузкой на ядро. Там, где такой поддержки нет, программная реализация AES медленнее, а иногда и менее устойчива к атакам по времени выполнения, если написана небрежно.
ChaCha20 проектировался так, чтобы быть быстрым в программной реализации и не зависеть от специальных инструкций. Поэтому он выигрывает на устройствах без аппаратного ускорения, в том числе на части старых или бюджетных мобильных процессоров. На современных телефонах со встроенным ускорением разница может быть мала, и измерять её нужно на конкретном устройстве.
Безопасность и режимы
AES надёжен в режимах с аутентификацией, таких как GCM. Ошибки при использовании, например повторение одноразового значения (nonce), способны привести к серьёзным последствиям. Для ChaCha20-Poly1305 требования сходны: nonce не должен повторяться для одного ключа.
Важно, что оба шифра защищают конфиденциальность и целостность только в паре с правильным управлением ключами и протоколом. Сам шифр не решает задач вроде подмены собеседника, для этого нужны сертификаты и проверка подлинности.
Совместимость и применение
В TLS 1.3 предусмотрены оба варианта: AES-GCM и ChaCha20-Poly1305. Клиент и сервер согласуют шифр при установке соединения, и выбор часто определяется тем, у кого есть аппаратное ускорение. Мобильные клиенты нередко предпочитают ChaCha20, серверы и настольные компьютеры чаще выбирают AES.
В шифровании дисков и файловых систем AES пока преобладает благодаря поддержке процессоров и накопленному опыту. ChaCha20 всё шире встречается в протоколах туннелей и мессенджеров.
Как проверить, что используется на практике
Узнать, какой шифр согласован, можно в настройках или журнале приложения. Браузеры в инструментах разработчика показывают сведения о защищённом соединении с сайтом: версию протокола и набор шифров. Если вы увидите AES-GCM или ChaCha20-Poly1305, значит, применяется один из современных вариантов.
У серверов настройка порядка шифров позволяет отдавать предпочтение тому, что быстрее для конкретного клиента. Многие современные серверы выбирают шифр с учётом заявленных возможностей клиента: если клиент указывает, что у него нет ускорения AES, ему предлагается ChaCha20.
При сравнении производительности не полагайтесь на чужие цифры. Запустите встроенные тесты библиотеки шифрования на вашем устройстве или измерьте загрузку процессора при передаче большого файла по защищённому каналу. Разница между устройствами бывает значительной, и результат для одного процессора нельзя переносить на другой.
Помните, что оба шифра работают только в связке с правильным управлением ключами. Слабый пароль, утечка ключа, устаревшее программное обеспечение уменьшают защиту значительно сильнее, чем выбор между двумя современными шифрами.
Как выбирать на практике
Обычно выбирать вручную не нужно: приложения и библиотеки договариваются автоматически. Если параметры настраиваются, руководствуйтесь простым правилом. На устройствах с аппаратной поддержкой AES выбирайте AES-GCM. Если поддержки нет, особенно на слабых мобильных чипах, выбирайте ChaCha20-Poly1305.
Избегайте самодельных схем и нестандартных режимов. Надёжность зависит от готовых проверенных реализаций и обновлений библиотек, а не от смены названия шифра.
Если вы лишь пользуетесь приложениями, оставьте автоматический выбор. Если вы администратор сервера, включите оба варианта в списке разрешённых и проверьте, что устаревшие шифры отключены.
Итоговый вывод: оба шифра надёжны, и выбирать между ними вручную приходится редко. Полагайтесь на автоматическое согласование, обновляйте библиотеки, отключайте устаревшие наборы и не пытайтесь усложнять схему, потому что большинство реальных проблем связано с ключами и настройкой, а не с самим шифром.