DES, 3DES, RC4 a Blowfish od začátku
Jednou větou: těchto čtyři šifry byly koněm pracovním 90. let — DES a jeho záchrana trojitým šifrováním 3DES, proudová šifra RC4 a Blowfish — a každá z nich je dnes vyřazena nebo zastaralá, udržována naživu jen starými soubory, starým hardwarem a starými protokoly, které musí být pořád čitelné.
DES: standard z roku 1977, který to celé odstartoval
Co to je. Data Encryption Standard (FIPS 46, 1977) je 16kolová Feistelova šifra na 64bitových blocích s 56bitovým klíčem (uloženým v 8 bajtech, protože jeden bit každého bajtu je paritní kontrola). Navrhl ji IBM za účasti NSA, dvě desetiletí byla americkým standardem a v roce 1998 byla politicky prolomena, když stroj EFF Deep Crack hrubou silou prolomil klíč za 56 hodin za hardware v hodnotě 250 000 dolarů. NIST ji v roce 2005 pro šifrování stáhl.
Proč paritní bit mate délky klíčů. Každý 8. bit klíče DES se počítá z ostatních sedmi, takže 8bajtový klíč nese jen 56 nezávislých bitů — proto uvidíte u téže šifry jak „64bitový klíč“, tak „56bitový klíč“. 3DES to zdědí: 24 surových bajtů = 168 bitů surově = 112 efektivních (meet-in-the-middle odebere zbytek).
Kde se s ní ještě setkáte. Bankovní bloky PIN (ISO 9564), některé realmy Kerberos v4, staré zálohové archivy a čipové karty. Pokud systém DES vyžaduje dnes, buď spolupracuje s hardwarem z 90. let, nebo je jednoduše nezabezpečený.
3DES: šifrovat, dešifrovat, šifrovat
Trik. Trojité DES spouští DES na každém bloku třikrát: EDE3 používá tři různé klíče (C = Ek3(Dk2(Ek1(P)))); krok dešifrování uprostřed existuje proto, aby implementace 3DES uměla emulovat jediné DES nastavením k1=k2. EDE2 používá jen dva klíče (k1=k3), což dává 112 efektivních bitů. Konstrukce byla rychlá oprava, která ztrojnásobila bezpečnost již napadené šifry, aniž by vynalezla novou.
Proč stejně zanikla. Dva problémy: je pomalá (tři plné průchody DES na blok, asi 1/20 rychlosti AES) a zůstala u 64bitového bloku. Při 32 GiB dat pod jedním klíčem (hranice narozenin 232 bloků) jsou kolize bloků dost pravděpodobné, aby prozradily strukturu prostého textu — útok Sweet32 (2016) to ukázal proti relacím TLS 3DES. NIST zakázal šifrování 3DES po roce 2023 (SP 800-131A r2); PCI DSS vyžaduje jeho vyřazení v platebních systémech.
RC4 / ARCFOUR: proudová šifra raného webu
Jak funguje. RC4 (Ron's Code 4, navržena 1987, uniklá 1994) je proudová šifra: klíč naplní 256bajtovou permutaci (KSA) a permutace pak vydává pseudonáhodný bajtový proud (PRGA), který se XORuje se zprávou. Bez výplně, bez velikosti bloku, libovolná délka zprávy, velmi rychlá v softwaru — proto dominovala SSL/TLS a WEP v 90. letech. „ARCFOUR“ je název bez obchodní značky, který většina open-source projektů používá.
Jak se zlomila. Fluhrer-Mantin-Shamir (2001) ukázali, že první bajty proudu klíčů jsou zkreslené — fatální ve WEP, kde konstrukce klíče pro každý paket tyto bajty předávala útočníkům. Pozdější útoky na zkreslení (2013, AlFardan a kol.) obnovily prostý text z relací TLS chráněných RC4 s miliony spojení. RFC 7465 (2015) RC4 v TLS zakazuje zcela.
Klasický vektor. Klíč „Key“ (3 bajty) a zpráva „Plaintext“ dají šifrotext bbf316e8d940af0ad3 — vyzkoušejte Ukázku RC4 a porovnejte. Samotest této stránky také ověřuje proud klíčů RFC 6229 pro 40bitový klíč 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: nerozlomený, ale omezený velikostí bloku
Co to je. Feistelova šifra Bruce Schneiera z roku 1993: bloky po 64 bitech, klíče od 32 do 448 bitů (4..56 bajtů), 16 kol a proslulé plánování klíčů, které spouští samotný Blowfish 521krát, aby sestavil podklíče — což nastavení klíče zpomaluje, ale i pokusy o hrubou sílu drahé. Žádná praktická kryptoanalýza nerozbije plné Blowfish.
Proč je přesto na této stránce. Problémem je 64bitový blok, ne algoritmus: nad ~32 GiB pod jedním klíčem prozrazují kolize narozenin data (stejná hranice jako u 3DES, podobně jako Sweet32). Schneier sám pro cokoli nového doporučuje jeho nástupce Twofish (finalista AES) nebo AES. Blowfish dál žije uvnitř bcrypt — plánování klíče hashe hesla je Blowfish — a to je v pořádku, protože hashování pracuje s malými vstupy, ne s gigabajty.
Klasické vektory. Klíč všech nul a prostý text všech nul se zašifruje na 4ef997456198dd78 (první blok výstupu Ukázky); klíč "abcdefghijklmnopqrstuvwxyz" na "BLOWFISH" dá 324ed0fef413a203. Oba pocházejí ze souboru vektorů publikovaného Schneierem a ověřuje je samotest.
Časté chyby
- Použití těchto šifer pro nová data. Každá šifra na této stránce je zastaralá kromě Blowfish (který je omezen velikostí bloku). Správnou moderní volbou je AES-GCM — viz Šifrování / dešifrování AES.
- Klíč DES z hesla. Osmiznakové heslo není 56 náhodných bitů; je to jen několik bitů entropie na znak. Staré systémy přesně tohle dělaly a je to nejčastější důvod, proč archivy „šifrované DES“ padají na slovníkové útoky během několika minut.
- Opakované použití IV v CBC. První blok pak prozrazuje shodu prostého textu mezi zprávami pod stejným klíčem. Tlačítko Náhodný IV existuje právě z tohoto důvodu.
- Opakované použití proudu klíčů RC4. RC4 XORuje pro stejný klíč stejný proud klíčů: zašifrování dvou zpráv jedním klíčem je jednorázová podložka použitá dvakrát — XOR šifrotextů vynese oba prosté texty. Fatální chybou WEP byla přesně konstrukce se znovupoužitím proudu klíčů.
- Předpoklad „dešifruje se, takže je to správně“. ECB/CBC zde při dešifrování ověřují jen výplň — špatný klíč obvykle vydá nesmysl, který může projít kontrolou výplně. Žádný legacy režim nemá kontrolu integrity; pokud ji potřebujete, potřebujete AES-GCM, ne tyto režimy.
- Počítání 3DES jako „168bitového“. Surový klíč má 168 bitů, ale efektivní síla je 112 — meet-in-the-middle redukuje trojité šifrování na dvojité plus něco navíc, přesně jako u předchůdců konstrukce 3DES.
Časté dotazy
Proč vůbec držet nástroj pro rozbitou šifru? Kvůli kompatibilitě. Šifrované zálohy, exportované soubory ve starém formátu, zachycené protokolové stopy, CTF úlohy a hardware, který nelze aktualizovat, stále těmito šiframi mluví. Číst stará data je legitimní; psát nová jimi legitimní není.
Můj klíč DES má lichou paritu / bajty mimo ASCII. DES ignoruje paritní bit každého bajtu klíče, takže efektivní klíč je vždy těch ostatních 56 bitů. Tato stránka přijme libovolných 8 bajtů a sudou paritu nevynucuje.
Proč někdy dešifrovaný text vypadá jako šum? Špatný klíč, špatný režim, špatný IV, nebo data nebyla zašifrována tak, jak předpokládáte. Bez autentizační značky neexistuje čisté hlášení „špatný klíč“ — kontrola výplně je jediný náznak a může projít náhodou (1/256 případů).
Je Blowfish bezpečný pro mé soubory? Pro malé soubory kryptograficky ano (žádný praktický zlom). Pro cokoli v gigabajtovém rozsahu pod jedním klíčem ne — hranice narozenin 64bitového bloku se týká objemu dat, ne síly klíče. Twofish nebo AES problém obcházejí.
Co 72bajtové klíče Blowfish, které jsem kdesi viděl? Některé implementace přijmou až 72 bajtů, ale Schneierova referenční implementace používá 56 a bajty nad to ve standardním plánování nepřinášejí žádnou další difúzi. Tato stránka se řídí referencí: 4..56 bajtů.