SP-verkko
Salakirjoituksessa SP-verkko eli substitution-permutation network (SPN) on sarja toisiinsa liittyviä matemaattisia operaatioita, joita käytetään lohkosalausalgoritmeissa, kuten AES (Rijndael), 3-Way, Kalyna, Kuznyechik, PRESENT, SAFER, SHARK ja Square.
Tällainen verkko ottaa syötteenä selkotekstilohkon ja avaimen ja käyttää useita vuorottelevia "kierroksia" tai "kerroksia", jotka koostuvat korvauslaatikoista (S-laatikot) ja permutaatiolaatikoista (P-laatikot) salatekstilohkon tuottamiseksi. S- ja P-laatikot muuttavat syötettyjen bittien (ala)lohkot lähtöbiteiksi. Nämä muunnokset ovat yleensä operaatioita, jotka on tehokas suorittaa laitteistossa, kuten eksklusiivinen tai (XOR) ja bittikohtainen kierto. Avain otetaan käyttöön jokaisella kierroksella, yleensä siitä johdettujen "kierrosavainten" muodossa. (Joissain malleissa itse S-laatikot riippuvat avaimesta.)
Salaus puretaan yksinkertaisesti kääntämällä prosessi päinvastaiseksi (käyttämällä S- ja P-ruutujen käänteislukuja ja soveltamalla kierrosavaimia käänteisessä järjestyksessä).
S-laatikko korvaa pienen bittijoukon (S-laatikon tulo) toisella bittijoukolla (S-laatikon lähtö). Tämän korvaamisen pitäisi olla yksi yhteen, jotta varmistetaan käänteistettävyys (ja siten salauksen purku). Erityisesti ulostulon pituuden pitäisi olla sama kuin syötteen pituuden (oikealla olevassa kuvassa on S-laatikot, joissa on 4 tulo- ja 4 lähtöbittiä), mikä poikkeaa S-laatikoista yleensä, joissa pituus voi myös muuttua, kuten esimerkiksi DES:ssä (Data Encryption Standard). S-laatikko ei yleensä ole pelkkä bittien permutaatio. Pikemminkin hyvällä S-boxilla on sellainen ominaisuus, että yhden syöttöbitin muuttaminen muuttaa noin puolet tulobiteistä (eli lumivyöryilmiö). Sillä on myös ominaisuus, että jokainen lähtöbitti riippuu jokaisesta tulobitistä.
P-laatikko on kaikkien bittien permutaatio: se ottaa yhden kierroksen kaikkien S-laatikoiden ulostulot, muuttaa bitit ja syöttää ne seuraavan kierroksen S-laatikoihin. Hyvällä P-boxilla on ominaisuus, että minkä tahansa S-boxin lähtöbitit jaetaan mahdollisimman moneen S-boxin sisääntuloon.
Jokaisella kierroksella kierroksen avain (joka saadaan avaimesta yksinkertaisilla operaatioilla, esimerkiksi käyttämällä S- ja P-ruutuja) yhdistetään käyttämällä jotain ryhmäoperaatiota, tyypillisesti XOR-operaatiota.
Yksittäisellä tyypillisellä S- tai P-laatikolla ei ole yksinään suurta salausvoimaa: S-laatikkoa voidaan pitää substituutiosalakirjoituksena, kun taas P-laatikkoa voidaan pitää transpositio-salakirjoituksena. Hyvin suunniteltu SP-verkko, jossa on useita vuorottelevia S- ja P-laatikoiden kierroksia, täyttää kuitenkin jo Shannonin sekoitus- ja diffuusio-ominaisuudet:
- Syy diffuusioon on seuraava: P-laatikko jakaa kaikki nämä muutokset useisiin S-laatikoihin, jolloin kaikkien näiden S-laatikoiden ulostulot muuttuvat jälleen useiden bittien osalta, ja niin edelleen. Kun tehdään useita kierroksia, jokainen bitti muuttuu useita kertoja edestakaisin, joten lopussa salateksti on muuttunut täysin pseudosatunnaisesti. Jos satunnaisesti valitun syötelohkon i:nnen bitin kääntäminen tapahtuu, todennäköisyys, että j:nnen tulobitin muutos on noin puolet, kun i ja j ovat mitä tahansa, mikä on Strict Avalanche Criterion -kriteeri. Päinvastoin, jos yksi bitti salatusta tekstistä muutetaan ja sitä yritetään sitten purkaa, tuloksena on täysin erilainen viesti kuin alkuperäinen selkoteksti - SP-salakirjoitukset eivät ole helposti muokattavissa.
- Syy sekaannukseen on täsmälleen sama kuin diffuusioon: yhden avaimen bitin muuttaminen muuttaa useita kierroksen avaimia, ja jokainen muutos jokaisessa kierroksen avaimessa leviää kaikkiin bitteihin, mikä muuttaa salattua tekstiä hyvin monimutkaisella tavalla.
- Vaikka hyökkääjä saisikin jotenkin haltuunsa yhtä salatekstiä vastaavan selkotekstin - tunnetun selkotekstin hyökkäys tai vielä pahempaa, valittu selkoteksti- tai salateksti-hyökkäys - sekaannuksen ja hajonnan vuoksi hyökkääjän on vaikea saada avainta takaisin.
Vaikka Feistel-verkko, joka käyttää S-laatikoita (kuten DES), on melko samanlainen kuin SP-verkot, on joitakin eroja, jotka tekevät jommastakummasta vaihtoehdosta soveltuvamman tietyissä tilanteissa. Tietyn sekoituksen ja diffuusion määrän osalta SP-verkossa on enemmän "luontaista rinnakkaisuutta", joten se voidaan laskea nopeammin kuin Feistel-verkko, jos käytössä on prosessori, jossa on monia suoritusyksiköitä. Suoritinyksiköt, joissa on vähän suoritusyksiköitä - kuten useimmat älykortit - eivät voi hyödyntää tätä luontaista rinnakkaisuutta. Lisäksi SP-salaukset edellyttävät, että S-laatikot ovat käänteisiä (salauksen purkamiseksi); Feistelin sisäisillä funktioilla ei ole tällaista rajoitusta, ja ne voidaan rakentaa yksisuuntaisina funktioina.