Criptografía β Criptografía de Clave Secreta Twofish Es un algoritmo finalista del concurso AES del NIST para seleccionar al nuevo algoritmo de cifrado estándar. Fue diseñado por Bruce Schneier, John Kelsey, Doug Whiting, David Warner, Chris Hall y Niels Ferguson en el año de 1998. Se trata de un algoritmo de red Feistel que tiene como fundamento las características de Blowfish: cifrado de datos antes y después de la red Feistel, así como uso de cajas de sustitución dependientes de la clave de usuario. Descripción Acorde a las especificaciones que el NIST dio para seleccionar al nuevo estándar de cifrado, Twofish cifra bloques de texto plano de 128 bits, así como longitud de clave seleccionable entre 128, 192 y 256 bits. A lo largo de 16 rondas, se aplica una red Feistel que consiste en sustitución mediante cajas, dos subfunciones especiales consistentes en una matriz Distancia de Separación Máxima (MDS) y una Transformación Pseudo Hadamart (PHT) y la mezcla con dos subclaves de ronda. Tanto la ronda inicial como final consisten en un blanqueamiento, o procesamiento del texto plano antes de su cifrado mediante la red Feistel. La planificación de claves se lleva a cabo mediante el uso de una matriz derivada de un código Reed-Solomon (RS). Matriz MDS Sean πΎ un campo finito, y π y π dos números enteros. Sea π: πΎπ β πΎπ una transformación tal que π₯Μ = ππ₯Μ , β π₯ β β, donde π es una matriz de orden π × π. π será una matriz MDS (Maximum Distance Separable) si el conjunto de todas las parejas π£Μ = (π₯Μ , ππ₯Μ ) es un código MDS; es decir, un código lineal de dimensión π, longitud π + π y una distancia mínima de π + 1. En otras palabras, la matriz π ayuda a conformar un subespacio vectorial π, donde sus elementos π£Μ tienen π + π componentes, una base de π tiene π vectores, y cualquier vector π£Μ β 0οΏ½ tiene al menos π + 1 componentes no nulas. 1 Ing. Aldo Jiménez Arteaga 2015 Transformación PH Es una transformación lineal que permite difusión de una cadena de bits al momento de cifrarla. Está basada en la Transformada de Hadamard, la cual es una extensión de la transformada de Fourier discreta. La PHT se define recursivamente mediante la relación: Por definición π»0 = 1. 2π» π»π (π£Μ ) = οΏ½ πβ1 π»πβ1 π»πβ1 οΏ½ π£Μ , π»πβ1 βπ β₯1 Código RS Un código Reed-Solomon es un código cíclico que trabaja con base en símbolos y no en bits. El código se forma con base en grupos de bits llamados símbolos; cada símbolo está compuesto por π bits. Este código también puede ser representado por una matriz. Planificación de claves A partir de la clave de usuario, se generará un conjunto de 40 subclaves (cada una de 32 bits de longitud), las 4 cajas-S y de 2 a 4 subclaves adicionales que trabajan dentro de las cajas-S. Sea π el tamaño de clave π en bits. π consiste en que son convertidos en π 32 π 8 bytes: π = π0 π1 π2 β¦ ππβ1 8 palabras de 32 bits cada una: 3 π½π = οΏ½ 28π π4π+π , π=0 β π = 0, 1, 2, β¦ , π β1 32 Por ejemplo, π½0 = π3 π2 π1 π0 , π½1 = π7 π6 π5 π4 , π½2 = π11 π10 π9 π8 y π½3 = π15 π14 π13 π12 para una clave de π = 128. A continuación, con las palabras π½π se obtienen dos vectores cada uno con π 64 palabras: π£0 = οΏ½π½ π β2 , β¦ , π½0 οΏ½ , 32 π£1 = οΏ½π½ π β1 , β¦ , π½1 οΏ½ 32 Continuando con el ejemplo, los vectores serían π£π = (π½2 , π½0 ) y π£π = (π½3 , π½1 ). Criptografía β Criptografía de Clave Secreta Un tercer vector de longitud π 64 ππ = π΄1 π8π , π β π = 0, β¦ , β1 64 π π,0 01 π΄4 55 π π,1 π΄4 56 82 οΏ½π οΏ½ = οΏ½ π,2 02 π΄1 πΉπΆ π π,3 π΄4 55 97 87 πΉ3 πΆ1 5π΄ 5π΄ 1πΈ 47 58 58 πΆ6 π΄πΈ π·π΅ π·π΅ 68 3π· 9πΈ donde el vector que se utiliza en la planificación de claves es π8π β‘ β€ π8π+1 β’ β₯ 9πΈ β’π8π+2 β₯ πΈ5 β’π8π+3 β₯ οΏ½ 19 β’π8π+4 β₯ β’ β₯ 03 β’π8π+5 β₯ β’π8π+6 β₯ β£π8π+7 β¦ π = οΏ½π π β1 , π π β2 , β¦ , π0 οΏ½ 64 64 La multiplicación matricial se realiza en el campo de Galois πΊπΉ(28 ) con polinomio primitivo π(π₯) = π₯ 8 + π₯ 6 + π₯ 3 + π₯ 2 + 1. Los vectores π£π , π£π y π permiten la planificación de claves completa. Un aspecto interesante de Twofish es que no necesariamente se debe elegir una clave de 128, 192 ó 256 bits; puede elegirse una clave de menor longitud y rellenarse con ceros hasta alcanzar la longitud mínima de 128 bits. La función h Esta función crea la sustitución de cajas-S dependientes de la clave, y la planificación de subclaves de rondas. La función h toma dos entradas: una entrada π de 32 bits y el arreglo π con π 64 palabras de 32 bits, arrojando una salida π. La función tiene π 64 etapas; cada una de ellas los cuatro bytes de π pasan a través de cajas-S fijas y operadas con las palabras del arreglo π con una XOR; este proceso se repite hasta aplicar XOR con todas las palabras de π. Para procesar π se requiere dividirla en 4 entradas de dos bytes cada una: 2 π = π₯3 π₯2 π₯1 π₯0 palabras también se deriva de la clave. Para ello, los bytes de la clave se agrupan en bloques de 8 (considerándolo como un vector en el campo de Galois πΊπΉ(28 )), y multiplicándolo por una matriz π΄1 derivada de un código RS; π΄1 es de orden 4 × 8: Ing. Aldo Jiménez Arteaga 2015 Cada π₯π entra a una caja-S fija diferente, y el valor resultante sustituye al original. Los pasos listados a continuación se ejecutan de acuerdo al tamaño π de la clave π: 1. 2. 3. si si si π 64 π 64 π 64 = 4, se inicia aquí = 3, se inicia aquí; si π 64 π₯0 π₯1 π₯2 π₯3 = π1 [π₯0 ] β π 3,0 = π0 [π₯1 ] β π 3,1 = π0 [π₯2 ] β π 3,2 = π1 [π₯3 ] β π 3,3 π₯0 π₯1 π₯2 π₯3 = π1 [π₯0 ] β π 2,0 = π1 [π₯1 ] β π 2,1 = π0 [π₯2 ] β π 2,2 = π0 [π₯3 ] β π 2,3 = 4, se continua del paso anterior = 2, se inicia aquí; en caso contrario, se continua del paso anterior π¦0 = π1 οΏ½π0 οΏ½π0 [π₯0 ] β π1,0 οΏ½ β π0,0 οΏ½ π¦1 = π0 οΏ½π0 οΏ½π1 [π₯1 ] β π1,1 οΏ½ β π0,1 οΏ½ π¦2 = π1 οΏ½π1 οΏ½π0 [π₯2 ] β π1,2 οΏ½ β π0,2 οΏ½ π¦3 = π0 οΏ½π1 οΏ½π1 [π₯3 ] β π1,3 οΏ½ β π0,3 οΏ½ Las subrutinas π0 y π1 son permutaciones y sustituciones fijas sobre 8 bits. Tomando a un valor de entrada π₯π = π0 π0 , donde π0 son los 4 bits más significativos y π0 los 4 bits menos significativos: π1 = π0 β π0 π1 = π0 β (π0 β 1) β (8π0 mod 24 ) π2 = π‘0 [π1 ] π2 = π‘1 [π1 ] Criptografía β Criptografía de Clave Secreta Expansión de la clave de usuario Para este caso, se requiere dos veces el uso de la función h con dos entradas cada una: la palabra π = 2π(224 + 216 + 28 + 20 ) con el vector π = π£π por una parte; y la palabra π = (2π + 1)(224 + 216 + 28 + 20 ) con el vector π = π£π por otra. La salida de la función h entra a la transformación PHT con sumas mod 232 ; finalmente, se aplican rotaciones circulares únicamente a la entrada 2π + 1. π3 = π2 β π2 π3 = π2 β (π2 β 1) β (8π2 mod 24 ) π4 = π‘2 [π3 ] π4 = π‘3 [π3 ] π₯π = π4 π4 Dependiendo de cuál sea la subrutina que se aplica una u otra caja-S fija; para π0 : π‘0 π‘1 π‘2 π‘3 8 E B D 0 π‘1 π‘2 π‘3 7 B 5 F 1 2 D 8 E 4 3 6 1 6 1 4 F 2 D 2 3 3 9 6 5 6 2 5 0 E 7 0 F C 9 8 B 4 8 B 9 5 A F 3 A 9 6 3 0 B E 7 2 8 C C 0 4 5 D 2i A 9 7 C E 4 D 1 A 2i sk2i h 2i 2i ve F 2i+1 Para π1 : π‘0 1 C A 7 2015 2i+1 h 2 1 4 B 8 E C 9 B 2 7 5 D B 5 1 F 4 1 C 7 C 6 3 6 3 9 D E 7 A E 3 6 0 6 1 D E 4 9 A D 7 4 5 8 F 0 F 2 2 A 9 B 0 C 0 3 8 5 8 F A 0 1 2 3 4 5 6 7 8 9 A B C D E F El resultado π = π¦0 π¦1 π¦2 π¦3 se multiplica por la matriz π΄2 , que es la matriz MDS en campo de Galois πΊπΉ(28 ), dando como salida π = π§0 π§1 π§2 π§3 : π = π΄2 π π§0 01 π§1 5π΅ οΏ½π§ οΏ½ = οΏ½ 2 πΈπΉ π§3 πΈπΉ πΈπΉ πΈπΉ 5π΅ 01 5π΅ πΈπΉ 01 πΈπΉ 5π΅ π¦0 01 π¦1 οΏ½οΏ½ οΏ½ πΈπΉ π¦2 5π΅ π¦3 Esta multiplicación matricial también se realiza en el campo de Galois πΊπΉ(28 ), pero con el polinomio primitivo π(π₯) = π₯ 8 + π₯ 6 + π₯ 5 + π₯ 3 + 1. 3 Ing. Aldo Jiménez Arteaga 2i+1 <<<8 <<<9 sk2i+1 2i+1 vo El valor de π va desde 0 hasta 20 para completar el total de subclaves: 8 subclaves para las rondas inicial y final, y 2 subclaves por cada una de las 16 rondas; 40 subclaves en total. Cifrado y descifrado Una vez que se ha planificado las subclaves de ronda y cajas-S, se procede a cifrar bloques de texto de 128 bits. Como ronda inicial se procede a un blanqueado, la ronda inicial que mezcla el texto plano con el primer material de las subclaves. A partir de ese momento comienzan las 16 rondas de la red Feistel de Twofish que incluyen cuatro fases: 1) sustitución por cajas-S, 2) mutiplicación por matriz MDS, 3) transformación mediante PHT y 4) mezcla con las subclaves de ronda. Criptografía β Criptografía de Clave Secreta 2015 Texto plano (128 bits) m (128 bits) 32 bits 32 bits 32 bits 32 bits Blanqueamiento de entrada Subclaves sk0 sk2 sk1 Cajas-S sk3 h 16 rondas de cifrado Subclaves sk2r+8 caja-S 0 PHT caja-S 1 <<<1 MDS Blanqueamiento de salida caja-S 2 Subclaves caja-S 3 sk2r+9 caja-S 0 c (128 bits) caja-S 1 MDS <<<8 caja-S 2 La red Feistel incluye el uso de la desplazamientos circulares, uso de las cajas-S a partir de la función h definida en la planeación de claves, uso de la tranformación Pseudo Hadamart y la mezcla de la clave por medio de sumas mod 232 . caja-S 3 El descifrado es idéntico al cifrado, exceptuando que las claves se introducen en orden inverso y los desplazamientos circulares de un bit se invierten; es decir, se aplican los desplazamientos β 1 al tercer bloque antes de la red Feistel y β 1 al cuarto bloque después de la red Feistel. Después de la ronda 16 no se hace intercambio de bloques sk4 sk5 sk6 32 bits 32 bits Ing. Aldo Jiménez Arteaga sk7 32 bits 32 bits Texto cifrado (128 bits) 4 >>>1
© Copyright 2024