Поточный шифр
Поточный шифр — это симметричный криптографический алгоритм, в котором шифрование и расшифрование данных выполняется путём побитового (или побайтового) сложения открытого текста с гаммой — псевдослучайной последовательностью ключевого потока, генерируемой на основе секретного ключа. В отличие от блочных шифров, которые обрабатывают данные фиксированными блоками (например, 64 или 128 бит), поточные шифры работают с потоком произвольной длины, что делает их особенно эффективными для приложений реального времени (голосовая связь, видеотрансляции) и устройств с ограниченными вычислительными ресурсами.
Принцип работы
Основой поточного шифра является генератор псевдослучайной последовательности (гаммы), который на входе получает секретный ключ (и, возможно, инициализационный вектор — IV). На выходе формируется битовая последовательность, которая объединяется с открытым текстом с помощью операции XOR (исключающее «ИЛИ»). Для расшифрования получатель, имея тот же ключ и IV, генерирует идентичную гамму и повторно применяет XOR к шифротексту, восстанавливая исходный текст.
Математически процесс описывается так:
- Зашифрование: \( C_i = P_i \oplus K_i \), где \( C_i \) — бит шифротекста, \( P_i \) — бит открытого текста, \( K_i \) — бит гаммы.
- Расшифрование: \( P_i = C_i \oplus K_i \).
Ключевое свойство: гамма должна быть строго псевдослучайной, то есть статистически неотличимой от истинно случайной последовательности. Если злоумышленник сможет предсказать или восстановить гамму, шифр будет взломан.
Требования к генератору гаммы
- Непериодичность (или очень большой период, значительно превышающий длину шифруемого сообщения).
- Высокая линейная сложность (сложность воспроизведения последовательности по её фрагменту).
- Устойчивость к статистическим атакам (равномерное распределение битов, отсутствие корреляций).
- Секретность ключа (даже зная алгоритм, но не зная ключа, нельзя восстановить гамму).
Классификация
Поточные шифры делятся на две основные категории: синхронные и самосинхронизирующиеся.
Синхронные поточные шифры
В синхронных шифрах генерация гаммы зависит только от ключа и IV, но не зависит от предыдущих битов шифротекста. Отправитель и получатель должны быть строго синхронизированы по фазе генерации. Если один бит гаммы будет потерян или вставлен, расшифрование станет невозможным до восстановления синхронизации.
Примеры: RC4 (до уязвимостей), A5/1 (использовался в GSM), SEAL, Salsa20/ChaCha.
Самосинхронизирующиеся (асинхронные) поточные шифры
В таких шифрах состояние генератора зависит от предыдущих битов шифротекста. Это позволяет автоматически восстанавливать синхронизацию после потери или искажения нескольких битов — ошибка влияет только на ограниченный участок расшифрованного текста. Однако такие шифры более уязвимы к атакам с активным вмешательством в канал.
Примеры: CFB (режим блочного шифра, работающий как поточный), шифры на основе регистров сдвига с обратной связью по шифротексту.
История
Первые поточные шифры появились задолго до цифровой эпохи. Классическим примером является шифр Вернама (1917 год), который теоретически невзламываем, если гамма является истинно случайной последовательностью той же длины, что и сообщение, и используется однократно. Однако практическое применение шифра Вернама ограничено из-за сложности передачи и хранения ключей.
В XX веке с развитием электроники и радиосвязи поточные шифры стали широко использоваться в военной и дипломатической связи. В 1970-х годах был разработан алгоритм A5/1 для шифрования голоса в стандарте GSM. В 1987 году Рон Ривест создал RC4, который до середины 2000-х годов считался одним из самых популярных поточных шифров (использовался в WEP, TLS, PDF). Однако в 2015 году были опубликованы атаки, полностью дискредитировавшие RC4, после чего его использование было прекращено.
Современные поточные шифры (Salsa20, ChaCha, Grain, Trivium) создавались с учётом уроков прошлых уязвимостей и обладают высокой стойкостью при высокой производительности.
Применение
Поточные шифры применяются в ситуациях, где важна скорость обработки непрерывного потока данных или где длина сообщения неизвестна заранее:
- Шифрование трафика в реальном времени (VoIP, видеоконференции, потоковое видео).
- Защита беспроводных каналов (Wi-Fi — WPA2 использует режим CCMP, который основан на блочном шифре AES, но исторически WEP и WPA использовали RC4; Bluetooth — шифры E0).
- Встраиваемые системы и IoT (микроконтроллеры с ограниченной памятью и низким энергопотреблением — шифры ChaCha, Grain).
- Шифрование дисков и файлов (режимы блочных шифров, работающие как поточные: CTR, OFB, CFB).
- Криптографические протоколы (TLS 1.3 использует шифр ChaCha20-Poly1305 для аутентифицированного шифрования).
Сравнение с блочными шифрами
| Параметр | Поточные шифры | Блочные шифры |
|---|---|---|
| Обработка данных | Побитово или побайтово | Блоками фиксированной длины |
| Скорость на потоковых данных | Высокая (особенно на аппаратном уровне) | Ниже из-за необходимости накопления блока |
| Сложность реализации | Простая (особенно в железе) | Сложнее (требуется S-блоки, перестановки) |
| Устойчивость к ошибкам | Ошибка в одном бите шифротекста портит один бит открытого текста | Ошибка в блоке портит весь блок (и может распространяться в режимах) |
| Примеры | RC4 (устарел), ChaCha, A5/1 | AES, DES, ГОСТ 28147-89 |
| Типичное применение | Потоковое видео, IoT, GSM | Файлы, базы данных, TLS |
Современные поточные шифры
ChaCha (Salsa20)
Разработан Дэниелом Бернштейном в 2008 году. Основан на арифметических операциях сложения, XOR и циклических сдвигах. ChaCha20 (20 раундов) является стандартом в TLS 1.3 и используется в протоколах WireGuard, SSH, OpenVPN. Отличается высокой производительностью на процессорах без аппаратной поддержки AES.
Grain
Семейство поточных шифров, разработанных в 2004 году. Использует регистры сдвига с линейной и нелинейной обратной связью. Grain-128a рекомендуется для приложений с ограниченными ресурсами.
Trivium
Создан в 2005 году как часть проекта eSTREAM. Отличается простой аппаратной реализацией и высокой скоростью. Использует три регистра сдвига с нелинейной комбинацией.
ZUC
Китайский поточный шифр, принятый в качестве стандарта 3GPP для LTE (алгоритм 128-EEA3). Основан на линейных регистрах сдвига и нелинейной функции.
Уязвимости и атаки
Основные угрозы для поточных шифров:
- Повторное использование гаммы (одноразовый ключ). Если один и тот же ключ и IV используются для двух разных сообщений, злоумышленник может вычислить XOR открытых текстов и восстановить их. Классический пример — атака на WEP.
- Атаки на основе слабых ключей (например, в RC4 существовали ключи, генерирующие предсказуемые начальные байты гаммы).
- Атаки по времени и по мощности (side-channel attacks) — особенно актуальны для аппаратных реализаций.
- Атаки на основе корреляции (если гамма статистически зависит от ключа, можно восстановить ключ по фрагменту гаммы).
- Атаки на основе активного вмешательства (в самосинхронизирующихся шифрах — вставка или модификация битов шифротекста).
Интересные факты
- Шифр Вернама, будучи теоретически стойким, на практике не применяется из-за необходимости иметь ключ длиной, равной длине сообщения, и передавать его по защищённому каналу.
- Поточный шифр A5/1, использовавшийся в GSM, был взломан в 2009 году с помощью атаки на основе радужных таблиц, что позволило расшифровывать разговоры в реальном времени.
- Алгоритм RC4 был настолько популярен, что входил в состав протоколов SSL/TLS до версии 1.2, но после публикации атаки «Bar Mitzvah» (2015) его использование было полностью запрещено.
- Современные поточные шифры (ChaCha, Salsa20) часто реализуются в виде программного обеспечения без аппаратной поддержки, что делает их доступными для широкого круга устройств.
Источники
- Шнайер Б. «Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си». — М.: Триумф, 2002.
- Смарт Н. «Криптография». — М.: Техносфера, 2006.
- Спецификация алгоритма ChaCha20 (RFC 8439).
- Проект eSTREAM: http://www.ecrypt.eu.org/stream/
- Menezes A., van Oorschot P., Vanstone S. «Handbook of Applied Cryptography». — CRC Press, 1996.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →