IDEA kryptoalgoritmin laitteistosynteesi

IDEA -salausalgoritmin laitteistosynteesi . IDEA on symmetrinen lohkotietojen salausalgoritmi . _ Vuodelle 2019 IDEA on luotettava salausalgoritmi onnistuneiden lineaaristen kryptanalyyttisten hyökkäysten puutteen vuoksi . Sen käyttö kriittisissä sovelluksissa, kuten armeijassa, tai käyttö PGP -salausohjelmistopaketissa edellyttää tehokasta, erittäin turvallista ja oikeaa laitteistototeutusta.

IDEA:n luotettavuus

B. Schneier [1] ja A. Tanenbaum [2] pitävät IDEA:ta yhtenä turvallisimmista saatavilla olevista salausalgoritmeista. Itse asiassa IDEA:a vastaan ​​ei ole onnistuneita lineaarisia kryptanalyyttisiä hyökkäyksiä, eikä IDEA:ssa ole muita tunnettuja algebrallisia heikkouksia kuin J Daemenin [3] löytämät . Yoan Dimen suoritti hyökkäyksen käyttämällä 251 heikkoa avainta salauksen aikana, mikä helpotti avaimen löytämistä ja palauttamista. Koska mahdollisia avaimia on kuitenkin suuri määrä, tämä tulos ei vaikuta toimitetun salauksen salauksen käytännön turvallisuuteen.

Menneen vuoden laitteistototeutukset

Tämän salausalgoritmin laitteistototeutus on ollut aktiivisen kehittämisen alue.

Alla on yleisimmät toteutukset:

Esitteli FPGA-ytimen toteutuksen IDEA:lle [4] . He käyttivät yhden ytimen moduulia sisältävää järjestelmää IDEA:n toteuttamiseen, mikä tehtiin Xilinx FPGA :lla .

IDEA:n korkean suorituskyvyn toteutusta tutkittiin käyttäen sekä rinnakkais- että sarjaarkkitehtuuria [6] . He käyttivät Xilinx Virtex XCV300-6- ja XCV1000-6 FPGA:ita suorituskyvyn arviointiin ja analysointiin.

Viite [7] esitti SRC-6E:n ja HC-36:n yleiskäyttöisten tietokoneiden IDEA-toteutuksen vertailun.

IDEA:n toteutus

Seuraava toteutus on Ali E. Abdallahin ja Issam W. Damajin työtä [8] .

Selvennys: stream on menetelmä arvojen peräkkäiseen välittämiseen. Se tarkoittaa viestisarjaa kanavassa, ja jokainen viesti edustaa eri arvoa. Olettaen, että virta on päättynyt, viimeisen arvon lähettämisen jälkeen raportoidaan lähetyksen loppu (EOT).

Ajattele IDEA -algoritmia kolmena päälohkona. Näiden lohkojen yleinen näkymä näyttäisi salauksen (tai salauksen purkamisen) lohkona, jossa on 2 tuloa, yksityinen avain ja selväteksti (tai salateksti) ja salateksti (tai pelkkä teksti) -lähtö. Kaksi jäljellä olevaa lohkoa ovat salaus- ja salauksenpurkuosien luonti. Salausalaosastojen luomisen tapauksessa lohko hyväksyy yksityiset avaimet saapuvat ja tulostavat halutut alaosastot. Decryptionsubkeys -generaattori ruiskuttaa luodut salauksen aliavaimia ja tulostaa salauksenpurkuavaimet. Määrittelemme joitain tyyppejä, joita käytetään seuraavassa määrittelyssä (Seuraava koodi on kirjoitettu HDL :llä ):

tyyppi Yksityinen = [ Bool ] tyyppi SubKey = Int tyyppi Plaintext = [ Int ] tyyppi Salausteksti = [ Int ] modVal = 65536

IDEA:n perusrakennuspalikoita

• Bittikohtainen XOR

• 16-bittisten kokonaislukujen lisääminen modulo 65536 ( )

• Kerro 16-bittiset kokonaisluvut modulo 65537 ( ), jossa koko syötettyjen nollien lohkoa käsitellään muodossa .

Avaimen luominen

52 16-bittistä aliavainta luodaan 128-bittisestä salausavaimesta. Luontialgoritmi on seuraava:

• Ensimmäiset kahdeksan aliavainta valitaan suoraan avaimesta jakamalla avain (128-bittinen luettelo) kahdeksaan samanpituiseen segmenttiin (16-bittinen).

• Käytetään 25-bittisten paikkojen ympyräsiirtoa. edellisen vaiheen avaimeen ja sitten puretaan kahdeksan aliavainta.

• Tätä toimenpidettä toistetaan, kunnes kaikki 52 aliavainta on luotu, eli 8 kertaa ja 4 omistettua avainta viimeisessä vaiheessa.

Seuraavassa määrittelyssä aliavaimien luominen on generEncSubKeys  -toiminto, joka ottaa salausavaimen syötteenä ja tulostaa luettelon 52 16-bittisestä aliavaimesta. Se luo vastaavat aliavaimet kullekin vuorolle generoSubKeys-funktion avulla. Luodut avaimet yhdistetään sitten yhdeksi luetteloksi. Tämän jälkeen 52 aliavainta poimitaan luettelosta ja muunnetaan kokonaisluvuiksi, jotka vastaavat kutakin aliavainta edustavaa 16 elementin bool-luetteloa. Muunnos tehdään btoi-funktiolla:

generoEncSubKeys  :: Yksityinen -> [ SubKey ] generEncSubKeys avain = kartta ( btoi ) ( ota 52 ( foldr1 ( ++ ) ( map generoSubKeys ( ota 8 ( keyRotation avain ))))))

Kaikki siirretyt näppäimet määritetään keyRotation-toiminnolla, joka luo ne toistuvasti. Tämä funktio käyttää toistuvaa polymorfista funktiota , joka ottaa funktion f ja luettelon xs:stä ja käyttää toistuvasti funktiota f funktioon xs. Tässä tapauksessa se palauttaa avaimen toistuvasti 25-bittisin askelin. Siksi arvot ovat 0, 25, 50, 75, 100, 125:

keyRotation  :: Yksityinen -> Bool avainKiertonäppäin = ota 8 ( toistuva ( shift 25 ) näppäin ) toistuva :: ( a -> a ) - > a -> [ a ] ​​​​toistuva fx = x: toistuva f ( f x ) Shift : : Int -> [ a ] ​​​​-> [ a ] ​​Shift n - näppäin = ( pudota n - näppäin ) ++ ( ota n - näppäin )    

Jos haluat luoda 16-bittisiä aliavaimia siirretyistä avaimista, käytä generatorEncSubKeys-funktiota siirrettyjen avainten luettelossa olevaan generateSubKeys-funktioon. GenereSubKeys-funktio käyttää segsejä, jotka valitsevat n aliluetteloa luettelosta xs:

generoSubKeys  :: Yksityinen -> [ SubKey ] generoSubKeys avain = segs 16 avaimen segs  :: Int -> [ a ] ​​​​-> a segs n [] = [] segs n xs = ( ota n xs ) : segs n ( pudota n xs )

Lopuksi tarvittavat aliavaimet pakataan 6 elementin luetteloihin yhdessä funktiopaketin avulla:

pakkaus  :: [ a ] ​​- > pakkaus = segs 6

Salauksen purku

Kun olet luonut salauksen, harkitse salauksen purkamisen luomista, jossa jokainen salauksenpurkuosa on jonkin salauksen alaosion funktio. Salaus- ja salauksenpurkuavainten välinen suhde määritellään generateDecSubKeys-funktiossa. Tämä toiminto suoritetaan yhdistämällä toiminto valmisteltuun hakemistoluetteloon. Suorita-funktio käyttää addInv- ja mulInv-funktioita, jotka vastaavat additiivista ja kertovan käänteistä. Tämä toiminto käyttää myös korkeamman asteen toimintoja, jotka ottavat funktioluettelon ja arvoluettelon ja käyttävät (käytä toimintoa) jokaista ensimmäisen luettelon funktiota vastaavaan arvoon toisessa luettelossa (käyttämällä korkeamman asteen funktiota zipWith) :

generDecSubKeys  :: [ SubKey ] -> [ SubKey ] generateDecSubKeys eKeys = ota 52 ( foldr1 ( ++ ) ( kartoitetaan indeksit )) , missä indeksit = mapWith fs ( kartta käänteinen ( käänteinen [ l | l < - [ 0 .. 51 ]]))) f1 ( xs ) = siirto 2 xs f2 ( xs ) = zipWith ( + ) ( kopioi ( xs !! 2 ) 6 ) [ 0 , 2 , 1 , 3 , - 2 , - 1 ] f3 = idfs = [ f1 , f2 , f2 , f2 , f2 , f2 , f2 , f2 , f3 ] suorittaa ( as ) = mapWith [ mulInv , addInv , addInv , mulInv , id , id ]( zipWith ( !! ) ( 6 kopiota e ) as ) kopio :: a -> Int -> [ a ] ​​​​kopio x n = [ x | minä <- [ 1. . n ]] karttaKanssa :: [( a -> b )] -> [ a ] ​​​​-> [ b ] karttaKanssa fs = zipKanssa ( soveltaa ) fs soveltaa :: ( a -> b ) -> a -> b soveltaa f = f      

Määrittelemme additiivinen käänteinen aritmeettinen operaatio (modulo ) ja kertova käänteinen aritmeettinen operaatio (modulo ), jotka ovat addInv ja mulInv funktioita. AddInv-funktio syöttää yksinkertaisesti luvun, joka vähennetään modulo-arvosta:

addInv  :: Int -> Int addInv a = modVal - a

Kertovan käänteisen aritmeettisen operaation laskemiseen käytetään laajennettua euklidista algoritmia [9] . Toiminnallinen erittely näyttää tältä:

mulInv  :: Int -> IntmulInv 0 = 0 mulInv b = jos ( y < 0 ) sitten (( modVal + 1 ) + y ) else ( y ) missä y = ( laajennettuEucA ( modVal + 1 ) b ) !! 2 laajennettuEucA :: Int -> Int -> [ Int ] laajennettuEucA a b | b == 0 = [ a , 1 , 0 ] | muuten = iterateSteps [ a , b , 0 , 1 , 1 , 0 ] iterateSteps ls = if (( ls [ 1 ]) > 0 ) then ( iterateSteps s2 ) else ([( ls [ 0 ]), ( ls [ 3 ] ), ( ls [ 5 ])]) , jossa s1 = ( vaihe1 ls ) s2 = ( vaihe 2 [( ls [ 1 ]), ( s1 [ 1 ]), ( ls [ 2 ]), ( s1 [ 2 ]), ( ls [ 4 ]), ( s1 [ 3 ])]) vaihe 1 :: [ Int ] -> [ Int ] vaihe1 ls1 = [ q , ( ls1 [ 0 ]) - ( q * ( ls1 [ 1 ])), ( ls1 [ 3 ]) - ( q * ( ls1 [ 2 ])), ( ls1 [ 5 ]) - ( q * ( ls1 [ 4 ]))] missä q = div ( ls1 [ 0 ]) ( ls1 [ 1 ) ]) step2 :: [ Int ] -> [ Int ] step2 ls1 = [( ls1 [ 0 ]), ( ls1 [ 1 ]), ( ls1 [ 3 ]), ( ls1 [ 2 ]), ( ls1 [ 5 ] ), ( ls1 [ 4 ])]

Suorituskyvyn analysointi ja arviointi

Tulokset eri salausrakenteille (salauksen purku) kuvastavat suorituskyvyn muutosta. Ensimmäinen testi on nopein maksimiläpäisynopeudella 21,33 Gbps (keskimääräinen kapasiteetti 21,5 Mbps), joka havaittiin testattaessa satunnaisia ​​syöttövektoreita avaimella = {1, 2, 3, 4, 5, 6, 7, kahdeksan}. Toisella testillä, joka vastaa kierrosten peräkkäistä suorittamista, on odotettu hitain suorituskyky (maksimiläpäisynopeus 5,82 Gbps ja keskimääräinen 19,53 Mbps). On syytä huomata, että modulaaristen aritmeettisten operaatioiden erilaiset toteutukset vaikuttavat merkittävästi IDEA:n suorituskykyyn.

Vertailu muihin toteutuksiin

Toteutus Xilinx FPGA : lla (Davor Runje ja Mario Kovač) on suorituskyvyltään paljon huonompi, mikä johtuu myös erillisen virtalähteen käytöstä PCI -paikoissa (I/O-virtajohdot ja laajennuskorttien päälogiikka on erotettu toisistaan estää ohjaimen vahingoittumisen).

KH Tsoi, PHW Leong esitteli tehokkaamman toteutuksen, joka perustuu Xilinx Virtex XCV300-6 FPGA:han. Mutta jälleen kerran, suorituskyky ei ollut korkeimmalla tasolla ja jäi Ali E. Abdallahin ja Issam W. Damajin toteutuksesta suuruusluokkaa MHz, kun taas bittisarjatoteutus tarjoaa 600 Mbps taajuudella 150 MHz. Bittirinnakkais- ja bittisarjatoteutuksen laskettu suorituskyky XCV1000-6-laitteella on 5,25 Gb/s ja 2,40 Gb/s [10] .

Allen Michalski, Kris Gaj ja Tarek El-Ghazawi saivat tulokset 2,5 MB/s - Crypto++-käsittelyn suoritusteho. SRC-alustan laitteiston käsittelynopeus on 18,5 kertaa nopeampi yksittäisille tietoryhmille ja noin 24 kertaa nopeampi jatkuvalle taulukoille.

Muistiinpanot

  1. Anthony J. Farrell. Prado, Martial. Käytännön espanjan kielioppi: Itseoppimisopas. New York: John Wiley & Sons, 1983; Prado, Martial. Käytännöllisempi espanjan kielioppi: Itseopiskeluopas. New York: John Wiley & Sons, 1984 Prado, Marcial. Käytännön espanjan kielioppi: Itseoppimisopas. New York: John Wiley & Sons, 1983. Ss. viii, 360; Prado, Martial. Käytännöllisempi espanjan kielioppi: Itseopiskeluopas. New York: John Wiley & Sons, 1984. Ss. vi, 378.  Canadian Modern Language Review. - 1985-01. - T. 41 , no. 3 . — S. 587–588 . - ISSN 1710-1131 0008-4506, 1710-1131 . - doi : 10.3138/cmlr.41.3.587 .
  2. A. Tanenbaum. Tietokoneverkot. Prentice Hall, Upper Saddle River, NJ, kolmas painos, 1997
  3. J. Daemen, R. Govaerts ja J. Vandewalle. IDEA:n heikot avaimet. Springer-Verlag, sivut 224-231, 1994
  4. D. Runje ja M. Kovac. Universaali vahvan salauksen FPGA-ydintoteutus. Julkaisussa Proceedings of Design, Aautomaatio ja Test in Europe, sivut 923-924, 1998
  5. Kompromissit kansainvälisen datan salausalgoritmin IDEA rinnakkais- ja sarjatoteutuksissa .
  6. OYH Cheung, KH Tsoi, PHW Leong ja kansanedustaja Leong. Kompromissit kansainvälisen datan salausalgoritmin IDEA rinnakkais- ja sarjatoteutuksissa. Tietojenkäsittelytieteen luentomuistiinpanot, 2162:333, 2001
  7. Allen Michalski, Kris Gaj ja Tarek El-Ghazawi. Idea-salaussalausjärjestelmän toteutusvertailu kahdessa yleiskäyttöisessä uudelleenkonfiguroitavassa tietokoneessa. Kenttäohjelmoitava logiikka ja sovellukset: 13th International Conference, FPL, Lecture Notes in Computer Science, sivut 204-219, Lissabon - Portugali, 2003. Springer
  8. IDEA-salausalgoritmin uudelleenkonfiguroitava laitteistosynteesi Ali E. ABDALLAH ja Issam W. DAMAJ Tietojenkäsittelyn tutkimuslaitos, Iso-Britannia
  9. Jean-Luc Beuchat. Modulaarinen kertolasku IDEA-lohkosalauksen FPGA-toteutukseen. Teoksessa Ed Deprettere, Shuvra Bhattacharyya, Joseph Cavallaro, Alain Darte ja Lothar Thiele, toimittajat, Proceedings of the 14th IEEE International Conference on Application-Specific Systems, Architectures, and Processors, sivut 412-422. IEEE Computer Society, 2003
  10. Kansainvälisen datan salausalgoritmin IDEA:n rinnakkais- ja sarjatoteutukset .