Шифрування і розшифрування 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 року, з якого все почалося

Що це. Стандарт шифрування даних (DES, FIPS 46, 1977) — 16-раундовий шифр Фейстеля на блоках по 64 біти з 56-бітним ключем (зберігається у 8 байтах, бо один біт кожного байта є бітом парності). Його розробила IBM за участі NSA, він був стандартом США два десятиліття, а в 1998 році його «зламала» політика: машина Deep Crack від EFF перебрала ключ за 56 годин за $250 000 апаратного забезпечення. NIST відкликав його для шифрування у 2005 році.

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

Де його досі зустрічають. Блоки PIN-кодів банків (ISO 9564), деякі домени Kerberos v4, старі резервні архіви та смарт-картки. Якщо система вимагає DES сьогодні, вона або взаємодіє з обладнанням 1990-х, або просто небезпечна.

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

Трюк. Потрійний 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» — це назва без торгових марок, яку використовує більшість проєктів з відкритим кодом.

Як він зламався. Флюрер, Мантін і Шамір (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.
Часті запитання (FAQ)

Навіщо тримати інструмент для зламаних шифрів? Сумісність. Зашифровані резервні копії, експортовані файли старих форматів, перехоплені сліди протоколів, завдання CTF і обладнання, яке не можна оновити, досі розуміють ці шифри. Читати старі дані законно; записувати нові даними цими шифрами — ні.

Мій ключ DES має непарний біт парності / байти поза ASCII. DES ігнорує біт парності кожного байта ключа, тож ефективний ключ — це інші 56 біт незалежно від цього. Ця сторінка приймає будь-які 8 байтів і не вимагає парної парності.

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

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

Що з 72-байтовими ключами Blowfish, які я десь бачив? Деякі реалізації приймають до 72 байтів, але еталонна реалізація Шнаєра використовує 56, і байти понад це не додають дифузії в стандартній схемі ключів. Ця сторінка слідує еталону: 4..56 байтів.