Dragon on virtasalaus , joka esiteltiin ensimmäisen kerran [1] vuotuisessa kansainvälisessä ICISC-konferenssissa vuonna 2003. Huhtikuussa 2005 se lähetettiin eSTREAM- kilpailuun , jonka tavoitteena oli tunnistaa stream-salaukset, jotka soveltuvat yleiseen käyttöön sovelluksissa, joissa on korkeat suorituskykyvaatimukset.
Dragonin ovat kehittäneet Ed Dawson, Kevin Chen, Matt Henricksen, William Millan, Leonie Simpson, HoonJae Lee ja SangJae Moon.
Virtasalausten suunnittelu on perinteisesti perustunut lineaaristen takaisinkytkentäsiirtorekisterien toimintaan , koska jälkimmäiset ovat hyvin ymmärrettyjä ja täyttävät yleisesti hyväksytyt tilastolliset kriteerit. Salauksen gamman epälineaarisuus voidaan esittää joko epälineaarisen suodattimen toiminnalla tai epäsäännöllisellä piirikellolla tai molemmilla. Kun bittivirtasalaukset toteutetaan laitteistossa, niiden suorituskyky on korkea, mutta ne ovat melko hitaita, kun ne toteutetaan ohjelmistossa . Lineaarisiin palautesiirtorekistereihin perustuvat ja pientä määrää palautetta käyttävät salaukset voivat olla alttiina hyökkäyksille, mutta viimeksi mainittujen lukumäärän kasvu voi vaikuttaa haitallisesti salauksen tehokkuuteen. Lisäksi lineaarisella tilanmuutosfunktiolla varustettujen salausten luotettavuus kyseenalaistetaan algebrallisia hyökkäyksiä käytettäessä. [2]
Sanapohjaiset salaukset voivat ylittää bittipohjaiset salaukset sekä laitteisto- että ohjelmistototeutuksissa. Ne salaavat useita kertoja enemmän dataa iteraatiota kohden kuin salaukset käyttämällä yksibittisiä lineaarisia takaisinkytkentäsiirtorekistereitä. Ohjelmistona toteutettuina ne voivat ylittää jopa nopeat lohkosalaukset , kuten AES, lähes suuruusluokkaa [3] . Vaikka sanapohjaisten salausten suorituskykyä on helppo mitata, niiden vahvuutta on vaikea arvioida tarkasti.
Dragon on suunniteltu sekä suorituskykyä että turvallisuutta ajatellen. Se käyttää epälineaarista palautesiirtorekisteriä sekä epälineaarista suodatinta luodakseen salausgamman 64-bittisten sanojen muodossa. Dragonin suorituskyky on useita gigabittejä sekunnissa ja vaatii noin 4 kilotavua muistia.
Dragonia voidaan käyttää 128-bittisen avaimen ja alustusvektorin kanssa tai 256-bittisen avaimen ja alustusvektorin kanssa. Näitä versioita kutsutaan vastaavasti Dragon-128:ksi ja Dragon-256:ksi. Ne toimivat lähes identtisesti avaimen alustusprosessia lukuun ottamatta.
Molemmat Dragon-salauksen versiot on rakennettu käyttämällä yhtä 1024-bittistä epälineaarista palautesiirtorekisteriä ja 64-bittistä muistia M. Alkutila luodaan avaimella ja alustusvektorilla, jota tukee tilanmuutosfunktio F. Muutos toimintoa käytetään myös avainvirran luomisessa.
Dragon-128 ja Dragon-256 käyttävät samaa F-funktiota. F on käännettävä 192-bittistä 192-bittiä: se ottaa 6 x 32 bittiä tulona (merkitty a, b, c, d, e, f) ja tulostaa 6 x 32 bittiä (merkitty a', b', c', d', e', f'). Verkko koostuu kolmesta kerroksesta: alkusekoituskerroksesta, S-box-kerroksesta ja lopullisesta sekoituskerroksesta. Sekoituskerrokset käyttävät modulo 2 additiota 32 ja modulo 2 additiota (⊕). S-box-kerros koostuu G- ja H-funktioista, jotka puolestaan sisältävät 8 × 32 S-laatikkoa.
G- ja H-funktiot ovat epälineaarisia virtuaalisia 32 x 32 S-laatikoita, jotka on rakennettu kahdesta 8 x 32-bittisesta S-laatikosta. 32 tulobittiä on jaettu neljään tavuun, x = x 0 ‖ x 1 ‖ x 2 ‖ x 3 , missä a ‖ b tarkoittaa a:n ja b:n ketjutusta.
Avaimen alustamiseksi epälineaarinen palautesiirtorekisteri jaetaan kahdeksaan 128-bittiseen sanaan, joita merkitään W 0 ... W 7 . Alustus tapahtuu kahdessa vaiheessa.
Vaihe 1: Salauksen tilan "eteneminen" : Ensimmäisen vaiheen aikana 1024-bittisen epälineaarisen palautesiirtorekisterin ja 64-bittisen muistin M alkutila "edetään" käyttämällä avainta (K) ja alustusvektoria ( IV).
Dragon-128 ottaa 128-bittisen avaimen ja 128-bittisen IV:n ja "kertoo" epälineaarisen takaisinkytkentäsiirtorekisterin tilan siten, että (W 0 ‖ … ‖ W 7 ) = (K ‖ K ' ⊕ IV ' ‖ IV ‖ K ⊕ IV ' ‖ K ' ‖ K ⊕ IV ‖ IV ' ‖ K ' ⊕ IV), jossa alkuluku osoittaa, että korkea ja matala 64-bittinen puolisko on vaihdettu.
Dragon-256 ottaa 256-bittisen avaimen ja 128-bittisen IV:n ja "kertoo" epälineaarisen takaisinkytkentäsiirtorekisterin tilan siten, että (W 0 ‖ … ‖ W 7 ) = (K ‖ K ⊕ IV ‖ ~( K ⊕ IV) ‖ IV).
Molemmissa tapauksissa 64-bittinen muisti M on esitäytetty vakioarvolla 0x0000447261676F6E, joka on sanan "Dragon" ASCII-esitys.
Vaihe 2: Sekoita salauksen tila : Toisessa vaiheessa tilanmuutosfunktiota käytetään 16 kertaa epälineaarisen palautesiirtorekisterin ja 64-bittisen muistin M sisällön sekoittamiseksi. 128-bittisen funktion argumentti F on muodostuu kolmen siirtorekisterin sanan lineaarisena yhdistelmänä epälineaarisella takaisinkytkellä, täsmälleen a ‖ b ‖ c ‖ d = (W 0 ⊕ W 6 ⊕ W 7 ). Lisäksi e ‖ f = M.
Piiri kellotetaan siten, että W 7 ohitetaan hetkellä t, joten W i t+1 = W t i-1 , 0 ≤ i ≤ 7. W 0 t+1 :n sisällön muodostava 128-bittinen palautesana on saatu lisäämällä modulo 2 W 0 t 0 c (a ' ‖ b ' ‖ c ' ‖ d ' ). Loput kaksi 32-bittistä sanaa ketjutetaan ja niitä käytetään muistin päivittämiseen: e ' ‖ f ' = M.
Suojatakseen hyökkäyksiltä, jotka edellyttävät tietoa suuresta määrästä avainvirran elementtejä, ja tuntemattomilta tulevilta hyökkäyksiltä kullekin K- ja IV-parille voidaan luoda enintään 2 64 bittiä avainvirtaa.
Avainvirran generoinnin aikana 1024-bittinen epälineaarinen takaisinkytkentäsiirtorekisteri jaetaan 32:ksi 32-bittiseksi sanaksi Bi , 0 ≤ i ≤ 31. Prosessissa käytetään myös F-funktiota.
Jokaisessa iteraatiossa valitaan neljä 32 - bittistä tuloargumenttia F sanojen Bo, B9, B16 ja B19 epälineaarisesta takaisinkytkentäsiirtorekisteristä . Loput kaksi argumenttia ovat seurausta sanojen B 30 ja B 31 modulo 2 -lisäyksestä vastaavasti M L: n ja MR:n kanssa, missä M L ja MR ovat vastaavasti muistin M matalat ja korkeat sanat.
Epälineaarista takaisinkytkennän siirtorekisteriä siirretään kaksi bittiä, ja Bo ja B1 täytetään F-funktion lähdöistä b ' ja c ' vastaavasti palautetoiminnolla. 64-bittinen avainvirtasana z muodostuu ': n ja e ' :n ketjuttamisesta . 64-bittinen muisti M toimii laskurina avainvirran generoinnin aikana ja sitä kasvatetaan joka sykli.
Dragon-salaus on suunniteltu sekä laitteistoa että ohjelmistoa ajatellen.
Suorituskykyarvioita on tehty [4] , jotka osoittavat, että Dragon on varsin tehokas sekä suorituskyvyn että muistikustannusten suhteen.
Dragonin toteutus laitteistotasolla mahdollistaa korkean samansuuntaisuuden saavuttamisen. Toiminnot F-funktion kuudella syöttöargumentilla voidaan jakaa kolmeen ryhmään, joista jokaisessa käytetään kahta argumenttia. Esisekoitus ja jälkisekoitus toteutetaan 32-bittisten modulo-lisäinten avulla. G- ja H-funktiot toteutettiin käyttämällä LUT-taulukoita ja XOR-operaattoreita. Samsungin 0,13um ASIC -tekniikalla valmistettaessa 2,6 GHz:n kellotaajuudella pienin latenssi on 2,774 ns 23 Gbps:n suorituskyvyllä.
Laitteiston toteutuksen nopeuden parantamiseksi ehdotettiin erityistä laskentarakennetta [5] . Altera FPGA -laitteessa Dragonin tehokas toteutus saavuttaa 1,06 Gbps:n suorituskyvyn.
Vuonna 2005 Hakan Englund ja Alexander Maximov suorittivat Dragonin luotettavuustutkimuksia [6] , paljastaen sen haavoittuvuuden. Samana vuonna salauksen kirjoittajat julkaisivat artikkelin [7] , jossa kiellettiin mahdollisuus hyödyntää tätä haavoittuvuutta tehokkaasti. Kuitenkin vuonna 2007 Joo Yeon Cho ja Josef Pieprzyk paransivat aiemmin ehdotettua hyökkäystekniikkaa [8] . Ja vaikka tällainen hyökkäys ei käytännössä ole käytännössä mahdollista, tämä ei lisännyt salauksen mainetta.
Kävittyään läpi kaksi eSTREAM- kilpailun vaihetta , Dragon-salaus ei päässyt finaaliin ja hävisi vahvemmille kilpailijoille.