2. Teoría de Códigos
La teoría de códigos es una especialidad de las matemáticas que
trata de las leyes de la codificación de la información.
El auge de las comunicaciones a partir de la segunda mitad del
siglo XX motivó un fuerte desarrollo de la teoría de códigos.
3. Breve cronología del origen de la Teoría de Códigos
★ 55 a.C.
○ Julio César, al invadir Gran Bretaña, utiliza códigos para enviar mensajes a sus generales.
★ 1750 d.C.
○ Leonhard Euler sienta las bases de la criptografía de clave pública con su teorema.
★ 1844
○ Samuel Morse transmite su primer mensaje utilizando su código.
★ Década de 1920
○ Se desarrolla la máquina Enigma.
★ 1950
○ Richard Hamming publica un artículo fundamental para crear códigos que detectan y corrigen
errores.
★ Década de 1970
○ Desarrollo de la criptografía de clave pública.
4. Teoría de Códigos
El problema nace de la necesitada de transmitir información de
manera segura y fiable a través de un canal que sea poco seguro y
poco fiable (con ruido, interferencias, etc).
Nos referimos con poco seguro a un canal que puede ser recibidos y/o alterados por
terceros diferentes al emisor y al receptor a quien iba dirigido el mensaje.
Nos referimos con poco fiable, a un canal donde hay ruido, de manera que el
mensaje puede llegar alterado o con errores. Un ruido es cualquier cosa que
dificulte la correcta recepción del mensaje.
5. Tipos de Códigos
Los códigos que atacan los problemas de seguridad se llaman
Códigos Secretos o Criptográficos y lo que intentan resolver las
dificultades por la falta de fiabilidad son los Códigos Detectores
y Correctores de Errores.
Además de la transmisión segura y fiable de la información la
Teoría de Códigos tiene un tercer aspecto, la llamada
Compresión de Datos. Esta estudia cómo codificar los mensajes
de la manera más corta posible, eliminando información que sea
redundante, de manera que transmitirlos sea poco costoso.
6. Códigos correctores de error
El diseño de códigos correctores de errores tiene como objetivo
construir códigos con redundancia razonable y rápida
decodificación. Algunos de los códigos importantes y con más
usos para la ingeniería son:
Códigos de Hamming (códigos perfectos para errores simples) y sus variantes.
Códigos de Golay (código perfecto para errores triples).
Códigos BCH (correctores de errores múltiples) y una de sus variantes, los códigos
Reed-Solomon (correctores de errores a ráfagas).
7. Códigos correctores de error
Uno de los objetivos de los códigos correctores de error es
conseguir aumentar la probabilidad de que el mensaje correcto
pueda ser recuperado por el receptor a pesar de los posibles
errores, siempre que el número de estos sea razonable.
Por ejemplo, para transmitir los mensajes si y no, podemos
asignar al mensaje si el 1 y al no el 0. Sin embargo, en caso de un
error o ruido el receptor puede recibir un 0 en lugar de un 1 y no
saber si hubo o no un error con el mensaje.
8. Códigos correctores de error
Pero si codificamos el mensaje (si) como 11111 y el (no) cómo
00000. Y se supiese que al transmitir un mensaje solo es posible,
por la canal utilizado, cometer un error de uno o dos dígitos,
entonces:
Al recibir un "00001", el receptor sabrá que se trata de un "no".
Así aunque se cometan algunos errores en la transmisión de
algunos dígitos, se tendrá la casi certeza de cuál es el error
cometido en el mensaje recibido, y corregirlo.
9. Códigos correctores de error
La idea es que, antes de enviarlo, el emisor codifica su mensaje m
como u. Esto es, añadiendo a m información redundante, de
manera que si en el canal se produce ruido r y el receptor en vez
de u recibe un mensaje alterado v = u + r, a pesar de todo sea
capaz de recuperar el mensaje original m.
10. Códigos usados en compresión de datos
La compresión de datos está fuertemente relacionada con los
códigos correctores de errores. Ambas disciplinas se iniciaron
con el artículo de Claude Shannon (1948). En dicho artículo se
introduce el concepto de entropía para medir la incertidumbre
de una fuente de información o la cantidad de información
promedio que contienen los símbolos usados.
Algunos ejemplos de códigos de compresión de datos:
Código Huffman (La manera óptima)
Código LZW
11. Códigos usados en compresión de datos
En un código, los símbolos con menor probabilidad son los que
aportan mayor información.
Por ejemplo, en un texto, palabras frecuentes como "que", "el", "a"
aportan poca información, mientras que palabras menos
frecuentes como "corren", "niño", "perro" aportan más
información.
Los códigos usados en compresión de datos utilizan la
probabilidad para eliminar redundancia y hacer los datos más
cortos. Este es el caso del Código Huffman.
12. Códigos Criptográficos
Los códigos correctores de errores corrigen errores provocados
por el canal y no por algún tercero malintencionado. Además, los
métodos que se utilizan para codificar y decodificar son públicos.
No es esta la misma situación cuando se quiere enviar un
mensaje sin que alguien que haya interceptado el canal pueda
interpretar el mensaje (o alterarlo) sin autorización.
13. Códigos Criptográficos
Lo que envía el Cifrador y lo que recibe el Descifrador es lo
mismo, el mensaje, no se altera al pasar por el Canal. Sin
embargo lo que enviamos no es el mensaje original m, sino un
versión cifrada Ek(m). La idea es que la única forma de recuperar
m a partir del conocimiento de Ek(m) sea aplicando la
correspondiente función para descifrar, Dk y que esto no sepa
hacerlo el interceptor. El subíndice k representa una clave que
solo conocen el Emisor y el Receptor y que es la que imposibilita
el descifrado no autorizado.