Rijndael S-box - Rijndael S-box

Rijndael S pole jest blok podstawień ( przeglądania tablicy ) stosowane w szyfru Rijndael, które Advanced Encryption Standard (AES) kryptograficzny Algorytm jest oparty.

S-box do przodu

AES S-box
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
10 może 82 c9 7d fa 59 47 f0 ogłoszenie d4 a2 af 9c a4 72 c0
20 b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
30 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
40 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
50 53 d1 00 Ed 20 fc b1 5b 6a cb być 39 4a 4c 58 por
60 d0 ef aaa pełne wyżywienie 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
70 51 a3 40 8f 92 9d 38 f5 pne b6 da 21 10 ff f3 d2
80 Płyta CD 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73
90 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
a0 e0 32 3a 0a 49 06 24 5c c2 d3 AC 62 91 95 e 4 79
b0 e7 c8 37 6d 8d d5 4e a9 6c 56 f4 tak 65 7a ae 08
c0 ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
d0 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
e0 e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 Ce 55 28 df
f0 8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 nocleg ze śniadaniem 16
Kolumna jest określana przez najmniej znaczący nibble , a wiersz przez najbardziej znaczący nibble. Na przykład wartość 9a 16 jest konwertowana na b8 16 .

S-box mapuje 8-bitowe wejście c na 8-bitowe wyjście s = S( c ) . Zarówno dane wejściowe, jak i wyjściowe są interpretowane jako wielomiany w GF(2) . Po pierwsze, dane wejściowe są mapowane na jego odwrotność multiplikatywną w GF(2 8 ) = GF(2) [ x ]/( x 8 + x 4 + x 3 + x + 1) , skończone pole Rijndaela . Zero, jako tożsamość, jest odwzorowane na siebie. Ta transformacja jest znana jako Nyberg S-box po jej wynalazcy Kaisie Nyberg . Odwrotność multiplikatywna jest następnie przekształcana za pomocą następującej transformacji afinicznej :

gdzie [ s 7 , …, s 0 ] to wyjście S-box a [ b 7 , …, b 0 ] to odwrotność multiplikatywna jako wektor.

Ta transformacja afiniczna jest sumą wielokrotnych obrotów bajtu jako wektora, gdzie dodawanie jest operacją XOR:

gdzie b reprezentuje odwrotność multiplikatywną, jest bitowym operatorem XOR , jest lewym bitowym przesunięciem kołowym , a stała 63 16 = 01100011 2 jest podana w systemie szesnastkowym .

Równoważnym sformułowaniem transformacji afinicznej jest

gdzie s , b i c to tablice 8-bitowe, c to 01100011 2 , a indeksy wskazują odwołanie do bitu indeksowanego.

Innym odpowiednikiem jest:

gdzie jest mnożenie wielomianu i przyjmuje się je jako tablice bitowe.

Odwrócony S-box

Odwrócony S-box
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 pełne wyżywienie
10 7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb
20 54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e
30 08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25
40 72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92
50 6c 70 48 50 fd Ed b9 da 5e 15 46 57 a7 8d 9d 84
60 90 d8 ab 00 8c pne d3 0a f7 e 4 58 05 b8 b3 45 06
70 d0 2c 1e 8f może 3f 0f 02 c1 af bd 03 01 13 8a 6b
80 3a 91 11 41 4f 67 dc tak 97 f2 por Ce f0 b4 e6 73
90 96 AC 74 22 e7 ogłoszenie 35 85 e2 f9 37 e8 1c 75 df 6e
a0 47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aaa 18 być 1b
b0 fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 Płyta CD 5a f4
c0 1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f
d0 60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef
e0 a0 e0 3b 4d ae 2a f5 b0 c8 eb nocleg ze śniadaniem 3c 83 53 99 61
f0 17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d

Odwrócony S-box to po prostu S-box działający w odwrotnej kolejności. Na przykład, odwrotna S pole b8 16 jest 9a 16 . Oblicza się go najpierw obliczając odwrotną transformację afiniczną wartości wejściowej, a następnie odwrotność mnożnikową. Odwrotna transformacja afiniczna wygląda następująco:

Odwrotna transformacja afiniczna reprezentuje również sumę wielokrotnych obrotów bajtu jako wektor, gdzie dodawanie jest operacją XOR:

gdzie jest bitowym operatorem XOR , jest lewym bitowym przesunięciem kołowym , a stała 5 16 = 00000101 2 jest podawana szesnastkowo .

Kryteria projektowe

Rijndael S-box został specjalnie zaprojektowany, aby był odporny na kryptoanalizę liniową i różnicową . Dokonano tego poprzez zminimalizowanie korelacji między liniowymi przekształceniami bitów wejścia/wyjścia, a jednocześnie zminimalizowanie prawdopodobieństwa propagacji różnicy.

Rijndael S-box można zastąpić szyfrem Rijndael, co eliminuje podejrzenie, że backdoor wbudowany w szyfr wykorzystuje statyczny S-box. Autorzy twierdzą, że struktura szyfru Rijndaela powinna zapewnić wystarczającą odporność na kryptoanalizę różnicową i liniową, jeśli zastosuje się S-box o „średnich” właściwościach korelacji/propagacji różnic.

Przykładowa implementacja w języku C

Poniższy kod C oblicza S-box:

#include <stdint.h>

#define ROTL8(x,shift) ((uint8_t) ((x) << (shift)) | ((x) >> (8 - (shift))))

void initialize_aes_sbox(uint8_t sbox[256]) {
	uint8_t p = 1, q = 1;
	
	/* loop invariant: p * q == 1 in the Galois field */
	do {
		/* multiply p by 3 */
		p = p ^ (p << 1) ^ (p & 0x80 ? 0x1B : 0);

		/* divide q by 3 (equals multiplication by 0xf6) */
		q ^= q << 1;
		q ^= q << 2;
		q ^= q << 4;
		q ^= q & 0x80 ? 0x09 : 0;

		/* compute the affine transformation */
		uint8_t xformed = q ^ ROTL8(q, 1) ^ ROTL8(q, 2) ^ ROTL8(q, 3) ^ ROTL8(q, 4);

		sbox[p] = xformed ^ 0x63;
	} while (p != 1);

	/* 0 is a special case since it has no inverse */
	sbox[0] = 0x63;
}

Bibliografia