Cifrador de flujo

En criptografía, un cifrado de flujo es un cifrado de clave simétrica en el que los bits del texto plano se combinan con un flujo de bits de cifrado pseudoaleatorio (flujo de claves) mediante una operación de exclusión-o (xor). En un cifrado de flujo, los dígitos del texto plano se cifran de uno en uno, y la transformación de los dígitos sucesivos varía durante el estado de cifrado. Un nombre alternativo es cifrado de estado, ya que el cifrado de cada dígito depende del estado actual. En la práctica, los dígitos suelen ser bits o bytes individuales.

Los cifradores de flujo representan un enfoque diferente del cifrado simétrico respecto a los cifradores de bloque. Los cifradores de bloques funcionan con grandes bloques de longitud fija. Los cifradores de flujo suelen ejecutarse a mayor velocidad que los cifradores de bloque y tienen menos requisitos de hardware. Sin embargo, los cifradores de flujo pueden ser susceptibles de sufrir graves problemas de seguridad si se utilizan de forma incorrecta; por ejemplo, en particular, nunca debe utilizarse dos veces el mismo estado inicial.

Un cifrado de flujo hace uso de una clave criptográfica mucho más pequeña y conveniente, por ejemplo, claves de 128 bits. Basándose en esta clave, genera un flujo de claves pseudoaleatorio que puede combinarse con los dígitos del texto plano de forma similar al algoritmo de cifrado de la almohadilla de un solo uso. Sin embargo, como el flujo de claves es pseudoaleatorio, y no verdaderamente aleatorio, la seguridad asociada a la almohadilla de un solo uso no puede aplicarse y es muy posible que un cifrado de flujo sea completamente inseguro.

Funcionamiento del generador de flujos de claves en A5/1, un cifrado de flujos basado en LFSR utilizado para cifrar las conversaciones de telefonía móvil.Zoom
Funcionamiento del generador de flujos de claves en A5/1, un cifrado de flujos basado en LFSR utilizado para cifrar las conversaciones de telefonía móvil.

Tipos de cifrado de flujo

Un cifrado de flujo genera elementos sucesivos del flujo de claves basándose en un estado interno. Este estado se actualiza de dos maneras:

  1. Si el estado cambia independientemente de los mensajes de texto plano o de texto cifrado, el cifrado se clasifica como un cifrado de flujo síncrono.
  2. Si el estado se actualiza en función de los cambios anteriores de los dígitos del texto cifrado, el cifrado se clasifica como un cifrado de flujo autosincronizado.

Cifrado de flujo sincrónico

En un cifrado de flujo síncrono se genera un flujo de dígitos pseudoaleatorios independientemente de los mensajes de texto plano y de texto cifrado, y luego se combina con el texto plano (para cifrar) o con el texto cifrado (para descifrar). En la forma más común, se utilizan dígitos binarios (bits), y el flujo de claves se combina con el texto plano utilizando la operación exclusiva o (XOR). Esto se denomina cifrado de flujo aditivo binario.

En un cifrado de flujo síncrono, el emisor y el receptor deben estar sincronizados para que el descifrado tenga éxito. Si se añaden o eliminan dígitos del mensaje durante la transmisión, se pierde la sincronización. Para restablecer la sincronización, se pueden probar sistemáticamente varios desvíos para obtener el descifrado correcto. Otro método consiste en marcar el texto cifrado con marcadores en puntos regulares de la salida.

Sin embargo, si un dígito se corrompe en la transmisión, en lugar de añadirse o perderse, sólo se ve afectado un único dígito del texto plano y el error no se propaga a otras partes del mensaje. Esta propiedad es útil cuando la tasa de error de transmisión es alta; sin embargo, hace menos probable que el error se detecte sin otros mecanismos. Además, debido a esta propiedad, los cifradores de flujo síncronos son muy susceptibles a los ataquesactivos: si un atacante puede cambiar un dígito en el texto cifrado, podría ser capaz de realizar cambios predecibles en el correspondiente bit del texto plano; por ejemplo, voltear un bit en el texto cifrado hace que el mismo bit sea volteado (Toggled) en el texto plano.

Cifrado de flujo autosincronizado

Los cifradores de flujo autosincronizados son otra técnica que utiliza parte de los N dígitos del texto cifrado anterior para calcular el flujo de claves. Estos esquemas se conocen también como cifrado de flujo asíncrono o autoclave de texto cifrado (CTAK). La idea de la autosincronización se patentó en 1946 y tiene la ventaja de que el receptor se sincroniza automáticamente con el generador del flujo de claves tras recibir N dígitos del texto cifrado, lo que facilita la recuperación si se pierden o se añaden dígitos al flujo de mensajes. Los errores de un solo dígito tienen un efecto limitado, ya que sólo afectan a un máximo de N dígitos del texto plano. Es algo más difícil realizar ataques activos a los cifradores de flujo autosincronizados que a sus homólogos sincrónicos.

Un ejemplo de cifrado de flujo autosincronizado es un cifrado de bloques en modo de retroalimentación de cifrado (CFB).

Cifrados de flujo basados en registros de desplazamiento de retroalimentación lineal

Los cifrados de flujo binario se construyen a menudo utilizando registros de desplazamiento de retroalimentación lineal (LFSR) porque pueden implementarse fácilmente en hardware y pueden analizarse rápidamente desde el punto de vista matemático. Sin embargo, el uso de LFSRs no es suficiente para proporcionar una buena seguridad. Se han diseñado varios esquemas para aumentar la seguridad de los LFSR.

Funciones de combinación no lineales

Dado que los LFSR son intrínsecamente lineales, una técnica para eliminar la linealidad consiste en introducir las salidas de un grupo de LFSR paralelos en una función booleana no lineal para formar un generador de combinación. Varias propiedades de dicha función de combinación son importantes para garantizar la seguridad del esquema resultante, por ejemplo, para evitar ataques de correlación.

Generadores controlados por reloj

Normalmente, los LFSR se escalonan regularmente. Una técnica para introducir la no linealidad es hacer que el LFSR se sincronice irregularmente, controlado por la salida de un segundo LFSR. Estos generadores incluyen el generador de parada y arranque, el generador de pasos alternos y el generador de contracción.

El generador de parada y arranque (Beth y Piper, 1984) consiste en dos LFSR. Un LFSR se sincroniza si la salida de un segundo es un "1", de lo contrario repite su salida anterior. Esta salida se combina (en algunas versiones) con la salida de un tercer LFSR sincronizado a un ritmo regular.

El generador de contracción utiliza una técnica diferente. Se utilizan dos LFSR, ambos sincronizados regularmente de la siguiente manera:

  1. Si la salida del primer LFSR es "1", la salida del segundo LFSR se convierte en la salida del generador.
  2. Si la salida del primer LFSR es "0", la salida del segundo se descarta, y el generador no emite ningún bit.

Esta técnica sufre ataques de sincronización en el segundo generador, ya que la velocidad de la salida es variable de manera que depende del estado del segundo generador. Esto puede mejorarse amortiguando la salida.

Filtro generador

Otro enfoque para mejorar la seguridad de un LFSR es pasar todo el estado de un único LFSR a una función de filtrado no lineal.

Otros diseños

En lugar de un dispositivo de conducción lineal, se puede utilizar una función de actualización no lineal. Por ejemplo, Klimov y Shamir propusieron funciones triangulares (T-Functions) con un solo ciclo en n palabras de bits.

Seguridad

Para ser seguro, el periodo del flujo de claves (el número de dígitos que salen antes de que el flujo se repita) debe ser lo suficientemente grande. Si la secuencia se repite, los textos cifrados superpuestos pueden alinearse entre sí "en profundidad", y existen técnicas que permiten extraer el texto plano de los textos cifrados generados con estos métodos.

Uso

Los cifradores de flujo se utilizan a menudo en aplicaciones en las que el texto plano viene en cantidades de longitud desconocida, como en las conexiones inalámbricas seguras. Si se utilizara un cifrado por bloques en este tipo de aplicaciones, el diseñador tendría que elegir entre la eficiencia de la transmisión o la complejidad de la implementación, ya que los cifradores por bloques no pueden trabajar directamente con bloques más cortos que su tamaño. Por ejemplo, si un cifrado por bloques de 128 bits recibe ráfagas separadas de 32 bits de texto plano, tres cuartas partes de los datos transmitidos necesitan relleno. Los cifradores de bloque deben utilizarse en modo de robo de texto cifrado o de terminación de bloque residual para evitar el relleno, mientras que los cifradores de flujo eliminan este problema al operar sobre la unidad más pequeña transmitida (normalmente bytes).

Otra ventaja de los cifrados de flujo en la criptografía militar es que el flujo de cifrado puede ser generado por un dispositivo de cifrado sujeto a estrictas medidas de seguridad y luego alimentado a otros dispositivos, por ejemplo, un equipo de radio, que realizará la operación xor como parte de su función. El otro dispositivo puede estar diseñado para ser utilizado en entornos menos seguros.

RC4 es el cifrado de flujo más utilizado en el software; otros son: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 y WAKE.

RC4 es uno de los diseños de cifrado de flujo más utilizados.Zoom
RC4 es uno de los diseños de cifrado de flujo más utilizados.

Comparación de cifrados de flujo

StreamCipher

Fecha de creación

Velocidad
(ciclos/byte)

(bits)

Ataque

Efectivo
Longitud de clave

Vector de inicialización

EstadoInterno

Los más conocidos

Complejidad computacional

A5/1

1989

Voz (Wphone)

54

114

64

KPA activo O
Compromiso de tiempo y memoria
del KPA

~2 segundos OR2 39.91

A5/2

1989

Voz (Wphone)

54

114

64?

Activo

4,6 milisegundos

FISH

1993

Bastante rápido (Wsoft)

Enorme

Ataque de texto conocido

11

Grano

Antes de 2004

Rápido

80

64

160

Clave-Derivación

43

HC-256

Antes de 2004

4 (WP4)

256

256

65536

ISAAC

1996

2.375 (W64-bit) -4
.6875
(W32-bit)

8-8288 Normalmente
40-256

N/A

8288

(2006) Primera ronda-Derivación del Estado Interior Débil

4.67×101240(2001)

MUGI

1998-2002

128

128

1216

N/A (2002)

~2 82

PANAMÁ

1998

2

256

128?

1216?

Colisiones Hash (2001)

82

Phelix

Antes de 2004

hasta 8 (Wx86)

256 + un Nonce de 128 bits

128?

Diferencial (2006)

37

Pike

1994

0,9 x FISH (Wsoft)

Enorme

N/A (2004)

N/A (2004)

Py

Antes de 2004

2.6

8-2048?
normalmente 40-256?

64

8320

Teoría criptoanalítica (2006)

75

Conejo

2003-Feb

3,7(W P3)-9,7(W ARM7)

128

64

512

N/A (2006)

N/A (2006)

RC4

1987

Impresionante

8-2048 Normalmente
40-256

8

2064

Shamir Initial-Bytes Key-Derivation OR KPA

2 13O 2 33

Salsa20

Antes de 2004

4,24 (W G4) -11
,84
(WP4)

128 + un Nonce de 64 bits

512

512 + 384 (clave+IV+índice)

Diferencial (2005)

N/A (2005)

Gritar

2002

4 - 5 (Wsoft)

128 + un Nonce de 128 bits

32?

Función de redondeo de 64 bits

SEAL

1997

Muy rápido (W32-bit)

32?

NIEVE

Antes de 2003

Muy bueno (W32-bit)

128 O 256

32

SOBER-128

2003

hasta 128

Forja de mensajes

−6

SOSEMANUK

Antes de 2004

Muy bueno (W32-bit)

128

128

Trivium

Antes de 2004

4 (Wx86) - 8 (WLG)

80

80

288

Ataque de fuerza bruta (2006)

135

Turing

2000-2003

5.5 (Wx86)

160

VEST

2005

42 (WASIC) -64 (WFPGA)

Variable, normalmente
80-256

Variable, normalmente
80-256

256 - 800

N/A (2006)

N/A (2006)

WAKE

1993

Rápido

8192

CPA Y CCA

Vulnerable

StreamCipher

Fecha de creación

Velocidad
(ciclos/byte)

(bits)

Ataque

Efectivo
Longitud de clave

Vector de inicialización

EstadoInterno

Los más conocidos

Complejidad computacional

Páginas relacionadas

  • eSTREAM

Preguntas y respuestas

P: ¿Qué es un cifrado de flujo?


R: Un cifrado de flujo es un cifrado de clave simétrica en el que los bits de texto plano se combinan con un flujo de bits de cifrado pseudoaleatorio (flujo de claves) mediante una operación de exclusión-o (xor).

P: ¿En qué se diferencia de los cifradores de bloque?


R: Los cifradores de flujos suelen ejecutarse a mayor velocidad que los cifradores de bloques y tienen menores requisitos de hardware. Los cifradores de bloques funcionan con grandes bloques de longitud fija, mientras que los cifradores de flujo cifran los dígitos de uno en uno y la transformación de los dígitos sucesivos varía durante el estado de cifrado.

P: ¿Qué tipo de claves utiliza?


R: Los cifradores de flujo utilizan claves criptográficas mucho más pequeñas y cómodas, por ejemplo claves de 128 bits.

P: ¿Cómo genera el flujo de claves?


R: El flujo de claves se genera en función de la clave criptográfica utilizada, de forma similar al algoritmo de cifrado de almohadilla de un solo uso. Sin embargo, como el flujo de claves es pseudoaleatorio y no verdaderamente aleatorio, no se puede aplicar la seguridad asociada a la almohadilla de un solo uso.

P: ¿Por qué no se debe utilizar nunca dos veces el mismo estado inicial?


R: Utilizar dos veces el mismo estado inicial puede acarrear graves problemas de seguridad, ya que facilita a los atacantes el descifrado de datos sin conocer su clave criptográfica o sin tener acceso a ella.

P: ¿Existe algún riesgo asociado al uso de cifradores de flujo?


R: Sí, si se utilizan de forma incorrecta o sin tomar las precauciones adecuadas, existe un riesgo asociado al uso de cifradores de flujo, ya que pueden ser completamente inseguros si no se manejan correctamente.

AlegsaOnline.com - 2020 / 2023 - License CC3