Šifrovanie a dešifrovanie DES / 3DES / RC4 / Blowfish

Šifrovanie alebo dešifrovanie štyrmi klasickými šiframi, ktoré stále žijú v starých súboroch, zálohách a protokoloch — DES a 3DES v režime ECB alebo CBC, RC4 (ARCFOUR) ako prúdová šifra a Blowfish s kľúčmi až do 56 bajtov. Overené voči FIPS 46-3, Schneierovým publikovaným vektorom pre Blowfish a RFC 6229. Všetko sa spúšťa lokálne v prehliadači — nič sa neodosiela. Pre moderné použitie treba použiť AES-GCM.
Tieto šifry sú tu kvôli kompatibilite, nie pre novú prácu. DES bol stiahnutý v roku 2005, 3DES v roku 2023, RC4 je v TLS zakázaný od roku 2015 (RFC 7465) a 64-bitový blok Blowfish dosiahne narodeninovú hranicu po zhruba 32 GiB údajov pod jedným kľúčom. Pre čokoľvek nové treba použiť AES-GCM.
Smer: Šifra: Režim: Výstup:
DES = Štandard šifrovania dát z roku 1977: 64-bitové bloky, 56-bitový efektívny kľúč. Stiahnutý, ale stále sa nachádza v starých zálohách, bankových blokoch PIN a Kerberos v4. Kľúč musí mať presne 8 bajtov.
Hex toleruje medzery, dvojbodky a predpony 0x. DES ignoruje paritný bit každého bajtu kľúča.
Blokové šifry dopĺňajú výplň podľa PKCS#7; RC4 nikdy nedopĺňa.
Dĺžky kľúčov, ktoré táto stránka prijíma
ŠifraKľúčBlokStav
DESpresne 8 bajtov (56 efektívnych bitov)64 bitovstiahnuté 2005 (NIST SP 800-131A)
3DES-EDE3presne 24 bajtov (112 efektívnych bitov)64 bitovzakázané od roku 2023 (SP 800-131A r2)
3DES-EDE2presne 16 bajtov (112 efektívnych bitov)64 bitovrovnaké ako EDE3, slabšia zastaraná možnosť
RC4 / ARCFOUR1..256 bajtovprúdovázakázané v TLS od roku 2015 (RFC 7465)
Blowfish4..56 bajtov64 bitovnerozbitý, ale viazaný na 64-bitový blok; treba použiť Twofish/AES
Efektívna dĺžka kľúča je menšia než surová, pretože DES používa jeden bit každého bajtu ako paritu: 64-bitový surový kľúč nesie len 56 bitov kľúča a 3DES s tromi nezávislými kľúčmi nesie 112 (meet-in-the-middle).
Interoperabilita s OpenSSL — OpenSSL 3 presunul tieto šifry do poskytovateľa legacy; ak ho systém odmietne, pridá sa -provider legacy. Ekvivalenty tejto stránky na príkazovom riadku:
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 pre Blowfish-CBC.
Dešifrovanie sa robí s -d. -K prijíma surový hexadecimálny kľúč, -k heslo (radšej nepoužívať — KDF sa líši od všetkého na tejto stránke).
Autotest
Znovu spustí engine stránky proti publikovaným a nezávisle vygenerovaným vektorom: prepracovaný príklad DES podľa FIPS 46-3, šifrotexty 3DES EDE2/EDE3 generované OpenSSL, vektory Blowfish od Schneiera, testovacie vektory RC4 z RFC 6229 a klasický príklad „Key/Plaintext“, obojsmerné prevody vo všetkých režimoch a negatívne testy (nesprávna dĺžka kľúča a šifrotext, ktorý nie je násobkom bloku, musia zlyhať). Nič sa nikam neodosiela.
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.