One-Time Pad el cifrado perfecto

Hay quienes creen que no existe un método de cifrado perfecto, o un cifrado que te pueda garantizar seguridad absoluta y se equivocan.

El método de cifrado de One-Time Pad, que fue inventado en 1917 por el Mayor Joseph Mauborgne y Gilbert Vernam de AT&T. Claude Shannon, 25 años después, se encargó de demostrar con la teoría de la información que este cifrado cumple con ser un secreto perfecto, lo que quiere decir que el contenido del mensaje no puede aportar nada de información a un atacante.

Es un método que sin importar el poder computacional que se tenga o si se haya inventado la computadora cuántica o si los extraterrestres de Andrómeda vengan a la tierra con sus métodos computacionales inimaginables, aún asi será seguro.

Preliminares

Necesitamos una llave de la misma longitud que el mensaje, la cual deberá ser de verdad aleatoria y no pseudo aleatoria. Además esta llave se supone que las dos partes la deben conocer (problema de intercambio de llaves) y cuando una parte cifre el mensaje debe destruir esa llave de alguna forma que no pueda recuperarse y luego enviar el mensaje cifrado, luego la otra parte va a descifrarlo y al terminar de hacerlo debe destruir la llave de nuevo.

Es primordial que no se vuelva a usar la misma llave dos veces pues un criptoanalista podría romper el cifrado sabiendo dos mensajes diferentes que se encriptaron con la misma llave.

¿Cómo funciona?

Es algo muy simple de entender, teniendo el texto:

Teniendo la llave:

El texto cifrado sería:

Porque:
A + R mod 26 = S
M + F mod 26 = S
A + T mod 26 = U

Suponiendo que A vale 1 y R vale 17: 1+17 = 18 y 18 / 26 nos daría como residuo 18, entonces el 18 corresponde a la letra S.

Es importante ver que no puede romperse incluso si pudieramos calcular todas las posibilidades y buscar mensajes coherentes, pues al decifrarlo podría decir SIVOY como NOVOY entonces es imposible saber cual es el mensaje cifrado sin saber la llave. Según dicen, los Rusos cifraron algunos mensajes con este método y siguen hasta la fecha sin poderse descifrar, y así seguirán para siempre.

El problema con este método y en general con cualquier método de cifrado simétrico es el intercambio de llaves, pues ¿cómo podrías intercambiar la clave del One Time Pad de una manera segura?

Fin

Si quieren profundizar más en el tema podrían leer en la página 15 del libro Applied Cryptography escrito por Bruce Schneier que explica con un poco más de detalle este algoritmo.

Con este código en javascript podríamos obtenerlo:

var charCodeCero = ("A".charCodeAt(0))-1;
function oneTimePad(mensaje, llave) {
	mensaje = mensaje.toUpperCase();
	llave = llave.toUpperCase();
	var cifrado = "";
        for(var i = 0; i < mensaje.length; i++) {
		cifrado += String.fromCharCode((( mensaje.charCodeAt(i) - charCodeCero +
                                                 llave.charCodeAt(i) - charCodeCero 
                                                 ) % 26) + charCodeCero);
	}
	return cifrado;
}
Un commentario
  1. Jaime

    1 septiembre 2010

    Hola, me parece muy interesante tu blog.

    Podrías decirme como se descifraría el mensaje una vez cifrado, sería lo único que falta para estar completo del todo.

    Muchas gracias.
    Jaime.

Deja un comentario