DES, 3DES, RC4 ja Blowfish selitettynä alusta asti
Yhdellä lauseella: nämä neljä salausta olivat 1990-luvun työjuhtia — DES ja sen kolminkertainen kiertotapa 3DES, virtasalaus RC4 ja Blowfish — ja kaikki ne on nyt poistettu käytöstä tai vanhentuneet, ja niitä pitävät hengissä vain vanhat tiedostot, vanha laitteisto ja vanhat protokollat, joita täytyy yhä lukea.
DES: vuoden 1977 standardi, joka aloitti kaiken
Mitä se on. Data Encryption Standard (FIPS 46, 1977) on 16 kierroksen Feistel-salaus 64 bitin lohkoilla ja 56 bitin avaimella (tallennettu 8 tavuun, koska jokaisen tavun yksi bitti on pariteettitarkistus). IBM suunnitteli sen NSA:n panoksella, siitä tuli USA:n standardi kahdeksi vuosikymmeneksi, ja se murrettiin politiikan kautta vuonna 1998, kun EFF:n Deep Crack -kone ratkaisi avaimen raa'alla voimalla 56 tunnissa 250 000 dollarin laitteistolla. NIST veti sen pois salaukseen vuonna 2005.
Miksi pariteettibitti sekoittaa avainpituuksia. Jokainen DES-avaimen 8. bitti lasketaan muista seitsemästä, joten 8 tavun avain sisältää vain 56 riippumatonta bittiä — siksi samasta salauksesta näkee sekä "64-bittisen avaimen" että "56-bittisen avaimen". 3DES perii tämän: 24 raakatavua = 168 raakabittiä = 112 tehokasta (keskikohtahyökkäys poistaa loput).
Missä sen vielä kohtaa. Pankkien PIN-lohkot (ISO 9564), joitakin Kerberos v4 -alueita, vanhoja varmuuskopioarkistoja ja älykortteja. Jos järjestelmä vaatii DES:iä tänään, se joko kommunikoi 1990-luvun laitteiston kanssa tai on yksinkertaisesti turvaton.
3DES: salaa, pura, salaa
Temppu. Kolminkertainen DES ajaa DESin kolme kertaa jokaisen lohkon yli: EDE3 käyttää kolmea eri avainta (C = Ek3(Dk2(Ek1(P)))); keskimmäinen purkuvaihe on olemassa, jotta 3DES-toteutus voi jäljitellä yksinkertaista DES:iä asettamalla k1=k2. EDE2 käyttää vain kahta avainta (k1=k3), mikä antaa 112 tehokasta bittiä. Rakenne oli nopea korjaus, joka kolminkertaisti jo hyökätyn salauksen turvallisuuden keksimättä uutta.
Miksi se kuoli silti. Kaksi ongelmaa: se on hidas (kolme täyttä DES-kierrosta lohkoa kohden, noin 1/20 AESin nopeudesta), ja se säilytti 64 bitin lohkon. Yli 32 GiB dataa yhden avaimen alla (syntymäpäivärajat 232 lohkolle) tekee lohkotörmäyksistä riittävän todennäköisiä vuotamaan selkotekstin rakenteen — Sweet32-hyökkäys (2016) osoitti tämän TLS 3DES -istuntoja vastaan. NIST kielsi 3DES-salauksen vuoden 2023 jälkeen (SP 800-131A r2); PCI DSS vaatii sen poistamista maksujärjestelmissä.
RC4 / ARCFOUR: varhaisen webin virtasalaus
Miten se toimii. RC4 (Ron's Code 4, suunniteltu 1987, vuotanut 1994) on virtasalaus: avain muodostaa 256 tavun permutaation (KSA), jonka jälkeen permutaatio tuottaa pseudosatunnaisen tavuvirran (PRGA), joka XORataan viestin kanssa. Ei täytettä, ei lohkokokoa, mikä tahansa viestin pituus, triviaalisen nopea ohjelmistolla — siksi se hallitsi SSL/TLS:ää ja WEP:iä 1990-luvulla. "ARCFOUR" on tavaramerkistä vapaa nimi, jota useimmat avoimen lähdekoodin projektit käyttävät.
Miten se murtui. Fluhrer, Mantin ja Shamir (2001) osoittivat, että avainvirran ensimmäiset tavut ovat vinoutuneet — kohtalokas WEP:ssä, jonka pakettikohtainen avainrakenne syötti nuo tavut hyökkääjille. Myöhemmät vinoumahyökkäykset (2013, AlFardan ym.) palauttivat selkotekstin RC4:llä suojatuista TLS-istunnoista miljoonien yhteyksien kautta. RFC 7465 (2015) kieltää RC4:n TLS:ssä kokonaan.
Klassinen vektori. Avain "Key" (3 tavua), viesti "Plaintext" antaa salatekstin bbf316e8d940af0ad3 — kokeile RC4:n Näytettä ja vertaa. Tämän sivun itsetesti tarkistaa myös RFC 6229:n avainvirran 40-bittiselle avaimelle 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: murtumaton, mutta lohkorajoitettu
Mitä se on. Bruce Schneierin vuoden 1993 Feistel-salaus: 64 bitin lohkot, avaimet 32-448 bittiä (4..56 tavua), 16 kierrosta ja tunnettu avaimen aikataulu, joka ajaa Blowfishia itseään 521 kertaa aliavainten rakentamiseksi — mikä tekee avaimen asetuksesta hitaan mutta myös raakavoimayritykset kalliiksi. Mikään käytännöllinen kryptanalyysi ei riko täyskierroksista Blowfishia.
Miksi se on silti tällä sivulla. Ongelma on 64 bitin lohko, ei algoritmi: yli noin 32 GiB yhden avaimen alla syntymäpäivätörmäykset vuotavat dataa (sama raja kuin 3DES:llä, Sweet32-tyyppinen). Schneier itse suosittelee seuraajaansa Twofishia (AES-finalisti) tai AES:ää kaikkeen uuteen. Blowfish elää yhä bcrypt-algoritmissa — salasanatiivisteen avaimen aikataulu on Blowfish — mikä on hyvä, koska tiivistys käsittelee pieniä syötteitä, ei gigatavuja.
Klassiset vektorit. Kaikkinollainen avain ja kaikkinollainen selkoteksti salautuvat muotoon 4ef997456198dd78 (Näyte-tulosteen ensimmäinen lohko); avain "abcdefghijklmnopqrstuvwxyz" tekstillä "BLOWFISH" antaa 324ed0fef413a203. Molemmat ovat Schneierin julkaistusta vektoritiedostosta, ja itsetesti tarkistaa ne.
Yleisiä virheitä
- Uuden datan salaaminen näillä. Jokainen tämän sivun salaus on vanhentunut paitsi Blowfish (jolla on lohkokokorajoitus). Oikea nykyaikainen valinta on AES-GCM — katso AES-salaus / -purku.
- DES-avain salasanasta. 8 merkin salasana ei ole 56 satunnaista bittiä; se on muutama entropiabitti merkkiä kohden. Vanhat järjestelmät tekivät juuri näin, ja se on yleisin syy, miksi "DES-salatut" arkistot murtuvat sanakirjahyökkäyksillä minuuteissa.
- IV:n uudelleenkäyttö CBC:ssä. Ensimmäinen lohko paljastaa silloin selkotekstien yhtäsuuruuden viestien välillä samalla avaimella. Satunnaisen IV:n painike on olemassa tästä syystä.
- RC4-avainvirran uudelleenkäyttö. RC4 XORaa saman avainvirran samalle avaimelle: kahden viestin salaaminen yhdellä avaimella on kaksi kertaa käytetty kertakäyttöavain — XORaa salatekstit yhteen, ja molemmat selkotekstit putoavat ulos. WEP:n kohtalokas virhe oli juuri tämä avainvirran uudelleenkäyttö.
- Oletus "se purkautuu, joten se on oikein". ECB/CBC tarkistavat tässä purkaessa vain täytteen — väärä avain tuottaa yleensä roskaa, joka voi silti poistaa täytteensä. Yhdessäkään vanhassa tilassa ei ole eheystarkistusta; jos sellainen tarvitaan, tarvitaan AES-GCM, ei näitä.
- 3DES:n laskeminen "168-bittiseksi". Raakaavain on 168 bittiä, mutta tehokas vahvuus on 112 — keskikohtahyökkäys pienentää kolminkertaisen salauksen kaksinkertaiseksi plus vähän, samoin kuin 3DES:n esi-isien rakenteet.
UKK
Miksi pitää ylipäätään murretun salauksen työkalu? Yhteensopivuuden vuoksi. Salatut varmuuskopiot, viedyt vanhan muotoiset tiedostot, tallennetut protokollajäljet, CTF-tehtävät ja laitteisto, jota ei voi päivittää, puhuvat yhä näitä salauksia. Vanhan datan lukeminen on oikeutettua; uuden datan kirjoittaminen niillä ei ole.
DES-avaimeni pariteetti on pariton / siinä on ei-ASCII-tavuja. DES ohittaa jokaisen avaintavun pariteettibitin, joten tehokas avain on joka tapauksessa muut 56 bittiä. Tämä sivu hyväksyy minkä tahansa 8 tavua eikä vaadi parillista pariteettia.
Miksi puretut tekstit näyttävät joskus roskalta? Väärä avain, väärä tila, väärä IV tai data ei ole salattu niin kuin oletat. Ilman todennustunnistetta ei ole siistiä "väärä avain" -virhettä — täytteen tarkistus on ainoa vihje, ja se voi mennä läpi sattumalta (1/256 kerrasta).
Onko Blowfish turvallinen tiedostoilleni? Pienille tiedostoille kryptografisesti kyllä (ei käytännöllistä murtoa). Kaikelle gigatavun kokoluokan datalle yhden avaimen alla ei — 64 bitin lohkon syntymäpäivärajat koskevat datan määrää, eivät avaimen vahvuutta. Twofish tai AES välttävät ongelman.
Entä 72 tavun Blowfish-avaimet, joita näin jossain? Jotkin toteutukset hyväksyvät jopa 72 tavua, mutta Schneierin referenssi käyttää 56 tavua, ja sen ylittävät tavut eivät anna lisädiffuusiota standardin aikataulussa. Tämä sivu seuraa referenssiä: 4..56 tavua.