Cifrador de flujo: definición, funcionamiento y aplicaciones
Explicación clara de qué es un cifrador de flujo, cómo funciona, variantes, historia breve, usos, vulnerabilidades y buenas prácticas para su empleo seguro.
Resumen
Un cifrador de flujo es un tipo de cifrado simétrico que cifra datos combinando cada unidad del texto plano con un flujo de bits pseudoaleatorio llamado flujo de claves. Esta combinación suele realizarse mediante la operación XOR, lo que convierte cada bit o byte del mensaje en su correspondiente cifra de manera independiente y secuencial. Los cifradores de flujo se usan cuando se precisa bajo retardo y consumo reducido de recursos, por ejemplo en comunicaciones en tiempo real o en hardware con limitaciones.
Galería de imágenes
2 ImágenesCaracterísticas y componentes
Los elementos básicos de un cifrador de flujo son: una clave secreta y, con frecuencia, un vector de inicialización (IV) o estado inicial; un generador de flujo de claves pseudoaleatorio (que puede apoyarse en registros de desplazamiento lineales, funciones de salto no lineales o cifradores de bloque en modo contador); y la operación de combinación con el texto plano. Existen dos categorías principales: los cifradores síncronos, cuyo flujo de claves no depende del texto cifrado, y los autofragmentantes o autosincronizables, en los que el propio texto cifrado influye en el cálculo del flujo.
Historia y ejemplos relevantes
El concepto está emparentado con la almohadilla de un solo uso (one-time pad), donde la seguridad es teórica si el flujo es verdaderamente aleatorio y usado una sola vez. En la práctica se usan generadores deterministas que crean un flujo pseudoaleatorio a partir de una clave corta. Ejemplos históricos y modernos incluyen algoritmos conocidos que ilustran la evolución del campo: RC4 (ahora obsoleto por vulnerabilidades), A5/1 (utilizado en GSM y también atacado), y diseños contemporáneos como Salsa20 o ChaCha20 que ofrecen un buen balance de seguridad y rendimiento.
Ventajas, limitaciones y riesgos
Entre las ventajas destacan la velocidad y la simplicidad, además de un bajo consumo de hardware. No obstante, los cifradores de flujo son especialmente sensibles a errores de gestión: reutilizar la misma clave o IV para dos flujos distintos puede facilitar ataques que recuperen información del texto plano; fallos en el generador de flujo pueden exponer la clave; y la ausencia de autenticación deja la puerta abierta a modificaciones no detectadas. Por estas razones se recomienda usar cifrados autenticados y esquemas que garanticen unicidad del IV.
Usos y buenas prácticas
- Usarlos cuando se requiere cifrado en tiempo real o bloques de longitud variable.
- Asegurar que cada sesión use un IV o contador único y no reutilizar combinaciones clave+IV.
- Preferir algoritmos modernos revisados por la comunidad y añadir autenticación (AEAD) para prevenir manipulación.
- Evitar algoritmos con historial de vulnerabilidades conocidas; reemplazarlos por alternativas actuales y auditadas.
Distinciones y datos relevantes
La diferencia esencial con un cifrador de bloque es el modo de operación: los bloques procesan fragmentos de longitud fija y suelen requerir modos de operación para proteger integridad y estructura, mientras que los cifradores de flujo actúan unidad por unidad y tienden a propagar menos errores. Sin embargo, su correcta seguridad depende críticamente del generador de flujo y de la gestión de claves y IV. Para profundizar en técnicas, estándares y análisis criptográfico puede consultarse material técnico y normativo.
Referencias en línea
- Recursos generales sobre criptografía
- Conceptos de cifrado simétrico
- Comparación con cifradores de bloque
- Texto plano y su definición
- Flujo de claves: definiciones y ejemplos
- Unidad mínima de cifrado (bit, byte)
- Operaciones a nivel de bits
- Procesamiento por bytes
- Cifradores de bloque y sus modos
- Gestión de claves criptográficas
- Tamaños de clave comunes
- Alcance histórico: almohadilla de un solo uso
- Características de la OTP
- Limitaciones prácticas de la OTP
- Aleatoriedad verdadera vs pseudoaleatoriedad

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:
- 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.
- 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:
- Si la salida del primer LFSR es "1", la salida del segundo LFSR se convierte en la salida del generador.
- 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.
Comparación de cifrados de flujo
| StreamCipher | Fecha de creación | Velocidad | (bits) | Ataque | |||
| Efectivo | Vector de inicialización | EstadoInterno | Los más conocidos | Complejidad computacional | |||
| A5/1 | 1989 | Voz (Wphone) | 54 | 114 | 64 | KPA activo O | ~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 | 8-8288 Normalmente | 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? | 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) |
| 1987 | Impresionante | 8-2048 Normalmente | 8 | 2064 | Shamir Initial-Bytes Key-Derivation OR KPA | 2 13O 2 33 | |
| Salsa20 | Antes de 2004 | 4,24 (W G4) -11 | 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 | Variable, normalmente | 256 - 800 | N/A (2006) | N/A (2006) |
| WAKE | 1993 | Rápido | 8192 | CPA Y CCA | Vulnerable | ||
| StreamCipher | Fecha de creación | Velocidad | (bits) | Ataque | |||
| Efectivo | 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.
Artículos relacionados
Autor
AlegsaOnline.com Cifrador de flujo: definición, funcionamiento y aplicaciones Leandro Alegsa
URL: https://es.alegsaonline.com/art/94230
Fuentes
- security.ece.orst.edu : (PDF)
