Шифрование и расшифровка ChaCha20
Шифрует и расшифровывает текст алгоритмом ChaCha20-Poly1305 или обычным ChaCha20.
Он понадобится для расшифровки. Ничего из введённого не покидает эту страницу.
По умолчанию в OpenSSL — 10 000. Подойдёт любое число: чем больше, тем медленнее подбирать пароль; для расшифровки нужно то же число.
С аутентификацией: неверный пароль или ключ либо любое изменение текста обнаруживаются.
Команда enc в OpenSSL не читает ChaCha20-Poly1305. Расшифруйте здесь или в коде с помощью криптографической библиотеки: 16-байтовый тег идёт после шифротекста.
ChaCha20-Poly1305 (RFC 8439) — аутентифицированный шифр из TLS 1.3 и WireGuard: он не только шифрует текст, но и обнаруживает любое его изменение или неверный пароль. Здесь можно зашифровать текст паролем или своими 256-битным ключом и 12-байтовым nonce либо вставить шифротекст в Base64 или hex, чтобы его расшифровать. С паролем ключ и nonce получаются через PBKDF2-HMAC-SHA256 со случайной солью, как в openssl enc -pbkdf2, а результат состоит из Salted__, соли, шифротекста и 16-байтового тега Poly1305. Есть и обычный ChaCha20 без тега — в формате chacha20 из OpenSSL. Текст, пароли и ключи не покидают ваше устройство: всё работает в браузере, бесплатно и без регистрации.
Как зашифровать текст ChaCha20-Poly1305
- Выберите «Зашифровать» или «Расшифровать». Введите текст для шифрования или вставьте текст в Base64 или hex для расшифровки — формат определяется автоматически.
- Введите пароль (кнопка «Сгенерировать» создаст надёжный) или переключитесь на «Ключ и IV (hex)» и введите либо сгенерируйте 64-значный ключ и 24-значный nonce (для обычного ChaCha20 — 32-значный IV).
- Оставьте ChaCha20-Poly1305 или выберите ChaCha20 для совместимости с openssl enc -chacha20. Для расшифровки нужны те же режим, пароль и число итераций, что и при шифровании.
- Скопируйте или скачайте результат либо нажмите «Поменять местами», чтобы перенести его в поле ввода и для проверки расшифровать обратно.
Возможности
- ChaCha20-Poly1305 по RFC 8439: 256-битный ключ, 12-байтовый nonce, 16-байтовый тег
- Обычный ChaCha20 в формате OpenSSL: 16-байтовый IV из 4-байтового счётчика (little-endian) и 12-байтового nonce
- Режим пароля: ключ и nonce из PBKDF2-HMAC-SHA256 со случайной солью, за заголовком Salted__, как в openssl enc -pbkdf2
- Режим «Ключ и IV»: свои ключ и nonce в hex или случайные — по кнопке «Сгенерировать»
- С Poly1305 неверный пароль или ключ либо один изменённый символ приводят к ошибке расшифровки, а не к мусору на выходе
- Без дополнения: шифротекст той же длины, что и текст, плюс 16-байтовый тег в режиме с Poly1305
- Команда openssl enc -chacha20 для обычного ChaCha20
Это конфиденциально?
Да. ChaCha20 работает на WebAssembly внутри браузера, а пароль усиливается встроенным в браузер Web Crypto. Ничего из введённого — текст, пароль, ключ или nonce — не загружается и не сохраняется.
Частые вопросы
ChaCha20-Poly1305 или обычный ChaCha20?
ChaCha20-Poly1305, выбранный по умолчанию, — для всего нового: его тег Poly1305 не даст расшифровать текст, если в нём изменён хотя бы один символ или пароль неверный. Обычный ChaCha20 только шифрует — с неверным ключом вы получите нечитаемые байты вместо ошибки, — поэтому используйте его лишь для совместимости с системой, которая на нём работает, например с openssl enc -chacha20.
Может ли OpenSSL это расшифровать?
Обычный ChaCha20 — да: echo 'U2FsdGVkX1…' | openssl enc -d -chacha20 -pbkdf2 -iter 10000 -a -A в режиме пароля или -K <ключ в hex> -iv <IV в hex> вместо -pbkdf2 -iter в режиме «Ключ и IV». ChaCha20-Poly1305 — нет: openssl enc не поддерживает шифры AEAD. Расшифруйте его здесь или в коде: в режиме «Ключ и IV» результат — это шифротекст, за которым идёт 16-байтовый тег, без заголовка.
Что будет, если повторно использовать nonce?
Два сообщения с одинаковыми ключом и nonce раскрывают XOR своих текстов и позволяют злоумышленнику подделывать теги Poly1305. В режиме пароля такую ошибку не совершить: при каждом шифровании выбирается новая случайная соль, поэтому ключ, nonce и результат каждый раз новые. В режиме «Ключ и IV» нажимайте «Сгенерировать» перед каждым сообщением, чтобы получить новый nonce.
ChaCha20 так же надёжен, как AES?
Да. ChaCha20-Poly1305 и AES-GCM — стандартные шифры TLS 1.3, практических атак на них нет, а на телефонах без аппаратной поддержки AES ChaCha20 часто работает быстрее. Слабое место — пароль: используйте длинный случайный и настройку 600 000 итераций, если обе стороны под вашим контролем.
Поддерживается ли XChaCha20-Poly1305?
Нет. XChaCha20 — вариант с 24-байтовым nonce из libsodium — устроен иначе, поэтому его шифротекст здесь не расшифровать. Эта страница принимает 12-байтовый nonce из RFC 8439 и 16-байтовый IV chacha20 из OpenSSL. Чтобы зашифровать не текст, а файл, воспользуйтесь инструментом «Шифрование файлов»: он использует ChaCha20-Poly1305 в формате age.