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ő .
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.
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ó.
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.
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.
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.
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):
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 |
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:
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:
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 |
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:
{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:
{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} |
Ez a permutáció a kezdeti, azaz a fordítottja , és a következő táblázat adja meg:
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 |
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ó.
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.
Szimmetrikus titkosítási rendszerek | |
---|---|
Rejtjelfolyam adatfolyam | |
Feistel hálózat | |
SP hálózat | |
Egyéb |