Один секрет для обеих сторон
В симметричной схеме отправитель и получатель заранее владеют одним и тем же ключом. Отправитель шифрует им сообщение, получатель тем же ключом возвращает исходный текст. Это самый старый принцип криптографии и до сих пор основной рабочий инструмент: именно симметричные алгоритмы защищают основную массу данных в защищённых соединениях, на дисках и в архивах. Причина проста: они быстрые, современные процессоры даже включают специальные инструкции для ускорения таких вычислений.
Общие понятия вы найдёте на странице shifrovanie, сравнение с двухключевой схемой на asimmetrichnoe-shifrovanie.
Блочные и потоковые шифры
Блочный шифр обрабатывает данные порциями фиксированной длины. Самый известный представитель AES работает с блоком в 128 бит и ключом длиной 128, 192 или 256 бит; ему посвящена страница aes-shifrovanie. Потоковый шифр вырабатывает псевдослучайную последовательность и накладывает её на данные; примером служит ChaCha20, который часто выбирают там, где нет аппаратной поддержки AES, например на части мобильных устройств. Старый алгоритм DES с ключом в 56 бит считается устаревшим и легко подбирается.
Сам по себе шифр лишь преобразует один блок. Что делать с длинным сообщением, определяет режим работы.
Обратите внимание на размер ключа при выборе параметров: 128 бит подходит для большинства задач, а 256 бит выбирают, когда важен запас прочности на долгий срок хранения данных. Длина ключа влияет на скорость лишь незначительно, а вот ошибки в режиме и хранении ключа влияют на безопасность куда сильнее.
Режимы и целостность
Режим шифрования решает, как связать блоки между собой. Простейший ECB шифрует каждый блок независимо: одинаковые блоки открытого текста дают одинаковые блоки шифротекста, поэтому узоры в данных остаются видимыми, и режим считают непригодным. Режимы с вектором инициализации, такие как CBC и CTR, скрывают повторения. Современный выбор — режимы с проверкой подлинности, например GCM: они не только шифруют, но и позволяют обнаружить подмену данных. Вектор инициализации не секретен, но не должен повторяться с одним ключом, а ошибка с этим нарушает защиту.
Главная трудность: как передать ключ
Если ключ нужно передать по тому же каналу, который хочется защитить, возникает замкнутый круг. Кроме того, число ключей растёт: для группы из многих участников, каждый из которых общается с каждым, потребуется отдельный ключ на каждую пару. Эту проблему решают асимметричные методы: пара участников договаривается об общем секрете при помощи схемы вроде diffie-hellman, после чего дальнейший обмен идёт симметрично. Такой гибридный подход лежит в основе TLS. Ключи, выработанные заново для каждого сеанса, дают свойство, которое описано на странице pfs-sovershennaya-pryamaya-sekretnost.
Где встречается и как отличить хорошее от плохого
Симметричное шифрование работает в защите Wi-Fi, в шифровании диска, в паролях менеджеров паролей, в архивах с паролем, в мессенджерах. Признаки надёжной реализации: известный, проверенный алгоритм, ключ достаточной длины, случайно созданный или выработанный из пароля специальной медленной функцией, режим с проверкой подлинности, уникальные векторы. Тревожные признаки: собственные шифры, короткие ключи, режим ECB, ключ, зашитый в программу. Если вы выбираете настройку, оставляйте значения по умолчанию у зрелых библиотек и программ.
Ключ из пароля и типичные ошибки
Когда ключ нужен из пароля, его не берут напрямую: пароль пропускают через функцию выработки ключа, вроде PBKDF2 или Argon2, добавляя соль и большое число повторений. Так замедляется подбор. Если использовать пароль как ключ без такой функции, слабая парольная фраза оказывается единственной преградой, а подбор идёт быстро.
Среди ошибок реализации: повтор вектора инициализации при одном ключе, хранение ключа рядом с данными, использование устаревших алгоритмов ради совместимости, отсутствие проверки целостности, из-за чего злоумышленник может незаметно менять зашифрованные данные. Поэтому самодельные решения на основе базовых блоков рискованны, а готовые проверенные библиотеки и программы, которые выбирают режимы правильно по умолчанию, надёжнее. Так что применяйте готовое и обновляйте его.
Если нужно проверить настройки на своих устройствах, посмотрите, какой набор алгоритмов согласуется в защищённом соединении: он указывается в сведениях о соединении браузера и описан на странице shifrovalnyy-nabor-cipher-suite.