Sea cual sea la configuración que se escoja para el LFSR, todas estas convergen en que pretenden generar secuencias lo más aleatorias posibles, tienen realimentación y necesitan un valor inicial. El valor de inicialización de los registros del LFSR, no puede ser cero, ya que la secuencia se quedaría en cero siempre (por lo menos en las configuraciones mas comunes). Por lo que es necesario darles un valor inicial, diferente de cero. A este valor se le conoce como KEY. En términos de circuitos digitales, la implementación del KEY, luce de la siguiente forma:
Criptología
Al mezclar información digital con las secuencias propias de un LFSR, se pueden decifrar los datos. Un ejemplo de ello, es la codificación de una señal digital transmitida con la ayuda del PN, producido por un LFSR. Una vez recibida la señal, se hace la operación XOR, con el orden adecuado para despejar la ecuación booleana que representa el cifrado, y se obtiene la señal original de nuevo. Esto se explica mejor de manera gráfica, con la siguiente imagen:
Uso en software de un LFSR
En esta sección, se implementara la metodología del LFSR, para cifrar una canción, por medio de un sencillo script en el lenguaje Python.
Primero, se usarán algunas operaciones entre bits, para probar que se esté generando una secuencia. Se usará para el script, un LFSR de 32 bits.
Definimos una variable llamada lfsr y le damos el valor inicial de 3123123123. Este valor, es la llave, o KEY, del LFSR, es el valor de inicialización. Cabe resaltar que se escogió éste número por que en binario, su bit más significativo está en 1, esto es útil, para poder ver todos los bits, ya que si hay un cero a la izquierda, la consola de python no los muestra. Claramente el número no debe superar los 32 bits, es decir, no debe ser mayor de 4.294.967.296. El número seleccionado es 10111010001001110001001110110011 en binario. Se puede visualizar en la consola de Python, con el comando print bin(lfsr).
lfsr=3123123123;#inicializo el LFSR KEY
print bin(lfsr);
El siguiente paso, es crear una variable, que en ésta ocasión se recibe el nombre de count, la cual servirá de parámetro para un ciclo while, cuya condición es que la variable count, sea menor que 10. Con esto se pretende ver en 10 ciclos, la secuencia producida por el LFSR.
count=0;
while(count<10):
Dentro del ciclo while, se declaran algunas variables que corresponden a los bits de realimentación que se usarán. Para 32 bits, según la tabla mostrada con anterioridad, los taps deben ser el bit 1, el 5, el 6 y el 31.
lfsr=3123123123;#inicializo el LFSR KEY
print bin(lfsr);
count=0;
while(count<10):
#SHIFT LFSR
bit1=(lfsr>>0) & 1;
bit2=(lfsr>>5) & 1;
bit3=(lfsr>>6) & 1;
bit4=(lfsr>>31) & 1;
Para adquirir el bit específico, en el primer ciclo del loop, para cada caso (bit1, bit5, bit6, bit31), se usa el comando '>>', el cual se encarga de correr los bits hacia la derecha, para llegar a una posición específica en la cadena de bits. Por ejemplo, si se tiene la siguiente secuencia de bits: s = 101101, s>>2, da como resultado 001011; los 2 últimos bits desaparecen. Así mismo, está el corrimiento hacía la izquierda, en donde se aumenta el valor en potencias de dos. Por ejemplo, s<<2, da como resultado 10110100. Para nuestro caso, en el primer ciclo del programa,
while(count<10):
#SHIFT LFSR
bit1=(lfsr>>0) & 1;
bit2=(lfsr>>5) & 1;
bit3=(lfsr>>6) & 1;
bit4=(lfsr>>31) & 1;
bitnuevo=bit1^ bit2 ^ bit3 ^ bit4;
lfsr=lfsr>>1;
lfsr=(lfsr & 0x7fffffff) | (bitnuevo<<31);
print bin(lfsr);
count= count + 1;
Ejemplo - Cifrando una canción usando LFSR 32 bits.
Una vez se ha entendido como funciona un LFRS, este se pondra a prueba para ver sus aplicativos en criptologia y de esta forma entender completamente porque pueden ser muy utiles, en este caso se cifrara una cancion(
Descargar) que estan muestreada a 44100 hz, y contiene muestras de 8 bits. Para escuchar la cancion, procederemos a abrir Audacity y vamos a Archivo->Importar->Datos en bruto.