-
En este módulo, quiero mostrar una nuevo sistema para intercambiar claves, basado en el
-
concepto de encriptación de clave pública. De nuevo, para recordar el escenario, tenemos
-
nuestros amigos Alice y Bob que van a intercambiar una clave secreta K.
-
El intruso consigue ver los mensajes que se intercambian, pero
-
aun así, no debería entender nada de la clave K que intercambian.
-
Y como es habitual, en este módulo, solo consideramos la seguridad ante
-
intrusos. Es decir, no permitimos al atacante modificar los datos, o ninguna
-
otra forma de ataque activo. Así que, solo para recordarlo, anteriormente en este módulo hemos
-
visto un mecanismo ineficiente basado en bloques cifrados genéricos. En el segmento previo
-
vimos el mecanismo de intercambio de claves Diffie-Hellman, que tiene un
-
margen exponencial entre el trabajo que los participantes tienen que realizar y el trabajo
-
del atacante. Y de hecho el protocolo Diffie-Hellman es usado muy
-
frecuentemente por toda la web. En este segmento, quiero mostrar un sistema
-
diferente basado en encriptación de clave pública. ¿Qué es encriptación de clave pública? Igual que en
-
el caso de encripación simétrica, hay un algoritmo de encriptación y un
-
algoritmo de desencriptación. Sin embargo, aquí el algoritmo de encriptación tiene una clave, a la
-
que llamaremos clave pública. La llamaremos clave pública que pertenece
-
a Bob. Y el algoritmo de desecriptación tiene una llave distinta, a la
-
que llamamos clave secreta. Que también pertenece a Bob. Así que estas 2 claves son llamadas
-
a veces un par de claves. La mitad del par es la clave pública, y la otra mitad del par
-
es la clave secreta. El modo en que encriptamos es el habitual, llega un mensaje,
-
el algoritmo de encriptación genera un texto cifrado, que es el
-
encriptado del mensaje usando la clave pública, Y entonces, cuando el texto cifrado
-
se presenta al algoritmo de desencriptación, el algoritmo básicamente genera
-
el mensaje correspondiente. Así que como dije, PK es llamada clave pública y SK es llamada
-
clave secreta. Mas exactamente, ¿qué es la encriptación de clave pública? Bien, la encriptación de
-
clave pública está formada por 3 algoritmos, G, E y D.
El algoritmo G es lo que es llamado
-
un algoritmo de generación de claves. Cuando ejecutamos el algoritmo G, producirá 2 claves, la clave
-
pública y la clave privada. El algoritmo de encriptación básicamente, a partir de la clave
-
pública y el mensaje, producirá el correspondiente texto cifrado. Y el
-
algoritmo de desencriptación, a partir de la clave secreta y el texto cifrado, producirá el
-
mensaje, o 'bottom' si ocurrió algun error. Como es habitual, tenemos las
-
propiedades de consistencia, que dicen que para cualquier clave pública y clave secreta que pueden
-
haber sido generadas por el algoritmo de generación de claves, si encriptamos el mensaje usando
-
la clave pública, y desencriptamos usando la clave secreta, deberíamos obtener de nuevo el
-
mensaje original. Ahora bien, ¿que significa ser seguro para un sistema de clave pública? Bien, usamos
-
el mismo concepto de seguridad semántica que hemos usado anteriormente, excepto que el juego es
-
ahora algo distinto. Me explico, como definimos seguridad semántica en
-
un sistema de clave pública. Aquí, el retador ejecutará el algoritmo de generación
-
de claves para generar una clave pública y una clave secreta, y dará la clave pública
-
al adversario. El retador se queda con la clave secreta.
-
Lo que el adversario hará es producir dos mensajes de igual longitud M0 y M1,
-
y el retador responderá con la encriptación de M0 o M1. Como
-
es habitual, definimos 2 experimentos, el experimento 0 y el experimento 1. En el experimento 0
-
al adversario le damos la encriptación de M0. En el experimento 1 le damos la
-
encriptación de M1, y el objetivo del adversario es adivinar
-
que encriptación ha recibido. ¿Recibió la encriptación de M0? o ¿recibió
-
la encriptación de M1? Y nos referimos a ello como el resultado del experimento 0 o
-
del experimento 1. Algo que debo remarcar, es que en caso de encriptación
-
de clave pública, no es necesario dar al adversario la posibilidad de organizar un
-
ataque de "textos claros elegidos". ¿Por qué? En el caso de un sistema de clave simétrica, el
-
atacante debía pedir la encriptación de mensajes por él elegidos. En el caso de un sistema de clave pública,
-
el atacante tiene la clave pública, y por tanto puede
-
encriptar por si mismo cualquier mensaje que desee. No necesita que el retador le ayude a
-
encriptar los mensajes de su elección. Y como resultado
-
en un sistema de clave pública, el ataque de "texto claro escogido" es inherente. No hay razón
-
para dar al atacante un poder adicional para montar el ataque de "texto claro escogido" y este
-
es el motivo por el que no hablamos de consultas de "texto claro escogido" en el contexto
-
de la definición de seguridad semántica de sistemas de clave pública. Ahora que hemos definido el juego
-
diremos que un sistema de clave pública GED es semanticamente seguro si
-
básicamante el atacante no puede distinguir el experimento 0 del experimento 1. En otras
-
palabras, la probabilidad del adversario de obtener 1 en el experimento 0 es aproximandamente
-
la misma que la probabilidad de obtener 1 en el experimento 1.
Asi que de nuevo,
-
el atacante no puede distiguir si el valor obtenido era M0 encriptado, o
-
M1 encriptado. Ahora que entendemos lo que es la encriptación de clave pública, vamos a ver
-
como usarla para estrablecer un secreto compartido. Aqui estan nuestros amigos Alice y Bob.
-
Alice inicia un par de claves pública y secreta para sí misma
-
usando el algoritmo de generación de claves. Y a continuación, mandará a Bob
-
la clave pública pk. Y también comunica, hey, este mensaje es de Alice. Lo que Bob hará,
-
Es generar un número aleatorio de 128 bits X y lo enviará de vuelta a Alice
-
diciendole que el mensaje es de Bob, y le mandará el valor X encriptado bajo la
-
clave pública de Alice. Alice recibirá el texto cifrado, lo desencriptará usando
-
su clave secreta y así, obtendrá el valor de X, y ahora este valor de X puede ser
-
usado básicamente como un secreto compartido entre ellos 2. Quiero destacar que
-
este protocolo, es muy diferente que el protocolo Diffie-Hellman que vimos en el
-
último segmento, en el sentido que aquí, las partes tienen que hacer su trabajo por turnos,
-
Bob no puede enviar su mensaje hasta después de haber recibido el mensaje de Alice.
-
En otras palabras, Bob no puede encriptar X con la clave pública de Alice hasta haberla recibido
-
de Alice. En el protocolo Diffie-Hellman, sin embargo las dos
-
partes podían enviar sus mensajes en tiempos arbitrarios, y no habia ningún orden
-
forzado para estos mensajes. Como resultado, teníamos esta bonita aplicación de
-
Diffie-Hellman, en la que todos podían enviar sus mensajes a Facebook, por
-
ejemplo. Por tanto, solo mirando el perfil de Facebook, cualquier pareja tenían yá
-
una clave compartida, sin la necesidad de comunicación adicional. Aquí, esto no es
-
cierto, incluso si todo el mundo cuelga su clave pública eb Facebook, sigue habiendo
-
la necesidad de enviar un mensaje antes que la clave compartida pueda ser establecida. Ahora
-
que entendemos el protocolo, la primera pregunta que debemos hacernos, es por qué es este
-
un protocolo seguro. Y como hacemos últimamente, solo consideramos intrusos observando la comunicación. Así
-
en este protocolo, el atacante vé la clave pública y el texto X cifrado con la
-
clave pública, y lo que quiere obtener es básicamente el valor de X. Ahora bien, sabemos
-
que el sistema de clave pública que usamos es semanticamente seguro, y esto
-
significa que el atacante no puede distinguir X encriptado de
-
algun texto aleatorio encriptado. En otras palabras, con solo X encriptado, el
-
atacante no puede distinguir si el texto es X o cualquier otro mensaje aleatorio elegido
-
de M. Y esto básicamante significa, que solo mirando
-
los mensajes en este protocolo, el valor de X no puede distinguirse, desde el punto de vista del atacante,
-
de un elemento aleatorio de M, y como resultado, X puede ser usado como clave de la sesión
-
entre las 2 partes. Es simplemente un valor aleatorio que el atacante no puede
-
adivinar, si no es probando todos los valores posibles de M. Debería decir que el hecho que estas 2
-
distribuciones no puedan distinguirse, es una consecuencia directa de
-
la seguridad semántica, y de hecho es un ejercicio simple mostrar que sí
-
el atacante pudiera distinguir una distribución de otra, entonces
-
el atacante podría también romper la seguridad semantica. Y como es habitual, aún siendo este
-
protocolo seguro contra intrusión, es completamente inseguro frente
-
ataques man-in-the-middle (MITM-intermediario). Veamos un simple ataque MITM. Bien, aqui
-
tenemos a Alice generando su par de claves pública y secreta. Al mismo tiempo, el
-
intermediario generará su propio par de claves pública y secreta.
-
Cuando Alice envía su clave pública a Bob, el intermediario
-
intercepta el mensaje, y dirá, este es el mensaje de Alice, pero
-
la clave pública de Alice es pk'. Bob recibe el mensaje, y cree
-
que tiene un mensaje de Alice, lo que enviará de vuelta es, bien, elegirá su número
-
aleatorio X y enviará de vuelta el valor de X encriptado bajo pk'. El intermediario
-
interceptará de nuevo el mensaje, y lo cambiará con
-
algo distinto. Su objetivo es asegurarse que el intercambio de claves prospera, en
-
otras palabras, Alice cree que tiene un mensaje de Bob, y aún así, el intermediario
-
quiere conocer exactamente cual es el secreto compartido. Así que, ¿qué debería el
-
intermediario enviar a Alice en este caso? Vamos a llamar al texto cifrado C, lo que
-
el intermediario hará es desencriptar C usando su propia clave
-
privada, lo que le revelará X. Y entonces, continuará,
-
encriptando X con la clave plica de Alice, y enviará el valor a Alice. Alice
-
obtendrá X, y en lo que a ella respecta, ha hecho un intercambio de claves
-
con Bob, y ambos han obtenido el valor de X, pero el problema, por supuesto, es que
-
el intermediario conoce también el valor de X. Así que este protocolo se convierte en absolutamente
-
inseguro cuando el intermediario puede modificar los mensajes de Alice a Bob, y de
-
Bob a Alice. De nuevo, algo tenemos que hacer con el protocolo, para hacerlo seguro,
-
y vamos a ver como hacerlo. De hecho dentro de 2 semanas, veremos las firmas
-
digitales. Ahora, he mostrado que la encriptación de clave pública implica
-
intercambio seguro de claves ante intrusos. La próxima pregunta és como construimos los sistemas
-
de clave pública. Y resulta que estas construcciones generalmente se apoyan
-
en teoría de números y en el álgebra, y igual que el protocolo Diffie-Hellman se apoya en el
-
álgebra. Así que antes de entrar en estos protocolos con más detalle, lo que me
-
gustaría hacer es tomar un pequeño desvio, En el próximo módulo, veremos los
-
fundamentos y la teoría de números relevantes. Veremos un modelo apropiado, y
-
volveremos para hablar de estos sistemas de clave pública, y de otros sistemas paraçç
-
intercambio de claves. Así que este es el final del módulo.
Para lectura adicional, quería
-
señalar este documento que muestra que de hecho solo nos apoyamos en cifras
-
simétricas y funciones hash, entonces estas propuestas son óptimas para intercambio
-
de claves. Y de hecho no podemos conseguir más que el margen cuadrático mientras tratemos
-
las primitivas que nos vienen dadas como una caja negra. Asi que básicamente esto muestra
-
que el margen cuadrático es el mejor posible, y también quería señalar otro documento
-
que en cierto modo resume algunos de estos mecanismos de intercambio de los que hemos hablado,
-
intercambio de claves usando criptografia de clave pública e intercambio de claves usando [...] Podeis
-
dar un vistazo al documento y en cierto modo os dará un avance de lo que viene y
-
como hacer estos protocolos de intercambio de claves seguros contra intermediarios,
-
y no solo seguros ante intrusos. OK. Este es el final del módulo,
-
y en el próximo módulo daremos un pequeño rodeo, y haremos un breve repaso
-
al álgebra y teoría de números.