miércoles, 22 de agosto de 2012

ONE TIME -PAD One Time Pad



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.

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.

FUNCIONAMIENTO

• El primer paso era conseguir un bloque (pad) de hojas con cientos de éstas.
• Cada hoja contenía una llave única en forma de línea de secuencias aleatorias de letras.
• Dos copias del bloque: una para el emisor y otra para el receptor.
• Para encriptar el emisor aplica el criptosistema de Vigenére con la primera hoja del bloque como llave.
• El receptor puede descriptar usando el mismo criptosistema y con la misma llave.
• Una vez que el mensaje fue encripatado, enviado, recibió y descriptado con éxito la hoja que se usó como hoja y se destruye.
• Cuando el siguiente mensaje se va a enviar la siguiente llave del bloque es usada
– la cual es subsecuentemente destruida y así se continua
• Debido a que cada llave es usada una sola vez, el
sistema se conoce como onetime pad
.




Ejemplo:
Llave:
P L M O E Z Q K J Z L R T E A V C R C B Y
Texto claro:
a t t a c k t h e v a l l e y a t d a w n
Criptosistema:
P E F O G J J R N UL C E I Y V V U C X L


Otro ejemplo mas simple
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?
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;
}


No hay comentarios:

Publicar un comentario