Kígyó

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. november 20-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .
Kígyó
Teremtő Ross Anderson , Eli Biham , Lars Knudsen
Létrehozva 1998
közzétett 1998
Kulcsméret 128/192/256 bit
Blokkméret 128 bites
A körök száma 32
Típusú SP hálózat

A kígyó (latinul kígyó) egy szimmetrikus blokk- rejtjel .

Tervezte: Ross Anderson , Eli Biham és Lars Knudsen . A szerzők néhány korábbi fejlesztése az állatok tiszteletére is viselt nevet, például Tigris, Medve.

Az algoritmus az AES verseny 2. szakaszának egyik döntőse volt . Az AES verseny többi algoritmusához hasonlóan a Serpent blokkmérete 128 bit, a kulcsok lehetséges hossza pedig 128, 192 vagy 256 bit. Az algoritmus egy 32 körből álló SP hálózat , amely négy 32 bites szóból álló blokkon működik. A Serpent úgy lett megtervezve, hogy minden műveletet párhuzamosan lehessen végrehajtani 32 db 1 bites "szálon".

A Serpent a többi AES -döntősnél konzervatívabban közelítette meg a biztonságot , a rejtjeltervezők úgy vélték, hogy 16 kör elég ahhoz, hogy ellenálljon az ismert kriptográfiai módszereknek, de a körök számát 32-re emelték, hogy az algoritmus jobban ellenálljon a még ismeretlen kriptográfiai módszereknek.

Az AES verseny döntőseként a Serpent algoritmus 2. helyezést ért el a szavazás eredményeként.

A Serpent titkosítás nem szabadalmaztatott , és nyilvánosan hozzáférhető .

Alapelvek

Az algoritmust a "21. század kriptográfiai algoritmusa" szlogen alatt hozták létre az AES versenyen való részvétel céljából . Az új Serpent algoritmus létrehozásakor a szerzők a konzervatív tervezési nézetekhez ragaszkodtak, amit megerősít az a kezdeti döntés, hogy a sok évvel korábban ismert DES titkosítási algoritmus helyettesítő táblázatait használják , amelyet hosszú ideig a terület vezető szakértői tanulmányoztak. kriptográfia és információbiztonság, és amelyek tulajdonságait és jellemzőit jól ismerték a tudományos világ. Ugyanakkor a DES számára már kidolgozott kimerítő elemzés alkalmazható volt az új algoritmusra is. Új, nem tesztelt és nem tesztelt technológiákat nem használtak fel olyan titkosítás létrehozására, amelyet elfogadásuk esetén hatalmas mennyiségű pénzügyi tranzakció és kormányzati információ védelmére használnának. Az AES versenyzőivel szemben a fő követelmény az volt, hogy a pályázó algoritmusnak gyorsabbnak kell lennie a 3DES -nél , és legalább ugyanolyan szintű biztonságot kell nyújtania: 128 bites adatblokkkal és 256 bites kulccsal kell rendelkeznie. Egy 16 körös Serpent ugyanolyan megbízható lenne, mint egy 3DES, de kétszer olyan gyors. A szerzők azonban úgy vélték, hogy a nagyobb biztonság érdekében érdemes lenne a körök számát 32-re növelni, így a titkosítás olyan gyors lett, mint a DES, és sokkal biztonságosabb, mint a 3DES.

Algoritmus szerkezete

A Serpent algoritmus egy SP-net , amelyben minden körben a teljes 128 bites adatblokk 4, egyenként 32 bites szóra van felosztva. A titkosításban használt összes érték bitfolyamként jelenik meg. A bitindexek 0 és 31 között futnak 32 bites szavak esetén, 0 és 127 között 128 bites blokkok esetén, 0 és 255 között 256 bites kulcsok esetén, és így tovább. A belső számításokhoz az összes értékbit közvetlen sorrendben (little-endian) van ábrázolva.

A Serpent egy 128 bites P egyszerű szöveget 128 bites C titkosított szöveggé titkosít 32 körben, 33 128 bites alkulccsal. A használt kulcs hossza különböző értékeket vehet fel, de a konkrétumok érdekében a hosszukat 128, 192 vagy 256 bitben rögzítjük. A 256 bitnél rövidebb billentyűk teljes hossza 256 bit.

A titkosítás a következő alapvető lépésekből áll:

A kezdeti és a végső permutációnak nincs kriptográfiai jelentősége. Ezeket az algoritmus optimalizált megvalósításának egyszerűsítésére és a számítási hatékonyság javítására használják.

Titkosító algoritmus szerkezeti egyenletek:

,

ahol

,

A dekódoló algoritmus szerkezeti egyenletei:

,

ahol

,

ahol a titkosítás, illetve a visszafejtés kerek függvényei vannak,  a helyettesítési táblázat 32-szeres párhuzamos alkalmazása, és  egy lineáris transzformáció.

Dekódolás

A visszafejtés csak abban különbözik a titkosítástól, hogy inverz (fordított) helyettesítési táblázatokat kell használni, valamint inverz lineáris transzformációkat, de csak az R körfüggvényhez. A kulcsok fordított sorrendben kerülnek megadásra. A visszafejtési körfüggvény bitműveleteinek (beleértve a helyettesítéseket és permutációkat) a titkosítási körfüggvény bitműveleteinek fordított sorrendjében kell történniük.

Kulcskiterjesztés

Az AES verseny többi algoritmusához hasonlóan a Serpent kulcshossza 128, 192 vagy 256 bit lehet. A 256 bitnél rövidebb „hiányos” kulcsot a következő szabály szerint töltjük ki: egy bitet adunk jobbra, majd annyi nulla bitet, hogy a kulcs hossza 256 bit lesz.

Algoritmus alkulcsok kiválasztásához egy kulcsból

Először, ha szükséges, a kulcsot 256 bitesre párosítjuk, és 33 128 bites alkulccsá alakítjuk át a következő módon:

A kezdeti kulcs 8 32 bites szóként jelenik meg a köztes kulcs kiszámításához a szabály szerint:

,

ahol  az aranymetszés tört része , vagy 0x9e3779b9 hexadecimális formában , és  a ciklikus biteltolódás .

A kerek kulcsok kiszámítása a közbenső kulcsokból a következő keresési táblázatok segítségével történik :

A közbenső 32 bites értékeket átszámozzák, és 128 bites alkulcsokat kapnak:

Az algoritmus standard leírásában egy kezdeti permutációt kell alkalmaznunk a kerek kulcsra, hogy a kulcs bitjeit a megfelelő sorrendbe rendezzük, pl.

Kezdeti permutáció

Ezt a permutációt a következő táblázat határozza meg, amely jelzi, hogy a megfelelő bit milyen pozícióba kerül (például a 32. bit az 1. pozícióba kerül):

Kezdeti permutáció
0 32 64 96 egy 33 65 97 2 34 66 98 3 35 67 99
négy 36 68 100 5 37 69 101 6 38 70 102 7 39 71 103
nyolc 40 72 104 9 41 73 105 tíz 42 74 106 tizenegy 43 75 107
12 44 76 108 13 45 77 109 tizennégy 46 78 110 tizenöt 47 79 111
16 48 80 112 17 49 81 113 tizennyolc ötven 82 114 19 51 83 115
húsz 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 harminc 62 94 126 31 63 95 127

S-boxok (helyettesítő táblázatok)

A Serpent algoritmusban a helyettesítő táblák 4 bites permutációk, amelyek a differenciál kriptográfiai elemzéssel , a lineáris kriptoanalízissel szembeni ellenállás tulajdonságokkal rendelkeznek , és az a tulajdonság, hogy a kimeneti bitek sorrendjének a bemenet függvényében maximálisnak kell lennie, azaz egyenlő 3-mal.

A keresési táblázatot a DES algoritmus ismert és jól tanulmányozott tábláiból állítják elő egy iteratív folyamatban, amíg a kívánt differenciális és lineáris tulajdonságokat meg nem kapjuk. Így 8 keresőtábla jön létre.

Az alábbiakban a keresési táblázatok találhatók:

Keresési táblázat
S0: 3 nyolc tizenöt egy tíz 6 5 tizenegy tizennégy 13 négy 2 7 0 9 12
S1: tizenöt 12 2 7 9 0 5 tíz egy tizenegy tizennégy nyolc 6 13 3 négy
S2: nyolc 6 7 9 3 12 tíz tizenöt 13 egy tizennégy négy 0 tizenegy 5 2
S3: 0 tizenöt tizenegy nyolc 12 9 6 3 13 egy 2 négy tíz 7 5 tizennégy
S4: egy tizenöt nyolc 3 12 0 tizenegy 6 2 5 négy tíz 9 tizennégy 7 13
S5: tizenöt 5 2 tizenegy négy tíz 9 12 0 3 tizennégy nyolc 13 6 7 egy
S6: 7 2 12 5 nyolc négy 6 tizenegy tizennégy 9 egy tizenöt 13 3 tíz 0
S7: egy 13 tizenöt 0 tizennégy nyolc 2 tizenegy 7 négy 12 tíz 9 3 5 6

És inverz keresési táblázatok:

Inverz helyettesítési táblázat
InvS0: 13 3 tizenegy 0 tíz 6 5 12 egy tizennégy négy 7 tizenöt 9 nyolc 2
InvS1: 5 nyolc 2 tizennégy tizenöt 6 12 3 tizenegy négy 7 9 egy 13 tíz 0
InvS2: 12 9 tizenöt négy tizenegy tizennégy egy 2 0 3 6 13 5 nyolc tíz 7
InvS3: 0 9 tíz 7 tizenegy tizennégy 6 13 3 5 12 2 négy nyolc tizenöt egy
InvS4: 5 0 nyolc 3 tíz 9 7 tizennégy 2 12 tizenegy 6 négy tizenöt 13 egy
InvS5: nyolc tizenöt 2 9 négy egy 13 tizennégy tizenegy 6 5 3 7 12 tíz 0
InvS6: tizenöt tíz egy 13 5 3 6 0 négy 9 tizennégy 7 2 12 nyolc tizenegy
InvS7: 3 0 6 13 9 tizennégy tizenöt nyolc 5 12 tizenegy 7 tíz egy négy 2

Lineáris transzformáció

A lineáris transzformációt a következő táblázat adja meg, ahol a bitek 0-tól 127-ig vannak felsorolva (például a 2. kimeneti bitet 2, 9, 15, 30, 76, 84, 126 bit modulo 2 alkotja). Minden sor 4 kimeneti bitet ír le, amelyek együtt alkotják a bemenetet egy helyettesítő táblázathoz a következő körben. Meg kell jegyezni, hogy ez a halmaz egy táblázat , ahol a lineáris transzformáció.

Lineáris konverziós táblázat:

Lineáris transzformáció
{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} { 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} { 3 18 72 114 118 125 } {24 78 91}
{8 44 48 62 75 86 97} {64 106 117} { 1 7 22 76 118 122 } {28 82 95}
{12 48 52 66 79 90 101} {68 110 121} { 5 11 26 80 122 126 } {32 86 99}

A visszafejtéshez használt inverz lineáris transzformáció táblázata:

Inverz lineáris transzformáció
{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}
{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} {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}

Végső permutáció

Ez a permutáció a kezdeti, azaz a fordítottja , és a következő táblázat adja meg:

Véges permutáció
0 négy nyolc 12 16 húsz 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
egy 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 tíz tizennégy tizennyolc 22 26 harminc 34 38 42 46 ötven 54 58 62
66 70 74 78 82 86 90 94 98 102 106 110 114 118 122 126
3 7 tizenegy tizenöt 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

Hatékony megvalósítás

A szerzők azon vágya, hogy az algoritmust pontosan olyanná tegyék, amilyen, a hatékony alacsony szintű implementáció mérlegelésekor válik világossá .

A Serpent úgy lett megtervezve, hogy egy blokk titkosításának és visszafejtésének folyamatában az összes műveletet párhuzamosan lehessen végrehajtani 32 szálon. Ráadásul az algoritmus alacsony szintű leírása sokkal egyszerűbb, mint a standard leírás. Nincs szükség kezdeti és végső permutációra.

A titkosítás 32 körből áll. A nyílt szöveg az első köztes adat . Ezután 32 kört hajtanak végre, minden i kör a következőkből áll:

A 32 bites szavak a következőképpen konvertálódnak:

,

ahol a ciklikus biteltolódást jelöli , és  a biteltolást . Az utolsó körben ezt a lineáris transzformációt egy további kulcsos keverés váltja fel

Az első ok egy ilyen lineáris transzformáció választására a lavinahatás maximalizálása . Az ilyen keresőtáblák azzal a tulajdonsággal rendelkeznek, hogy minden bemeneti bit megváltoztatása 2 kimeneti bitet változtat meg. Így a nyílt szöveg minden bemeneti bitje már 3 kör után hatással van az összes kimeneti bitre. Hasonlóképpen, a kulcs minden bitje befolyásolja a titkosítás eredményét.

A második ok az átalakítás egyszerűsége. Minimális költséggel bármilyen modern processzoron megvalósítható.

Biztonság és kriptográfiai erősség

A Serpent algoritmus fejlesztése és elemzése során a teljes 32 körös verzióban nem azonosítottak sebezhetőséget. De az AES verseny győztesének kiválasztásakor ez a többi döntős algoritmusra is igaz volt.

A Serpent megalkotói szerint az algoritmust csak akkor lehet megtörni, ha létrejön egy új, erőteljes matematikai elmélet.

Érdemes megjegyezni, hogy egy XSL-támadás , ha hatékonynak bizonyul, gyengítené a Serpent biztonságát.

Irodalom

Linkek