Käärme

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 20. marraskuuta 2019 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .
Käärme
Luoja Ross Anderson , Eli Biham , Lars Knudsen
Luotu 1998
julkaistu 1998
Avaimen koko 128/192/256 bittiä
Lohkon koko 128 bittinen
Kierrosten lukumäärä 32
Tyyppi SP verkko

Serpent (latinaksi käärme) on symmetrinen lohkosalaus .

Suunnittelijat Ross Anderson , Eli Biham ja Lars Knudsen . Jotkut kirjoittajien aikaisemmat kehitystyöt kantoivat myös nimiä eläinten kunniaksi, esimerkiksi Tiger, Bear.

Algoritmi oli yksi AES - kilpailun 2. vaiheen finalisteista . Kuten muutkin AES-kilpailun algoritmit, Serpentin lohkokoko on 128 bittiä ja mahdolliset avainten pituudet 128, 192 tai 256 bittiä. Algoritmi on 32-kierroksen SP-verkko , joka toimii neljän 32-bittisen sanan lohkolla. Serpent on suunniteltu niin, että kaikki toiminnot voidaan suorittaa rinnakkain käyttämällä 32 1-bittistä "säiettä".

Serpent suhtautui turvallisuuteen konservatiivisemmin kuin muut AES -finalistit , salaussuunnittelijat katsoivat, että 16 kierrosta riitti kestämään tunnetut kryptausanalyysimenetelmät , mutta nostivat kierrosten määrän 32:een, jotta algoritmi kestäisi paremmin vielä tuntemattomia kryptausanalyysimenetelmiä.

AES-kilpailun finalistiksi tullessaan Serpent-algoritmi sijoittui äänestyksen tuloksena 2. sijalle.

Serpent-salausta ei ole patentoitu ja se on julkisessa käytössä .

Perusperiaatteet

Algoritmi luotiin iskulauseella "21. vuosisadan salausalgoritmi" osallistumista varten AES -kilpailuun . Uutta Serpent-algoritmia luodessaan sen tekijät noudattivat konservatiivisia näkemyksiä suunnittelusta, minkä vahvistaa alkuperäinen päätös käyttää korvaustaulukoita monta vuotta aiemmin tunnetusta DES -salausalgoritmista , jota alan johtavat asiantuntijat tutkivat pitkään. kryptografiasta ja tietoturvasta ja joiden ominaisuudet ja ominaisuudet olivat tiedemaailman hyvin tuntemia. Samalla DES:lle jo kehitettyä kattavaa analyysiä voitaisiin soveltaa uuteen algoritmiin. Uusia, testaamattomia ja testaamattomia tekniikoita ei käytetty salauksen luomiseen, jota käytettäisiin, jos se hyväksyttäisiin, suojaamaan valtavia määriä rahoitustapahtumia ja valtion tietoja. Päävaatimus AES-kilpailijoille oli, että hakijan algoritmin tulee olla nopeampi kuin 3DES ja tarjota vähintään samantasoinen suojaus: siinä on oltava 128-bittinen tietolohko ja 256-bittinen avain. 16-kierroksen käärme olisi yhtä luotettava kuin 3DES, mutta kaksi kertaa nopeampi. Kirjoittajat katsoivat kuitenkin, että kierrosten lukumäärää kannattaisi lisätä turvallisuuden vuoksi 32. Tämä teki salauksesta yhtä nopean kuin DES ja paljon turvallisemman kuin 3DES.

Algoritmin rakenne

Serpent-algoritmi on SP-verkko , jossa jokaisen kierroksen koko 128-bittinen datalohko on jaettu neljään 32-bittiseen sanaan. Kaikki salauksessa käytetyt arvot esitetään bittivirroina. Bittiindeksit ovat 0-31 32-bittisille sanoille, 0-127 128-bittisille lohkoille, 0-255 256-bittisille avaimille ja niin edelleen. Sisäisissä laskelmissa kaikki arvobitit esitetään suorassa järjestyksessä (little-endian).

Serpent salaa 128-bittisen P - selkätekstin 128-bittiseksi salatekstiksi C 32 kierroksella 33 128-bittisellä aliavaimella. Käytettävän avaimen pituus voi saada erilaisia ​​arvoja, mutta tarkennuksia varten määritämme niiden pituudeksi 128, 192 tai 256 bittiä. Alle 256 bitin lyhyet näppäimet on pehmustettu 256 bitin täyspituudeksi.

Salaus koostuu seuraavista päävaiheista:

Alku- ja loppupermutaatioilla ei ole mitään kryptografista merkitystä. Niitä käytetään yksinkertaistamaan algoritmin optimoitua toteutusta ja parantamaan laskennan tehokkuutta.

Salausalgoritmin rakenneyhtälöt:

,

missä

,

Salauksenpurkualgoritmin rakenneyhtälöt:

,

missä

,

missä ovat salauksen ja salauksen purkamisen pyöreät funktiot,  on korvaustaulukon soveltaminen 32 kertaa rinnakkain, ja  se on lineaarinen muunnos.

Salauksen purku

Salauksen purku eroaa salauksesta vain siinä, että tulee käyttää käänteisiä (käänteisiä) korvaustaulukoita sekä käänteisiä lineaarisia muunnoksia, mutta vain pyöreälle funktiolle R. Avaimet toimitetaan käänteisessä järjestyksessä. Salauksenpurkukierrosfunktion bittitoimintojen (mukaan lukien korvaukset ja permutaatiot) tulee edetä käänteisessä järjestyksessä kuin salauskierrosfunktion bittitoiminnot.

Avaimen laajennus

Kuten muutkin AES -kilpailun algoritmit , Serpentillä on mahdolliset avainten pituudet 128, 192 tai 256 bittiä. Alle 256 bitin pituinen ”epätäydellinen” avain täytetään seuraavan säännön mukaan: oikealle lisätään yksi bitti ja sen jälkeen niin monta nollabittiä, että avaimen pituudeksi tulee 256 bittiä.

Algoritmi aliavaimien valitsemiseksi avaimesta

Ensin tarvittaessa avain täytetään 256-bittisiksi ja muunnetaan 33 128-bittisiksi aliavaimiksi seuraavalla tavalla:

Alkuavain esitetään 8 32-bittisenä sanana väliavaimen laskemiseksi säännön mukaisesti:

,

missä on kultaisen suhteen  murto-osa eli 0x9e3779b9 heksadesimaalimuodossa ja  on syklinen bittisiirto .

Pyöreät avaimet lasketaan väliavaimista käyttämällä hakutaulukoita seuraavasti:

32-bittiset väliarvot numeroidaan uudelleen ja saadaan 128-bittiset aliavaimia:

Algoritmin vakiokuvauksessa meidän on sovellettava pyöreän avaimen alkupermutaatiota , jotta avaimen bitit saadaan järjestykseen oikeaan järjestykseen, ts.

Alkuperäinen permutaatio

Tämä permutaatio on määritelty seuraavassa taulukossa, joka osoittaa paikan, johon vastaava bitti menee (esimerkiksi 32. bitti menee 1. paikkaan):

Alkuperäinen permutaatio
0 32 64 96 yksi 33 65 97 2 34 66 98 3 35 67 99
neljä 36 68 100 5 37 69 101 6 38 70 102 7 39 71 103
kahdeksan 40 72 104 9 41 73 105 kymmenen 42 74 106 yksitoista 43 75 107
12 44 76 108 13 45 77 109 neljätoista 46 78 110 viisitoista 47 79 111
16 48 80 112 17 49 81 113 kahdeksantoista viisikymmentä 82 114 19 51 83 115
kaksikymmentä 52 84 116 21 53 85 117 22 54 86 118 23 55 87 119
24 56 88 120 25 57 89 121 26 58 90 122 27 59 91 123
28 60 92 124 29 61 93 125 kolmekymmentä 62 94 126 31 63 95 127

S-laatikot (korvaustaulukot)

Serpent-algoritmissa korvaavat taulukot ovat 4-bittisiä permutaatioita, joiden ominaisuudet vastustavat differentiaalista kryptausanalyysiä , lineaarista kryptausanalyysiä ja ominaisuus, että lähtöbittien järjestyksen tulee olla maksimi tulon funktiona, eli yhtä kuin 3.

Hakutaulukko generoidaan tunnetuista ja hyvin tutkituista DES-algoritmin taulukoista iteratiivisessa prosessissa, kunnes halutut differentiaaliset ja lineaariset ominaisuudet saadaan. Näin luodaan 8 hakutaulukkoa.

Alla on hakutaulukot:

Hakutaulukkoon
S0: 3 kahdeksan viisitoista yksi kymmenen 6 5 yksitoista neljätoista 13 neljä 2 7 0 9 12
S1: viisitoista 12 2 7 9 0 5 kymmenen yksi yksitoista neljätoista kahdeksan 6 13 3 neljä
S2: kahdeksan 6 7 9 3 12 kymmenen viisitoista 13 yksi neljätoista neljä 0 yksitoista 5 2
S3: 0 viisitoista yksitoista kahdeksan 12 9 6 3 13 yksi 2 neljä kymmenen 7 5 neljätoista
S4: yksi viisitoista kahdeksan 3 12 0 yksitoista 6 2 5 neljä kymmenen 9 neljätoista 7 13
S5: viisitoista 5 2 yksitoista neljä kymmenen 9 12 0 3 neljätoista kahdeksan 13 6 7 yksi
S6: 7 2 12 5 kahdeksan neljä 6 yksitoista neljätoista 9 yksi viisitoista 13 3 kymmenen 0
S7: yksi 13 viisitoista 0 neljätoista kahdeksan 2 yksitoista 7 neljä 12 kymmenen 9 3 5 6

Ja käänteishakutaulukot:

Käänteinen korvaustaulukko
InvS0: 13 3 yksitoista 0 kymmenen 6 5 12 yksi neljätoista neljä 7 viisitoista 9 kahdeksan 2
InvS1: 5 kahdeksan 2 neljätoista viisitoista 6 12 3 yksitoista neljä 7 9 yksi 13 kymmenen 0
InvS2: 12 9 viisitoista neljä yksitoista neljätoista yksi 2 0 3 6 13 5 kahdeksan kymmenen 7
InvS3: 0 9 kymmenen 7 yksitoista neljätoista 6 13 3 5 12 2 neljä kahdeksan viisitoista yksi
InvS4: 5 0 kahdeksan 3 kymmenen 9 7 neljätoista 2 12 yksitoista 6 neljä viisitoista 13 yksi
InvS5: kahdeksan viisitoista 2 9 neljä yksi 13 neljätoista yksitoista 6 5 3 7 12 kymmenen 0
InvS6: viisitoista kymmenen yksi 13 5 3 6 0 neljä 9 neljätoista 7 2 12 kahdeksan yksitoista
InvS7: 3 0 6 13 9 neljätoista viisitoista kahdeksan 5 12 yksitoista 7 kymmenen yksi neljä 2

Lineaarinen muunnos

Lineaarinen muunnos esitetään seuraavassa taulukossa, jossa bitit on listattu välillä 0 - 127 (esim. lähtö 2 bitti muodostuu 2, 9, 15, 30, 76, 84, 126 bitistä modulo 2). Jokainen rivi kuvaa 4 lähtöbittiä, jotka yhdessä muodostavat syötteen yhdelle korvaavalle taulukolle seuraavalla kierroksella. On huomattava, että tämä joukko on taulukko , jossa on lineaarinen muunnos.

Lineaarinen muunnostaulukko:

Lineaarinen muunnos
{16 52 56 70 83 94 105} {72 114 125} { 2 9 15 30 76 84 126} {36 90 103}
{20 56 60 74 87 98 109} {1 76 118}{101} { 2 6 13 19 34 80 88} {40 94 107}
{24 60 64 78 91 102 113} {5 80 122} {6 10 17 23 38 84 92} {44 98 111}
{28 64 68 82 95 106 117} {9 84 126} {10 14 21 27 42 88 96} {48 102 115}
{32 68 72 86 99 110 121} {2 13 88} {14 18 25 31 46 92 100} {52 106 119}
{36 72 76 90 103 114 125} {6 17 92} {18 22 29 35 50 96 104} {56 110 123}
{ 1 40 76 80 94 107 118} {10 21 96} {22 26 33 39 54 100 108} {60 114 127}
{5 44 80 84 98 111 122} {14 25 100} {26 30 37 43 58 104 112} {3 118}
{ 9 48 84 88 102 115 126} {18 29 104} {30 34 41 47 62 108 116} { 7 122 }
{ 2 13 52 88 92 106 119} {22 33 108} {34 38 45 51 66 112 120} {11 126}
{6 17 56 92 96 110 123} {26 37 112} {38 42 49 55 70 116 124} {2 15 76}
{10 21 60 96 100 114 127} {30 41 116}{101} { 0 42 46 53 59 74 120} {6 19 80}
{ 3 14 25 100 104 118 } {34 45 120} { 4 46 50 57 63 78 124} {10 23 84}
{ 7 18 29 104 108 122 } {38 49 124} { 0 8 50 54 61 67 82} {14 27 88}
{11 22 33 108 112 126} 0 42 53} {4 12 54 58 65 71 86} {18 31 92}
{ 2 15 26 37 76 112 116} {4 46 57} {8 16 58 62 69 75 90} {22 35 96}
{6 19 30 41 80 116 120} {8 50 61} {12 20 62 66 73 79 94} {26 39 100}
{10 23 34 45 84 120 124} {12 54 65} {16 24 66 70 77 83 98} {30 43 104}
{ 0 14 27 38 49 88 124} {16 58 69} {20 28 70 74 81 87 102} {34 47 108}
{ 0 4 18 31 42 53 92} {20 62 73} {24 32 74 78 85 91 106} {38 51 112}
{ 4 8 22 35 46 57 96} {24 66 77} {28 36 78 82 89 95 110} {42 55 116}
{8 12 26 39 50 61 100} {28 70 81} {32 40 82 86 93 99 114} {46 59 120}
{12 16 30 43 54 65 104} {32 74 85} {36 90 103 118} {50 63 124}
{16 20 34 47 58 69 108} {36 78 89} {40 94 107 122} 0 54 67}
{20 24 38 51 62 73 112} {40 82 93} {44 98 111 126} {4 58 71}
{24 28 42 55 66 77 116} {44 86 97} { 2 48 102 115 } {8 62 75}
{28 32 46 59 70 81 120} {48 90 101} { 6 52 106 119 } {12 66 79}
{32 36 50 63 74 85 124} {52 94 105} {10 56 110 123} {16 70 83}
{ 0 36 40 54 67 78 89} {56 98 109} {14 60 114 127} {20 74 87}
{ 4 40 44 58 71 82 93} {60 102 113}{101} { 3 18 72 114 118 125 } {24 78 91}
{8 44 48 62 75 86 97} {64 106 117}{101} { 1 7 22 76 118 122 } {28 82 95}
{12 48 52 66 79 90 101} {68 110 121}{101} { 5 11 26 80 122 126 } {32 86 99}

Taulukko käänteisestä lineaarisesta muunnoksesta, jota käytetään salauksen purkamisessa:

Käänteinen lineaarinen muunnos
{53 55 72} { 1 5 20 90 } {15 102} { 3 31 90 }
{57 59 76} { 5 9 24 94 } {19 106} {7 35 94}
{61 63 80} { 9 13 28 98 } {23 110} {11 39 98}{101}
{65 67 84} {13 17 32 102} {27 114} { 1 3 15 20 43 102 }
{69 71 88} {17 21 36 106} {1 31 118} { 5 7 19 24 47 106 }
{73 75 92} {21 25 40 110} {5 35 122} { 9 11 23 28 51 110 }
{77 79 96} {25 29 44 114} {9 39 126} {13 15 27 32 55 114}
{81 83 100} { 1 29 33 48 118} {2 13 43} { 1 17 19 31 36 59 118}
{85 87 104} {5 33 37 52 122} {6 17 47} {5 21 23 35 40 63 122}
{89 91 108} {9 37 41 56 126} {10 21 51} {9 25 27 39 44 67 126}
{93 95 112} {2 13 41 45 60} {14 25 55} {2 13 29 31 43 48 71}
{97 99 116}{101} {6 17 45 49 64} {18 29 59} {6 17 33 35 47 52 75}
{101 103 120} {10 21 49 53 68} {22 33 63} {10 21 37 39 51 56 79}
{105 107 124} {14 25 53 57 72} {26 37 67} {14 25 41 43 55 60 83}
0 109 111} {18 29 57 61 76} {30 41 71} {18 29 45 47 59 64 87}
{4 113 115} {22 33 61 65 80} {34 45 75} {22 33 49 51 63 68 91}
{8 117 119} {26 37 65 69 84} {38 49 79} {26 37 53 55 67 72 95}
{12 121 123} {30 41 69 73 88} {42 53 83} {30 41 57 59 71 76 99}
{16 125 127} {34 45 73 77 92} {46 57 87} {34 45 61 63 75 80 103}
{1 3 20} {38 49 77 81 96} {50 61 91} {38 49 65 67 79 84 107}
{5 7 24} {42 53 81 85 100} {54 65 95} {42 53 69 71 83 88 111}
{9 11 28} {46 57 85 89 104} {58 69 99} {46 57 73 75 87 92 115}
{13 15 32} {50 61 89 93 108} {62 73 103} {50 61 77 79 91 96 119}
{17 19 36} {54 65 93 97 112} {66 77 107} {54 65 81 83 95 100 123}
{21 23 40} {58 69 97 101 116} {70 81 111} {58 69 85 87 99 104 127}
{25 27 44} {62 73 101 105 120} {74 85 115} { 3 62 73 89 91 103 108}
{29 31 48} {66 77 105 109 124} {78 89 119} { 7 66 77 93 95 107 112}
{33 35 52} { 0 70 81 109 113} {82 93 123} {11 70 81 97 99 111 116}
{37 39 56} {4 74 85 113 117} {86 97 127} {15 74 85 101 103 115 120}
{41 43 60} {8 78 89 117 121} {3 90} {19 78 89 105 107 119 124}
{45 47 64} {12 82 93 121 125} {7 94} { 0 23 82 93 109 111 123}
{49 51 68} { 1 16 86 97 125} {11 98} {4 27 86 97 113 115 127}

Lopullinen permutaatio

Tämä permutaatio on käänteinen alkuperäiselle, eli , ja se saadaan seuraavasta taulukosta:

Rajallinen permutaatio
0 neljä kahdeksan 12 16 kaksikymmentä 24 28 32 36 40 44 48 52 56 60
64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124
yksi 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61
65 69 73 77 81 85 89 93 97 101 105 109 113 117 121 125
2 6 kymmenen neljätoista kahdeksantoista 22 26 kolmekymmentä 34 38 42 46 viisikymmentä 54 58 62
66 70 74 78 82 86 90 94 98 102 106 110 114 118 122 126
3 7 yksitoista viisitoista 19 23 27 31 35 39 43 47 51 55 59 63
67 71 75 79 83 87 91 95 99 103 107 111 115 119 123 127

Tehokas toteutus

Kirjoittajien halu tehdä algoritmista täsmälleen sellainen kuin se on, käy selväksi, kun pohditaan sen tehokasta matalan tason toteutusta .

Serpent suunniteltiin siten, että kaikki toiminnot yhden lohkon salaus- ja salauksenpurkuprosessissa voitiin suorittaa rinnakkain 32 säikeessä. Lisäksi algoritmin matalan tason kuvaus on paljon yksinkertaisempi kuin vakiokuvaus. Alku- ja loppupermutaatioita ei vaadita.

Salaus koostuu 32 kierroksesta. Selkeä teksti on ensimmäinen välitieto . Sitten suoritetaan 32 kierrosta, joista jokainen i-kierros koostuu:

32-bittiset sanat muunnetaan seuraavasti:

,

jossa tarkoittaa syklistä bittisiirtoa ja  on bittisiirto . Viimeisellä kierroksella tämä lineaarinen muunnos korvataan ylimääräisellä avainsekoituksella

Ensimmäinen syy tällaisen lineaarisen muunnoksen valintaan on maksimoida lumivyöryvaikutus . Tällaisilla hakutaulukoilla on ominaisuus, että jokaisen tulobitin muuttaminen muuttaa 2 lähtöbittiä. Siten jokainen selkeän tekstin sisääntulobitti jo 3 kierroksen jälkeen vaikuttaa kaikkiin lähtöbitteihin. Samoin jokainen avaimen bitti vaikuttaa salaustulokseen.

Toinen syy on muuntamisen helppous. Se voidaan toteuttaa missä tahansa nykyaikaisessa prosessorissa pienin kustannuksin.

Turvallisuus ja kryptografinen vahvuus

Serpent-algoritmin kehittämisen ja analysoinnin aikana koko 32-kierroksen versiossa ei havaittu haavoittuvuuksia. Mutta kun valittiin AES -kilpailun voittaja , tämä piti paikkansa myös muiden finalistien algoritmien kohdalla.

Serpentin tekijöiden mukaan algoritmi voidaan rikkoa vain, jos luodaan uusi voimakas matemaattinen teoria.

On syytä huomata, että XSL-hyökkäys heikentäisi Serpentin turvallisuutta, jos se osoittautuu tehokkaaksi.

Kirjallisuus

Linkit