DES, 3DES, RC4 a Blowfish od začiatku
V jednej vete: tieto štyri šifry boli pracovnými koňmi 90. rokov — DES a jeho obchádzka trojitým šifrovaním 3DES, prúdová šifra RC4 a Blowfish — a každá z nich je dnes vyradená alebo zastaraná, udržiavaná len starými súbormi, starým hardvérom a starými protokolmi, ktoré treba stále čítať.
DES: štandard z roku 1977, ktorý všetko začal
Čo to je. Štandard šifrovania dát (DES, FIPS 46, 1977) je šestnásťkolová Feistelova šifra na 64-bitových blokoch s 56-bitovým kľúčom (uloženým v 8 bajtoch, pretože jeden bit každého bajtu je paritný kontrolný bit). Navrhol ho IBM s vstupom NSA, dve desaťročia bol americkým štandardom a v roku 1998 bol prelomený: stroj Deep Crack organizácie EFF hrubou silou našiel kľúč za 56 hodín za hardvér v hodnote 250 000 dolárov. NIST ho v roku 2005 stiahol pre šifrovanie.
Prečo paritný bit mätie dĺžky kľúčov. Každý ôsmy bit kľúča DES sa vypočíta zo zvyšných siedmich, takže 8-bajtový kľúč nesie len 56 nezávislých bitov — preto sa pre tú istú šifru uvádza aj „64-bitový kľúč“, aj „56-bitový kľúč“. 3DES to dedí: 24 surových bajtov = 168 surových bitov = 112 efektívnych (útok meet-in-the-middle odstráni zvyšok).
Kde sa s ním ešte možno stretnúť. Bankové bloky PIN (ISO 9564), niektoré realmy Kerberos v4, staré zálohy a čipové karty. Ak systém dnes vyžaduje DES, buď komunikuje s hardvérom z 90. rokov, alebo je jednoducho nebezpečný.
3DES: šifrovanie, dešifrovanie, šifrovanie
Trik. Trojitý DES spúšťa DES trikrát na každý blok: EDE3 používa tri rôzne kľúče (C = Ek3(Dk2(Ek1(P)))); dešifrovací krok uprostred existuje preto, aby implementácia 3DES vedela emulovať jednoduchý DES nastavením k1=k2. EDE2 používa len dva kľúče (k1=k3), čo dáva 112 efektívnych bitov. Konštrukcia bola rýchla oprava, ktorá strojnásobila bezpečnosť už napadnutej šifry bez vynájdenia novej.
Prečo aj tak zanikol. Dva problémy: je pomalý (tri plné prechody DES na blok, asi 1/20 rýchlosti AES) a zachoval 64-bitový blok. Pri 32 GiB údajov pod jedným kľúčom (narodeninová hranica 232 blokov) sa kolízie blokov stávajú dostatočne pravdepodobné, aby uniklo štruktúra obyčajného textu — útok Sweet32 (2016) to ukázal na reláciách TLS 3DES. NIST zakázal šifrovanie 3DES od roku 2023 (SP 800-131A r2); PCI DSS vyžaduje jeho vyradenie v platobných systémoch.
RC4 / ARCFOUR: prúdová šifra raného webu
Ako funguje. RC4 (Ron's Code 4, navrhnutý 1987, uniknutý 1994) je prúdová šifra: kľúč naplánuje 256-bajtovú permutáciu (KSA) a potom permutácia vydáva pseudonáhodný prúd bajtov (PRGA), ktorý sa XORuje so správou. Bez výplne, bez veľkosti bloku, ľubovoľná dĺžka správy a v softvéri mimoriadne rýchla — preto dominoval SSL/TLS a WEP v 90. rokoch. „ARCFOUR“ je názov bez ochranných známok, ktorý väčšina open-source projektov používa.
Ako sa prelomil. Fluhrer-Mantin-Shamir (2001) ukázali, že prvé bajty prúdu kľúča sú skreslené — fatálne vo WEP, kde konštrukcia kľúča pre každý paket posúvala tieto bajty útočníkom. Neskoršie útoky na skreslenie (2013, AlFardan a kol.) obnovili obyčajný text z relácií TLS chránených RC4 s miliónmi spojení. RFC 7465 (2015) RC4 v TLS úplne zakazuje.
Klasický vektor. Kľúč „Key“ (3 bajty), správa „Plaintext“ dá šifrotext bbf316e8d940af0ad3 — stačí vyskúšať RC4 Sample a porovnať. Samotest tejto stránky tiež overuje prúd kľúča RFC 6229 pre 40-bitový kľúč 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: nerozbitý, ale obmedzený veľkosťou bloku
Čo to je. Feistelova šifra Bruca Schneiera z roku 1993: bloky po 64 bitoch, kľúče od 32 do 448 bitov (4 až 56 bajtov), 16 kôl a známy plán kľúčov, ktorý spúšťa samotný Blowfish 521-krát na zostavenie podkľúčov — čo nastavenie kľúča spomaľuje, ale aj pokusy o hrubú silu robí drahými. Žiadna praktická kryptoanalýza neprelomila Blowfish s plným počtom kôl.
Prečo je na tejto stránke aj tak. Problémom je 64-bitový blok, nie algoritmus: po ~32 GiB pod jedným kľúčom narúšajú kolízie narodeninového typu únik údajov (rovnaká hranica ako pri 3DES, útok typu Sweet32). Schneier sám odporúča svoj nástupca Twofish (finalista AES) alebo AES pre všetko nové. Blowfish žije ďalej v bcrypt — plán kľúčov hashu hesla je Blowfish — a to je v poriadku, pretože hashovanie pracuje s malými vstupmi, nie s gigabajtmi.
Klasické vektory. Kľúč zo samých núl a text zo samých núl sa zašifrujú na 4ef997456198dd78 (prvý blok výstupu Sample); kľúč „abcdefghijklmnopqrstuvwxyz“ na „BLOWFISH“ dá 324ed0fef413a203. Oba pochádzajú zo Schneierovho publikovaného súboru vektorov a sú overené samotestom.
Časté chyby
- Použitie na nové údaje. Každá šifra na tejto stránke je zastaraná okrem Blowfish (ktorý má obmedzenú veľkosť bloku). Správnou modernou voľbou je AES-GCM — súvisiace: Šifrovanie / dešifrovanie AES.
- DES kľúč z hesla. Osemznakové heslo nie je 56 náhodných bitov; je to len pár bitov entropie na znak. Staré systémy to presne tak robili a je to najčastejší dôvod, prečo archívy „šifrované DES“ podľahnú slovníkovým útokom za pár minút.
- Opätovné použitie IV v CBC. Prvý blok potom prezrádza rovnosť obsahu medzi správami pod tým istým kľúčom. Tlačidlo Náhodný IV tam je z dôvodu.
- Opätovné použitie prúdu kľúča RC4. RC4 XORuje rovnaký prúd kľúča pri rovnakom kľúči: zašifrovanie dvoch správ jedným kľúčom je jednorazová podložka použitá dvakrát — XOR šifrotextov vyjde na oba obyčajné texty. Fatálnou chybou WEP bola presne konštrukcia s opakovaným prúdom kľúča.
- Predpoklad „dešifruje sa, takže je to správne“. ECB/CBC tu pri dešifrovaní overujú len výplň — nesprávny kľúč väčšinou vráti šum, ktorý môže prejsť kontrolou výplne. V žiadnom staršom režime nie je kontrola integrity; ak ju treba, je na to určený AES-GCM, nie tieto.
- Počítanie 3DES ako „168-bitového“. Surový kľúč má 168 bitov, ale efektívna sila je 112 — meet-in-the-middle zníži trojité šifrovanie na dvojité plus trochu, presne ako pri predchodcoch konštrukcie 3DES.
FAQ
Prečo vôbec mať nástroj na rozbitú šifru? Kvôli kompatibilite. Šifrované zálohy, exportované súbory v starom formáte, zachytené protokolové stopy, výzvy CTF a hardvér, ktorý sa nedá aktualizovať, stále používajú tieto šifry. Čítanie starých údajov je legitímne; zapisovanie nových údajov nimi nie je.
Kľúč DES má nepárnu paritu / bajty mimo ASCII. DES ignoruje paritný bit každého bajtu kľúča, takže efektívny kľúč je vždy ostatných 56 bitov. Táto stránka prijme ľubovoľných 8 bajtov a párnu paritu nevynucuje.
Prečo dešifrovaný text niekedy vyzerá ako šum? Nesprávny kľúč, nesprávny režim, nesprávny IV alebo údaje neboli zašifrované tak, ako sa predpokladá. Bez autentizačnej značky neexistuje čistá chyba „zlý kľúč“ — jedinou nápovedou je kontrola výplne, ktorá môže prejsť náhodou (v 1 z 256 prípadov).
Je Blowfish bezpečný pre súbory? Pri malých súboroch kryptograficky áno (žiadny praktický prelom). Pri čomkoľvek v gigabajtovom rozsahu pod jedným kľúčom nie — hranica narodeninového typu pri 64-bitových blokoch súvisí s objemom údajov, nie so silou kľúča. Twofish alebo AES tento problém obchádzajú.
Čo s 72-bajtovými kľúčmi Blowfish, ktoré som niekde videl? Niektoré implementácie prijmú až 72 bajtov, ale Schneierova referenčná implementácia používa 56 a bajty nad to v štandardnom pláne kľúčov neprinášajú ďalšiu difúziu. Táto stránka sa drží referencie: 4 až 56 bajtov.