CoderTools

Шифрование Salsa20

Высокоскоростной поточный шифр с расширенным вариантом nonce

Безопасность на стороне клиента

Salsa20 — ARX-потоковый шифр без таблиц поиска, с постоянным временем выполнения. Повторное использование nonce катастрофично. Используйте XSalsa20 (192-бит nonce) для безопасной генерации случайных nonce.

Salsa20/20: 256 бит, nonce 64 бит, 20 раундов; eSTREAM Profile 1; 2⁷² байт макс; нет полных атак.

Начальное значение счётчика блоков (обычно 0 для шифрования, то же значение для дешифрования)

Параметры формата
🔒 100% Локальная обработкаВведенные вами данные обрабатываются полностью в браузере и не отправляются на сервер.

О 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.

Ссылки

Быстрое меню

Нет недавних инструментов