Шифрование Salsa20
Высокоскоростной поточный шифр с расширенным вариантом nonce
Безопасность на стороне клиента
Salsa20 — ARX-потоковый шифр без таблиц поиска, с постоянным временем выполнения. Повторное использование nonce катастрофично. Используйте XSalsa20 (192-бит nonce) для безопасной генерации случайных nonce.
Начальное значение счётчика блоков (обычно 0 для шифрования, то же значение для дешифрования)
О Salsa20
Salsa20 — ARX-потоковый шифр Даниэля Б. Бернштейна (2005, eSTREAM). Работает на матрице 4×4 из 32-битных слов (512-битное состояние) с помощью только сложения (mod 2³²), вращения и XOR — без S-блоков и таблиц. 64-битный счётчик потока позволяет произвольный доступ к любой позиции ключевого потока.
Salsa20 вошёл в портфель eSTREAM Profile 1 (ПО, 2008). XSalsa20 (Бернштейн, 2011) использует HSalsa20 для вывода 256-битного подключа из первых 128 бит 192-битного nonce, что позволяет генерировать случайные nonce без риска дня рождения. Основа secretbox NaCl (XSalsa20-Poly1305).
Сравнение алгоритмов
| Алгоритм | Раунды | Длина Nonce | Скорость | Лучшее применение |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | Стандартный | Долгосрочные сессии с управляемыми nonce; высокая пропускная способность; сертифицированные eSTREAM |
| Salsa20/12 | 12 | 64 bits (8 bytes) | Быстрый | Высокопроизводительные задачи с достаточным запасом; рекомендация Бернштейна |
| Salsa20/8 | 8 | 64 bits (8 bytes) | Самый быстрый | Только бенчмарк и исследование |
| XSalsa20 | 20 | 192 bits (24 bytes) | Стандартный | Приложения со случайной генерацией nonce; совместимость NaCl/libsodium secretbox |
Как работает Salsa20
Salsa20 инициализирует матрицу 4×4: 4 константы (“expand 32-byte k”), 8×32 бит ключа, 2×32 бит счётчика, 2×32 бит nonce.
Четверть-раунд (a,b,c,d): b⊕=(a+d)‹‹7; c⊕=(b+a)‹‹9; d⊕=(c+b)‹‹13; a⊕=(d+c)‹‹18. Двойной раунд = столбцы + диагонали. Salsa20/20 = 10 двойных раундов. Выход = XOR преобразованного состояния с исходным.
64-битный счётчик: 2⁶⁴ блоков × 64 байт = 2⁷² байт на (ключ, nonce). Произвольный доступ к любой позиции установкой счётчика. Параллельное шифрование независимых 64-байтных сегментов.
Варианты раундов
- Salsa20/20 (20 раундов): максимальный запас безопасности, eSTREAM, нет полных атак. Для всех критичных приложений.
- Salsa20/12 (12 раундов): ~35% быстрее /20, нет атак на 12 раундов, рекомендация производительности Бернштейна, eSTREAM portfolio.
- Salsa20/8 (8 раундов): самый быстрый, известные атаки с редуцированными раундами (Aumasson 2008, 2²⁴⁹). Не рекомендуется для ответственных задач. Только бенчмарк.
Ключевые особенности
- ARX-конструкция: нет S-блоков и таблиц. Время выполнения не зависит от данных. Врождённый иммунитет к кэш-тайминговым атакам.
- Большой ключевой поток: 2⁷² байт на (ключ, nonce) через 64-битный счётчик. Произвольный доступ без повторной обработки.
- 64-битный nonce: строгое управление уникальностью. После 2³² сообщений одного ключа вероятность коллизии не пренебрежима. Для долгосрочных ключей — XSalsa20 (192 бит).
- XSalsa20 (192-бит nonce, 2011): HSalsa20 выводит подключ для безопасной случайной генерации nonce. Стандарт secretbox NaCl.
- eSTREAM Profile 1 (ПО, 2008): 4-летняя публичная оценка. Нет атак на 12 или 20 раундов.
Соображения безопасности
- Повторное использование nonce катастрофично: XOR двух шифртекстов = XOR открытых текстов. Уникальные nonce обязательны. XSalsa20 с 192-битным nonce снимает проблему дня рождения.
- Граница дня рождения (короткий nonce): 64-бит → ~2³² сообщений до коллизии ~50%. Использовать XSalsa20 (192 бит).
- Атаки с редуцированными раундами: нет на /20 или /12. Salsa20/8: известные различители. Только /20 для критичных задач.
- Нет аутентификации: XSalsa20-Poly1305 или ChaCha20-Poly1305 для AEAD.
Реальное использование
- NaCl secretbox (XSalsa20-Poly1305): исходная AEAD-примитив NaCl; 192-бит nonce + Poly1305; широко используется через libsodium.
- eSTREAM Profile 1 (2008): Salsa20/12 выбран основным программным потоковым шифром по итогам конкурса ECRYPT 2004-2008.
- Влияние на ChaCha20: Бернштейн создал ChaCha20 (2008) как вариант Salsa20 с улучшенной диффузией за раунд.
- Устаревшие системы: LibSodium-VPN и файловое шифрование до RFC 7539/8439 использовали XSalsa20-Poly1305.
Ссылки
Связанные инструменты
Шифрование ChaCha20
Современный потоковый шифр с ChaCha20, ChaCha20-Poly1305 AEAD и вариантами XChaCha20
AES Шифрование/Дешифрование
Безопасное шифрование и дешифрование текста с использованием алгоритма AES
Семейство RC (RC4/RC5/RC6)
Потоковые и блочные шифры семейства RC, включая RC4, RC4-Drop, RC5 и RC6 (финалист AES)