Un flujo [1] [2] o un cifrado de flujo [3] es un cifrado simétrico en el que cada carácter de texto sin formato se convierte en un carácter de texto cifrado, dependiendo no solo de la clave utilizada, sino también de su ubicación en el flujo de texto sin formato. Un cifrado de flujo implementa un enfoque diferente al cifrado simétrico que los cifrados de bloque .
Los cifrados de flujo basados en registros de desplazamiento se utilizaron activamente durante los años de la guerra, mucho antes de la llegada de la electrónica. Eran fáciles de diseñar e implementar.
En 1965, Ernst Selmer, el criptógrafo jefe del gobierno noruego, desarrolló la teoría de la secuencia del registro de desplazamiento . Más tarde, Solomon Golomb , un matemático de la Agencia de Seguridad Nacional de EE . UU. , escribió un libro llamado "Shift Register Sequences" en el que expuso sus principales logros en esta área, así como los de Selmer.
El trabajo de Claude Shannon , publicado en 1949, trajo gran popularidad a los cifrados de flujo , en el que Shannon demostró la seguridad absoluta del cifrado de Vernam (también conocido como el bloc de notas de un solo uso). En el cifrado de Vernam , la clave tiene una longitud igual a la longitud del propio mensaje transmitido. La clave se usa como gamma , y si cada bit de la clave se elige al azar, entonces es imposible descifrar el cifrado (ya que todos los textos sin formato posibles serán igualmente probables). Hasta la fecha, se han creado una gran cantidad de algoritmos de cifrado de flujo , como: A3 , A5 , A8 , MUGI , PIKE , RC4 , SEAL .
La implementación más simple del cifrado de flujo se muestra en la figura. El generador gamma produce un flujo clave (gamma): . Denotemos el flujo de bits de texto sin formato como . Luego, el flujo de bits del texto cifrado se obtiene aplicando la operación XOR : donde .
El descifrado se realiza mediante la operación XOR entre la misma gamma y el texto cifrado: .
Obviamente, si la secuencia de bits gamma no tiene período y se elige al azar, entonces es imposible descifrar el cifrado. Pero este modo de cifrado también tiene características negativas. Por lo tanto, las claves que tienen una longitud comparable a los mensajes transmitidos son difíciles de usar en la práctica. Por lo tanto, se suele utilizar una longitud de clave más pequeña (por ejemplo, 128 bits). Utilizándolo, se genera una secuencia de juego pseudoaleatoria (debe satisfacer los postulados de Golomb ). Naturalmente, la pseudoaleatoriedad de gamma puede explotarse en un ataque a un cifrado de flujo.
Suponga, por ejemplo, que en el modo gamma para cifrados de flujo, un carácter del texto cifrado se distorsiona durante la transmisión a través de un canal de comunicación . Obviamente, en este caso, todas las señales recibidas sin distorsión serán decodificadas correctamente. Sólo se perderá un carácter del texto. Y ahora imaginemos que uno de los caracteres del texto cifrado se perdió durante la transmisión por el canal de comunicación. Esto conducirá a una decodificación incorrecta de todo el texto que sigue al carácter perdido.
Prácticamente todos los canales de transmisión de datos para los sistemas de cifrado de transmisión contienen interferencias . Por lo tanto, para evitar la pérdida de información, se resuelve el problema de sincronizar el cifrado y descifrado del texto. De acuerdo con el método para resolver este problema, los sistemas de cifrado se dividen en sistemas sincrónicos y autosincronizantes.
Definición:
Los cifrados de flujo síncrono (SPC) son cifrados en los que se genera un flujo de claves independientemente del texto sin formato y el texto cifrado.
Cuando se cifra, el generador de flujo de claves produce bits de flujo de claves que son idénticos a los bits de flujo de claves cuando se descifran. La pérdida del signo del texto cifrado hará que los dos generadores no estén sincronizados, lo que imposibilitará descifrar el resto del mensaje. Obviamente, en esta situación, el emisor y el receptor deben resincronizarse para poder seguir trabajando.
La sincronización generalmente se realiza insertando marcadores especiales en el mensaje transmitido. Como resultado, un carácter perdido durante la transmisión conduce a un descifrado incorrecto solo hasta que se recibe uno de los tokens.
Tenga en cuenta que la sincronización debe realizarse de tal manera que no se repita ninguna parte del flujo de claves. Por lo tanto, no tiene sentido transferir el generador a un estado anterior.
Ventajas de SPS:
Contras de SPS:
La idea básica de la construcción fue patentada en 1946 en USA .
Definición:
Los cifrados de flujo de sincronización automática (cifrados de flujo asíncrono (ATS)) son cifrados en los que el flujo de clave se crea mediante una función de la clave y un número fijo de caracteres de texto cifrado.
Entonces, el estado interno del generador de flujo de claves es una función de los N bits anteriores del texto cifrado. Por lo tanto, el generador de flujo de claves de descifrado, habiendo recibido N bits, se sincroniza automáticamente con el generador de cifrado.
La implementación de este modo es la siguiente: cada mensaje comienza con un encabezado aleatorio de N bits de longitud; el encabezado se cifra, transmite y descifra; la decodificación es incorrecta, pero después de estos N bits, ambos generadores estarán sincronizados.
Ventajas de APS:
Contras de APS:
Hay varias razones para usar registros de desplazamiento lineal en criptografía:
Definición: Un registro de desplazamiento de retroalimentación lineal de longitud L consta de L celdas numeradas , cada una de las cuales es capaz de almacenar 1 bit y tiene una entrada y una salida; y una señal de reloj , que controla el desplazamiento de los datos. Durante cada unidad de tiempo, se realizan las siguientes operaciones:
En el primer paso:
En el segundo paso:
La siguiente relación describe el funcionamiento de LFSR en términos generales:
Si escribimos bits iguales a cero en todas las celdas, entonces el sistema generará una secuencia que consistirá en todos ceros. Si escribimos bits distintos de cero, obtenemos una secuencia semi-infinita. La secuencia está determinada por los coeficientes
. Veamos cuál puede ser el período de dicho sistema:
Número de rellenos distintos de cero: Por lo tanto, .
Después de la ocurrencia de un relleno, que fue antes, el proceso comenzará a repetirse. El proceso de llenar el registro, como se muestra arriba, está representado por una ecuación de diferencia lineal. Transferimos todos los términos a una parte de la igualdad, obtenemos: .
Designemos: . Después:
Una propiedad importante de este polinomio es la reducibilidad.
Definición: Se dice que un
polinomio es reducible si se puede representar como el producto de dos polinomios de menor grado con coeficientes de un campo dado (en nuestro caso, con coeficientes binarios). Si tal representación no tiene lugar, entonces se dice que el polinomio es irreducible .
Si el polinomio es irreducible y primitivo , entonces el período será igual al período máximo posible, igual a
Ejemplo:
tome un polinomio primitivo irreducible. Este polinomio se puede escribir como - se escriben los grados en los que hay coeficientes distintos de cero.
Escribimos en el estado inicial en las celdas y determinamos la duración del período del generador:
Retroalimentación | Celda0 | Celda1 | celda2 |
una | 0 | 0 | una |
0 | una | 0 | 0 |
una | 0 | una | 0 |
una | una | 0 | una |
una | una | una | 0 |
0 | una | una | una |
0 | 0 | una | una |
una | 0 | 0 | una |
El periodo del generador es La salida del generador será la secuencia:
Demos ejemplos de algunos polinomios primitivos módulo 2:
La complejidad lineal de una secuencia binaria es una de las características más importantes de la operación LFSR. Por lo tanto, nos detenemos en este tema con más detalle.
Antes de definir la complejidad lineal, introducimos algo de notación. -una secuencia infinita con miembros -se
dice que una secuencia finita de longitud , cuyos miembros son LFSR genera una secuencia si hay algún estado inicial en el que la secuencia de salida LFSR coincide con . De manera similar, se dice que el LFSR genera una secuencia final si hay algún estado inicial para el cual la secuencia de salida del LFSR tiene como primeros términos los miembros de la secuencia .
Finalmente, damos una definición de la complejidad lineal de una secuencia binaria infinita. Definición: La complejidad lineal de una secuencia binaria infinita es el número , que se define de la siguiente manera:
Definición: La
complejidad lineal de una sucesión binaria finita es el número , que es igual a la longitud del LFSR más corto que genera una sucesión que tiene como primeros términos . Propiedades de complejidad lineal:
Sean y sean sucesiones binarias. Entonces:
1. Para cualquier complejidad lineal de la subsucesión satisface las desigualdades
2. si y sólo si es una sucesión cero de longitud .
3. si y solo si .
4. Si es periódico con un período , entonces
5. Un
algoritmo eficiente para determinar la complejidad lineal de una secuencia binaria finita es el algoritmo de Berlekamp-Massey .
Desafortunadamente, la secuencia de salida del LFSR es fácilmente predecible. Entonces, conociendo 2L caracteres de la secuencia de salida, es fácil encontrar el llenado inicial del registro resolviendo un sistema de ecuaciones lineales (consulte el párrafo "Cifrados de flujo basados en registros de desplazamiento con retroalimentación lineal").
Se cree que para uso criptográfico, la secuencia de salida LFSR debe tener las siguientes propiedades:
Hay varios métodos para diseñar generadores de flujo de claves que destruyen las propiedades lineales de LFSR y, por lo tanto, hacen que dichos sistemas sean criptográficamente más seguros:
1. usando una función no lineal que combina las salidas de varios LFSR
2. usando una función de filtrado no lineal para el contenido de cada celda de un solo LFSR
3. usar la salida de un LFSR para controlar la señal de reloj de uno (o varios) LFSR.
Se sabe que cada función booleana se puede escribir como una suma módulo 2 de productos de órdenes de variables independientes , . Esta expresión se llama la forma normal algebraica de la función . El orden no lineal de una función es el orden máximo de términos en la notación de su forma algebraica normal.
Por ejemplo, una función booleana tiene un orden no lineal de 3. El orden no lineal máximo posible de una función booleana es igual al número de variables.
Supongamos ahora que tenemos registros de desplazamiento de retroalimentación lineal, sus longitudes son diferentes por pares y mayor que dos. Todos los registros se combinan con una función no lineal , como se muestra en la figura. La función se representa en forma algebraica normal. Entonces la complejidad lineal del flujo de claves es .
Si son números coprimos por pares, entonces la longitud del período del flujo de claves es igual a: . Por ejemplo, si , entonces . Y la duración del período del flujo de claves es .
Ejemplo (generador Geff):
este generador utiliza tres LFSR combinados de forma no lineal. Las longitudes de estos registros son números primos por parejas.
La función no lineal para un generador dado se puede escribir de la siguiente manera:
Duración del período:
Complejidad lineal:
El generador Geff es criptográficamente débil porque la información sobre los estados de los generadores LFSR 1 y LFSR 3 está contenida en su secuencia de salida. Para entender esto, denotemos los -ésimos bits de salida del LFSR 1,2,3 y el flujo de claves , respectivamente. Entonces la probabilidad de correlación de la secuencia con respecto a la secuencia :
De manera similar,
por esta razón, a pesar del largo período y la complejidad lineal bastante alta, el generador Geff se presta a ataques de correlación.
La salida de cada celda se alimenta a la entrada de alguna función de filtrado booleano no lineal . Suponga que la función de filtrado es de orden , entonces la complejidad lineal del flujo de clave es como máximo .
En combinaciones no lineales de osciladores y osciladores de filtro no lineal, el movimiento de datos en todos los LFSR está controlado por una sola señal de reloj.
La idea principal del funcionamiento del tipo de generadores que se está considerando es introducir la no linealidad en el funcionamiento de los generadores de flujo de claves basados en LFSR mediante el control de la señal de reloj de un registro por la secuencia de salida de otro.
Hay 2 tipos de osciladores basados en el control del reloj:
1. Oscilador de tono variable
2. Oscilador de compresión.
Idea principal:
LFSR 1 se usa para controlar el movimiento de los bits de los otros dos LFSR 2 y 3.
Algoritmo de operación:
1. El registro LFSR 1 está sincronizado por una señal de reloj externa
2. Si la salida del registro LFSR 1 es uno , entonces el registro LFSR 2 recibe una señal de reloj y el LFSR 3 repite su bit de salida anterior (durante el tiempo inicial, el bit de salida LFSR 3 anterior se toma igual a 0)
3. Si la salida del registro LFSR 1 es cero , entonces se aplica una señal de reloj al registro LFSR 3, y LFSR 2 repite su salida anterior bit (para el tiempo inicial, el bit de salida anterior del LFSR 2 también se toma igual a 0)
4. La secuencia de bits de salida del generador con paso variable es el resultado de aplicar la operación bit a bit XOR a las secuencias de salida del LFSR 2 y registros LFSR 3.
Aumento de la seguridad de los generadores de paso variable:
El registro de control LFSR 1 se utiliza para controlar la salida LFSR 2. Algoritmo:
El generador de compresión es simple, escalable y tiene buenas propiedades de seguridad. Su desventaja es que la tasa de generación de claves no será constante a menos que se tomen algunas precauciones.
Para aumentar la seguridad del generador de compresión:
La mayoría de los cifrados de clave secreta existentes se pueden clasificar sin ambigüedades como cifrados de flujo o cifrados de bloque . Pero el límite teórico entre ellos es bastante borroso. Por ejemplo, los algoritmos de cifrado de bloques se utilizan en el modo de cifrado de flujo (ejemplo: para el algoritmo DES , modos CFB y OFB ).
Considere las principales diferencias entre los cifrados de flujo y de bloque, no solo en términos de su seguridad y conveniencia, sino también en términos de su estudio en el mundo:
Ahora sobre el estado del mundo:
Según Rainer Rueppel, existen cuatro enfoques principales para el diseño de cifrado de flujo:
Criterios teóricos de Reiner Rüppel para el diseño de sistemas en línea:
Hasta el momento, no se ha demostrado que estos criterios sean necesarios o suficientes para la seguridad de un sistema de cifrado de transmisión. También vale la pena señalar que si el criptoanalista tiene tiempo y poder de cómputo ilimitados, entonces el único cifrado de flujo realizable que es seguro contra tal adversario es el bloc de notas de un solo uso.
Todos los métodos de criptoanálisis de cifrados de flujo generalmente se dividen en poder (ataque "fuerza bruta"), estadísticos y analíticos.
Esta clase incluye ataques que realizan una enumeración completa de todas las opciones posibles. La complejidad de una búsqueda exhaustiva depende del número de todas las posibles soluciones al problema (en particular, el tamaño del espacio de claves o el espacio de texto sin formato). Esta clase de ataques es aplicable a todo tipo de sistemas de cifrado de flujo. Al desarrollar sistemas de encriptación, los desarrolladores se esfuerzan por hacer que este tipo de ataque sea el más efectivo en comparación con otros métodos de piratería existentes.
Los ataques estadísticos se dividen en dos subclases:
Ambos métodos utilizan el principio de complejidad lineal.
Este tipo de ataque se considera bajo el supuesto de que el criptoanalista conoce la descripción del generador, el texto público y el texto privado correspondiente. La tarea del criptoanalista es determinar la clave utilizada (el llenado inicial de los registros). Tipos de ataques analíticos aplicados a cifrados de flujo síncrono:
Son los ataques más comunes para romper cifrados de flujo.
Se sabe que el trabajo para abrir el criptosistema puede reducirse significativamente si la función no lineal pasa información sobre los componentes internos del generador a la salida. Por lo tanto, para restaurar el llenado inicial de los registros, los ataques de correlación examinan la correlación de la secuencia de salida del sistema de cifrado con la secuencia de salida de los registros.
Existen las siguientes subclases de ataques de correlación:
Consideremos el ejemplo del ataque de correlación básico de Siegenthaler ("dividir y abrir"), que se basa en el concepto de la distancia de Hamming entre dos secuencias binarias de la misma longitud. Aplicable a generadores combinados.
Para revelar la influencia del j-ésimo registro de desplazamiento lineal (con la secuencia de salida {x (j) } en el cifrado gamma {g} , una parte del generador se modela como un canal simétrico binario (BSC). El algoritmo de ataque consta de dos etapas (a veces llamadas fases ):
Si la comparación tiene éxito, la fase se llama verdadera y se produce la transición al siguiente registro . De lo contrario, la fase se llama inválida y pasa a . Los valores de salida de este algoritmo son los estados que aportan información a la gamma.
Ahora un poco sobre la selección del valor de umbral y la cantidad de bits gamma necesarios para un criptoanálisis exitoso :
Por ejemplo, elegimos , donde es la longitud del registro. Y luego de estas condiciones encontramos y .
Ataques basados en controles de paridad de bajo pesoUn ejemplo de esta subclase de ataques es el ataque de correlación rápida de Mayer y Staffelbach. Es aplicable tanto a generadores de filtros como a generadores combinados y es la base para todos los demás ataques de correlación rápida de este tipo. La idea del ataque se basa en el uso de ecuaciones de verificación de paridad para un polinomio de retroalimentación de registro lineal .
Ataques de correlación rápidaLos ataques de correlación rápida se entienden como ataques cuya complejidad computacional es mucho menor que la complejidad computacional de los ataques de potencia.
Este tipo de ataque reduce el problema de la decodificación en un canal simétrico binario a un problema de criptoanálisis y se modela como la decodificación de un código lineal aleatorio. Similar a los ataques de correlación básicos, esta subclase usa la noción de distancia de Hamming .
El propósito de este ataque es restaurar el estado inicial del registro de desplazamiento (encontrar la clave) utilizando un esquema de dispositivo conocido y un fragmento de la secuencia de cifrado. La complejidad del ataque depende del tamaño del cifrado y la longitud de la gamma interceptada.
Consta de dos etapas:
Ejemplos de esta clase de ataques son el ataque de Steve Babbage y el ataque de Biryukov-Shamir.
"Asumir y Determinar"El ataque se basa en la suposición de que el criptoanalista conoce la gamma, el polinomio de retroalimentación, el número de cambios de registro entre las salidas del circuito y la función de filtrado. Consta de tres etapas:
La complejidad del algoritmo depende del dispositivo del generador y del número de suposiciones.
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |