Protección de datos
Criptografía
 La necesidad de ocultar lo enviado en
un mensaje para evitar que alguien
no autorizado lo llegue a conocer es
muy antigua.
 Se atribuye a Julio César un método
muy simple de encriptación, sustituyendo cada letra en el mensaje por la
que se encuentra en el abecedario
tres lugares después.
Criptografía
Este pequeño programa permite ver
lo antes expuesto.
Criptografía
 El problema fundamental en la
criptografía es la necesidad que
tienen emisor y receptor del
mensaje en ponerse de acuerdo en
la forma de cifrado y en la clave.
 Durante mucho tiempo se pensó que
no había posibilidad de intercambiar
claves sin enviarlas por algún medio
seguro, para evitar que pudieran ser
interceptadas comprometiendo así la
seguridad de la comunicación.
 Pero en la década de los 70 del siglo
XX dos matemáticos norteamericanos, Whitfield Diffie y Martin Hellman,
demostraron que dos personas podían acordar una clave sin necesidad
de entrevistarse y usando una línea
de transmisión insegura en la que
pudiera haber escuchas espiando, sin
que estos descubrieran dicha clave.
 Muy poco tiempo después se elaboró
un nuevo sistema de criptografía que
ni siquiera necesita intercambiar una
clave. Dicho sistema difiere de los
que se venían utilizando hasta el
momento en el hecho de que, en
lugar de una clave que se usa tanto
para encifrar como para descifrar un
mensaje, se necesitan dos distintas.
 De las dos claves necesarias, una, la
llamada clave pública, debe ser conocida por todos aquellos que quieran
mandar un mensaje cifrado a la
persona en cuestión. Por tanto, cada
persona debería publicar su clave
pública como lo haría con su número
de teléfono si es que quiere recibir
mensajes encriptados.
 En cambio, guardará su clave privada,
que es la que le servirá para descifrar
los mensajes que reciba encriptados
con su clave pública. Este sistema fue
desarrollado por tres matemáticos,
Rivest, Shamir y Adleman, por lo que
se conoce como método RSA.
 El procedimiento que mostramos a
continuación pone de manifiesto la
posibilidad de enviar mensajes de
forma segura a través de un canal de
comunicación que puede estar
sometido a escuchas.
Criptografía
 Tomamos nuestro mensaje en el que
cada letra - en mayúsculas - se ha
sustituido por el correspondiente
código ASCII, dándonos como
resultado un número. En el ejemplo
que estamos considerando, el
mensaje a transmitir es:
HAY QUE BUSCAR UNA PALABRA
Criptografía
 Se ha elaborado una pequeña
aplicación que permite realizar la
tarea anterior de forma fácil.
Criptografía
 El número resultante es
72658932818569326685836765823285
78653280657665668265
Nótense los números 32 en rojo.
Corresponden a los espacios entre palabras, ya que el código ASCII del espacio es 32.
Criptografía
 A continuación buscamos el
número primo inmediatamente
siguiente al número anterior, y lo
llamamos a.
 Para ello también hay elaborada
una aplicación
Criptografía
a=72658932818569326685836765823
28578653280657665668273
Está 8 unidades por encima del
número formado por los códigos
ASCII de las letras de nuestro
mensaje.
Criptografía
 Ahora buscamos un número primo
suficientemente grande, por ejemplo
de 70 cifras. Podemos buscar el que
está inmediatamente por encima del
número
 130198345000077536451231109387
198230928730915582091997103987
2763450912
 Dicho número es
b=13019834500007753645123110938719823
09287309155820919971039872763451143
Multiplicando a y b se obtiene el número
94600728024495453180612733042712282
30422548834830240679322387992252998
63772219600781084058085122216174440
3027210880686039
 Este número se lo enviamos a nuestro corresponsal, que elige otro
número primo grande y lo multiplica
por el número que ha recibido,
devolviéndonos el resultado. Si el
número que eligió es el
c=234567900000000000000000000000
000000000000000007689245123129
 El producto que nos devuelve es
 221902941111770470121246495030
896303643093339290631723130390
643250998828006942384193681996
458422366438993393470827685928
295922440617573912784834563071
247580839272859817047854629603
1
 Al recibir este número, lo dividimos
por b – y la división debe ser necesariamente exacta – y el resultado se
lo reenviamos. Es el número
 170434532874928879651106899019
599180468487197931057812871939
418413900595479232662567238059
1552245537539953786217
 Él ahora lo divide por c y obtiene
726589328185693266858367658232
8578653280657665668273
Restando el 8 que también le enviamos
al principio queda
72658932818569326685836765823285
78653280657665668265
 ¿Está convencido de la bondad del
método? ¿Es seguro?
 Desgraciadamente, no lo es. Hay un
paso que compromete la seguridad.
 Vamos a verlo en esquema, sin
escribir los números que hemos
estado enviando.
 Partimos de un número m que es nuestro
mensaje.
 Buscamos un número primo a por encima
de m, y otro número primo b.
 Enviamos el producto a*b. Aunque lo
intercepten no pueden obtener a, pero el
escucha guarda a*b.
 Nuestro corresponsal busca un número
primo grande c y nos envía el producto
a*b*c.
 El escucha que nos espía en la línea de
comunicación toma el número a*b*c, y
dividiéndolo por a*b descubre c.
 Nosotros recibimos a*b*c, lo dividimos por
b y devolvemos a*c.
 Nuestro corresponsal divide el número
recibido por c y obtiene a, y como también
le enviamos al principio la diferencia entre
a y m, recupera el mensaje m. Pero lo
mismo puede hacer al espía, ya que conoce
c.
 ¡Nuestro esquema no funciona! Si
hubiéramos podido elegir el mismo
número primo grande b para nosotros
y para nuestro corresponsal, la cosa
funcionaría. Bastaría mandarle el
número a*b y la diferencia entre a y
m para que pudiera recuperar el
mensaje. El espía, incapaz de descomponer en factores a*b, no podría.
 Pero, como demostraron Diffie y
Hellman, es posible acordar una clave
con nuestro corresponsal – en nuestro caso el número b – sin que un
escucha en la línea pueda calcular
dicho número a pesar de que
tengamos que intercambiar datos
numéricos. Veamos como.
 Elegimos un número primo muy grande p,
y un número g que usualmente se toma
igual a 3 ó 5. También convenimos con
nuestro corresponsal que usaremos una
función que es la siguiente: para cada
número natural x, el valorx de la función
será el resto de dividir g por p. Todos
estos datos los enviamos a través de una
línea que puede ser insegura, pero no
importa que sean conocidos.
 Para ver como funciona el sistema,
elegiremos como número p uno pequeño,
por ejemplo p = 223, y g=3. En realidad,
para asegurarnos de que sea imposible
descubrir la clave, p debería tener al
menos 300 cifras.
 Ahora nosotros elegimos un número, que
mantendremos secreto, por ejemplo el 17.
El resto de dividir 317entre 223 es 194, y se
lo enviamos a nuestro corresponsal.
 Él ha elegido otro número secreto, por
ejemplo 22, y nos envía el resto de la
22
división de 3 entre 223, que es 89.
 Nosotros tomamos este número , lo
elevamos a 17 y nos quedamos con el
resto que da al dividirlo por 223, que es
37.
 Él toma el 194 que le enviamos, lo
eleva a 22 y se queda con el resto de
dividirlo por 223.
 ¿Adivinan que obtiene? Sí, también
37. Siendo como es un número
primo, lo tomaremos como el b que
buscábamos. Si no lo fuera, tomaríamos el número primo siguiente, y
éste sería el empleado para codificar
nuestro mensaje.
 Toda la fuerza del sistema reside en
la práctica imposibilidad de calcular el
número 17 o el 22 a partir de los
restos 194 y 89 y del número primo p
cuando este es realmente grande. De
esta forma hemos podido acordar el
valor del número primo b, y enviaremos a nuestro corresponsal a*b. De
aquí deducirá el mensaje.
 Sin embargo, no intentemos utilizar el
número b para enviar otro mensa-je,
pues entonces un escucha en la línea
lo podría calcular fácilmente. Cada
vez que se quiera enviar un mensaje,
hay que elegir una nueva clave, si
usamos el método que hemos
descrito.
 Toda la gracia del sistema radica en el
uso de una “función-trampa”, en la
que es muy fácil ir en un sentido pero
muy difícil en el inverso.
Descargar

Protección de datos