Две принципиально разные задачи

Шифрование делится на два семейства, и путаница между ними — источник большинства ошибок при проектировании защиты.

Симметричное шифрование. Один ключ и зашифровывает, и расшифровывает. Быстрое, подходит для больших объёмов данных. Проблема одна, но серьёзная: как передать ключ собеседнику так, чтобы его никто не перехватил.

Асимметричное шифрование. Два связанных ключа: открытый шифрует, закрытый расшифровывает. Открытый можно публиковать где угодно. Проблема передачи ключа решена — но эти алгоритмы на порядки медленнее и не годятся для потока данных.

Отсюда универсальное решение, которое используется практически везде: асимметричным алгоритмом передают симметричный ключ, а дальше работают симметричным. Именно так устроено соединение с сайтом по защищённому протоколу, шифрование дисков с удалённым доступом и защищённая почта.

AES: рабочая лошадь

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

Как работает, если очень коротко. Данные разбиваются на блоки по 128 бит. Каждый блок проходит несколько раундов преобразований: замена байтов по таблице, перестановка строк, перемешивание столбцов, наложение раундового ключа. Число раундов зависит от длины ключа — от 10 до 14.

Смысл конструкции в том, что каждый раунд «размазывает» влияние каждого бита исходных данных на весь блок. После нескольких раундов связь между исходным текстом и результатом становится статистически неразличимой.

Длины ключа: 128, 192 и 256 бит. Здесь стоит сказать прямо: AES-128 на сегодня достаточен. Перебрать 2¹²⁸ вариантов невозможно физически — не хватит энергии, доступной человечеству. AES-256 берут не потому, что 128 недостаточно, а из запаса на будущее и требований регуляторов.

Аппаратное ускорение. Все современные процессоры содержат отдельные инструкции для AES. Разница с программной реализацией — многократная. Практическое следствие: шифрование дисков и трафика почти не сказывается на производительности, и отказываться от него ради скорости сегодня нет причин.

Режимы работы: где чаще всего ошибаются

Малоизвестный факт: сам по себе алгоритм шифрует один блок. Как связывать блоки между собой — определяет режим работы, и от него зависит стойкость не меньше, чем от алгоритма.

Простой поблочный режим (ECB) — каждый блок шифруется независимо. Использовать нельзя. Одинаковые блоки исходных данных дают одинаковый результат, и структура данных остаётся видна. Классическая иллюстрация — зашифрованная таким образом картинка, на которой по-прежнему различимо изображение.

Режим сцепления блоков (CBC) — каждый блок смешивается с предыдущим. Долго был стандартом, но требует аккуратности с дополнением данных до размера блока: на ошибках в этой части строились практические атаки.

Потоковые режимы (CTR, GCM) — превращают блочный шифр в поточный. Быстрее, лучше распараллеливаются.

Режим с проверкой целостности (GCM) — современный выбор по умолчанию. Помимо шифрования проверяет, что данные не были подменены.

Последний пункт важнее, чем кажется. Шифрование само по себе не защищает от изменения данных. Злоумышленник, не зная содержимого, может испортить шифротекст так, что расшифровка даст изменённый результат. Режимы с проверкой целостности это исключают — поэтому современные протоколы используют именно их.

Асимметричные алгоритмы

RSA — старейший и самый известный. Стойкость основана на сложности разложения большого числа на простые множители.

Здесь важна длина ключа. Ключи в 1024 бита считаются недостаточными и выводятся из обращения. Минимум сегодня — 2048 бит, для долгосрочной защиты — 3072 или 4096. Рост длины ключа быстро увеличивает вычислительные затраты, и это главный практический недостаток RSA.

Эллиптические кривые (ECC) — современная альтернатива. Та же стойкость достигается при существенно меньшей длине ключа: 256 бит примерно соответствуют 3072-битному RSA.

Практический выигрыш: меньше данных при установлении соединения, ниже нагрузка на процессор, быстрее рукопожатие. Поэтому в новых системах по умолчанию берут эллиптические кривые, а RSA остаётся ради совместимости.

Что использовать не стоит

Раздел, который важнее списка рекомендаций.

DES — устарел окончательно. 56-битный ключ перебирается за часы на доступном оборудовании.

3DES — попытка продлить жизнь DES троекратным применением. Медленный, с известными ограничениями, выведен из обращения. В новых системах не применяется.

Blowfish — алгоритм 1993 года, до сих пор встречается в старом ПО. Проблема в размере блока: 64 бита. При шифровании больших объёмов одним ключом возникает вероятность совпадения блоков, на чём строятся практические атаки. Автор алгоритма сам рекомендовал перейти на его преемника, а лучше — на AES.

MD5 и SHA-1 — не шифры, а хеш-функции, но упомянуть стоит: для проверки целостности и подписей непригодны, коллизии для них строятся на практике.

Собственные разработки. Отдельный пункт. Самостоятельно спроектированный шифр почти наверняка содержит уязвимость, незаметную для автора. Стойкость известных алгоритмов — результат десятилетий попыток их сломать. Заменить это невозможно.

Хеширование паролей: отдельная тема

Частая и опасная ошибка — хранить пароли, зашифровав их. Так делать нельзя: шифрование обратимо, и утечка ключа означает утечку всех паролей.

Пароли хешируют, причём специально медленными функциями, спроектированными для этой задачи. Обычные быстрые хеш-функции не подходят именно потому, что быстры: перебор по словарю на видеокарте идёт с огромной скоростью.

Специализированные функции требуют не только времени, но и заметного объёма памяти на каждое вычисление, что делает массовый перебор на видеокартах невыгодным.

Что несёт квантовый компьютер

Тема, вокруг которой много преувеличений. Разберём по фактам.

Асимметричные алгоритмы под угрозой. Существует квантовый алгоритм, который решает задачи, на сложности которых основаны RSA и эллиптические кривые. Квантового компьютера нужного масштаба пока не построено, но принципиальная возможность доказана.

Симметричные — почти нет. Для них квантовый алгоритм даёт лишь квадратичное ускорение перебора. Практический вывод: стойкость AES-256 снижается примерно до уровня AES-128, что всё ещё недостижимо для взлома. AES-256 останется пригодным.

Реальный риск — сегодняшний. Данные, перехваченные и сохранённые сейчас, могут быть расшифрованы позже, когда техника появится. Для информации, которая должна оставаться секретной десятилетиями, это существенно уже сегодня.

Разрабатываются алгоритмы, устойчивые к квантовым атакам, часть уже стандартизована. Массовый переход — вопрос ближайших лет, и начинается он с систем, где важна долговременная секретность.

Практические рекомендации

Для данных на дисках: AES в режиме с проверкой целостности. Аппаратное ускорение есть везде, потери производительности минимальны.

Для сетевых соединений: современные версии защищённых протоколов с эллиптическими кривыми для обмена ключами и AES для потока данных. Старые версии протоколов отключать.

Для паролей: только специализированные функции хеширования, никогда не шифрование и не быстрые хеши.

Для длины ключей: AES-256 как разумный запас, RSA не менее 2048 бит, эллиптические кривые от 256 бит.

Главное правило: используйте проверенные библиотеки и стандартные настройки. Подавляющее большинство реальных взломов происходит не из-за слабости алгоритмов, а из-за ошибок в их применении — неверный режим работы, повторно использованные значения инициализации, утечка ключей, отсутствие проверки целостности.

Коротко

Симметричные алгоритмы быстры, асимметричные решают проблему передачи ключа — на практике используются оба вместе.

AES не взломан и с аппаратным ускорением почти бесплатен по производительности. AES-128 достаточен, AES-256 берут с запасом.

Режим работы важен не меньше алгоритма: используйте режимы с проверкой целостности, потому что шифрование само по себе от подмены данных не защищает.

Blowfish, 3DES и DES в новых системах не применяются. Собственные шифры не разрабатываются.

Квантовые вычисления угрожают в первую очередь асимметричным алгоритмам; AES-256 останется стойким. Актуальный риск — перехват данных сегодня для расшифровки в будущем.

Нужна помощь с подбором оборудования под задачи с интенсивным шифрованием — опишите нагрузку, учтём требования к процессорам и криптоускорению.