Шифрование Salsa20
Высокоскоростной поточный шифр с расширенным вариантом nonce
Безопасность на стороне клиента
Все операции шифрования и дешифрования выполняются локально в вашем браузере. Никакие данные никогда не отправляются на сервер.
Начальное значение счётчика блоков (обычно 0 для шифрования, то же значение для дешифрования)
О Salsa20
Salsa20 — это поточный шифр, разработанный Дэниелом Дж. Бернштейном в 2005 году. Он использует 256-битный ключ и 64-битный nonce для генерации потока ключей, который XOR-ится с открытым текстом для получения шифротекста. Шифр разработан для высокой производительности в программных реализациях.
Salsa20 был представлен в проект eSTREAM и выбран финалистом в программном профиле. Он является основой семейства шифров ChaCha.
Сравнение алгоритмов
| Алгоритм | Раунды | Длина Nonce | Скорость | Лучшее применение |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | Стандартный | Общее шифрование, высокая безопасность |
| Salsa20/12 | 12 | 64 bits (8 bytes) | Быстрый | Приложения, критичные к производительности |
| Salsa20/8 | 8 | 64 bits (8 bytes) | Самый быстрый | Сценарии максимальной скорости |
| XSalsa20 | 20 | 192 bits (24 bytes) | Стандартный | Случайный nonce, NaCl/libsodium |
Как работает Salsa20
Salsa20 работает с матрицей 4×4 из 32-битных слов (всего 512 бит). Начальное состояние состоит из ключа (256 бит), nonce (64 бита), счётчика (64 бита) и четырёх константных слов, образующих строку 'expand 32-byte k'.
Основная функция применяет 20 раундов операции quarterround, которая использует только операции сложения-вращения-XOR (ARX). Это делает Salsa20 эффективным в программном обеспечении и устойчивым к атакам по времени.
XSalsa20 расширяет nonce до 192 бит с помощью HSalsa20 — варианта, который выводит подключ из первых 128 бит nonce, оставляя 64 бита для фактического nonce. Это позволяет безопасно генерировать случайный nonce.
Варианты раундов
- Salsa20/20 (20 раундов) — Стандартный вариант с полным запасом безопасности. Рекомендуется для большинства приложений.
- Salsa20/12 (12 раундов) — Выбор портфолио eSTREAM. Обеспечивает хороший баланс между скоростью и безопасностью.
- Salsa20/8 (8 раундов) — Самый быстрый вариант. Нет известных практических атак, но уменьшенный запас безопасности.
Ключевые особенности
- Высокая производительность: Оптимизирован для программного обеспечения, достигает 3-4 цикла на байт на современных CPU
- Простой дизайн: Использует только ARX операции, легко реализуется без таблиц поиска
- Постоянное время: Устойчив к атакам по побочным каналам времени кэша
- Большой счётчик: 64-битный счётчик позволяет шифровать до 2^70 байт на пару ключ-nonce
- Расширенный Nonce: 192-битный nonce XSalsa20 позволяет генерировать случайный nonce
Соображения безопасности
- Никогда не используйте nonce повторно с тем же ключом — это полностью нарушает безопасность
- Salsa20 обеспечивает только шифрование, не аутентификацию — комбинируйте с Poly1305 для AEAD
- Для случайных nonce используйте XSalsa20, чтобы минимизировать вероятность коллизий
- Используйте правильный KDF (HKDF, Argon2) для получения ключей из паролей
Реальное использование
- NaCl/libsodium: XSalsa20-Poly1305 — конструкция AEAD по умолчанию
- Инструменты шифрования: Многие утилиты шифрования файлов используют варианты Salsa20
- Менеджеры паролей: Некоторые используют Salsa20 для шифрования сохранённых учётных данных
- Игровые движки: Используется для быстрого шифрования в сетевых играх
Ссылки
- D.J. Bernstein — Спецификация Salsa20
- Проект eSTREAM — Портфолио поточных шифров
- Википедия — Salsa20
- NaCl — Библиотека сетей и криптографии
Часто задаваемые вопросы
В чём разница между Salsa20 и ChaCha20?
ChaCha20 — это модификация Salsa20 с улучшенной диффузией за раунд. ChaCha20 достигает лучшей безопасности за раунд, поэтому он стал стандартом IETF. Для новых проектов обычно предпочитают ChaCha20.
Какой вариант раундов мне использовать?
Используйте Salsa20/20 для максимальной безопасности. Salsa20/12 — хороший баланс между скоростью и безопасностью. Используйте Salsa20/8 только когда производительность абсолютно критична и ваша модель угроз допускает уменьшенный запас безопасности.
Когда мне следует использовать XSalsa20?
Используйте XSalsa20, когда нужно генерировать случайные nonce. Его 192-битное пространство nonce делает коллизии практически невозможными при случайной генерации. 64-битный nonce стандартного Salsa20 требует тщательного управления счётчиком.
Безопасен ли Salsa20 без аутентификации?
Salsa20 сам по себе обеспечивает только конфиденциальность, но не целостность. Злоумышленник может изменить шифротекст без обнаружения. Всегда комбинируйте с Poly1305 или другим MAC для аутентифицированного шифрования.
Могу ли я использовать этот инструмент в продакшене?
Этот инструмент предназначен для образовательных и разработческих целей. Хотя реализация следует спецификации, производственные системы должны использовать хорошо проверенные криптографические библиотеки, такие как libsodium, OpenSSL или API, предоставляемые платформой.
Связанные инструменты
Шифрование ChaCha20
Современный потоковый шифр с ChaCha20, ChaCha20-Poly1305 AEAD и вариантами XChaCha20
AES Шифрование/Дешифрование
Безопасное шифрование и дешифрование текста с использованием алгоритма AES
Семейство RC (RC4/RC5/RC6)
Потоковые и блочные шифры семейства RC, включая RC4, RC4-Drop, RC5 и RC6 (финалист AES)