NOEKEON | |
---|---|
Creador |
Joan Dymen Michaël Peeters Gilles Van Assche Vincent Raymen |
publicado | 2000 _ |
Tamaño de clave | 128 bits |
Tamaño de bloque | 128 bits |
Número de rondas | dieciséis |
NOEKEON es una familia de cifrados de dos bloques desarrollados por Joan Dymen , Michaël Peeters , Gilles Van Assche y Vincent Raymen y presentados en el proyecto de investigación NESSIE [1] . Los dos cifrados son NOEKEON en modo directo y modo indirecto. Los modos difieren solo en el procedimiento de expansión clave.
La longitud de la clave en NOEKEON es de 128 bits. En cada ronda, NOEKEON utiliza una secuencia de transformaciones autoinversas que se pueden implementar fácilmente en hardware o software, incluso en uno donde existe la posibilidad de un ataque de canal lateral . El cifrado tiene una implementación compacta en varios lenguajes de programación , se ejecuta rápidamente en una variedad de hardware y es muy eficiente en una amplia gama de plataformas [2] . Sin embargo, NOEKEON no cumplió con los requisitos de la estrategia de diseño de senderos amplios , como lo demuestra el criptoanálisis realizado por Lars Knudsen y Håvard Raddum en abril de 2001. Knudsen y Raddum demostraron que este cifrado podría ser atacado en base a claves vinculadas [3] , debido a cuyo cifrado no se seleccionó en el proyecto NESSIE.
El algoritmo NOEKEON [4] realiza 16 rondas de transformaciones seguidas de la aplicación de la función Theta. El bloque de datos de entrada Stateson cuatro palabras de 32 bits de a[0]a a[3].
Algoritmo NOEKEON en notación de pseudocódigo estilo C.
Noekeon ( WorkingKey , State ) { For ( i = 0 ; i < Nr ; i ++ ) Round ( WorkingKey , State , Roundct [ i ], 0 ); Estado [ 0 ] ^= Roundct [ Nr ]; Theta ( Clave de trabajo , Estado ); }La inversión de cifrado se ve así:
InverseNoekeon ( Tecla de trabajo , Estado ) { Theta ( NullVector , WorkingKey ); For ( i = Nr ; i > 0 ; i -- ) Round ( WorkingKey , State , 0 , Roundct [ i ]); Theta ( Clave de trabajo , Estado ); Estado [ 0 ] ^= Roundct [ 0 ]; }El número de rondas Nres 16. La única diferencia entre NOEKEON y su inversa es el cálculo WorkingKeyde la inversa de NOEKEON y el uso de constantes de ronda.
Cada ronda del algoritmo hace lo siguiente:
Descripción de las rondas del algoritmo en pseudocódigo:
Redondo ( Clave , Estado , Constante1 , Constante2 ) { Estado [ 0 ] ^= Constant1 ; Theta ( Clave , Estado ); Estado [ 0 ] ^= Constant2 ; Pi1 ( Estado ); Gama ( Estado ); Pi2 ( Estado ); }Todas las funciones operan en state State, al que se proporciona un puntero. Una de las constantes de entrada siempre se establece en 0. Si la transformación redonda se usa en el cifrado directo, entonces se Constant2establece en 0, si la transformación redonda se usa para el cifrado inverso, entonces Constant1 = 0.
Gamma es un mapeo no lineal involutivo que es esencialmente un simple reemplazo de tabla. Gammarealiza operaciones independientes en 32 sub-bloques de bits llamados cajas. Estas casillas están formadas por 4 bits que están en la misma posición en cada una de las cuatro palabras de 32 bits , es decir, la casilla con el número i se forma a partir de los valores de los i -ésimos bits de cada una de las palabras de 32 bits. palabras:
Sea además el i -ésimo bit de una palabra de 32 bits , es decir, el n -ésimo bit de la caja . Entonces Gamma actúa sobre las cajas de la siguiente manera: State
Descripción del algoritmo Gamma en pseudocódigo:
Gama ( a ){ a [ 1 ] ^= ~ a [ 3 ] &~ a [ 2 ]; un [ 0 ] ^= un [ 2 ] & un [ 1 ]; tmp = un [ 3 ]; un [ 3 ] = un [ 0 ]; a [ 0 ] = tmp ; un [ 2 ] ^= un [ 0 ] ^ un [ 1 ] ^ un [ 3 ]; a [ 1 ] ^= ~ a [ 3 ] &~ a [ 2 ]; un [ 0 ] ^= un [ 2 ] & un [ 1 ]; }Gammase puede definir como una alternativa a un S-box aplicado a cada uno de los cuadros en State, con los valores de cada cuadro Gammacambiados de la siguiente manera:
Valor de entrada | 0 | una | 2 | 3 | cuatro | 5 | 6 | 7 | ocho | 9 | A | B | C | D | mi | F |
valor de salida | 7 | A | 2 | C | cuatro | ocho | F | 0 | 5 | 9 | una | mi | 3 | D | B | 6 |
Thetaes un mapeo lineal que se aplica a un estado Statecon una clave de trabajo k. Statees una matriz de ocho columnas de 16 bits. Cada columna consta de cuatro conjuntos de 4 bits en las posiciones módulo 8 de las palabras. Por ejemplo, la columna 5 consta de los bits 5, 13, 21 y 29 de la palabra , los bits 5, 13, 21 y 29 de la palabra 13, 21 y 29 palabras y bits 5, 13, 21 y 29 palabras . realiza la siguiente secuencia de acciones: Theta
Criterios utilizados en el diseño de la transformación Theta:
Función Thetaen pseudocódigo:
theta ( k , a ){ temperatura = un [ 0 ] ^ un [ 2 ]; temperatura ^= temperatura >>> 8 ^ temperatura <<< 8 ; a [ 1 ] ^= temporal ; a [ 3 ] ^= temporal ; un [ 0 ] ^= k [ 0 ]; un [ 1 ] ^= k [ 1 ]; un [ 2 ] ^= k [ 2 ]; un [ 3 ] ^= k [ 3 ]; temperatura = una [ 1 ] ^ una [ 3 ]; temperatura ^= temperatura >>> 8 ^ temperatura <<< 8 ; a [ 0 ] ^= temporal ; a [ 2 ] ^= temporal ; }La inversión Thetase puede obtener utilizando las propiedades algebraicas de las aplicaciones lineales y el hecho de que la primera y la última componentes Thetaconmutan:
theta ( k ' , a );La nueva clave de trabajo k' se obtiene aplicando Thetaa la clave inicial kcon clave de trabajo cero:
Theta ( NullVector , k );Esto significa que la inversa Thetaes igual a sí misma Theta, solo que con un valor diferente de la clave de trabajo, que se puede obtener aplicando Thetaa la clave de trabajo inicial.
Las operaciones de cambio Pi1y Pi2realizan cambios cíclicos en tres de las cuatro palabras con diferentes valores de cambio. Los valores de sesgo se seleccionan de acuerdo con los siguientes criterios:
Una medida de difusión es el número de casillas a la salida de la parte lineal del algoritmo, que cambian bajo la influencia de un cambio en una de las casillas a la entrada. La parte lineal del algoritmo es una secuencia de funciones Pi1, Theta, Pi2. En otras palabras, la medida de difusión es el número de casillas de salida distintas de cero, siempre que solo una casilla de entrada sea distinta de cero. Debido a la simetría de estas tres funciones, el número de casillas de salida distintas de cero no depende de la posición de la casilla de entrada distinta de cero. El número de cuadros de salida distintos de cero para la matriz de desplazamiento [0,1,5,2]es 23, que es el mejor resultado que satisface los criterios de selección para los desplazamientos. Las mismas declaraciones son verdaderas para las operaciones inversas.
Operaciones de cambio en pseudocódigo:
Pi1 ( a ){ a [ 1 ] <<<= 1 ; un [ 2 ] <<<= 5 ; un [ 3 ] <<<= 2 ; } Pi2 ( un ){ un [ 1 ] >>>= 1 ; un [ 2 ] >>>= 5 ; un [ 3 ] >>>= 2 ; }En modo indirecto, la clave de trabajo WorkingKeyse deriva de la clave privada CipherKeyusándola NOEKEONcon nulo WorkingKey:
Clave de trabajo = Clave de cifrado ; Noekeon ( NullVector , WorkingKey );En modo directo, la clave de trabajo es la misma que la secreta, es decir, no hay extensión de clave:
Clave de trabajo = Clave de cifrado ;En ambos casos, la clave de trabajo no cambia entre rondas.
Las constantes de ronda se superponen en cada ronda del algoritmo sobre el significado de la palabra usando la operación de suma de módulo 2 y se usan en el cifrado para eliminar algunas propiedades de simetría:
Vale la pena señalar que solo el último byte de las constantes de ronda es distinto de cero, es decir, en cada ronda del algoritmo, solo el cuarto byte de la palabra se cambia usando las constantes de ronda . Además, los valores de las constantes de a en este byte se pueden calcular recursivamente . En base a esto, las constantes redondas se pueden escribir en pseudocódigo de la siguiente manera: RC[1]RC[Nr]
Roundct [ i ] = ( ' 00 ' , ' 00 ' , ' 00 ' , RC [ i ]); RC [ 0 ] = 0x80 ; if ( RC [ i ] & 0x80 != 0 ) RC [ i + 1 ] = RC [ i ] << 1 ^ 0x1B else RC [ i + 1 ] = RC [ i ] << 1 ;Tal cálculo corresponde a un registro de desplazamiento de retroalimentación lineal . Si es necesario, las constantes se pueden calcular en orden inverso:
if ( RC [ i ] & 0x01 != 0 ) RC [ i -1 ] = RC [ i ] >> 1 ^ 0x8D else RC [ i -1 ] = RC [ i ] >> 1 ;Las constantes de ronda se calculan de la misma manera que en el algoritmo de Rijndael , excepto por el valor dado RC[0].
Ambos modos del algoritmo Noekeon [5] fueron aceptados para su consideración en el marco del concurso NESSIE . Ambos modos eran susceptibles al ataque de clave enlazada propuesto por los criptólogos Lars Knudsen y Håvard Raddum en su trabajo [3] . Además, también probaron que los criterios para crear tablas de sustitución en la operación Gamma no contribuyen a la alta fortaleza criptográfica del algoritmo: al generar una tabla de sustitución, el algoritmo resultante con una probabilidad de aproximadamente 86% estará sujeto a lineal y/o criptoanálisis diferencial . También se ha demostrado que es posible encontrar claves relacionadas con alta probabilidad . Estas razones resultaron ser suficientes para que el algoritmo de Noekeon no ingresara a la segunda ronda de la competencia.