[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:03.83,Default,,0000,0000,0000,,En el ultimo segmento, explicamos que es un sistema de encriptación de clave pública. Y Dialogue: 0,0:00:03.83,0:00:07.56,Default,,0000,0000,0000,,definimos que significa ser seguro para un sistema de encriptación de clave pública. Si Dialogue: 0,0:00:07.56,0:00:11.14,Default,,0000,0000,0000,,recordamos, necesitabamos seguridad ante atacantes activos. Y en particular, Dialogue: 0,0:00:11.14,0:00:15.21,Default,,0000,0000,0000,,definimos nuestro objetivo: la seguridad de texto cifrado elegido. Esta semana, vamos a construir dos Dialogue: 0,0:00:15.21,0:00:19.28,Default,,0000,0000,0000,,familias de sistemas de encriptación de clave pública que son seguros para ataques de texto cifrado elegido. Y en Dialogue: 0,0:00:19.28,0:00:22.91,Default,,0000,0000,0000,,este segmento, vamos a comenzar por contruir claves de encriptacion públicas a partir Dialogue: 0,0:00:23.06,0:00:27.12,Default,,0000,0000,0000,,de una construcción llamada la permutación trampa (o puerta falsa). Entonces vamos a comenzar por definir un Dialogue: 0,0:00:27.12,0:00:31.06,Default,,0000,0000,0000,,concepto general llamado funcion trampa. Entonces, ¿qué es una funcion trampa? Dialogue: 0,0:00:31.06,0:00:35.48,Default,,0000,0000,0000,,Bueno, una función trampa básicamente es una función que va de un grupo X a un Dialogue: 0,0:00:35.48,0:00:39.58,Default,,0000,0000,0000,,grupo Y. Y esta realmente definido por un triplete de algoritmos. Hay un algoritmo de generación, Dialogue: 0,0:00:39.58,0:00:43.68,Default,,0000,0000,0000,,la función f, y la inversa de la función f. Entonces el algoritmo Dialogue: 0,0:00:43.68,0:00:47.89,Default,,0000,0000,0000,,de generación, básicamente lo que hace cuando lo ejecutas, es generar un par de claves, una Dialogue: 0,0:00:47.89,0:00:52.10,Default,,0000,0000,0000,,clave pública y una clave secreta. La clave pública va a definir una función específica Dialogue: 0,0:00:52.10,0:00:56.87,Default,,0000,0000,0000,,del conjunto X al conjunto Y. Y luego la clave secreta va a definir la función Dialogue: 0,0:00:56.87,0:01:01.64,Default,,0000,0000,0000,,inversa ahora del conjunto Y al conjunto X. Entonces la idea es de que puedas evaluar Dialogue: 0,0:01:01.64,0:01:06.59,Default,,0000,0000,0000,,la función en cualquier punto usando un EPK público y luego puedas invertir la función Dialogue: 0,0:01:06.59,0:01:12.44,Default,,0000,0000,0000,,usando la clave secreta, SK. Entonces, ¿a qué me refiero con inversión? Precisamente, si Dialogue: 0,0:01:12.44,0:01:17.26,Default,,0000,0000,0000,,miramos cualquier par de clave pública y clave secreta generados por el algoritmo de generación de claves Dialogue: 0,0:01:17.26,0:01:21.73,Default,,0000,0000,0000,,G, entonces ocurre que si evalúo la función en el punto X, y a continuación Dialogue: 0,0:01:21.73,0:01:26.14,Default,,0000,0000,0000,,evalúo la inversa en el punto resultante, debería obtener el punto original X Dialogue: 0,0:01:26.14,0:01:30.67,Default,,0000,0000,0000,,de vuelta. Asi que la imagen que deberíais tener en mente es esta, hay un conjunto X grande, y Dialogue: 0,0:01:30.67,0:01:35.86,Default,,0000,0000,0000,,un conjunto Y grande, y luego, esta función mapea cualquier punto de X a un punto de Y Dialogue: 0,0:01:35.86,0:01:41.51,Default,,0000,0000,0000,,y esto puede ser hecho usando la clave pública. Así que de nuevo, cualquier punto de X puede ser mapeado a Dialogue: 0,0:01:41.51,0:01:46.90,Default,,0000,0000,0000,,un punto de Y. Luego, si alguien tiene la clave secreta, básicamente puede ir en Dialogue: 0,0:01:46.90,0:01:53.76,Default,,0000,0000,0000,,la dirección inversa, aplicando esta clave secreta. Así que ahora que Dialogue: 0,0:01:53.76,0:01:58.29,Default,,0000,0000,0000,,entendemos lo que es una función trampa, vamos a definir que significa que una función Dialogue: 0,0:01:58.29,0:02:02.65,Default,,0000,0000,0000,,trampa es segura. Y asi, diremos que este triplete G F Finversa, es seguro Dialogue: 0,0:02:02.65,0:02:06.90,Default,,0000,0000,0000,,si de hecho esta función FPK es lo que se llama una funcíón de camino único. Y permitidme explicar Dialogue: 0,0:02:06.90,0:02:10.99,Default,,0000,0000,0000,,lo que es una función de camino único. La idea es básicamente que Dialogue: 0,0:02:10.99,0:02:15.52,Default,,0000,0000,0000,,la función puede ser evaluada en cualquier punto, pero invertirla es difícil sin la clave Dialogue: 0,0:02:15.52,0:02:19.64,Default,,0000,0000,0000,,secreta SK. Vamos a definirlo mas precisamente. \NComo es habitual lo definimos usando un Dialogue: 0,0:02:19.64,0:02:23.76,Default,,0000,0000,0000,,juego. Aquí tenemos nuestro juego entre el retador y el adversario. Y el juego Dialogue: 0,0:02:23.76,0:02:27.50,Default,,0000,0000,0000,,funciona com sigue. Básicamente el retador generará una clave pública y Dialogue: 0,0:02:27.50,0:02:31.62,Default,,0000,0000,0000,,una clave secreta. A continuación generará un valor aleatorio X, enviará la clave pública Dialogue: 0,0:02:31.62,0:02:36.12,Default,,0000,0000,0000,,al adversario, y evaluará la función en el punto X y Dialogue: 0,0:02:36.12,0:02:40.16,Default,,0000,0000,0000,,enviará el resultado Y al adversario. Asi que todo lo que el adversario observa es Dialogue: 0,0:02:40.16,0:02:44.65,Default,,0000,0000,0000,,una clave pública, que define lo que la función es, y a continuación Dialogue: 0,0:02:44.65,0:02:49.48,Default,,0000,0000,0000,,observa la imagen de esta función en el punto aleatorio X, y su objetivo es básicamente invertir Dialogue: 0,0:02:49.48,0:02:54.10,Default,,0000,0000,0000,,la función en este punto Y. OK así que él produce un X primo. Y dijimos que la Dialogue: 0,0:02:54.10,0:02:58.51,Default,,0000,0000,0000,,función trampa es segura si la probabilidad de que el adversario invierta Dialogue: 0,0:02:58.51,0:03:03.14,Default,,0000,0000,0000,,la función en el punto dado 'y', es negligible. En otras palabras, dado 'y', la probabilidad de que Dialogue: 0,0:03:03.14,0:03:07.27,Default,,0000,0000,0000,,el adversario sea capaz de alterar la pre imagen de 'y' es de hecho una probabilidad Dialogue: 0,0:03:07.27,0:03:11.91,Default,,0000,0000,0000,,negligible y si esto es válido para todos los algoritmos eficientes, decimos que esta Dialogue: 0,0:03:11.91,0:03:17.88,Default,,0000,0000,0000,,función trampa es segura. De nuevo, abstractamente, es un concepto realmente Dialogue: 0,0:03:17.88,0:03:21.88,Default,,0000,0000,0000,,interesante, en que podemos evaluar la función en dirección directa muy Dialogue: 0,0:03:21.88,0:03:26.15,Default,,0000,0000,0000,,fácilmente. Pero nadie puede evaluar la función en dirección inversa si no Dialogue: 0,0:03:26.15,0:03:30.31,Default,,0000,0000,0000,,tiene la función trampa, la clave secreta SK, que entonces, de repente les permite Dialogue: 0,0:03:30.31,0:03:35.42,Default,,0000,0000,0000,,invertir la función muy, muy fácilmente. Asi, usando el concepto de una función trampa, Dialogue: 0,0:03:35.42,0:03:39.55,Default,,0000,0000,0000,,no es muy difícil construir un sistema de encriptación público, y permitidme mostrar como Dialogue: 0,0:03:39.55,0:03:43.53,Default,,0000,0000,0000,,hacerlo. Aquí tenemos nuestra función trampa, G, F y F inversa.\NLa otra Dialogue: 0,0:03:43.53,0:03:47.60,Default,,0000,0000,0000,,herramienta que vamos a necesitar, es un esquema simétrico de encriptación, y voy a Dialogue: 0,0:03:47.60,0:03:51.53,Default,,0000,0000,0000,,asumir que el esquema de encriptación es de hecho seguro ante ataques activos, en Dialogue: 0,0:03:51.53,0:03:55.35,Default,,0000,0000,0000,,particular necesito disponer de encriptación autenticada. Observad que el Dialogue: 0,0:03:55.35,0:04:00.73,Default,,0000,0000,0000,,sistema de encriptación simétrica toma claves de K y la función trampa toma datos de X. Dialogue: 0,0:04:00.73,0:04:05.79,Default,,0000,0000,0000,,Estos son dos conjuntos distintos, y vamos a necesitar también una función hash Dialogue: 0,0:04:05.79,0:04:09.94,Default,,0000,0000,0000,,que vá de X a K. En otras palabras, mapea elementos del conjunto X a claves para Dialogue: 0,0:04:09.94,0:04:14.03,Default,,0000,0000,0000,,los sistemas de encriptación simétricos. Y ahora, que tenemos estos 3 componentes, podemos Dialogue: 0,0:04:14.03,0:04:17.82,Default,,0000,0000,0000,,de hecho construir el sistema de encriptación público del modo siguiente: el generador de Dialogue: 0,0:04:17.82,0:04:21.76,Default,,0000,0000,0000,,claves para el sistema de encriptación público es básicamente exactamente el mismo Dialogue: 0,0:04:21.76,0:04:25.66,Default,,0000,0000,0000,,que la generación de claves para las funciones trampa. Asi que ejecutamos g para la función Dialogue: 0,0:04:25.66,0:04:29.96,Default,,0000,0000,0000,,trampa, obtenemos una clave pública y una clave secreta. Y estas van a ser las claves Dialogue: 0,0:04:29.96,0:04:34.17,Default,,0000,0000,0000,,pública y secreta para el sistema de encriptación público. Ahora, ¿como encriptamos?, bien, empecemos Dialogue: 0,0:04:34.17,0:04:38.98,Default,,0000,0000,0000,,con la encriptación. El algoritmo de encriptación toma una clave pública y un mensaje Dialogue: 0,0:04:38.98,0:04:43.90,Default,,0000,0000,0000,,como entrada. Así que lo que hará es generar un x aleatorio del conjunto X mayúscula. Dialogue: 0,0:04:43.90,0:04:48.54,Default,,0000,0000,0000,,Aplicará la función trampa a este x aleatorio para obtener y. Dialogue: 0,0:04:48.54,0:04:53.13,Default,,0000,0000,0000,,y es la imagen de x bajo la función trampa. Entonces, continuará y Dialogue: 0,0:04:53.13,0:04:58.27,Default,,0000,0000,0000,,generará una clave simétrica mediante el hash de x. Así esta es una clave simétrica para el sistema de clave Dialogue: 0,0:04:58.27,0:05:03.29,Default,,0000,0000,0000,,simétrica. Y finalmente encriptará el texto M usando esta clave acabada Dialogue: 0,0:05:03.29,0:05:08.12,Default,,0000,0000,0000,,de generar. Y entonces mostrará el valor y que acaba de calcular, que es Dialogue: 0,0:05:08.12,0:05:13.26,Default,,0000,0000,0000,,la imagen de x, junto con la encriptación del mensaje M bajo el sistema simétrico, así Dialogue: 0,0:05:13.26,0:05:18.37,Default,,0000,0000,0000,,es como la encriptación funciona. Y quiero destacar de nuevo, que la función trampa Dialogue: 0,0:05:18.37,0:05:23.11,Default,,0000,0000,0000,,solo se aplica a este valor aleatorio X, mientras que el mensaje es encriptado Dialogue: 0,0:05:23.11,0:05:28.10,Default,,0000,0000,0000,,usando un sistema de clave simétrico, y usando una clave que fué derivada del valor X que Dialogue: 0,0:05:28.10,0:05:32.96,Default,,0000,0000,0000,,elegimos aleatoriamente. Así, ahora que entendemos la encriptación, veamos como desencriptar. Dialogue: 0,0:05:32.96,0:05:37.37,Default,,0000,0000,0000,,Bien, el algoritmo de desencriptación toma una clave secreta como entrada, y el texto cifrado. Dialogue: 0,0:05:37.37,0:05:41.55,Default,,0000,0000,0000,,El texto cifrado contiene 2 componentes, el valor Y y el valor C Dialogue: 0,0:05:41.55,0:05:46.07,Default,,0000,0000,0000,,Así, el primer paso que vamos a dar, va a ser aplicar la transformación inversa, Dialogue: 0,0:05:46.07,0:05:50.37,Default,,0000,0000,0000,,la función trampa inversa para el valor 'y', y esto nos dará de Dialogue: 0,0:05:50.37,0:05:54.50,Default,,0000,0000,0000,,el valor original 'x' que elegimos durante la encriptación. Permitidme que pregunte, ¿Como derivamos Dialogue: 0,0:05:54.50,0:06:00.04,Default,,0000,0000,0000,,la clave de desencriptación simetrica K a partir de este 'x' que acabamos de obtener? Bueno, Dialogue: 0,0:06:00.04,0:06:04.74,Default,,0000,0000,0000,,esto es una pregunta fácil. Básicamente calculamos el hash de 'x' de nuevo. Esto nos dá K igual que Dialogue: 0,0:06:04.74,0:06:09.37,Default,,0000,0000,0000,,durante el encriptado. Y ahora que tenemos la clave de encriptación simétrica, podemos aplicar el Dialogue: 0,0:06:09.37,0:06:13.78,Default,,0000,0000,0000,,algoritmo de desencriptación simétrico para desencriptar el texto cifrado 'c'. Obtenemos el Dialogue: 0,0:06:13.78,0:06:17.74,Default,,0000,0000,0000,,mensaje original 'm' y este es nuestro resultado. Así es como el sistema de encriptación Dialogue: 0,0:06:17.74,0:06:22.32,Default,,0000,0000,0000,,público funciona, cuando la función trampa es usada solo para encriptar Dialogue: 0,0:06:22.32,0:06:26.79,Default,,0000,0000,0000,,un valor aleatorio 'x', mientras que el mensaje real 'm' es encriptado usando Dialogue: 0,0:06:26.79,0:06:31.24,Default,,0000,0000,0000,,el sistema simétrico. Aquí en los dibujos, tenemos el mensaje 'm', obviamente el texto plano Dialogue: 0,0:06:31.24,0:06:35.54,Default,,0000,0000,0000,,podría ser bastante grande. Aquí tenemos el cuerpo del texto descifrado que Dialogue: 0,0:06:35.54,0:06:39.95,Default,,0000,0000,0000,,puede ser bastante largo, es de hecho encriptado usando el sistema simétrico. Y de nuevo, Dialogue: 0,0:06:39.95,0:06:44.04,Default,,0000,0000,0000,,remarco que la clave para el sistema simétrico es simplemente el valor hash de 'x'. Dialogue: 0,0:06:44.04,0:06:48.23,Default,,0000,0000,0000,,Y entonces, el encabezado de el texto cifrado es simplemente la aplicación de la función Dialogue: 0,0:06:48.23,0:06:52.64,Default,,0000,0000,0000,,trampa a este 'x' aleatorio que escogimos. Así que durante la desencriptación, lo que ocurre es Dialogue: 0,0:06:52.64,0:06:56.89,Default,,0000,0000,0000,,que primero desencriptamos el encabezado para obtener 'x', y a continuación desencriptamos el cuerpo usando Dialogue: 0,0:06:56.89,0:07:01.83,Default,,0000,0000,0000,,el sistema simétrico para obterer finalmente el texto plano original 'm'. Como es habitual cuando muestro Dialogue: 0,0:07:01.83,0:07:06.54,Default,,0000,0000,0000,,un sistema como este, obviamente quereis verificar que la desencriptación es de hecho Dialogue: 0,0:07:06.54,0:07:10.60,Default,,0000,0000,0000,,la inversa de la encriptación. Y mas importante, quereis preguntar por qué este sistema Dialogue: 0,0:07:10.60,0:07:14.96,Default,,0000,0000,0000,,es seguro. Y de hecho, hay un bonito teorema de seguridad aquí que dice, que sí Dialogue: 0,0:07:14.96,0:07:18.90,Default,,0000,0000,0000,,la función trampa con la que empezamos es segura, en otras palabras que es una función Dialogue: 0,0:07:18.90,0:07:22.63,Default,,0000,0000,0000,,de camino único si el adversario no tiene la clave secreta. El sistema de Dialogue: 0,0:07:22.63,0:07:26.62,Default,,0000,0000,0000,,encriptación simétrica, proporciona encriptación autenticada, y la función hash es un Dialogue: 0,0:07:26.62,0:07:30.56,Default,,0000,0000,0000,,oráculo aleatorio, lo que simplemente significa que es una función aleatoria del conjunto X a Dialogue: 0,0:07:30.56,0:07:34.70,Default,,0000,0000,0000,,el conjunto de claves K. Así, un oráculo aleatorio es un tipo de idealización de lo que se Dialogue: 0,0:07:34.70,0:07:38.28,Default,,0000,0000,0000,,debería ser una función hash. En la práctica, por supuesto, cuando vais a implementar un Dialogue: 0,0:07:38.28,0:07:42.32,Default,,0000,0000,0000,,sistema como este, usaríais SHA256, o alguno de los Dialogue: 0,0:07:42.32,0:07:47.25,Default,,0000,0000,0000,,otros sistemas explicados en clase. Así que bajo estas 3 condiciones Dialogue: 0,0:07:47.25,0:07:51.86,Default,,0000,0000,0000,,de hecho, el sistema que acabamos de describir es seguro ante textos cifrados escogidos, así que es seguro Dialogue: 0,0:07:51.86,0:07:56.42,Default,,0000,0000,0000,,ante CCA, la 'ro' denota el hecho que la seguridad esta fijada en lo que llamamos Dialogue: 0,0:07:56.42,0:08:00.57,Default,,0000,0000,0000,,un oráculo aleatorio (ro). Pero esto es un detalle que tampoco es muy importante para nuestra Dialogue: 0,0:08:00.57,0:08:05.01,Default,,0000,0000,0000,,explicación. Lo que quiero que recordeis es que si la función trampa Dialogue: 0,0:08:05.01,0:08:09.00,Default,,0000,0000,0000,,es una función segura, el sistema simétrico de encriptación es seguro Dialogue: 0,0:08:09.00,0:08:13.02,Default,,0000,0000,0000,,contra manipulación, de modo que proporciona encriptación autenticada, y H Dialogue: 0,0:08:13.02,0:08:17.47,Default,,0000,0000,0000,,es en cierto modo una buena función hash, una función aleatoria que en práctica Dialogue: 0,0:08:17.47,0:08:22.24,Default,,0000,0000,0000,,usariamos SHA256, entonces, de hecho, el sistema que acabamos de mostrar es seguro ante CCA Dialogue: 0,0:08:22.24,0:08:27.62,Default,,0000,0000,0000,,texto cifrado escogido. Debería deciros que de hecho hay un estandar Dialogue: 0,0:08:27.62,0:08:31.75,Default,,0000,0000,0000,,ISO que define este modo de encriptación. ISO Dialogue: 0,0:08:31.75,0:08:35.78,Default,,0000,0000,0000,,son las siglas de Internationa Standards Organization. Así que este Dialogue: 0,0:08:35.78,0:08:40.46,Default,,0000,0000,0000,,sistema particular ha sido estandarizado, y es una buena cosa usarlo. Me referiré Dialogue: 0,0:08:40.46,0:08:44.95,Default,,0000,0000,0000,,a este como encriptación ISO en los próximos segmentos. PAra concluir este segmento, quiero Dialogue: 0,0:08:44.95,0:08:48.92,Default,,0000,0000,0000,,advertiros sobre un modo incorrecto de usar una función trampa para construir Dialogue: 0,0:08:48.92,0:08:53.33,Default,,0000,0000,0000,,un sistema de encriptación de clave pública. Y de hecho, este método puede ser el primero Dialogue: 0,0:08:53.33,0:08:57.57,Default,,0000,0000,0000,,que viene a la mente, y es completamente inseguro. Permitidme mostraros, como no Dialogue: 0,0:08:57.57,0:09:01.76,Default,,0000,0000,0000,,encriptar usando una función trampa. Bueno, la primera cosa que podría venir a la mente es, Dialogue: 0,0:09:01.76,0:09:05.70,Default,,0000,0000,0000,,bien, aplicar la función trampa directamente al mensaje 'm'. Así que Dialogue: 0,0:09:05.70,0:09:10.05,Default,,0000,0000,0000,,encriptamos aplicando simplemente la función al mensaje 'm', y desencriptamos simplemente Dialogue: 0,0:09:10.05,0:09:14.18,Default,,0000,0000,0000,,aplicando f inversa al texto cifrado 'c' para recuperar el mensaje original 'm'. Funcionalmente, Dialogue: 0,0:09:14.18,0:09:18.64,Default,,0000,0000,0000,,de hecho, desencriptar es la inversa de encriptar, y esto es Dialogue: 0,0:09:18.64,0:09:22.88,Default,,0000,0000,0000,,completamente inseguro por muchas, muchas razones. El modo más fácil de ver que Dialogue: 0,0:09:22.88,0:09:26.96,Default,,0000,0000,0000,,es inseguro, es que simplemente, esto es encriptación deterministica. Dialogue: 0,0:09:26.96,0:09:30.94,Default,,0000,0000,0000,,Podeis advertir que no se está usando ninguna aleatoriedad. Cuando encriptamos un mensaje 'm' Dialogue: 0,0:09:30.94,0:09:34.15,Default,,0000,0000,0000,,y ya que es deterministico, no puede ser Dialogue: 0,0:09:34.15,0:09:37.95,Default,,0000,0000,0000,,semanticamente seguro. Pero de hecho, tal como dije, cuando instanciamos esta función trampa Dialogue: 0,0:09:37.95,0:09:41.64,Default,,0000,0000,0000,,con implementaciones particulares, por ejemplo con la función trampa RSA Dialogue: 0,0:09:41.64,0:09:44.95,Default,,0000,0000,0000,,hay muchos, muchos ataques que son posibles con esta Dialogue: 0,0:09:44.95,0:09:48.79,Default,,0000,0000,0000,,construcción particular, y por tanto no debeis usarla nunca, nunca, jamás, y voy a repetirlo Dialogue: 0,0:09:48.79,0:09:52.83,Default,,0000,0000,0000,,durante todo este módulo, y dehecho en el próximo segmento voy a mostraros Dialogue: 0,0:09:52.83,0:09:56.70,Default,,0000,0000,0000,,un número de ataques sobre esta implementación particular. OK, lo que me gustaría que Dialogue: 0,0:09:56.70,0:10:00.72,Default,,0000,0000,0000,,recordarais es que deberíais usar un sistema de encriptación, como el estandar ISO, Dialogue: 0,0:10:00.72,0:10:04.99,Default,,0000,0000,0000,,y nunca deberíais aplicar la función trampa directamente al mensaje 'm' Dialogue: 0,0:10:04.99,0:10:09.01,Default,,0000,0000,0000,,Aunque en el próximo segmento veremos otros modos de encriptar usando una función Dialogue: 0,0:10:09.01,0:10:13.23,Default,,0000,0000,0000,,trampa que son también correctos, pero este método particular es muy claramente Dialogue: 0,0:10:13.23,0:10:17.56,Default,,0000,0000,0000,,incorrecto. OK. Ahora que entendemos como construir encriptación de clave pública Dialogue: 0,0:10:17.56,0:10:21.42,Default,,0000,0000,0000,,a partir de una función trampa, la pregunta siguiente es como construir funciones Dialogue: 0,0:10:21.42,0:10:24.36,Default,,0000,0000,0000,,trampa, y vamos a ver esto en el próximo segmento.