¿Cómo funciona el cifrado E0?

Este sitio tiene una excelente descripción de los cifrados de flujo:
http://kepitan.blogspot.com/2009…

Un cifrado de flujo es un cifrado de clave simétrica donde los bits de texto sin formato se combinan con un flujo de bits de cifrado pseudoaleatorio ( flujo de claves ),

típicamente por una operación exclusiva o (xor). En un cifrado de corriente

los dígitos de texto sin formato se cifran uno a la vez, y la transformación de

dígitos sucesivos varían durante el cifrado. Un nombre alternativo es un

cifrado de estado, ya que el cifrado de cada dígito depende de

estado actual. En la práctica, los dígitos son típicamente bits individuales o

bytes

E0 en particular es solo un cifrado de flujo y no será muy diferente de la descripción anterior.

En cada iteración, E0 genera un bit utilizando cuatro registros de desplazamiento
de diferentes longitudes (25, 31, 33, 39 bits) y dos estados internos,
cada uno de 2 bits de largo. En cada tic del reloj, los registros se desplazan y el
dos estados se actualizan con el estado actual, el estado anterior y
los valores en los registros de desplazamiento. Luego se extraen cuatro bits del
los registros de desplazamiento y se suman. El algoritmo XOR que suma con
El valor en el registro de 2 bits. El primer bit del resultado es la salida
para la codificación

E0 se divide en tres partes:

  1. Generación de claves de carga útil

  2. Generación Keystream

  3. Codificación

La configuración del estado inicial en Bluetooth usa la misma estructura
como el generador de flujo de bits aleatorio. Estamos tratando con dos
algoritmos combinados E0. Se produce un estado inicial de 132 bits en el
primera etapa con cuatro entradas (la clave de 128 bits, la dirección Bluetooth activada
48 bits y el contador maestro de 26 bits). La salida es procesada por
una operación polinómica y la clave resultante pasa por el segundo
etapa, que genera la secuencia utilizada para la codificación. La llave tiene un
longitud variable, pero siempre es un múltiplo de 2 (entre 8 y 128 bits).
Generalmente se usan claves de 128 bits. Estos se almacenan en el segundo
registros de cambio de etapa. 200 bits pseudoaleatorios son producidos por 200
marca el reloj y los últimos 128 bits se insertan en los registros de desplazamiento. Es el estado inicial del generador de flujo.

http://en.wikipedia.org/wiki/E0_…