¿Cómo se construye una caja S en AES?

S-box y p-box son las tecnologías que se utilizan en algoritmos criptográficos.

Esta es solo una pequeña explicación sobre el S-box utilizado por el algoritmo criptográfico AES.

El cuadro S se genera determinando el inverso multiplicativo para un número dado en el campo de Galois de Rijndael. El inverso multiplicativo se transforma utilizando la siguiente matriz de transformación afín:

1 0 0 0 1 1 1 1
1 1 0 0 0 1 1 1
1 1 1 0 0 0 1 1
1 1 1 1 0 0 0 1
1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0
0 0 0 1 1 1 1 1

Esta transformación afín también se puede calcular mediante el siguiente algoritmo:

  1. Almacene el inverso multiplicativo del número de entrada en dos variables temporales sin signo de 8 bits: sy x
  2. Gire el valor s un bit hacia la izquierda; si el valor de s tenía un bit alto (ocho bits desde la izquierda) de uno, haga el bit bajo de s uno; de lo contrario, el bit bajo de s es cero.
  3. Exclusivo o el valor de x con el valor de s, almacenando el valor en x
  4. Para tres iteraciones más, repita los pasos dos y tres; los pasos dos y tres se realizan un total de cuatro veces.
  5. El valor de ” x ” ahora tendrá el valor transformado.

Después de que se realiza la transformación afín, exclusiva o el valor por el número decimal 99 (el número hexadecimal

0x63

)

Dada la función gmul_inverse que se demuestra. aquí viene el código C que realiza el algoritmo anterior:

/ * Calcular el s-box para un número dado * /
unsigned char sbox (unsigned char in) {
sin signo char c, s, x;
s = x = gmul_inverse (in);
para (c = 0; c <4; c ++) {
/ * Un bit circular gira a la izquierda * /
s = (s <> 7);
/ * xor con x * /
x ^ = s;
}
x ^ = 99; / * 0x63 * /
volver x;
}

Esto generará la caja S de Rijndael (AES), que se representa aquí con notación hexadecimal:

El | 0 1 2 3 4 5 6 7 8 9 abcdef
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
00 | 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
10 | ca 82 c9 7d fa 59 47 f0 ad 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 be 39 4a 4c 58 cf
60 | d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
70 | 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
80 | 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 e4 79
b0 | e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 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 bb 16

Aquí la columna está determinada por el nybble menos significativo, y la fila está determinada por el nybble más significativo. Por ejemplo, el valor

0x9a

se convierte en a

0xb8

por la caja S de Rijndael.

La S-box inversa es simplemente la S-box que se ejecuta en reversa. Por ejemplo, la caja S inversa de

0xdb

es

0x9f

. La siguiente tabla representa la caja S inversa de Rijndael:

El | 0 1 2 3 4 5 6 7 8 9 abcdef
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
00 | 52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb
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 bc d3 0a f7 e4 58 05 b8 b3 45 06
70 | d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b
80 | 3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73
90 | 96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e
a0 | 47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b
b0 | fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 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 bb 3c 83 53 99 61
f0 | 17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d

¿Quieres decir cómo se eligieron las cajas S específicas? Esto es difícil de saber para los no criptólogos, pero sabemos que fue elegido para ser resistente contra dos ataques conocidos (criptoanálisis lineal y criptoanálisis diferencial).