Шифрование и расшифровка DES / 3DES / RC4 / Blowfish

Шифруйте или расшифровывайте четырьмя классическими шифрами, которые до сих пор встречаются в старых файлах, резервных копиях и протоколах: DES и 3DES в режимах ECB или CBC, RC4 (ARCFOUR) как поточный шифр и Blowfish с ключами до 56 байт. Проверено по FIPS 46-3, опубликованным векторам Шнайера для Blowfish и RFC 6229. Всё выполняется локально в вашем браузере: ничего не загружается. Для новых задач используйте AES-GCM.
Эти шифры здесь для совместимости, а не для новых задач. DES выведен из употребления в 2005 году, 3DES — в 2023-м, RC4 запрещён в TLS с 2015 года (RFC 7465), а 64-битный блок Blowfish достигает границы дня рождения примерно после 32 ГиБ данных под одним ключом. Для всего нового используйте AES-GCM.
Направление: Шифр: Режим: Вывод:
DES — стандарт шифрования данных 1977 года: блоки по 64 бита, эффективный ключ 56 бит. Выведен из употребления, но до сих пор встречается в старых резервных копиях, PIN-блоках (банки) и Kerberos v4. Ключ должен быть ровно 8 байт.
Hex допускает пробелы, двоеточия и префиксы 0x. DES игнорирует бит чётности каждого байта ключа.
Блочные шифры дополняют данные по PKCS#7; RC4 никогда не дополняет.
Допустимые длины ключей на этой странице
ШифрКлючБлокСтатус
DESровно 8 байт (56 эффективных бит)64 битавыведен из употребления в 2005 г. (NIST SP 800-131A)
3DES-EDE3ровно 24 байта (112 эффективных бит)64 битазапрещён после 2023 г. (SP 800-131A r2)
3DES-EDE2ровно 16 байт (112 эффективных бит)64 битато же, что EDE3; более слабый устаревший вариант
RC4 / ARCFOUR1..256 байтпоточныйзапрещён в TLS с 2015 г. (RFC 7465)
Blowfish4..56 байт64 битане взломан, но ограничен 64-битным блоком; используйте Twofish или AES
Эффективный размер ключа меньше исходного, потому что DES использует один бит каждого байта как бит чётности: 64-битный исходный ключ несёт только 56 бит ключа, а 3DES с тремя независимыми ключами несёт 112 (атака «встреча посередине»).
Совместимость с OpenSSL — OpenSSL 3 перенёс эти шифры в провайдер legacy; добавьте -provider legacy, если ваша версия отказывается. Эквиваленты этой страницы в командной строке:
openssl enc -des-ecb -K 133457799BBCDFF1 -in msg.bin -out msg.enc
openssl enc -des3 -K <48 hex> -iv <16 hex> -in msg.bin -out msg.enc (3DES-CBC)
openssl enc -rc4 -K 4b6579 -in msg.bin -out msg.enc  /  -bf-cbc для Blowfish-CBC.
Для расшифровки используйте -d. -K принимает сырой ключ в hex, -k — пароль (лучше не использовать: KDF отличается от всего на этой странице).
Самопроверка
Повторно запускает движок страницы на опубликованных и независимо сгенерированных векторах: рабочий пример DES из FIPS 46-3, шифротексты 3DES EDE2/EDE3, сгенерированные OpenSSL, векторы Blowfish от Шнайера, тестовые векторы RC4 из RFC 6229 и классический пример «Key/Plaintext», круговые проверки во всех режимах и негативные тесты (неверный размер ключа и шифротекст, не кратный размеру блока, должны вызывать ошибку). Ничего никуда не отправляется.
DES, 3DES, RC4 и Blowfish с нуля
Одним предложением: эти четыре шифра были рабочими лошадками 1990-х: DES и его обход тройным шифрованием 3DES, поточный шифр RC4 и Blowfish. Каждый из них теперь выведен из употребления или признан устаревшим и сохраняется только благодаря старым файлам, старому оборудованию и старым протоколам, которые всё ещё нужно читать.
DES: стандарт 1977 года, с которого всё началось

Что это. Data Encryption Standard (FIPS 46, 1977) — шифр Фейстеля с 16 раундами на блоках по 64 бита и ключом 56 бит (хранится в 8 байтах, потому что один бит каждого байта — бит контроля чётности). Его разработала IBM при участии NSA; два десятилетия он был стандартом США, а в 1998 году был взломан практически: машина EFF Deep Crack перебрала ключ за 56 часов, потратив около 250 000 долларов на оборудование. NIST вывел его из употребления для шифрования в 2005 году.

Почему бит чётности путает длины ключей. Каждый восьмой бит ключа DES вычисляется из остальных семи, поэтому 8-байтовый ключ содержит только 56 независимых бит — отсюда и «64-битный ключ», и «56-битный ключ» для одного и того же шифра. 3DES наследует это: 24 байта сырого ключа = 168 сырых бит = 112 эффективных (атака «встреча посередине» отнимает остальное).

Где его ещё встречают. PIN-блоки в банках (ISO 9564), некоторые области Kerberos v4, старые архивы резервных копий и смарт-карты. Если сегодня система требует DES, она либо взаимодействует с оборудованием 1990-х, либо попросту небезопасна.

3DES: зашифровать, расшифровать, зашифровать

Трюк. Triple-DES выполняет DES трижды над каждым блоком: EDE3 использует три разных ключа (C = Ek3(Dk2(Ek1(P)))); шаг расшифровки посередине нужен, чтобы реализация 3DES могла эмулировать одиночный DES при k1=k2. EDE2 использует только два ключа (k1=k3), давая 112 эффективных бит. Конструкция была быстрым исправлением, которое утроило стойкость уже атакованного шифра, не изобретая нового.

Почему он всё равно умер. Две проблемы: он медленный (три полных прохода DES на блок, примерно 1/20 скорости AES) и сохранил 64-битный блок. При 32 ГиБ данных под одним ключом (граница дня рождения 232 блоков) коллизии блоков становятся достаточно вероятными, чтобы раскрыть структуру открытого текста: атака Sweet32 (2016) показала это на сессиях TLS с 3DES. NIST запретил шифрование 3DES после 2023 года (SP 800-131A r2); PCI DSS требует вывода его из употребления в платёжных системах.

RC4 / ARCFOUR: поточный шифр раннего веба

Как работает. RC4 (Ron's Code 4, разработан в 1987, утёк в 1994) — поточный шифр: ключ задаёт перестановку из 256 байт (KSA), затем перестановка выдаёт псевдослучайный поток байтов (PRGA), который складывается по XOR с сообщением. Без дополнения, без размера блока, любая длина сообщения, очень быстрый в программах — поэтому он доминировал в SSL/TLS и WEP в 1990-х. «ARCFOUR» — безымянное название, которое используют большинство проектов с открытым кодом.

Как его взломали. Fluhrer, Mantin и Shamir (2001) показали, что первые байты поточного ключа смещены, — фатально для WEP, где построение ключа на каждый пакет передавало эти байты атакующим. Позднейшие атаки на смещение (2013, AlFardan и др.) восстанавливали открытый текст из сессий TLS с RC4 по миллионам соединений. RFC 7465 (2015) полностью запрещает RC4 в TLS.

Классический вектор. Ключ «Key» (3 байта), сообщение «Plaintext» даёт шифротекст bbf316e8d940af0ad3: попробуйте пример RC4 и сравните. Самопроверка этой страницы также проверяет поток ключа RFC 6229 для 40-битного ключа 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.

Blowfish: не взломан, но ограничен блоком

Что это. Шифр Фейстеля Брюса Шнайера 1993 года: блоки по 64 бита, ключи от 32 до 448 бит (4..56 байт), 16 раундов и знаменитое расписание ключей, которое запускает сам Blowfish 521 раз для построения подключей. Поэтому настройка ключа медленная, но попытки перебора тоже дорогие. Ни один практический криптоанализ не ломает Blowfish с полным числом раундов.

Почему он всё же здесь. Проблема в 64-битном блоке, а не в алгоритме: после примерно 32 ГиБ данных под одним ключом коллизии дня рождения раскрывают данные (та же граница, что у 3DES, в духе Sweet32). Сам Шнайер рекомендует для всего нового его преемника Twofish (финалиста AES) или AES. Blowfish живёт внутри bcrypt: расписание ключей хеша паролей и есть Blowfish. Это нормально, потому что хеширование работает с крошечными входами, а не с гигабайтами.

Классические векторы. Нулевой ключ и нулевой открытый текст шифруются в 4ef997456198dd78 (первый блок выхода примера); ключ «abcdefghijklmnopqrstuvwxyz» на «BLOWFISH» даёт 324ed0fef413a203. Оба взяты из опубликованного файла векторов Шнайера и проверяются самопроверкой.

Распространённые ошибки
  • Использование этих шифров для новых данных. Каждый шифр на этой странице устарел, кроме Blowfish (который ограничен размером блока). Правильный современный выбор — AES-GCM: см. Шифрование и расшифровка AES.
  • Ключ DES из пароля. Пароль из 8 символов — это не 56 случайных бит; это несколько бит энтропии на символ. Старые системы делали именно так, и это самая частая причина, по которой архивы, зашифрованные DES, сдаются атаке по словарю за минуты.
  • Повторное использование IV в CBC. Тогда первый блок раскрывает совпадение открытых текстов разных сообщений под одним ключом. Кнопка «Случайный IV» существует не просто так.
  • Повторное использование поточного ключа RC4. RC4 складывает по XOR один и тот же поток для одного ключа: шифрование двух сообщений одним ключом — это одноразовый блокнот, использованный дважды; XOR шифротекстов выдаёт оба открытых текста. Фатальный изъян WEP был ровно такой конструкцией с повторным поточным ключом.
  • Предположение «расшифровалось — значит, правильно». ECB и CBC здесь проверяют при расшифровке только дополнение: неверный ключ обычно даёт мусор, который всё же может сняться с дополнения. В устаревших режимах нет проверки целостности; если она нужна, нужен AES-GCM, а не эти шифры.
  • Считать 3DES «168-битным». Сырой ключ — 168 бит, но эффективная стойкость — 112: атака «встреча посередине» сводит тройное шифрование к двойному с небольшой добавкой, как и для предков 3DES.
Вопросы и ответы

Зачем вообще хранить инструмент для взломанного шифра? Совместимость. Зашифрованные резервные копии, экспортированные файлы старых форматов, перехваченные трассы протоколов, задачи CTF и оборудование, которое нельзя обновить, — всё это по-прежнему говорит на этих шифрах. Читать старые данные законно; писать новые данные с их помощью — нет.

У моего ключа DES нечётная чётность или байты вне ASCII. DES игнорирует бит чётности каждого байта ключа, поэтому эффективный ключ в любом случае — остальные 56 бит. Эта страница принимает любые 8 байт и не требует чётной чётности.

Почему расшифрованный текст иногда выглядит как мусор? Неверный ключ, неверный режим, неверный IV или данные были зашифрованы не так, как вы думаете. Без тега аутентификации нет чистой ошибки «неверный ключ»: единственная подсказка — проверка дополнения, и она может пройти случайно (в 1 из 256 случаев).

Безопасен ли Blowfish для моих файлов? Для небольших файлов — криптографически да (практического взлома нет). Для всего объёмом в гигабайты под одним ключом — нет: граница дня рождения для 64-битного блока связана с объёмом данных, а не со стойкостью ключа. Twofish или AES обходят эту проблему.

А 72-байтные ключи Blowfish, которые я где-то видел? Некоторые реализации принимают до 72 байт, но эталон Шнайера использует 56, а байты сверх этого в стандартном расписании не дают дополнительной диффузии. Эта страница следует эталону: 4..56 байт.