< Return to Video

Constructions (11 min)

  • 0:00 - 0:04
    En el ultimo segmento, explicamos que es un sistema de encriptación de clave pública. Y
  • 0:04 - 0:08
    definimos que significa ser seguro para un sistema de encriptación de clave pública. Si
  • 0:08 - 0:11
    recordamos, necesitabamos seguridad ante atacantes activos. Y en particular,
  • 0:11 - 0:15
    definimos nuestro objetivo: la seguridad de texto cifrado elegido. Esta semana, vamos a construir dos
  • 0:15 - 0:19
    familias de sistemas de encriptación de clave pública que son seguros para ataques de texto cifrado elegido. Y en
  • 0:19 - 0:23
    este segmento, vamos a comenzar por contruir claves de encriptacion públicas a partir
  • 0:23 - 0:27
    de una construcción llamada la permutación trampa (o puerta falsa). Entonces vamos a comenzar por definir un
  • 0:27 - 0:31
    concepto general llamado funcion trampa. Entonces, ¿qué es una funcion trampa?
  • 0:31 - 0:35
    Bueno, una función trampa básicamente es una función que va de un grupo X a un
  • 0:35 - 0:40
    grupo Y. Y esta realmente definido por un triplete de algoritmos. Hay un algoritmo de generación,
  • 0:40 - 0:44
    la función f, y la inversa de la función f. Entonces el algoritmo
  • 0:44 - 0:48
    de generación, básicamente lo que hace cuando lo ejecutas, es generar un par de claves, una
  • 0:48 - 0:52
    clave pública y una clave secreta. La clave pública va a definir una función específica
  • 0:52 - 0:57
    del conjunto X al conjunto Y. Y luego la clave secreta va a definir la función
  • 0:57 - 1:02
    inversa ahora del conjunto Y al conjunto X. Entonces la idea es de que puedas evaluar
  • 1:02 - 1:07
    la función en cualquier punto usando un EPK público y luego puedas invertir la función
  • 1:07 - 1:12
    usando la clave secreta, SK. Entonces, ¿a qué me refiero con inversión? Precisamente, si
  • 1:12 - 1:17
    miramos cualquier par de clave pública y clave secreta generados por el algoritmo de generación de claves
  • 1:17 - 1:22
    G, entonces ocurre que si evalúo la función en el punto X, y a continuación
  • 1:22 - 1:26
    evalúo la inversa en el punto resultante, debería obtener el punto original X
  • 1:26 - 1:31
    de vuelta. Asi que la imagen que deberíais tener en mente es esta, hay un conjunto X grande, y
  • 1:31 - 1:36
    un conjunto Y grande, y luego, esta función mapea cualquier punto de X a un punto de Y
  • 1:36 - 1:42
    y esto puede ser hecho usando la clave pública. Así que de nuevo, cualquier punto de X puede ser mapeado a
  • 1:42 - 1:47
    un punto de Y. Luego, si alguien tiene la clave secreta, básicamente puede ir en
  • 1:47 - 1:54
    la dirección inversa, aplicando esta clave secreta. Así que ahora que
  • 1:54 - 1:58
    entendemos lo que es una función trampa, vamos a definir que significa que una función
  • 1:58 - 2:03
    trampa es segura. Y asi, diremos que este triplete G F Finversa, es seguro
  • 2:03 - 2:07
    si de hecho esta función FPK es lo que se llama una funcíón de camino único. Y permitidme explicar
  • 2:07 - 2:11
    lo que es una función de camino único. La idea es básicamente que
  • 2:11 - 2:16
    la función puede ser evaluada en cualquier punto, pero invertirla es difícil sin la clave
  • 2:16 - 2:20
    secreta SK. Vamos a definirlo mas precisamente.
    Como es habitual lo definimos usando un
  • 2:20 - 2:24
    juego. Aquí tenemos nuestro juego entre el retador y el adversario. Y el juego
  • 2:24 - 2:27
    funciona com sigue. Básicamente el retador generará una clave pública y
  • 2:27 - 2:32
    una clave secreta. A continuación generará un valor aleatorio X, enviará la clave pública
  • 2:32 - 2:36
    al adversario, y evaluará la función en el punto X y
  • 2:36 - 2:40
    enviará el resultado Y al adversario. Asi que todo lo que el adversario observa es
  • 2:40 - 2:45
    una clave pública, que define lo que la función es, y a continuación
  • 2:45 - 2:49
    observa la imagen de esta función en el punto aleatorio X, y su objetivo es básicamente invertir
  • 2:49 - 2:54
    la función en este punto Y. OK así que él produce un X primo. Y dijimos que la
  • 2:54 - 2:59
    función trampa es segura si la probabilidad de que el adversario invierta
  • 2:59 - 3:03
    la función en el punto dado 'y', es negligible. En otras palabras, dado 'y', la probabilidad de que
  • 3:03 - 3:07
    el adversario sea capaz de alterar la pre imagen de 'y' es de hecho una probabilidad
  • 3:07 - 3:12
    negligible y si esto es válido para todos los algoritmos eficientes, decimos que esta
  • 3:12 - 3:18
    función trampa es segura. De nuevo, abstractamente, es un concepto realmente
  • 3:18 - 3:22
    interesante, en que podemos evaluar la función en dirección directa muy
  • 3:22 - 3:26
    fácilmente. Pero nadie puede evaluar la función en dirección inversa si no
  • 3:26 - 3:30
    tiene la función trampa, la clave secreta SK, que entonces, de repente les permite
  • 3:30 - 3:35
    invertir la función muy, muy fácilmente. Asi, usando el concepto de una función trampa,
  • 3:35 - 3:40
    no es muy difícil construir un sistema de encriptación público, y permitidme mostrar como
  • 3:40 - 3:44
    hacerlo. Aquí tenemos nuestra función trampa, G, F y F inversa.
    La otra
  • 3:44 - 3:48
    herramienta que vamos a necesitar, es un esquema simétrico de encriptación, y voy a
  • 3:48 - 3:52
    asumir que el esquema de encriptación es de hecho seguro ante ataques activos, en
  • 3:52 - 3:55
    particular necesito disponer de encriptación autenticada. Observad que el
  • 3:55 - 4:01
    sistema de encriptación simétrica toma claves de K y la función trampa toma datos de X.
  • 4:01 - 4:06
    Estos son dos conjuntos distintos, y vamos a necesitar también una función hash
  • 4:06 - 4:10
    que vá de X a K. En otras palabras, mapea elementos del conjunto X a claves para
  • 4:10 - 4:14
    los sistemas de encriptación simétricos. Y ahora, que tenemos estos 3 componentes, podemos
  • 4:14 - 4:18
    de hecho construir el sistema de encriptación público del modo siguiente: el generador de
  • 4:18 - 4:22
    claves para el sistema de encriptación público es básicamente exactamente el mismo
  • 4:22 - 4:26
    que la generación de claves para las funciones trampa. Asi que ejecutamos g para la función
  • 4:26 - 4:30
    trampa, obtenemos una clave pública y una clave secreta. Y estas van a ser las claves
  • 4:30 - 4:34
    pública y secreta para el sistema de encriptación público. Ahora, ¿como encriptamos?, bien, empecemos
  • 4:34 - 4:39
    con la encriptación. El algoritmo de encriptación toma una clave pública y un mensaje
  • 4:39 - 4:44
    como entrada. Así que lo que hará es generar un x aleatorio del conjunto X mayúscula.
  • 4:44 - 4:49
    Aplicará la función trampa a este x aleatorio para obtener y.
  • 4:49 - 4:53
    y es la imagen de x bajo la función trampa. Entonces, continuará y
  • 4:53 - 4:58
    generará una clave simétrica mediante el hash de x. Así esta es una clave simétrica para el sistema de clave
  • 4:58 - 5:03
    simétrica. Y finalmente encriptará el texto M usando esta clave acabada
  • 5:03 - 5:08
    de generar. Y entonces mostrará el valor y que acaba de calcular, que es
  • 5:08 - 5:13
    la imagen de x, junto con la encriptación del mensaje M bajo el sistema simétrico, así
  • 5:13 - 5:18
    es como la encriptación funciona. Y quiero destacar de nuevo, que la función trampa
  • 5:18 - 5:23
    solo se aplica a este valor aleatorio X, mientras que el mensaje es encriptado
  • 5:23 - 5:28
    usando un sistema de clave simétrico, y usando una clave que fué derivada del valor X que
  • 5:28 - 5:33
    elegimos aleatoriamente. Así, ahora que entendemos la encriptación, veamos como desencriptar.
  • 5:33 - 5:37
    Bien, el algoritmo de desencriptación toma una clave secreta como entrada, y el texto cifrado.
  • 5:37 - 5:42
    El texto cifrado contiene 2 componentes, el valor Y y el valor C
  • 5:42 - 5:46
    Así, el primer paso que vamos a dar, va a ser aplicar la transformación inversa,
  • 5:46 - 5:50
    la función trampa inversa para el valor 'y', y esto nos dará de
  • 5:50 - 5:54
    el valor original 'x' que elegimos durante la encriptación. Permitidme que pregunte, ¿Como derivamos
  • 5:54 - 6:00
    la clave de desencriptación simetrica K a partir de este 'x' que acabamos de obtener? Bueno,
  • 6:00 - 6:05
    esto es una pregunta fácil. Básicamente calculamos el hash de 'x' de nuevo. Esto nos dá K igual que
  • 6:05 - 6:09
    durante el encriptado. Y ahora que tenemos la clave de encriptación simétrica, podemos aplicar el
  • 6:09 - 6:14
    algoritmo de desencriptación simétrico para desencriptar el texto cifrado 'c'. Obtenemos el
  • 6:14 - 6:18
    mensaje original 'm' y este es nuestro resultado. Así es como el sistema de encriptación
  • 6:18 - 6:22
    público funciona, cuando la función trampa es usada solo para encriptar
  • 6:22 - 6:27
    un valor aleatorio 'x', mientras que el mensaje real 'm' es encriptado usando
  • 6:27 - 6:31
    el sistema simétrico. Aquí en los dibujos, tenemos el mensaje 'm', obviamente el texto plano
  • 6:31 - 6:36
    podría ser bastante grande. Aquí tenemos el cuerpo del texto descifrado que
  • 6:36 - 6:40
    puede ser bastante largo, es de hecho encriptado usando el sistema simétrico. Y de nuevo,
  • 6:40 - 6:44
    remarco que la clave para el sistema simétrico es simplemente el valor hash de 'x'.
  • 6:44 - 6:48
    Y entonces, el encabezado de el texto cifrado es simplemente la aplicación de la función
  • 6:48 - 6:53
    trampa a este 'x' aleatorio que escogimos. Así que durante la desencriptación, lo que ocurre es
  • 6:53 - 6:57
    que primero desencriptamos el encabezado para obtener 'x', y a continuación desencriptamos el cuerpo usando
  • 6:57 - 7:02
    el sistema simétrico para obterer finalmente el texto plano original 'm'. Como es habitual cuando muestro
  • 7:02 - 7:07
    un sistema como este, obviamente quereis verificar que la desencriptación es de hecho
  • 7:07 - 7:11
    la inversa de la encriptación. Y mas importante, quereis preguntar por qué este sistema
  • 7:11 - 7:15
    es seguro. Y de hecho, hay un bonito teorema de seguridad aquí que dice, que sí
  • 7:15 - 7:19
    la función trampa con la que empezamos es segura, en otras palabras que es una función
  • 7:19 - 7:23
    de camino único si el adversario no tiene la clave secreta. El sistema de
  • 7:23 - 7:27
    encriptación simétrica, proporciona encriptación autenticada, y la función hash es un
  • 7:27 - 7:31
    oráculo aleatorio, lo que simplemente significa que es una función aleatoria del conjunto X a
  • 7:31 - 7:35
    el conjunto de claves K. Así, un oráculo aleatorio es un tipo de idealización de lo que se
  • 7:35 - 7:38
    debería ser una función hash. En la práctica, por supuesto, cuando vais a implementar un
  • 7:38 - 7:42
    sistema como este, usaríais SHA256, o alguno de los
  • 7:42 - 7:47
    otros sistemas explicados en clase. Así que bajo estas 3 condiciones
  • 7:47 - 7:52
    de hecho, el sistema que acabamos de describir es seguro ante textos cifrados escogidos, así que es seguro
  • 7:52 - 7:56
    ante CCA, la 'ro' denota el hecho que la seguridad esta fijada en lo que llamamos
  • 7:56 - 8:01
    un oráculo aleatorio (ro). Pero esto es un detalle que tampoco es muy importante para nuestra
  • 8:01 - 8:05
    explicación. Lo que quiero que recordeis es que si la función trampa
  • 8:05 - 8:09
    es una función segura, el sistema simétrico de encriptación es seguro
  • 8:09 - 8:13
    contra manipulación, de modo que proporciona encriptación autenticada, y H
  • 8:13 - 8:17
    es en cierto modo una buena función hash, una función aleatoria que en práctica
  • 8:17 - 8:22
    usariamos SHA256, entonces, de hecho, el sistema que acabamos de mostrar es seguro ante CCA
  • 8:22 - 8:28
    texto cifrado escogido. Debería deciros que de hecho hay un estandar
  • 8:28 - 8:32
    ISO que define este modo de encriptación. ISO
  • 8:32 - 8:36
    son las siglas de Internationa Standards Organization. Así que este
  • 8:36 - 8:40
    sistema particular ha sido estandarizado, y es una buena cosa usarlo. Me referiré
  • 8:40 - 8:45
    a este como encriptación ISO en los próximos segmentos. PAra concluir este segmento, quiero
  • 8:45 - 8:49
    advertiros sobre un modo incorrecto de usar una función trampa para construir
  • 8:49 - 8:53
    un sistema de encriptación de clave pública. Y de hecho, este método puede ser el primero
  • 8:53 - 8:58
    que viene a la mente, y es completamente inseguro. Permitidme mostraros, como no
  • 8:58 - 9:02
    encriptar usando una función trampa. Bueno, la primera cosa que podría venir a la mente es,
  • 9:02 - 9:06
    bien, aplicar la función trampa directamente al mensaje 'm'. Así que
  • 9:06 - 9:10
    encriptamos aplicando simplemente la función al mensaje 'm', y desencriptamos simplemente
  • 9:10 - 9:14
    aplicando f inversa al texto cifrado 'c' para recuperar el mensaje original 'm'. Funcionalmente,
  • 9:14 - 9:19
    de hecho, desencriptar es la inversa de encriptar, y esto es
  • 9:19 - 9:23
    completamente inseguro por muchas, muchas razones. El modo más fácil de ver que
  • 9:23 - 9:27
    es inseguro, es que simplemente, esto es encriptación deterministica.
  • 9:27 - 9:31
    Podeis advertir que no se está usando ninguna aleatoriedad. Cuando encriptamos un mensaje 'm'
  • 9:31 - 9:34
    y ya que es deterministico, no puede ser
  • 9:34 - 9:38
    semanticamente seguro. Pero de hecho, tal como dije, cuando instanciamos esta función trampa
  • 9:38 - 9:42
    con implementaciones particulares, por ejemplo con la función trampa RSA
  • 9:42 - 9:45
    hay muchos, muchos ataques que son posibles con esta
  • 9:45 - 9:49
    construcción particular, y por tanto no debeis usarla nunca, nunca, jamás, y voy a repetirlo
  • 9:49 - 9:53
    durante todo este módulo, y dehecho en el próximo segmento voy a mostraros
  • 9:53 - 9:57
    un número de ataques sobre esta implementación particular. OK, lo que me gustaría que
  • 9:57 - 10:01
    recordarais es que deberíais usar un sistema de encriptación, como el estandar ISO,
  • 10:01 - 10:05
    y nunca deberíais aplicar la función trampa directamente al mensaje 'm'
  • 10:05 - 10:09
    Aunque en el próximo segmento veremos otros modos de encriptar usando una función
  • 10:09 - 10:13
    trampa que son también correctos, pero este método particular es muy claramente
  • 10:13 - 10:18
    incorrecto. OK. Ahora que entendemos como construir encriptación de clave pública
  • 10:18 - 10:21
    a partir de una función trampa, la pregunta siguiente es como construir funciones
  • 10:21 - 10:24
    trampa, y vamos a ver esto en el próximo segmento.
Title:
Constructions (11 min)
Video Language:
English
josep.duran edited Spanish subtitles for Constructions (11 min)
josep.duran edited Spanish subtitles for Constructions (11 min)
josep.duran edited Spanish subtitles for Constructions (11 min)
josep.duran edited Spanish subtitles for Constructions (11 min)
josep.duran edited Spanish subtitles for Constructions (11 min)
josep.duran edited Spanish subtitles for Constructions (11 min)
javier.marquina added a translation

Spanish subtitles

Revisions