S-box (o bloque de sustitución , ing. s-box de substitution-box ): una función en el código del programa o un sistema de hardware que toma n bits en la entrada , los convierte de acuerdo con un cierto algoritmo y devuelve m bits en el salida n y m no son necesariamente iguales [1] .
Las cajas S se utilizan en cifrados de bloque .
En electrónica, puede aplicar directamente el circuito que se muestra en la figura . En programación se crean tablas de sustitución ( tablas de sustitución, tablas de sustitución). Ambos enfoques son equivalentes, es decir, los datos cifrados en una computadora se pueden descifrar en un dispositivo electrónico y viceversa.
Un S-box se llama perfecto ( perfect s-box ) [2] si los valores de los bits de salida se calculan mediante la función doblada en función de los valores de los bits de entrada y cualquier combinación lineal de bits de salida es un función doblada de los bits de entrada.
La implementación del software del s-block funciona de la siguiente manera:
La tabla utilizada se denomina "tabla de reemplazo" o "tabla de sustitución". La mesa puede:
Por ejemplo, se utiliza una tabla fija para el cifrado DES (algoritmo), mientras que para los cifrados Blowfish y Twofish , la tabla se crea en función de la clave.
Ejemplo [3] . Considere trabajar con la tabla del quinto bloque s ( ) del cifrado DES . El quinto s-box toma 6 bits ( ) como entrada y devuelve 4 bits ( ) como salida . Numeramos los bits de entrada de izquierda a derecha del 1 al 6. La tabla de sustitución tiene la siguiente forma:
S5 _ | Valores de los bits 2, 3, 4 y 5 en la entrada | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | ||
Valores de los bits 1 y 6 en la entrada | 00 | 0010 | 1100 | 0100 | 0001 | 0111 | 1010 | 1011 | 0110 | 1000 | 0101 | 0011 | 1111 | 1101 | 0000 | 1110 | 1001 |
01 | 1110 | 1011 | 0010 | 1100 | 0100 | 0111 | 1101 | 0001 | 0101 | 0000 | 1111 | 1010 | 0011 | 1001 | 1000 | 0110 | |
diez | 0100 | 0010 | 0001 | 1011 | 1010 | 1101 | 0111 | 1000 | 1111 | 1001 | 1100 | 0101 | 0110 | 0011 | 0000 | 1110 | |
once | 1011 | 1000 | 1100 | 0111 | 0001 | 1110 | 0010 | 1101 | 0110 | 1111 | 0000 | 1001 | 1010 | 0100 | 0101 | 0011 |
Deje que los bits de entrada " 0 1101 1 ". Encontremos los bits de salida .
La implementación de hardware del bloque s (ver Fig. ) consta de los siguientes dispositivos:
Un decodificador es un dispositivo que convierte una señal binaria de n bits en una señal base de un bit .
Por ejemplo, para el s-box que se muestra en la figura , el decodificador convierte una señal de tres bits ( ) en una de ocho bits ( ).
Sistema de conmutación : conexiones internas que realizan intercambio de bits . Si m=n , el número de conexiones es . Cada bit de entrada se asigna a un bit de salida ubicado en el mismo bit o en un bit diferente . Si el número de entradas ny salidas m no es igual, cada salida del decodificador puede tener cero, una, dos o más conexiones. Lo mismo es cierto para las entradas del codificador.
Para el bloque S que se muestra en la figura , el número de conexiones es .
Un codificador es un dispositivo que convierte una señal de un binario de un solo bita un binario de n bits .
Para el bloque s que se muestra en la figura , se puede compilar la siguiente tabla de sustitución (tabla de sustitución).
0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
Valor de entrada del decodificador | 000 2 = 0 10 | 001 2 =1 10 | 010 2 =2 10 | 011 2 =3 10 | 100 2 = 4 10 | 101 2 = 5 10 | 110 2 =6 10 | 111 2 =7 10 |
El número de la salida del decodificador (según la figura ) en la que el valor se establece en 1 (en otras salidas el valor se establece en 0) | 0 | una | 2 | 3 | cuatro | 5 | 6 | 7 |
El número de la entrada del codificador (según la figura ) en la que el valor se establece en 1 (en otras entradas el valor se establece en 0) | 3 | 0 | una | cuatro | 6 | 7 | 2 | 5 |
El valor a la salida del codificador. | 011 2 =3 10 | 000 2 = 0 10 | 001 2 =1 10 | 100 2 = 4 10 | 110 2 =6 10 | 111 2 =7 10 | 010 2 =2 10 | 101 2 = 5 10 |
ejemplo _ Deje que el número 110 2 se alimente a las entradas del codificador que se muestra en la figura (ver figura ). Dado que la representación decimal del número binario 110 2 es 6 10 , la salida 6 del codificador tendrá el valor 1 y las otras salidas tendrán el valor 0 (ver figura ). Con la ayuda de un sistema de interruptores, el valor 1 se transferirá a la segunda entrada del decodificador (intercambio de bits). Dado que la representación binaria del número decimal 2 10 es 010 2 , las salidas del decodificador serán el número 010 2 (ver figura ).
Los S-boxes se utilizan en cifrados de bloque cuando se realiza el cifrado simétrico para ocultar la relación estadística entre el texto sin formato y el texto cifrado .
El análisis de un bloque s de n bits para n grande es extremadamente difícil, pero es muy difícil implementar dicho bloque en la práctica, ya que el número de conexiones posibles es grande ( ). En la práctica, el "bloque de sustitución" se utiliza como elemento de sistemas más complejos.
Las cajas S se utilizan en los siguientes cifrados:
Al diseñar un s-box, se debe prestar especial atención a la compilación de una "tabla de sustitución". Durante muchos años, los investigadores han estado buscando marcadores (vulnerabilidades conocidas solo por los creadores) en las tablas de sustitución de los ocho bloques s del cifrado DES . Los autores de DES contaron [4] sobre lo que se guiaron al compilar tablas de sustitución. Los resultados del criptoanálisis diferencial del cifrado DES mostraron que los números en las tablas de sustitución se eligieron cuidadosamente para aumentar la resistencia de DES a ciertos tipos de ataques. Biham y Shamir encontraron que incluso pequeños cambios en las tablas pueden debilitar significativamente DES [5] .