0:00:00.000,0:00:04.090 En el segmento anterior vimos cómo construir encriptación [br]públicamente con funciones de puerta falsa, 0:00:04.090,0:00:08.390 en este segmento vamos a construir una función de [br]puerta falsa clásica llamada RSA. 0:00:08.390,0:00:13.295 Pero primero vamos a repasar rápidamente qué es una[br]función de puerta falsa. Recordemos que una función 0:00:13.295,0:00:17.283 de puerta falsa está formada por tres funciones. Hay [br]un algoritmo de generación de claves, la función 0:00:17.283,0:00:21.056 propiamente dicha y la inversa de la función. [br]El algoritmo de generación de claves 0:00:21.056,0:00:25.313 genera una clave pública y una clave privada.[br]Y en este caso, en esta lección, la clave pública 0:00:25.313,0:00:29.786 va a definir una función que relaciona el [br]conjunto X consigo mismo. 0:00:29.786,0:00:33.882 Por esta razón llamo a estos objetos permutaciones de[br]puerta falsa, en oposición a funciones de puerta falsa, 0:00:33.882,0:00:37.978 simplemente porque la función relaciona X consigo [br]mismo, mientras que una función de puerta falsa 0:00:37.978,0:00:43.356 podría relacionar el conjunto X con cualquier conjunto [br]arbitrario Y. Ahora, siendo conocida la clave pública, 0:00:43.356,0:00:47.819 la función, como indicamos, básicamente define esta [br]función del conjunto X al conjunto X. 0:00:47.819,0:00:52.914 Y, conociendo la clave secreta, podemos [br]invertir esta función. Por tanto, 0:00:52.914,0:00:57.401 esta función F evalúa la función en la dirección [br]directa y esta función, F inversa, 0:00:57.401,0:01:02.059 que implica la clave secreta SK, calcula F [br]en la dirección inversa. Ahora 0:01:02.059,0:01:06.489 decimos que la permutación de puerta falsa es [br]segura si la función definida por la clave pública 0:01:06.489,0:01:11.033 es de hecho una función unidireccional, lo [br]que significa que es fácil de evaluar, 0:01:11.033,0:01:15.404 pero sin la puerta falsa (la clave secreta), [br]es difícil de invertir. 0:01:15.404,0:01:20.076 Antes de que veamos nuestro primer ejemplo de permutación [br]de puerta falsa, quisiera hacer una revisión rápida 0:01:20.076,0:01:24.467 de algunos elementos de aritmética que vamos a [br]necesitar. Y, en particular, vamos a 0:01:24.467,0:01:28.632 repasar algunos elementos de la aritmética modular [br]con números compuestos. Así, aquí tenemos nuestro 0:01:28.632,0:01:33.192 módulo N, que es el producto de dos números primos, [br]y vosotros deberíais estar imaginando que 0:01:33.192,0:01:37.864 P y Q son números de aproximadamente el mismo [br]tamaño, puesto que P y Q particulares son ambos 0:01:37.864,0:01:42.407 aproximadamente del tamaño de la raíz cuadrada de N. Por[br]tanto, ambos son de aproximadamente el mismo tamaño. 0:01:42.407,0:01:46.834 Recordemos que denotamos ZN al conjunto de enteros de [br]cero a N menos 1 y ya dijimos que podemos 0:01:46.834,0:01:51.318 sumar y multiplicar módulo N. Denotamos como [br]ZN estrella el conjunto de 0:01:51.318,0:01:55.801 elementos invertibles en ZN. O sea, todos los [br]elementos que tienen un inverso modular. 0:01:55.801,0:02:00.925 Y dijimos que, de hecho, X es invertible si y sólo si [br]X y N son primos entre sí (coprimos). 0:02:00.925,0:02:05.928 Además, también os dije que el número [br]de elementos invertibles en ZN estrella 0:02:05.928,0:02:11.147 se denota mediante la función fi de N. Por tanto,[br]fi de N es el número de elementos invertibles en 0:02:11.147,0:02:15.814 ZN estrella. Y os dije que cuando N es el producto [br]de dos números primos diferentes, entonces, de hecho, 0:02:15.814,0:02:20.788 fi de N es igual a P menos uno por Q menos uno, [br]y si lo desarrolláis, veréis que es 0:02:20.788,0:02:26.007 realmente igual a N menos P menos Q más uno. [br]Ahora recordad que dije que P y Q son del orden 0:02:26.007,0:02:30.858 de la raíz cuadrada de N, lo que significa [br]que P más Q es también del orden 0:02:30.858,0:02:35.675 de la raíz cuadrada de N. Lo cual significa [br]que realmente fi de N es del orden de 0:02:35.675,0:02:41.050 N menos dos veces la raíz cuadrada de N. Así, [br]en otras palabras, es muy, muy próxima a N. 0:02:41.050,0:02:45.158 Básicamente, al restar la raíz cuadrada de N de [br]un número, N, que en nuestro caso va a ser 0:02:45.158,0:02:49.425 un número enorme, de unos 600 dígitos.[br]Y así, al restar de un número de 600 0:02:49.425,0:02:53.533 dígitos la raíz cuadrada de ese número de [br]600 dígitos, o sea un número de 300 dígitos, 0:02:53.533,0:02:57.534 apenas afecta al tamaño del número. Lo [br]cual significa que fi de N es realmente, pero lo 0:02:57.534,0:03:01.908 que se dice realmente próxima a N y quiero [br]que recordéis esto, ya que, de hecho, 0:03:01.908,0:03:06.122 lo utilizaremos una y otra vez. Y el hecho de que [br]fi de N sea realmente próximo a N, significa que 0:03:06.122,0:03:11.094 si escogemos un elemento módulo N al azar es [br]muy, muy probable que pertenezca a Z con estrella, 0:03:11.094,0:03:15.633 así que es muy improbable que al escoger un [br]elemento aleatorio al final acabemos 0:03:15.633,0:03:20.085 escogiendo un elemento que no sea invertible.[br]Bien. Por tanto recordad esto, que, 0:03:20.085,0:03:25.479 de hecho, casi todos los elementos de ZN son [br]invertibles. Y, lo último que nos hará falta, 0:03:25.479,0:03:30.939 es el teorema de Euler, que vimos la semana [br]pasada, que básicamente dice que 0:03:30.939,0:03:36.332 para todo elemento x en ZN con estrella, si elevo x a [br]la potencia fi de N, obtengo 1 en ZN. 0:03:36.332,0:03:42.527 Así, en otras palabras, obtengo uno módulo N. Lo [br]diré una vez más porque esto será 0:03:42.527,0:03:47.466 crítico para lo que viene. De nuevo, x elevado a [br]fi de N es igual a uno módulo N. 0:03:47.466,0:03:51.997 Así, ahora que disponemos de los fundamentos [br]necesarios, ya podemos describir la 0:03:51.997,0:03:55.927 permutación de puerta falsa RSA. Se trata de [br]una construcción clásica, clásica, clásica en 0:03:55.927,0:04:00.811 criptografía que se publicó por primera vez en [br]Scientific American en 1977; se trata de un 0:04:00.811,0:04:05.576 artículo muy conocido en criptografía. Y desde [br]entonces, desde hace 35 años, 0:04:05.576,0:04:10.340 la permutación de puerta falsa RSA se ha utilizado [br]profusamente en aplicaciones criptográficas. 0:04:10.340,0:04:15.110 Por ejemplo, SSL y TLS utilizan RSA tanto para [br]certificados como para intercambio de claves. 0:04:15.110,0:04:19.452 Hay muchos sistemas de correo electrónico seguro [br]y sistemas de archivos seguros que utilizan RSA para 0:04:19.452,0:04:23.515 encriptar correos electrónicos y archivos del sistema de [br]archivos. Y hay muchas, muchas, muchas diferentes 0:04:23.515,0:04:27.690 aplicaciones de este sistema. Así, ésta es una [br]construcción criptográfica muy, muy clásica 0:04:27.690,0:04:32.541 y voy a mostraros como funciona. Debería comentar [br]que el nombre de RSA deriva de sus 0:04:32.541,0:04:37.150 inventores: Ron Rivest, Adi Shamir y Len Adleman, [br]quienes estaban todos en el MIT cuando 0:04:37.150,0:04:41.758 hicieron este importante descubrimiento. Así, [br]ahora estamos listos para describir la permutación de 0:04:41.758,0:04:46.425 puerta falsa RSA. Para ello, tengo que describir [br]el algoritmo de generación de claves, 0:04:46.425,0:04:50.159 la función F y la función inversa de F. Así que veamos... [br]La forma en que funciona el algoritmo de generación 0:04:50.159,0:04:54.826 de claves es la siguiente: lo que hacemos es [br]generar dos números primos, P y Q, 0:04:54.826,0:04:59.143 cada uno de los cuales tendrá, digamos, del [br]orden de 1000 bits, o sea, ya sabéis, unos 0:04:59.143,0:05:03.751 300 dígitos, y el módulo RSA simplemente va a ser[br]el producto de ambos números primos. 0:05:03.751,0:05:08.801 Lo siguiente que haremos es escoger dos[br]exponentes, e y d, tales que el producto de 0:05:08.801,0:05:13.894 e y d sea uno módulo fi de N. Lo que esto [br]significa es que, primero, 0:05:13.894,0:05:19.051 E y D son coprimos de fi de N y, segundo, son [br]mutuamente inversos modulares 0:05:19.051,0:05:24.014 módulo fi de N. Y entonces, generamos [br]la clave pública como el par 0:05:24.014,0:05:29.172 N, coma, e y la clave secreta (privada), N, coma, d.[br]Debo mencionar que el exponente e, 0:05:29.172,0:05:34.586 que al número "e" en ocasiones se le denomina [br]exponente de encriptación y al exponente "d" en 0:05:34.586,0:05:39.135 ocasiones se le denomina exponente de desencriptado. [br]Y veréis por qué me refiero continuamente a ellos 0:05:39.135,0:05:43.189 como exponentes en un momento. Ahora, la forma [br]en que la función RSA se define 0:05:43.189,0:05:46.902 es realmente sencilla. Por simplicidad, voy [br]a definirla como una función 0:05:46.902,0:05:51.801 de ZN estrella a ZN estrella. Y la forma en que [br]se define la función es, simplemente, dado un 0:05:51.801,0:05:57.001 valor de entrada x, lo único que hacemos es elevarlo [br]a la potencia e en ZN. Por tanto, nos limitamos a 0:05:57.001,0:06:02.137 calcular x elevado a e, módulo N. Eso es todo. Y [br]para desencriptar, lo que hacemos es, simplemente, 0:06:02.137,0:06:07.451 dado un valor de entrada y, simplemente elevamos [br]y a la potencia d, módulo N. Y eso es todo. 0:06:07.451,0:06:12.483 Así, ahora podéis ver por qué me refería a "e" y "d" [br]como exponentes. Son los valores a los 0:06:12.483,0:06:17.767 que "x" e "y" se elevan. Así, vamos a verificar [br]rápidamente que la inversa de F realmente 0:06:17.767,0:06:22.673 invierte la función F. Para eso vamos a ver qué ocurre [br]cuando calculamos "y" elevado a "d". Así, 0:06:22.673,0:06:27.515 supongamos que "y" es el valor de la función RSA [br]para cierto valor "x". En ese caso, 0:06:27.515,0:06:33.045 lo que es "y" elevado a "d", en realidad es RSA de [br]x elevado a la potencia "d". RSA de x, por sí misma, 0:06:33.045,0:06:39.006 es simplemente "x" elevado a "e" módulo N. Y, por tanto, [br]"y" elevado a "d" es simplemente "x" elevado a 0:06:39.006,0:06:44.896 "e" por "d" módulo N. De nuevo, simplemente usando [br]las reglas de exponenciación, los exponentes se 0:06:44.896,0:06:50.857 multiplican y obtenemos "x" elevado a "e" por "d". Pero, [br]¿qué sabemos sobre "e" por "d"? "e" por "d" dijimos que 0:06:50.857,0:06:57.390 es uno módulo fi de N. Y lo que esto significa es que [br]existe algún entero tal que "e" por "d" es 0:06:57.390,0:07:04.177 igual a k por fi de n más uno. Esto es lo que [br]significa que "e" por "d" sea 0:07:04.177,0:07:09.820 uno módulo fi de N. Así, podemos simplemente reemplazar [br]"e" por "d" con k por fi de n más uno. Y eso es 0:07:09.820,0:07:14.453 lo que escribí aquí. Así, tenemos x elevado a k por [br]fi de n mas uno. Pero ahora, de nuevo 0:07:14.453,0:07:19.868 usando las reglas de exponenciación, podemos [br]reescribir esto como x elevado a fi de N, elevado 0:07:19.868,0:07:24.827 a k, por x. Esto es realmente lo mismo que [br]k por fi de N más 1 como exponente. 0:07:24.827,0:07:29.917 Me he limitado a separar el exponente en[br]sus diferentes componentes. 0:07:29.917,0:07:35.137 Ahora, x elevado a fi de N por el teorema de Euler, [br]sabemos que x elevado a fi de N es igual a uno. Así, 0:07:35.137,0:07:41.394 ¿a qué es igual todo este producto? Bien, puesto que [br]x elevado a fi de N es igual a uno, uno 0:07:41.394,0:07:45.961 elevado a k es también igual a uno. Por tanto,[br]todo este término de aquí es simplemente igual a uno. 0:07:45.961,0:07:50.757 Y lo que nos queda es x. Así, lo que hemos [br]probado es que si tomamos la salida de la 0:07:50.757,0:07:55.210 función RSA y la elevamos a "d", obtenemos [br]de nuevo x. Lo cual significa que 0:07:55.210,0:07:59.663 al elevar a "d" básicamente se invierte la [br]función RSA, que es lo que 0:07:59.663,0:08:04.638 queríamos mostrar. Así, eso es todo. Esta es [br]la descripción completa de la función. Hemos 0:08:04.638,0:08:08.972 descrito la generación de la clave, la propia [br]función que consiste simplemente en elevar 0:08:08.972,0:08:13.410 a la potencia de "e" módulo N, y la función [br]inversa, que consiste en elevar a la 0:08:13.410,0:08:17.483 potencia de "d", también módulo N. La siguiente [br]pregunta es ¿por qué esta función es segura? 0:08:17.483,0:08:21.609 En otras palabras, ¿por qué esta función es unidireccional [br]si todo lo que tengo es sólo una clave pública 0:08:21.609,0:08:26.409 pero no tengo la clave privada? Y para argumentar [br]que esta función es unidireccional, 0:08:26.409,0:08:31.454 básicamente enunciamos el supuesto RSA, que [br]básicamente dice que la función RSA es una 0:08:31.454,0:08:36.626 permutación unidireccional. Y, formalmente, la [br]forma en que se enuncia es que, básicamente para todo 0:08:36.626,0:08:41.416 algoritmo eficiente A, si genero dos números [br]primos p y q, 0:08:41.416,0:08:46.397 números primos aleatorios p y q, los multiplico [br]para obtener el módulo N y luego escojo un 0:08:46.397,0:08:51.103 valor aleatorio y en ZN estrella y proporciono [br]el módulo, el exponente y el valor y al 0:08:51.103,0:08:55.893 algoritmo A, la probabilidad de que obtenga el [br]inverso de RSA en el punto y, esto es, 0:08:55.893,0:09:00.336 de que obtenga "y" elevado a uno partido "e" (esto [br]es lo que el inverso realmente es), esta 0:09:00.336,0:09:04.606 probabilidad es negligible. Así, esta suposición [br]se denomina supuesto RSA. 0:09:04.606,0:09:09.338 Básicamente enuncia que RSA es una permutación[br]unidireccional cuando sólo se proporciona una clave pública. 0:09:09.338,0:09:13.954 Y, consecuentemente, es una permutación de puerta falsa [br]porque tiene una puerta falsa, y esto la hace [br]tiene 0:09:13.954,0:09:19.501 fácil de invertir para cualquiera que conozca la [br]puerta falsa. Así, ahora que tenemos una permutación 0:09:19.501,0:09:23.717 de puerta falsa segura, podemos simplemente combinarla [br]con nuestra construcción de encriptación pública 0:09:23.717,0:09:27.826 y tendremos nuestro primer sistema real de [br]encriptación pública. Y así, lo que 0:09:27.826,0:09:32.362 haremos es simplemente insertar la permutación [br]de puerta falsa RSA en la construcción estándar 0:09:32.362,0:09:36.151 ISO que vimos en el segmento anterior. [br]Así, si os acordáis, dicha 0:09:36.151,0:09:40.207 construcción estaba basada en un sistema [br]de encriptación simétrica que tenía que proporcionar 0:09:40.207,0:09:44.438 encriptación autentificada. Y estaba también basada [br]en una función hash que relaciona, 0:09:44.615,0:09:48.866 bien, transfiriéndolo al mundo RSA, [br]relaciona elementos en 0:09:48.866,0:09:54.202 ZN con claves secretas para el [br]sistema de clave simétrica. Y ahora, la 0:09:54.202,0:09:58.947 forma en que el esquema de encripción funciona es [br]realmente fácil de describir. Básicamente el algoritmo G 0:09:58.947,0:10:03.751 básicamente ejecuta el algoritmo de generación de [br]claves RSA y genera una clave pública y una 0:10:03.751,0:10:07.813 clave privada, igual que antes. Fijaos en que la [br]clave pública contiene el exponente de 0:10:07.813,0:10:11.948 encripción y la clave privada contiene el [br]exponente de desencriptado. Y la forma en que 0:10:11.948,0:10:16.298 encriptamos es la siguiente. Bien, vamos a escoger [br]un valor aleatorio de "x" en ZN, vamos a 0:10:16.298,0:10:21.468 aplicar la función RSA a esta "x", vamos a reducirla [br]a una clave simétrica generando su "hash", 0:10:21.468,0:10:26.453 así que calcularemos H de "x" para obtener [br]la clave "k", y entonces la salida será 0:10:26.453,0:10:31.130 "y" junto a la encriptación del mensaje [br]usando la clave simétrica "k". Y, en la 0:10:31.130,0:10:35.930 práctica, la función "hash" H se implementaría [br]mediante SHA-256 y 0:10:35.930,0:10:40.977 utilizaríais el operador SHA-256 para [br]generar una clave simétrica que se pudiese 0:10:40.977,0:10:45.687 utilizar en el sistema de encriptación simétrica. [br]Así es como encriptaríamos 0:10:45.687,0:10:50.084 y la forma en que desencriptariamos es [br]básicamente como vimos en el segmento 0:10:50.084,0:10:54.951 anterior, pero lo primero que haríamos es [br]utilizar la clave privada para invertir 0:10:54.951,0:10:59.758 la cabecera del texto cifrado. Así, calcularíamos [br]la inversa RSA de "y", que nos proporcionaría 0:10:59.758,0:11:04.566 el valor de "x". A continuación aplicaríamos [br]la función "hash" a "x" para obtener 0:11:04.566,0:11:09.198 la clave k. Y entonces ejecutaríamos el[br]algoritmo de desencriptación del sistema 0:11:09.198,0:11:15.171 simétrico sobre el texto cifrado y esto produciría [br]el mensaje original, "m". 0:11:15.171,0:11:19.103 Y en su momento enunciamos un teorema en el [br]segmento anterior indicando que si la permutación 0:11:19.103,0:11:23.087 de puerta falsa RSA es segura, Es y Ds, el esquema de [br]encriptación simétrica proporciona 0:11:23.087,0:11:27.175 encriptación segura y, como dijimos, H es un [br]oráculo aleatorio, esto es, 0:11:27.332,0:11:31.421 ya sabéis, un tipo de función aleatoria de [br]ZN al espacio de claves. Entonces, de hecho, este 0:11:31.421,0:11:35.720 sistema presenta seguridad de texto cifrado escogido y [br]es un buen sistema de encriptación pública a usar. 0:11:36.240,0:11:41.729 Así, ahora que tenemos nuestro primer ejemplo de un buen [br]sistema de encriptación pública, quisiera daros un 0:11:41.729,0:11:46.978 rápido aviso sobre cómo no utilizar RSA para [br]encriptación. Y esto es algo, de nuevo, que 0:11:46.978,0:11:51.101 ya dijimos en el segmento anterior. Y voy a [br]repetirlo aquí, salvo que voy a 0:11:51.101,0:11:55.534 hacerlo específico para RSA. Así, me gustaría [br]llamarlo RSA "de libro", 0:11:55.534,0:11:59.400 que es lo primero que se le ocurre a [br]uno cuando piensa en 0:11:59.400,0:12:03.678 encriptar usando RSA, a saber, la clave secreta [br]y la clave privada serán como antes, 0:12:03.678,0:12:08.162 pero en lugar de utilizar una función [br]"hash" para generar una clave simétrica, lo 0:12:08.162,0:12:12.337 que haremos es usar directamente RSA para [br]encriptar el mensaje dado, "m". Y entonces, 0:12:12.337,0:12:16.202 utilizaremos directamente un exponente de desencriptado [br]para desencriptar el texto cifrado y 0:12:16.202,0:12:20.773 obtener el texto llano, "m". Voy a llamar a esto [br]"RSA de libro" porque hay muchos libros que 0:12:20.773,0:12:25.350 describen la encripción RSA de este [br]modo. Y esto es completamente erróneo. 0:12:25.350,0:12:29.495 Así no es como funciona la encripción RSA. Se [br]trata de un sistema inseguro. En particular, 0:12:29.495,0:12:33.936 se trata de encripción determinista y, por tanto, [br]no es posible que sea semánticamente segura y, 0:12:33.936,0:12:38.542 de hecho, existen múltiples ataques y voy a [br]mostraros un ataque en un minuto. 0:12:38.542,0:12:42.709 Pero el mensaje que quiero que quede [br]claro aquí es que RSA es únicamente 0:12:42.709,0:12:47.151 una permutación de puerta falsa. Por si misma [br]no es un sistema de encriptado. Tenéis que 0:12:47.151,0:12:51.427 integrarlo en el estándar ISO, por ejemplo, [br]para convertirlo en un sistema de encriptado. 0:12:51.427,0:12:55.826 Por si mismo, no es más que una función. [br]Así, vamos a ver cuál es el problema si 0:12:55.826,0:13:00.225 intentáis utilizar RSA "de libro", en otras palabras, [br]si intentáis encriptar un mensaje 0:13:00.225,0:13:04.975 utilizando RSA directamente. Y os pondré un [br]ejemplo de ataque del mundo de la web. 0:13:04.975,0:13:09.725 Imaginad que tenéis un servidor web. El servidor [br]web tiene una clave RSA privada. Aquí la 0:13:09.725,0:13:14.738 denotaremos como N y "d". Y tenemos un navegador[br]web que está intentando establecer una sesión 0:13:14.738,0:13:19.124 segura, una sesión segura SSL con el servidor web. [br]La forma en que SSL funciona es que el 0:13:19.124,0:13:23.401 navegador web empieza enviando este [br]mensaje "CLIENT HELLO" que significa, ¡eh, quiero 0:13:23.401,0:13:27.787 establecer una sesión segura contigo! El servidor [br]web responde con un mensaje "SERVER HELLO" 0:13:27.787,0:13:32.430 que contiene la clave pública del servidor [br]y entonces el navegador web continuará y 0:13:32.430,0:13:36.615 generará una clave aleatoria denominada clave [br]secreta pre-máster, encriptará la clave 0:13:36.615,0:13:40.692 secreta pre-máster usando [RSA] (N.T. el original dice "k") [br]y enviará el resultado cifrado al servidor web. 0:13:40.692,0:13:44.932 El servidor web lo desencriptará y entonces el [br]servidor web también tendrá "k", por lo que 0:13:44.932,0:13:49.336 ahora ambos disponen de una clave compartida que [br]pueden usar para establecer una sesión segura entre 0:13:49.336,0:13:53.630 ellos. Lo que quiero mostraros es qué va mal si [br]utilizamos directamente la función RSA 0:13:53.630,0:13:57.762 para encriptar "k". En otras palabras, si directamente [br]se encripta "k" usando "k" elevado a "e" 0:13:57.762,0:14:02.828 módulo N y pongamos por caso, supongamos, [br]que "k" es una clave de 64 bits. 0:14:02.828,0:14:08.097 Vamos a tratar "k" como un entero en el rango [br]de 0 a dos elevado a 64. 0:14:08.097,0:14:13.100 Más exactamente, dos elevado a 64 menos uno, y [br]ahora lo que vamos a hacer es 0:14:13.100,0:14:18.302 lo siguiente. En primer lugar, supongamos que [br]"k" se puede factorizar en un producto de 0:14:18.302,0:14:23.705 números de tamaños aproximadamente iguales. Así, [br]podemos escribir "k" como k1 por k2, donde k1 y k2 0:14:23.705,0:14:29.745 son enteros y ambos son, digamos, menores que dos [br]elevado a 34. Y resulta que esto sucede con una 0:14:29.745,0:14:34.508 probabilidad del 20%, o sea, una de cada [br]cinco veces "k" se podrá 0:14:34.508,0:14:39.740 escribir en esta forma. Pero ahora, si introducimos esta "k", [br]"k" igual a k1 por k2, si la introducimos en la 0:14:39.740,0:14:45.241 ecuación que define el texto cifrado, podéis ver [br]que simplemente sustituimos con k1 por k2 0:14:45.241,0:14:50.875 y entonces podemos mover k1 al otro lado, por lo [br]que acabamos obteniendo una ecuación, 0:14:50.875,0:14:55.897 a saber, C dividido por k1 elevado a "e" es igual a [br]k2 elevado a "d". Daros cuenta que si multiplico ambos 0:14:55.897,0:15:00.659 lados por k1 elevado a "e", obtengo que C es [br]igual a k1 por k2 elevado a "e" 0:15:00.659,0:15:06.374 que es precisamente esta ecuación de aquí. De acuerdo, [br]así que lo único que he hecho ha sido reemplazar "k" con 0:15:06.374,0:15:11.955 k1 por k2 y dividir por k1 elevado a "e". Esto [br]os debería ser ya familiar. 0:15:11.955,0:15:16.146 Así que ahora tenemos dos variables en esta [br]ecuación. Por supuesto, c es conocido por el 0:15:16.146,0:15:20.092 atacante, "e" es conocido por el atacante y N [br]es conocido por el atacante. Las dos 0:15:20.092,0:15:24.518 variables de esta ecuación son k1 y k2 y [br]las hemos separado en 0:15:24.518,0:15:28.891 distintos lados de la ecuación y, como resultado, [br]podemos realizar un ataque por "encuentro en 0:15:28.891,0:15:33.157 la mitad" contra esta ecuación. Así, vamos a [br]realizar el ataque por "encuentro en la mitad". Lo que 0:15:33.157,0:15:37.524 haríamos es construir una tabla de todos los [br]posibles valores de la parte izquierda. Así, 0:15:37.524,0:15:43.392 todos los posibles valores de C dividido entre k1 elevado [br]a "e", de los que hay 2 elevado a 34. Y entonces, 0:15:43.584,0:15:48.878 para todos los valores posibles de la parte derecha, [br]esto es, para todos los posibles valores 0:15:48.878,0:15:54.175 de k2 elevado a "e", vamos a comprobar si este [br]valor se encuentra en la tabla que hemos 0:15:54.175,0:15:58.749 construido en el paso uno. Y si esto es así, entonces [br]habremos encontrado una colisión y, básicamente, 0:15:58.749,0:16:03.265 tenemos una solución a esta ecuación. Por tanto, tan [br]pronto como encontremos un elemento de la forma 0:16:03.265,0:16:07.962 k2 elevado a "e" que se encuentre en la tabla que hemos [br]construido en el paso uno, habremos solucionado esta 0:16:07.962,0:16:12.717 ecuación y encontrado k1 y k2. Y, por [br]supuesto, una vez encontrados k1 y k2, 0:16:12.717,0:16:16.950 podemos recuperar "k" fácilmente simplemente [br]multiplicándolos. Así, multiplicamos 0:16:16.950,0:16:21.428 k1 y k2 y obtenemos la clave secreta "k". ¿De acuerdo?[br]Por lo tanto, hemos roto, básicamente, 0:16:21.428,0:16:25.604 este sistema de encriptación. ¿Y cuántos nos llevó?[br]Bien, por la fuerza bruta 0:16:25.604,0:16:29.890 lo podríamos haber roto en tiempo 2 a la 64, [br]simplemente probando todas las posibles claves. Pero 0:16:29.890,0:16:33.792 este ataque, daros cuenta, llevó un tiempo 2 a la 34 [br]para el paso número uno. Bien, llevó 0:16:33.792,0:16:38.353 algo más de 2 a la 34 porque tuvimos que [br]realizar esas exponenciales. 0:16:38.518,0:16:42.969 El paso dos llevó un tiempo 2 a la 34, de nuevo [br]ligeramente más que 2 a la 34 0:16:42.969,0:16:47.530 a causa de las exponenciales. Así, digamos que [br]el algoritmo en su conjunto llevó un tiempo 0:16:47.530,0:16:52.277 2 a la 40. La cuestión es que se trata de mucho, [br]mucho menos tiempo que 2 a la 64. Así, aquí 0:16:52.277,0:16:56.667 tenéis un ejemplo en el que si encriptáis usando [br]RSA directamente, dicho de otro modo, si 0:16:56.667,0:17:01.296 calculáis "k" elevado a "e" módulo N en lugar [br]de seguir el estándar ISO, 0:17:01.296,0:17:05.983 por ejemplo, entonces tenéis un ataque que se realiza [br]mucho más rápidamente que la búsqueda exhaustiva. 0:17:05.983,0:17:10.730 Tenéis un ataque que se ejecuta en tiempo 2 a la 40, [br]en lugar de en tiempo 2 a la 64. 0:17:10.730,0:17:14.985 De acuerdo, así este es un buen ejemplo de cómo [br]se pueden torcer las cosas si utilizáis la 0:17:14.985,0:17:19.299 permutación de puerta falsa RSA directamente [br]para encriptar un mensaje. Así, la idea a 0:17:19.299,0:17:23.670 recordar aquí es nunca, nunca, nunca uséis [br]RSA directamente para encriptar. Tenéis que 0:17:23.670,0:17:27.868 ir a través de un mecanismo de encriptación, por [br]ejemplo el estándar ISO. Y, de hecho, 0:17:27.868,0:17:32.354 en el próximo segmento vamos a ver otras [br]formas de utilizar RSA para construir 0:17:32.354,0:17:33.620 encriptación de clave pública.