Salsa20
Salsa20 — это семейство криптографических алгоритмов поточного шифрования, разработанное американским криптографом Дэниелом Бернштейном. Salsa20 относится к классам симметричных шифров и псевдослучайных функций (PRF). Алгоритм известен своей высокой скоростью шифрования на программном уровне, особенно на платформах с 32- и 64-битной архитектурой, и устойчивостью к известным криптоаналитическим атакам. Salsa20 стал одним из финалистов проекта eSTREAM (EU ECRYPT Stream Cipher Project) в 2008 году и лёг в основу более совершенного алгоритма ChaCha.
История
Разработка Salsa20 началась Дэниелом Бернштейном в 2004 году. Основной целью было создание быстрого и безопасного поточного шифра, который мог бы эффективно работать на широком спектре процессоров, включая устройства с ограниченными ресурсами. В 2005 году Бернштейн опубликовал спецификацию алгоритма, а в 2006 году Salsa20 был включён в проект eSTREAM, организованный Европейским союзом для поиска новых стандартов поточного шифрования.
В рамках eSTREAM алгоритм прошёл несколько раундов анализа. В 2008 году Salsa20/12 (12-раундовая версия) вошёл в финальный портфель eSTREAM как один из рекомендованных шифров для программных реализаций. Название «Salsa20» происходит от числа 20 — количества раундов преобразования в полной версии алгоритма. Впоследствии Бернштейн разработал модифицированную версию под названием ChaCha, которая улучшила диффузию и устойчивость к некоторым атакам.
Принцип работы
Salsa20 является поточным шифром, который генерирует псевдослучайный ключевой поток (keystream) на основе секретного ключа и одноразового номера (nonce). Этот поток затем накладывается на открытый текст с помощью операции XOR для получения шифротекста. Алгоритм не использует таблицы замен (S-boxes) или сложные аппаратные схемы, что делает его эффективным для программной реализации.
Основные параметры
- Размер ключа: 128 бит (16 байт) или 256 бит (32 байта). Рекомендуемая версия — 256-битный ключ.
- Размер nonce: 64 бита (8 байт).
- Размер блока: 64 байта (512 бит). Алгоритм обрабатывает данные блоками фиксированного размера.
- Количество раундов: 20 (полная версия), также существуют версии Salsa20/12 (12 раундов) и Salsa20/8 (8 раундов) для повышения скорости при некотором снижении запаса безопасности.
Структура алгоритма
Алгоритм основан на 256-битной (16 слов по 32 бита) матрице состояний. Эта матрица инициализируется следующим образом:
- 4 константы (первые 4 слова):
expand 32-byte kдля 256-битного ключа илиexpand 16-byte kдля 128-битного ключа. - 8 слов ключа (для 256-битного ключа — дважды по 4 слова).
- 4 слова счётчика (counter).
- 4 слова nonce.
После инициализации выполняется серия раундов. Каждый раунд состоит из 16 операций «quarter-round», которые смешивают слова матрицы. Основная операция — сложение, XOR и циклический сдвиг (ARX — Add, Rotate, XOR). После 20 раундов (10 полных циклов, каждый из которых включает 2 раунда) матрица подвергается финальному сложению с исходным состоянием. Результат — 64-байтовый блок ключевого потока.
Классификация
Salsa20 относится к нескольким категориям криптографических примитивов:
- Поточный шифр: генерирует ключевой поток, который накладывается на данные.
- Псевдослучайная функция (PRF): может использоваться для генерации случайных чисел или в качестве хеш-функции (например, в алгоритме подписи Ed25519).
- Семейство ARX-шифров: основано на операциях сложения, XOR и циклического сдвига, без использования S-boxes.
Применение
Salsa20 получил широкое распространение в различных протоколах и программных продуктах благодаря своей скорости и простоте реализации.
Шифрование данных
- TLS/SSL: Salsa20 использовался в некоторых реализациях протокола TLS, хотя в современных версиях чаще применяется ChaCha20-Poly1305.
- SSH: Алгоритм поддерживается в протоколе SSH для шифрования канала связи.
- OpenSSH: Включён в состав OpenSSH как один из доступных шифров.
- IPsec: Используется в некоторых реализациях IPsec для обеспечения конфиденциальности трафика.
Криптовалюты
Salsa20 и его производные (ChaCha20) применяются в системах Proof-of-Work (PoW) некоторых криптовалют. Например, алгоритм хеширования CryptoNight, используемый в Monero, основан на модифицированной версии Salsa20.
Аутентификация и хеширование
Salsa20 может использоваться как компонент для построения криптографических хеш-функций и MAC-кодов (Message Authentication Code). В частности, алгоритм Poly1305-AES, разработанный Бернштейном, часто комбинируется с Salsa20 для обеспечения аутентификации шифротекста.
Операционные системы и библиотеки
Алгоритм реализован в популярных криптографических библиотеках, таких как OpenSSL, libsodium, NaCl (Networking and Cryptography library) и Botan. Поддержка Salsa20 есть в ядре Linux (начиная с версии 2.6.35) в виде криптографического модуля.
Криптоанализ
Salsa20 считается безопасным алгоритмом, однако его различные версии подвергались криптоаналитическому изучению.
Атаки на сокращённые версии
- Salsa20/5: В 2005 году была продемонстрирована атака на 5-раундовую версию с вычислительной сложностью около 2^165 операций (для 256-битного ключа). Это не представляет практической угрозы.
- Salsa20/6: В 2007 году атака на 6-раундовую версию показала сложность 2^177.
- Salsa20/7: В 2008 году атака на 7-раундовую версию имела сложность 2^191.
- Salsa20/8: В 2012 году была найдена атака на 8-раундовую версию со сложностью 2^251, что всё ещё выше тривиального перебора (2^256).
Полная версия (20 раундов)
На 2025 год не опубликовано атак, которые бы существенно снижали безопасность полной 20-раундовой версии Salsa20. Наиболее эффективные атаки на Salsa20/20 имеют сложность, близкую к полному перебору ключа (2^256 для 256-битного ключа). Алгоритм устойчив к дифференциальному и линейному криптоанализу, а также к атакам по сторонним каналам при корректной реализации.
Сравнение с ChaCha
ChaCha, созданный Бернштейном в 2008 году, является модификацией Salsa20. Основные отличия:
- Операция quarter-round: в ChaCha используется другая последовательность операций, что улучшает диффузию.
- Устойчивость к атакам: ChaCha демонстрирует несколько лучшую устойчивость к некоторым видам криптоанализа, особенно к атакам с использованием вращательных свойств (rotational cryptanalysis).
- Скорость: ChaCha часто оказывается быстрее Salsa20 на современных процессорах за счёт более эффективного использования конвейеров.
На практике ChaCha20 (20-раундовая версия ChaCha) в комбинации с Poly1305 стал более популярным, чем Salsa20, и используется в TLS 1.3, SSH, WireGuard и других протоколах.
Интересные факты
- Название «Salsa20» — это отсылка к танцевальному стилю сальса, что подчёркивает «быстроту» и «ритмичность» алгоритма.
- Дэниел Бернштейн, автор Salsa20, также известен разработкой алгоритма Curve25519 (для обмена ключами) и системы подписи Ed25519.
- Salsa20 не имеет патентных ограничений и распространяется по лицензии, позволяющей свободное использование в коммерческих и некоммерческих проектах.
- В 2013 году Salsa20 был включён в стандарт ISO/IEC 18033-4 «Information technology — Security techniques — Encryption algorithms — Part 4: Stream ciphers».
Источники
- Bernstein, D. J. (2005). Salsa20 specification. cr.yp.to.
- Bernstein, D. J. (2008). ChaCha, a variant of Salsa20. cr.yp.to.
- eSTREAM Project (2008). The eSTREAM Portfolio. ecrypt.eu.org.
- Aumasson, J.-P., Fischer, S., Khazaei, S., Meier, W., & Vaudenay, S. (2007). New Features of Latin Dances: Analysis of Salsa, ChaCha, and Rumba. FSE 2008.
- ISO/IEC 18033-4:2011. Information technology — Security techniques — Encryption algorithms — Part 4: Stream ciphers.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →