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ä .
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.
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 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.
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ä.
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.
Tämä permutaatio on määritelty seuraavassa taulukossa, joka osoittaa paikan, johon vastaava bitti menee (esimerkiksi 32. bitti menee 1. paikkaan):
Alkuperäinen permutaatio0 | 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 |
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:
HakutaulukkoonS0: | 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 korvaustaulukkoInvS0: | 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 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} |
Tämä permutaatio on käänteinen alkuperäiselle, eli , ja se saadaan seuraavasta taulukosta:
Rajallinen permutaatio0 | 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 |
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.
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.
Symmetriset salausjärjestelmät | |
---|---|
Suoratoista salauksia | |
Feistelin verkko | |
SP verkko | |
muu |