En la práctica, un dígito es típicamente un bit y la operación de combinación es un exclusivo-o (XOR).
El valor semilla sirve como clave criptográfica para descifrar el flujo de texto cifrado.
Sin embargo, el flujo de claves debe generarse completamente al azar con al menos la misma longitud que el texto sin formato y no se puede usar más de una vez.
Esto hace que el sistema sea complicado de implementar en muchas aplicaciones prácticas y, como resultado, la almohadilla de un solo uso no se ha utilizado ampliamente, excepto en las aplicaciones más críticas.
La generación, distribución y gestión de claves son fundamentales para esas aplicaciones.
Un cifrado de flujo utiliza una clave mucho más pequeña y conveniente, como 128 bits.
El flujo de claves ahora es pseudoaleatorio y, por lo tanto, no es verdaderamente aleatorio.
En la forma más común, se utilizan dígitos binarios (bits) y el flujo de claves se combina con el texto sin formato utilizando la operación exclusiva o (XOR).
En un cifrado de flujo síncrono, el remitente y el receptor deben estar exactamente en el mismo paso para que el descifrado sea exitoso.
Otro enfoque es etiquetar el texto cifrado con marcadores en puntos regulares de la salida.
Sin embargo, el uso de LFSR por sí solos es insuficiente para proporcionar una buena seguridad.
[1][2] Se han propuesto varios esquemas para aumentar la seguridad de las LFSR.
Un generador de pasos alternos comprende tres LFSR, que llamaremos LFSR0, LFSR1 y LFSR2 por conveniencia.
Eso generalmente significa que se debe proporcionar un nonce o clave diferente para cada invocación del cifrado.
Los períodos cortos para los cifrados de flujo han sido una preocupación práctica.
Este último dispositivo se puede diseñar y utilizar en entornos menos estrictos.
ChaCha se está convirtiendo en el cifrado de flujo más utilizado en software;[3] otros incluyen: RC4, A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, Salsa20, SEAL, SOBER, SOBER-128, y WAKE.