[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.09,Default,,0000,0000,0000,,En el segmento anterior vimos cómo construir encriptación \Npúblicamente con funciones de puerta falsa, Dialogue: 0,0:00:04.09,0:00:08.39,Default,,0000,0000,0000,,en este segmento vamos a construir una función de \Npuerta falsa clásica llamada RSA. Dialogue: 0,0:00:08.39,0:00:13.30,Default,,0000,0000,0000,,Pero primero vamos a repasar rápidamente qué es una\Nfunción de puerta falsa. Recordemos que una función Dialogue: 0,0:00:13.30,0:00:17.28,Default,,0000,0000,0000,,de puerta falsa está formada por tres funciones. Hay \Nun algoritmo de generación de claves, la función Dialogue: 0,0:00:17.28,0:00:21.06,Default,,0000,0000,0000,,propiamente dicha y la inversa de la función. \NEl algoritmo de generación de claves Dialogue: 0,0:00:21.06,0:00:25.31,Default,,0000,0000,0000,,genera una clave pública y una clave privada.\NY en este caso, en esta lección, la clave pública Dialogue: 0,0:00:25.31,0:00:29.79,Default,,0000,0000,0000,,va a definir una función que relaciona el \Nconjunto X consigo mismo. Dialogue: 0,0:00:29.79,0:00:33.88,Default,,0000,0000,0000,,Por esta razón llamo a estos objetos permutaciones de\Npuerta falsa, en oposición a funciones de puerta falsa, Dialogue: 0,0:00:33.88,0:00:37.98,Default,,0000,0000,0000,,simplemente porque la función relaciona X consigo \Nmismo, mientras que una función de puerta falsa Dialogue: 0,0:00:37.98,0:00:43.36,Default,,0000,0000,0000,,podría relacionar el conjunto X con cualquier conjunto \Narbitrario Y. Ahora, siendo conocida la clave pública, Dialogue: 0,0:00:43.36,0:00:47.82,Default,,0000,0000,0000,,la función, como indicamos, básicamente define esta \Nfunción del conjunto X al conjunto X. Dialogue: 0,0:00:47.82,0:00:52.91,Default,,0000,0000,0000,,Y, conociendo la clave secreta, podemos \Ninvertir esta función. Por tanto, Dialogue: 0,0:00:52.91,0:00:57.40,Default,,0000,0000,0000,,esta función F evalúa la función en la dirección \Ndirecta y esta función, F inversa, Dialogue: 0,0:00:57.40,0:01:02.06,Default,,0000,0000,0000,,que implica la clave secreta SK, calcula F \Nen la dirección inversa. Ahora Dialogue: 0,0:01:02.06,0:01:06.49,Default,,0000,0000,0000,,decimos que la permutación de puerta falsa es \Nsegura si la función definida por la clave pública Dialogue: 0,0:01:06.49,0:01:11.03,Default,,0000,0000,0000,,es de hecho una función unidireccional, lo \Nque significa que es fácil de evaluar, Dialogue: 0,0:01:11.03,0:01:15.40,Default,,0000,0000,0000,,pero sin la puerta falsa (la clave secreta), \Nes difícil de invertir. Dialogue: 0,0:01:15.40,0:01:20.08,Default,,0000,0000,0000,,Antes de que veamos nuestro primer ejemplo de permutación \Nde puerta falsa, quisiera hacer una revisión rápida Dialogue: 0,0:01:20.08,0:01:24.47,Default,,0000,0000,0000,,de algunos elementos de aritmética que vamos a \Nnecesitar. Y, en particular, vamos a Dialogue: 0,0:01:24.47,0:01:28.63,Default,,0000,0000,0000,,repasar algunos elementos de la aritmética modular \Ncon números compuestos. Así, aquí tenemos nuestro Dialogue: 0,0:01:28.63,0:01:33.19,Default,,0000,0000,0000,,módulo N, que es el producto de dos números primos, \Ny vosotros deberíais estar imaginando que Dialogue: 0,0:01:33.19,0:01:37.86,Default,,0000,0000,0000,,P y Q son números de aproximadamente el mismo \Ntamaño, puesto que P y Q particulares son ambos Dialogue: 0,0:01:37.86,0:01:42.41,Default,,0000,0000,0000,,aproximadamente del tamaño de la raíz cuadrada de N. Por\Ntanto, ambos son de aproximadamente el mismo tamaño. Dialogue: 0,0:01:42.41,0:01:46.83,Default,,0000,0000,0000,,Recordemos que denotamos ZN al conjunto de enteros de \Ncero a N menos 1 y ya dijimos que podemos Dialogue: 0,0:01:46.83,0:01:51.32,Default,,0000,0000,0000,,sumar y multiplicar módulo N. Denotamos como \NZN estrella el conjunto de Dialogue: 0,0:01:51.32,0:01:55.80,Default,,0000,0000,0000,,elementos invertibles en ZN. O sea, todos los \Nelementos que tienen un inverso modular. Dialogue: 0,0:01:55.80,0:02:00.92,Default,,0000,0000,0000,,Y dijimos que, de hecho, X es invertible si y sólo si \NX y N son primos entre sí (coprimos). Dialogue: 0,0:02:00.92,0:02:05.93,Default,,0000,0000,0000,,Además, también os dije que el número \Nde elementos invertibles en ZN estrella Dialogue: 0,0:02:05.93,0:02:11.15,Default,,0000,0000,0000,,se denota mediante la función fi de N. Por tanto,\Nfi de N es el número de elementos invertibles en Dialogue: 0,0:02:11.15,0:02:15.81,Default,,0000,0000,0000,,ZN estrella. Y os dije que cuando N es el producto \Nde dos números primos diferentes, entonces, de hecho, Dialogue: 0,0:02:15.81,0:02:20.79,Default,,0000,0000,0000,,fi de N es igual a P menos uno por Q menos uno, \Ny si lo desarrolláis, veréis que es Dialogue: 0,0:02:20.79,0:02:26.01,Default,,0000,0000,0000,,realmente igual a N menos P menos Q más uno. \NAhora recordad que dije que P y Q son del orden Dialogue: 0,0:02:26.01,0:02:30.86,Default,,0000,0000,0000,,de la raíz cuadrada de N, lo que significa \Nque P más Q es también del orden Dialogue: 0,0:02:30.86,0:02:35.68,Default,,0000,0000,0000,,de la raíz cuadrada de N. Lo cual significa \Nque realmente fi de N es del orden de Dialogue: 0,0:02:35.68,0:02:41.05,Default,,0000,0000,0000,,N menos dos veces la raíz cuadrada de N. Así, \Nen otras palabras, es muy, muy próxima a N. Dialogue: 0,0:02:41.05,0:02:45.16,Default,,0000,0000,0000,,Básicamente, al restar la raíz cuadrada de N de \Nun número, N, que en nuestro caso va a ser Dialogue: 0,0:02:45.16,0:02:49.42,Default,,0000,0000,0000,,un número enorme, de unos 600 dígitos.\NY así, al restar de un número de 600 Dialogue: 0,0:02:49.42,0:02:53.53,Default,,0000,0000,0000,,dígitos la raíz cuadrada de ese número de \N600 dígitos, o sea un número de 300 dígitos, Dialogue: 0,0:02:53.53,0:02:57.53,Default,,0000,0000,0000,,apenas afecta al tamaño del número. Lo \Ncual significa que fi de N es realmente, pero lo Dialogue: 0,0:02:57.53,0:03:01.91,Default,,0000,0000,0000,,que se dice realmente próxima a N y quiero \Nque recordéis esto, ya que, de hecho, Dialogue: 0,0:03:01.91,0:03:06.12,Default,,0000,0000,0000,,lo utilizaremos una y otra vez. Y el hecho de que \Nfi de N sea realmente próximo a N, significa que Dialogue: 0,0:03:06.12,0:03:11.09,Default,,0000,0000,0000,,si escogemos un elemento módulo N al azar es \Nmuy, muy probable que pertenezca a Z con estrella, Dialogue: 0,0:03:11.09,0:03:15.63,Default,,0000,0000,0000,,así que es muy improbable que al escoger un \Nelemento aleatorio al final acabemos Dialogue: 0,0:03:15.63,0:03:20.08,Default,,0000,0000,0000,,escogiendo un elemento que no sea invertible.\NBien. Por tanto recordad esto, que, Dialogue: 0,0:03:20.08,0:03:25.48,Default,,0000,0000,0000,,de hecho, casi todos los elementos de ZN son \Ninvertibles. Y, lo último que nos hará falta, Dialogue: 0,0:03:25.48,0:03:30.94,Default,,0000,0000,0000,,es el teorema de Euler, que vimos la semana \Npasada, que básicamente dice que Dialogue: 0,0:03:30.94,0:03:36.33,Default,,0000,0000,0000,,para todo elemento x en ZN con estrella, si elevo x a \Nla potencia fi de N, obtengo 1 en ZN. Dialogue: 0,0:03:36.33,0:03:42.53,Default,,0000,0000,0000,,Así, en otras palabras, obtengo uno módulo N. Lo \Ndiré una vez más porque esto será Dialogue: 0,0:03:42.53,0:03:47.47,Default,,0000,0000,0000,,crítico para lo que viene. De nuevo, x elevado a \Nfi de N es igual a uno módulo N. Dialogue: 0,0:03:47.47,0:03:51.100,Default,,0000,0000,0000,,Así, ahora que disponemos de los fundamentos \Nnecesarios, ya podemos describir la Dialogue: 0,0:03:51.100,0:03:55.93,Default,,0000,0000,0000,,permutación de puerta falsa RSA. Se trata de \Nuna construcción clásica, clásica, clásica en Dialogue: 0,0:03:55.93,0:04:00.81,Default,,0000,0000,0000,,criptografía que se publicó por primera vez en \NScientific American en 1977; se trata de un Dialogue: 0,0:04:00.81,0:04:05.58,Default,,0000,0000,0000,,artículo muy conocido en criptografía. Y desde \Nentonces, desde hace 35 años, Dialogue: 0,0:04:05.58,0:04:10.34,Default,,0000,0000,0000,,la permutación de puerta falsa RSA se ha utilizado \Nprofusamente en aplicaciones criptográficas. Dialogue: 0,0:04:10.34,0:04:15.11,Default,,0000,0000,0000,,Por ejemplo, SSL y TLS utilizan RSA tanto para \Ncertificados como para intercambio de claves. Dialogue: 0,0:04:15.11,0:04:19.45,Default,,0000,0000,0000,,Hay muchos sistemas de correo electrónico seguro \Ny sistemas de archivos seguros que utilizan RSA para Dialogue: 0,0:04:19.45,0:04:23.52,Default,,0000,0000,0000,,encriptar correos electrónicos y archivos del sistema de \Narchivos. Y hay muchas, muchas, muchas diferentes Dialogue: 0,0:04:23.52,0:04:27.69,Default,,0000,0000,0000,,aplicaciones de este sistema. Así, ésta es una \Nconstrucción criptográfica muy, muy clásica Dialogue: 0,0:04:27.69,0:04:32.54,Default,,0000,0000,0000,,y voy a mostraros como funciona. Debería comentar \Nque el nombre de RSA deriva de sus Dialogue: 0,0:04:32.54,0:04:37.15,Default,,0000,0000,0000,,inventores: Ron Rivest, Adi Shamir y Len Adleman, \Nquienes estaban todos en el MIT cuando Dialogue: 0,0:04:37.15,0:04:41.76,Default,,0000,0000,0000,,hicieron este importante descubrimiento. Así, \Nahora estamos listos para describir la permutación de Dialogue: 0,0:04:41.76,0:04:46.42,Default,,0000,0000,0000,,puerta falsa RSA. Para ello, tengo que describir \Nel algoritmo de generación de claves, Dialogue: 0,0:04:46.42,0:04:50.16,Default,,0000,0000,0000,,la función F y la función inversa de F. Así que veamos... \NLa forma en que funciona el algoritmo de generación Dialogue: 0,0:04:50.16,0:04:54.83,Default,,0000,0000,0000,,de claves es la siguiente: lo que hacemos es \Ngenerar dos números primos, P y Q, Dialogue: 0,0:04:54.83,0:04:59.14,Default,,0000,0000,0000,,cada uno de los cuales tendrá, digamos, del \Norden de 1000 bits, o sea, ya sabéis, unos Dialogue: 0,0:04:59.14,0:05:03.75,Default,,0000,0000,0000,,300 dígitos, y el módulo RSA simplemente va a ser\Nel producto de ambos números primos. Dialogue: 0,0:05:03.75,0:05:08.80,Default,,0000,0000,0000,,Lo siguiente que haremos es escoger dos\Nexponentes, e y d, tales que el producto de Dialogue: 0,0:05:08.80,0:05:13.89,Default,,0000,0000,0000,,e y d sea uno módulo fi de N. Lo que esto \Nsignifica es que, primero, Dialogue: 0,0:05:13.89,0:05:19.05,Default,,0000,0000,0000,,E y D son coprimos de fi de N y, segundo, son \Nmutuamente inversos modulares Dialogue: 0,0:05:19.05,0:05:24.01,Default,,0000,0000,0000,,módulo fi de N. Y entonces, generamos \Nla clave pública como el par Dialogue: 0,0:05:24.01,0:05:29.17,Default,,0000,0000,0000,,N, coma, e y la clave secreta (privada), N, coma, d.\NDebo mencionar que el exponente e, Dialogue: 0,0:05:29.17,0:05:34.59,Default,,0000,0000,0000,,que al número "e" en ocasiones se le denomina \Nexponente de encriptación y al exponente "d" en Dialogue: 0,0:05:34.59,0:05:39.14,Default,,0000,0000,0000,,ocasiones se le denomina exponente de desencriptado. \NY veréis por qué me refiero continuamente a ellos Dialogue: 0,0:05:39.14,0:05:43.19,Default,,0000,0000,0000,,como exponentes en un momento. Ahora, la forma \Nen que la función RSA se define Dialogue: 0,0:05:43.19,0:05:46.90,Default,,0000,0000,0000,,es realmente sencilla. Por simplicidad, voy \Na definirla como una función Dialogue: 0,0:05:46.90,0:05:51.80,Default,,0000,0000,0000,,de ZN estrella a ZN estrella. Y la forma en que \Nse define la función es, simplemente, dado un Dialogue: 0,0:05:51.80,0:05:57.00,Default,,0000,0000,0000,,valor de entrada x, lo único que hacemos es elevarlo \Na la potencia e en ZN. Por tanto, nos limitamos a Dialogue: 0,0:05:57.00,0:06:02.14,Default,,0000,0000,0000,,calcular x elevado a e, módulo N. Eso es todo. Y \Npara desencriptar, lo que hacemos es, simplemente, Dialogue: 0,0:06:02.14,0:06:07.45,Default,,0000,0000,0000,,dado un valor de entrada y, simplemente elevamos \Ny a la potencia d, módulo N. Y eso es todo. Dialogue: 0,0:06:07.45,0:06:12.48,Default,,0000,0000,0000,,Así, ahora podéis ver por qué me refería a "e" y "d" \Ncomo exponentes. Son los valores a los Dialogue: 0,0:06:12.48,0:06:17.77,Default,,0000,0000,0000,,que "x" e "y" se elevan. Así, vamos a verificar \Nrápidamente que la inversa de F realmente Dialogue: 0,0:06:17.77,0:06:22.67,Default,,0000,0000,0000,,invierte la función F. Para eso vamos a ver qué ocurre \Ncuando calculamos "y" elevado a "d". Así, Dialogue: 0,0:06:22.67,0:06:27.52,Default,,0000,0000,0000,,supongamos que "y" es el valor de la función RSA \Npara cierto valor "x". En ese caso, Dialogue: 0,0:06:27.52,0:06:33.04,Default,,0000,0000,0000,,lo que es "y" elevado a "d", en realidad es RSA de \Nx elevado a la potencia "d". RSA de x, por sí misma, Dialogue: 0,0:06:33.04,0:06:39.01,Default,,0000,0000,0000,,es simplemente "x" elevado a "e" módulo N. Y, por tanto, \N"y" elevado a "d" es simplemente "x" elevado a Dialogue: 0,0:06:39.01,0:06:44.90,Default,,0000,0000,0000,,"e" por "d" módulo N. De nuevo, simplemente usando \Nlas reglas de exponenciación, los exponentes se Dialogue: 0,0:06:44.90,0:06:50.86,Default,,0000,0000,0000,,multiplican y obtenemos "x" elevado a "e" por "d". Pero, \N¿qué sabemos sobre "e" por "d"? "e" por "d" dijimos que Dialogue: 0,0:06:50.86,0:06:57.39,Default,,0000,0000,0000,,es uno módulo fi de N. Y lo que esto significa es que \Nexiste algún entero tal que "e" por "d" es Dialogue: 0,0:06:57.39,0:07:04.18,Default,,0000,0000,0000,,igual a k por fi de n más uno. Esto es lo que \Nsignifica que "e" por "d" sea Dialogue: 0,0:07:04.18,0:07:09.82,Default,,0000,0000,0000,,uno módulo fi de N. Así, podemos simplemente reemplazar \N"e" por "d" con k por fi de n más uno. Y eso es Dialogue: 0,0:07:09.82,0:07:14.45,Default,,0000,0000,0000,,lo que escribí aquí. Así, tenemos x elevado a k por \Nfi de n mas uno. Pero ahora, de nuevo Dialogue: 0,0:07:14.45,0:07:19.87,Default,,0000,0000,0000,,usando las reglas de exponenciación, podemos \Nreescribir esto como x elevado a fi de N, elevado Dialogue: 0,0:07:19.87,0:07:24.83,Default,,0000,0000,0000,,a k, por x. Esto es realmente lo mismo que \Nk por fi de N más 1 como exponente. Dialogue: 0,0:07:24.83,0:07:29.92,Default,,0000,0000,0000,,Me he limitado a separar el exponente en\Nsus diferentes componentes. Dialogue: 0,0:07:29.92,0:07:35.14,Default,,0000,0000,0000,,Ahora, x elevado a fi de N por el teorema de Euler, \Nsabemos que x elevado a fi de N es igual a uno. Así, Dialogue: 0,0:07:35.14,0:07:41.39,Default,,0000,0000,0000,,¿a qué es igual todo este producto? Bien, puesto que \Nx elevado a fi de N es igual a uno, uno Dialogue: 0,0:07:41.39,0:07:45.96,Default,,0000,0000,0000,,elevado a k es también igual a uno. Por tanto,\Ntodo este término de aquí es simplemente igual a uno. Dialogue: 0,0:07:45.96,0:07:50.76,Default,,0000,0000,0000,,Y lo que nos queda es x. Así, lo que hemos \Nprobado es que si tomamos la salida de la Dialogue: 0,0:07:50.76,0:07:55.21,Default,,0000,0000,0000,,función RSA y la elevamos a "d", obtenemos \Nde nuevo x. Lo cual significa que Dialogue: 0,0:07:55.21,0:07:59.66,Default,,0000,0000,0000,,al elevar a "d" básicamente se invierte la \Nfunción RSA, que es lo que Dialogue: 0,0:07:59.66,0:08:04.64,Default,,0000,0000,0000,,queríamos mostrar. Así, eso es todo. Esta es \Nla descripción completa de la función. Hemos Dialogue: 0,0:08:04.64,0:08:08.97,Default,,0000,0000,0000,,descrito la generación de la clave, la propia \Nfunción que consiste simplemente en elevar Dialogue: 0,0:08:08.97,0:08:13.41,Default,,0000,0000,0000,,a la potencia de "e" módulo N, y la función \Ninversa, que consiste en elevar a la Dialogue: 0,0:08:13.41,0:08:17.48,Default,,0000,0000,0000,,potencia de "d", también módulo N. La siguiente \Npregunta es ¿por qué esta función es segura? Dialogue: 0,0:08:17.48,0:08:21.61,Default,,0000,0000,0000,,En otras palabras, ¿por qué esta función es unidireccional \Nsi todo lo que tengo es sólo una clave pública Dialogue: 0,0:08:21.61,0:08:26.41,Default,,0000,0000,0000,,pero no tengo la clave privada? Y para argumentar \Nque esta función es unidireccional, Dialogue: 0,0:08:26.41,0:08:31.45,Default,,0000,0000,0000,,básicamente enunciamos el supuesto RSA, que \Nbásicamente dice que la función RSA es una Dialogue: 0,0:08:31.45,0:08:36.63,Default,,0000,0000,0000,,permutación unidireccional. Y, formalmente, la \Nforma en que se enuncia es que, básicamente para todo Dialogue: 0,0:08:36.63,0:08:41.42,Default,,0000,0000,0000,,algoritmo eficiente A, si genero dos números \Nprimos p y q, Dialogue: 0,0:08:41.42,0:08:46.40,Default,,0000,0000,0000,,números primos aleatorios p y q, los multiplico \Npara obtener el módulo N y luego escojo un Dialogue: 0,0:08:46.40,0:08:51.10,Default,,0000,0000,0000,,valor aleatorio y en ZN estrella y proporciono \Nel módulo, el exponente y el valor y al Dialogue: 0,0:08:51.10,0:08:55.89,Default,,0000,0000,0000,,algoritmo A, la probabilidad de que obtenga el \Ninverso de RSA en el punto y, esto es, Dialogue: 0,0:08:55.89,0:09:00.34,Default,,0000,0000,0000,,de que obtenga "y" elevado a uno partido "e" (esto \Nes lo que el inverso realmente es), esta Dialogue: 0,0:09:00.34,0:09:04.61,Default,,0000,0000,0000,,probabilidad es negligible. Así, esta suposición \Nse denomina supuesto RSA. Dialogue: 0,0:09:04.61,0:09:09.34,Default,,0000,0000,0000,,Básicamente enuncia que RSA es una permutación\Nunidireccional cuando sólo se proporciona una clave pública. Dialogue: 0,0:09:09.34,0:09:13.95,Default,,0000,0000,0000,,Y, consecuentemente, es una permutación de puerta falsa \Nporque tiene una puerta falsa, y esto la hace \Ntiene Dialogue: 0,0:09:13.95,0:09:19.50,Default,,0000,0000,0000,,fácil de invertir para cualquiera que conozca la \Npuerta falsa. Así, ahora que tenemos una permutación Dialogue: 0,0:09:19.50,0:09:23.72,Default,,0000,0000,0000,,de puerta falsa segura, podemos simplemente combinarla \Ncon nuestra construcción de encriptación pública Dialogue: 0,0:09:23.72,0:09:27.83,Default,,0000,0000,0000,,y tendremos nuestro primer sistema real de \Nencriptación pública. Y así, lo que Dialogue: 0,0:09:27.83,0:09:32.36,Default,,0000,0000,0000,,haremos es simplemente insertar la permutación \Nde puerta falsa RSA en la construcción estándar Dialogue: 0,0:09:32.36,0:09:36.15,Default,,0000,0000,0000,,ISO que vimos en el segmento anterior. \NAsí, si os acordáis, dicha Dialogue: 0,0:09:36.15,0:09:40.21,Default,,0000,0000,0000,,construcción estaba basada en un sistema \Nde encriptación simétrica que tenía que proporcionar Dialogue: 0,0:09:40.21,0:09:44.44,Default,,0000,0000,0000,,encriptación autentificada. Y estaba también basada \Nen una función hash que relaciona, Dialogue: 0,0:09:44.62,0:09:48.87,Default,,0000,0000,0000,,bien, transfiriéndolo al mundo RSA, \Nrelaciona elementos en Dialogue: 0,0:09:48.87,0:09:54.20,Default,,0000,0000,0000,,ZN con claves secretas para el \Nsistema de clave simétrica. Y ahora, la Dialogue: 0,0:09:54.20,0:09:58.95,Default,,0000,0000,0000,,forma en que el esquema de encripción funciona es \Nrealmente fácil de describir. Básicamente el algoritmo G Dialogue: 0,0:09:58.95,0:10:03.75,Default,,0000,0000,0000,,básicamente ejecuta el algoritmo de generación de \Nclaves RSA y genera una clave pública y una Dialogue: 0,0:10:03.75,0:10:07.81,Default,,0000,0000,0000,,clave privada, igual que antes. Fijaos en que la \Nclave pública contiene el exponente de Dialogue: 0,0:10:07.81,0:10:11.95,Default,,0000,0000,0000,,encripción y la clave privada contiene el \Nexponente de desencriptado. Y la forma en que Dialogue: 0,0:10:11.95,0:10:16.30,Default,,0000,0000,0000,,encriptamos es la siguiente. Bien, vamos a escoger \Nun valor aleatorio de "x" en ZN, vamos a Dialogue: 0,0:10:16.30,0:10:21.47,Default,,0000,0000,0000,,aplicar la función RSA a esta "x", vamos a reducirla \Na una clave simétrica generando su "hash", Dialogue: 0,0:10:21.47,0:10:26.45,Default,,0000,0000,0000,,así que calcularemos H de "x" para obtener \Nla clave "k", y entonces la salida será Dialogue: 0,0:10:26.45,0:10:31.13,Default,,0000,0000,0000,,"y" junto a la encriptación del mensaje \Nusando la clave simétrica "k". Y, en la Dialogue: 0,0:10:31.13,0:10:35.93,Default,,0000,0000,0000,,práctica, la función "hash" H se implementaría \Nmediante SHA-256 y Dialogue: 0,0:10:35.93,0:10:40.98,Default,,0000,0000,0000,,utilizaríais el operador SHA-256 para \Ngenerar una clave simétrica que se pudiese Dialogue: 0,0:10:40.98,0:10:45.69,Default,,0000,0000,0000,,utilizar en el sistema de encriptación simétrica. \NAsí es como encriptaríamos Dialogue: 0,0:10:45.69,0:10:50.08,Default,,0000,0000,0000,,y la forma en que desencriptariamos es \Nbásicamente como vimos en el segmento Dialogue: 0,0:10:50.08,0:10:54.95,Default,,0000,0000,0000,,anterior, pero lo primero que haríamos es \Nutilizar la clave privada para invertir Dialogue: 0,0:10:54.95,0:10:59.76,Default,,0000,0000,0000,,la cabecera del texto cifrado. Así, calcularíamos \Nla inversa RSA de "y", que nos proporcionaría Dialogue: 0,0:10:59.76,0:11:04.57,Default,,0000,0000,0000,,el valor de "x". A continuación aplicaríamos \Nla función "hash" a "x" para obtener Dialogue: 0,0:11:04.57,0:11:09.20,Default,,0000,0000,0000,,la clave k. Y entonces ejecutaríamos el\Nalgoritmo de desencriptación del sistema Dialogue: 0,0:11:09.20,0:11:15.17,Default,,0000,0000,0000,,simétrico sobre el texto cifrado y esto produciría \Nel mensaje original, "m". Dialogue: 0,0:11:15.17,0:11:19.10,Default,,0000,0000,0000,,Y en su momento enunciamos un teorema en el \Nsegmento anterior indicando que si la permutación Dialogue: 0,0:11:19.10,0:11:23.09,Default,,0000,0000,0000,,de puerta falsa RSA es segura, Es y Ds, el esquema de \Nencriptación simétrica proporciona Dialogue: 0,0:11:23.09,0:11:27.18,Default,,0000,0000,0000,,encriptación segura y, como dijimos, H es un \Noráculo aleatorio, esto es, Dialogue: 0,0:11:27.33,0:11:31.42,Default,,0000,0000,0000,,ya sabéis, un tipo de función aleatoria de \NZN al espacio de claves. Entonces, de hecho, este Dialogue: 0,0:11:31.42,0:11:35.72,Default,,0000,0000,0000,,sistema presenta seguridad de texto cifrado escogido y \Nes un buen sistema de encriptación pública a usar. Dialogue: 0,0:11:36.24,0:11:41.73,Default,,0000,0000,0000,,Así, ahora que tenemos nuestro primer ejemplo de un buen \Nsistema de encriptación pública, quisiera daros un Dialogue: 0,0:11:41.73,0:11:46.98,Default,,0000,0000,0000,,rápido aviso sobre cómo no utilizar RSA para \Nencriptación. Y esto es algo, de nuevo, que Dialogue: 0,0:11:46.98,0:11:51.10,Default,,0000,0000,0000,,ya dijimos en el segmento anterior. Y voy a \Nrepetirlo aquí, salvo que voy a Dialogue: 0,0:11:51.10,0:11:55.53,Default,,0000,0000,0000,,hacerlo específico para RSA. Así, me gustaría \Nllamarlo RSA "de libro", Dialogue: 0,0:11:55.53,0:11:59.40,Default,,0000,0000,0000,,que es lo primero que se le ocurre a \Nuno cuando piensa en Dialogue: 0,0:11:59.40,0:12:03.68,Default,,0000,0000,0000,,encriptar usando RSA, a saber, la clave secreta \Ny la clave privada serán como antes, Dialogue: 0,0:12:03.68,0:12:08.16,Default,,0000,0000,0000,,pero en lugar de utilizar una función \N"hash" para generar una clave simétrica, lo Dialogue: 0,0:12:08.16,0:12:12.34,Default,,0000,0000,0000,,que haremos es usar directamente RSA para \Nencriptar el mensaje dado, "m". Y entonces, Dialogue: 0,0:12:12.34,0:12:16.20,Default,,0000,0000,0000,,utilizaremos directamente un exponente de desencriptado \Npara desencriptar el texto cifrado y Dialogue: 0,0:12:16.20,0:12:20.77,Default,,0000,0000,0000,,obtener el texto llano, "m". Voy a llamar a esto \N"RSA de libro" porque hay muchos libros que Dialogue: 0,0:12:20.77,0:12:25.35,Default,,0000,0000,0000,,describen la encripción RSA de este \Nmodo. Y esto es completamente erróneo. Dialogue: 0,0:12:25.35,0:12:29.50,Default,,0000,0000,0000,,Así no es como funciona la encripción RSA. Se \Ntrata de un sistema inseguro. En particular, Dialogue: 0,0:12:29.50,0:12:33.94,Default,,0000,0000,0000,,se trata de encripción determinista y, por tanto, \Nno es posible que sea semánticamente segura y, Dialogue: 0,0:12:33.94,0:12:38.54,Default,,0000,0000,0000,,de hecho, existen múltiples ataques y voy a \Nmostraros un ataque en un minuto. Dialogue: 0,0:12:38.54,0:12:42.71,Default,,0000,0000,0000,,Pero el mensaje que quiero que quede \Nclaro aquí es que RSA es únicamente Dialogue: 0,0:12:42.71,0:12:47.15,Default,,0000,0000,0000,,una permutación de puerta falsa. Por si misma \Nno es un sistema de encriptado. Tenéis que Dialogue: 0,0:12:47.15,0:12:51.43,Default,,0000,0000,0000,,integrarlo en el estándar ISO, por ejemplo, \Npara convertirlo en un sistema de encriptado. Dialogue: 0,0:12:51.43,0:12:55.83,Default,,0000,0000,0000,,Por si mismo, no es más que una función. \NAsí, vamos a ver cuál es el problema si Dialogue: 0,0:12:55.83,0:13:00.22,Default,,0000,0000,0000,,intentáis utilizar RSA "de libro", en otras palabras, \Nsi intentáis encriptar un mensaje Dialogue: 0,0:13:00.22,0:13:04.98,Default,,0000,0000,0000,,utilizando RSA directamente. Y os pondré un \Nejemplo de ataque del mundo de la web. Dialogue: 0,0:13:04.98,0:13:09.72,Default,,0000,0000,0000,,Imaginad que tenéis un servidor web. El servidor \Nweb tiene una clave RSA privada. Aquí la Dialogue: 0,0:13:09.72,0:13:14.74,Default,,0000,0000,0000,,denotaremos como N y "d". Y tenemos un navegador\Nweb que está intentando establecer una sesión Dialogue: 0,0:13:14.74,0:13:19.12,Default,,0000,0000,0000,,segura, una sesión segura SSL con el servidor web. \NLa forma en que SSL funciona es que el Dialogue: 0,0:13:19.12,0:13:23.40,Default,,0000,0000,0000,,navegador web empieza enviando este \Nmensaje "CLIENT HELLO" que significa, ¡eh, quiero Dialogue: 0,0:13:23.40,0:13:27.79,Default,,0000,0000,0000,,establecer una sesión segura contigo! El servidor \Nweb responde con un mensaje "SERVER HELLO" Dialogue: 0,0:13:27.79,0:13:32.43,Default,,0000,0000,0000,,que contiene la clave pública del servidor \Ny entonces el navegador web continuará y Dialogue: 0,0:13:32.43,0:13:36.62,Default,,0000,0000,0000,,generará una clave aleatoria denominada clave \Nsecreta pre-máster, encriptará la clave Dialogue: 0,0:13:36.62,0:13:40.69,Default,,0000,0000,0000,,secreta pre-máster usando [RSA] (N.T. el original dice "k") \Ny enviará el resultado cifrado al servidor web. Dialogue: 0,0:13:40.69,0:13:44.93,Default,,0000,0000,0000,,El servidor web lo desencriptará y entonces el \Nservidor web también tendrá "k", por lo que Dialogue: 0,0:13:44.93,0:13:49.34,Default,,0000,0000,0000,,ahora ambos disponen de una clave compartida que \Npueden usar para establecer una sesión segura entre Dialogue: 0,0:13:49.34,0:13:53.63,Default,,0000,0000,0000,,ellos. Lo que quiero mostraros es qué va mal si \Nutilizamos directamente la función RSA Dialogue: 0,0:13:53.63,0:13:57.76,Default,,0000,0000,0000,,para encriptar "k". En otras palabras, si directamente \Nse encripta "k" usando "k" elevado a "e" Dialogue: 0,0:13:57.76,0:14:02.83,Default,,0000,0000,0000,,módulo N y pongamos por caso, supongamos, \Nque "k" es una clave de 64 bits. Dialogue: 0,0:14:02.83,0:14:08.10,Default,,0000,0000,0000,,Vamos a tratar "k" como un entero en el rango \Nde 0 a dos elevado a 64. Dialogue: 0,0:14:08.10,0:14:13.10,Default,,0000,0000,0000,,Más exactamente, dos elevado a 64 menos uno, y \Nahora lo que vamos a hacer es Dialogue: 0,0:14:13.10,0:14:18.30,Default,,0000,0000,0000,,lo siguiente. En primer lugar, supongamos que \N"k" se puede factorizar en un producto de Dialogue: 0,0:14:18.30,0:14:23.70,Default,,0000,0000,0000,,números de tamaños aproximadamente iguales. Así, \Npodemos escribir "k" como k1 por k2, donde k1 y k2 Dialogue: 0,0:14:23.70,0:14:29.74,Default,,0000,0000,0000,,son enteros y ambos son, digamos, menores que dos \Nelevado a 34. Y resulta que esto sucede con una Dialogue: 0,0:14:29.74,0:14:34.51,Default,,0000,0000,0000,,probabilidad del 20%, o sea, una de cada \Ncinco veces "k" se podrá Dialogue: 0,0:14:34.51,0:14:39.74,Default,,0000,0000,0000,,escribir en esta forma. Pero ahora, si introducimos esta "k", \N"k" igual a k1 por k2, si la introducimos en la Dialogue: 0,0:14:39.74,0:14:45.24,Default,,0000,0000,0000,,ecuación que define el texto cifrado, podéis ver \Nque simplemente sustituimos con k1 por k2 Dialogue: 0,0:14:45.24,0:14:50.88,Default,,0000,0000,0000,,y entonces podemos mover k1 al otro lado, por lo \Nque acabamos obteniendo una ecuación, Dialogue: 0,0:14:50.88,0:14:55.90,Default,,0000,0000,0000,,a saber, C dividido por k1 elevado a "e" es igual a \Nk2 elevado a "d". Daros cuenta que si multiplico ambos Dialogue: 0,0:14:55.90,0:15:00.66,Default,,0000,0000,0000,,lados por k1 elevado a "e", obtengo que C es \Nigual a k1 por k2 elevado a "e" Dialogue: 0,0:15:00.66,0:15:06.37,Default,,0000,0000,0000,,que es precisamente esta ecuación de aquí. De acuerdo, \Nasí que lo único que he hecho ha sido reemplazar "k" con Dialogue: 0,0:15:06.37,0:15:11.96,Default,,0000,0000,0000,,k1 por k2 y dividir por k1 elevado a "e". Esto \Nos debería ser ya familiar. Dialogue: 0,0:15:11.96,0:15:16.15,Default,,0000,0000,0000,,Así que ahora tenemos dos variables en esta \Necuación. Por supuesto, c es conocido por el Dialogue: 0,0:15:16.15,0:15:20.09,Default,,0000,0000,0000,,atacante, "e" es conocido por el atacante y N \Nes conocido por el atacante. Las dos Dialogue: 0,0:15:20.09,0:15:24.52,Default,,0000,0000,0000,,variables de esta ecuación son k1 y k2 y \Nlas hemos separado en Dialogue: 0,0:15:24.52,0:15:28.89,Default,,0000,0000,0000,,distintos lados de la ecuación y, como resultado, \Npodemos realizar un ataque por "encuentro en Dialogue: 0,0:15:28.89,0:15:33.16,Default,,0000,0000,0000,,la mitad" contra esta ecuación. Así, vamos a \Nrealizar el ataque por "encuentro en la mitad". Lo que Dialogue: 0,0:15:33.16,0:15:37.52,Default,,0000,0000,0000,,haríamos es construir una tabla de todos los \Nposibles valores de la parte izquierda. Así, Dialogue: 0,0:15:37.52,0:15:43.39,Default,,0000,0000,0000,,todos los posibles valores de C dividido entre k1 elevado \Na "e", de los que hay 2 elevado a 34. Y entonces, Dialogue: 0,0:15:43.58,0:15:48.88,Default,,0000,0000,0000,,para todos los valores posibles de la parte derecha, \Nesto es, para todos los posibles valores Dialogue: 0,0:15:48.88,0:15:54.18,Default,,0000,0000,0000,,de k2 elevado a "e", vamos a comprobar si este \Nvalor se encuentra en la tabla que hemos Dialogue: 0,0:15:54.18,0:15:58.75,Default,,0000,0000,0000,,construido en el paso uno. Y si esto es así, entonces \Nhabremos encontrado una colisión y, básicamente, Dialogue: 0,0:15:58.75,0:16:03.26,Default,,0000,0000,0000,,tenemos una solución a esta ecuación. Por tanto, tan \Npronto como encontremos un elemento de la forma Dialogue: 0,0:16:03.26,0:16:07.96,Default,,0000,0000,0000,,k2 elevado a "e" que se encuentre en la tabla que hemos \Nconstruido en el paso uno, habremos solucionado esta Dialogue: 0,0:16:07.96,0:16:12.72,Default,,0000,0000,0000,,ecuación y encontrado k1 y k2. Y, por \Nsupuesto, una vez encontrados k1 y k2, Dialogue: 0,0:16:12.72,0:16:16.95,Default,,0000,0000,0000,,podemos recuperar "k" fácilmente simplemente \Nmultiplicándolos. Así, multiplicamos Dialogue: 0,0:16:16.95,0:16:21.43,Default,,0000,0000,0000,,k1 y k2 y obtenemos la clave secreta "k". ¿De acuerdo?\NPor lo tanto, hemos roto, básicamente, Dialogue: 0,0:16:21.43,0:16:25.60,Default,,0000,0000,0000,,este sistema de encriptación. ¿Y cuántos nos llevó?\NBien, por la fuerza bruta Dialogue: 0,0:16:25.60,0:16:29.89,Default,,0000,0000,0000,,lo podríamos haber roto en tiempo 2 a la 64, \Nsimplemente probando todas las posibles claves. Pero Dialogue: 0,0:16:29.89,0:16:33.79,Default,,0000,0000,0000,,este ataque, daros cuenta, llevó un tiempo 2 a la 34 \Npara el paso número uno. Bien, llevó Dialogue: 0,0:16:33.79,0:16:38.35,Default,,0000,0000,0000,,algo más de 2 a la 34 porque tuvimos que \Nrealizar esas exponenciales. Dialogue: 0,0:16:38.52,0:16:42.97,Default,,0000,0000,0000,,El paso dos llevó un tiempo 2 a la 34, de nuevo \Nligeramente más que 2 a la 34 Dialogue: 0,0:16:42.97,0:16:47.53,Default,,0000,0000,0000,,a causa de las exponenciales. Así, digamos que \Nel algoritmo en su conjunto llevó un tiempo Dialogue: 0,0:16:47.53,0:16:52.28,Default,,0000,0000,0000,,2 a la 40. La cuestión es que se trata de mucho, \Nmucho menos tiempo que 2 a la 64. Así, aquí Dialogue: 0,0:16:52.28,0:16:56.67,Default,,0000,0000,0000,,tenéis un ejemplo en el que si encriptáis usando \NRSA directamente, dicho de otro modo, si Dialogue: 0,0:16:56.67,0:17:01.30,Default,,0000,0000,0000,,calculáis "k" elevado a "e" módulo N en lugar \Nde seguir el estándar ISO, Dialogue: 0,0:17:01.30,0:17:05.98,Default,,0000,0000,0000,,por ejemplo, entonces tenéis un ataque que se realiza \Nmucho más rápidamente que la búsqueda exhaustiva. Dialogue: 0,0:17:05.98,0:17:10.73,Default,,0000,0000,0000,,Tenéis un ataque que se ejecuta en tiempo 2 a la 40, \Nen lugar de en tiempo 2 a la 64. Dialogue: 0,0:17:10.73,0:17:14.98,Default,,0000,0000,0000,,De acuerdo, así este es un buen ejemplo de cómo \Nse pueden torcer las cosas si utilizáis la Dialogue: 0,0:17:14.98,0:17:19.30,Default,,0000,0000,0000,,permutación de puerta falsa RSA directamente \Npara encriptar un mensaje. Así, la idea a Dialogue: 0,0:17:19.30,0:17:23.67,Default,,0000,0000,0000,,recordar aquí es nunca, nunca, nunca uséis \NRSA directamente para encriptar. Tenéis que Dialogue: 0,0:17:23.67,0:17:27.87,Default,,0000,0000,0000,,ir a través de un mecanismo de encriptación, por \Nejemplo el estándar ISO. Y, de hecho, Dialogue: 0,0:17:27.87,0:17:32.35,Default,,0000,0000,0000,,en el próximo segmento vamos a ver otras \Nformas de utilizar RSA para construir Dialogue: 0,0:17:32.35,0:17:33.62,Default,,0000,0000,0000,,encriptación de clave pública.