1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [RSA] 2 00:00:02,000 --> 00:00:04,000 [Rob Bowden] [Tommy MacWilliam] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Esta es CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Vamos a echar un vistazo a RSA, un algoritmo utilizado para cifrar datos. 5 00:00:11,000 --> 00:00:16,000 Los algoritmos de cifrado como César y sistemas de cifrado Vigenère no son muy seguras. 6 00:00:16,000 --> 00:00:20,000 Con el cifrado César, un atacante sólo necesita tratar 25 diferentes claves 7 00:00:20,000 --> 00:00:22,000 para obtener texto sin formato del mensaje. 8 00:00:22,000 --> 00:00:25,000 Mientras que el sistema de cifrado Vigenère es más seguro que el cifrado César 9 00:00:25,000 --> 00:00:28,000 por el espacio de búsqueda grande para las llaves, una vez que un atacante 10 00:00:28,000 --> 00:00:30,000 conoce la longitud de la clave en un sistema de cifrado Vigenère, 11 00:00:30,000 --> 00:00:34,000 que se puede determinar a través de un análisis de los patrones en el texto cifrado, 12 00:00:34,000 --> 00:00:38,000 el cifrado Vigenère no es mucho más seguro que el cifrado César. 13 00:00:38,000 --> 00:00:42,000 RSA, por otra parte, no es vulnerable a los ataques de este tipo. 14 00:00:42,000 --> 00:00:45,000 El cifrado César y cifrado Vigenère utilizar la misma clave 15 00:00:45,000 --> 00:00:47,000 para cifrar y descifrar un mensaje. 16 00:00:47,000 --> 00:00:51,000 Esta propiedad hace que estos algoritmos cifrados simétricos clave. 17 00:00:51,000 --> 00:00:54,000 Un problema fundamental con algoritmos de clave simétrica 18 00:00:54,000 --> 00:00:57,000 es que se basan en la codificación y el envío del mensaje 19 00:00:57,000 --> 00:00:59,000 y el que recibe y descifra el mensaje 20 00:00:59,000 --> 00:01:03,000 que ya han acordado por adelantado en la llave que ambos utilizan. 21 00:01:03,000 --> 00:01:06,000 Pero tenemos un poco de un problema de inicio aquí. 22 00:01:06,000 --> 00:01:10,000 ¿Cómo dos equipos que quieren comunicar establecer una clave secreta entre ellos? 23 00:01:10,000 --> 00:01:16,000 Si la clave tiene que ser secreto, entonces necesitamos una manera de cifrar y descifrar la clave. 24 00:01:16,000 --> 00:01:18,000 Si todo lo que tenemos es la criptografía de clave simétrica 25 00:01:18,000 --> 00:01:21,000 entonces he regresado al mismo problema. 26 00:01:21,000 --> 00:01:25,000 RSA, por otra parte, utiliza un par de claves, 27 00:01:25,000 --> 00:01:28,000 una para encriptación y otro para desencriptación. 28 00:01:28,000 --> 00:01:32,000 Uno se llama la clave pública, y el otro es la clave privada. 29 00:01:32,000 --> 00:01:34,000 La clave pública se utiliza para cifrar mensajes. 30 00:01:34,000 --> 00:01:38,000 Como se puede adivinar por su nombre, podemos compartir nuestra clave pública con 31 00:01:38,000 --> 00:01:43,000 cualquier persona que quiera sin comprometer la seguridad de un mensaje cifrado. 32 00:01:43,000 --> 00:01:45,000 Los mensajes cifrados con una clave pública 33 00:01:45,000 --> 00:01:49,000 sólo se puede descifrar con su clave privada correspondiente. 34 00:01:49,000 --> 00:01:53,000 Mientras que usted puede compartir su clave pública, siempre se debe mantener en secreto su clave privada. 61 00:01:55,000 --> 00:01:58,000 y sólo la clave privada se puede utilizar para descifrar los mensajes 62 00:01:58,000 --> 00:02:02,000 2 usuarios si desea enviar mensajes de cifrado con RSA 63 00:02:02,000 --> 00:02:07,000 de ida y vuelta los usuarios necesitan tener su propio par de claves pública y privada. 64 00:02:07,000 --> 00:02:10,000 Mensajes de usuario 1 a usuario 2 65 00:02:10,000 --> 00:02:15,000 sólo utilizan par de claves de usuario 2, y los mensajes de usuario a usuario 2 1 66 00:02:15,000 --> 00:02:17,000 sólo utilizan un par de claves de usuario. 67 00:02:17,000 --> 00:02:21,000 El hecho de que hay 2 teclas separadas para cifrar y descifrar mensajes 68 00:02:21,000 --> 00:02:24,000 RSA hace un algoritmo de clave asimétrica. 69 00:02:24,000 --> 00:02:28,000 No necesitamos para cifrar la clave pública con el fin de enviar a otro ordenador 70 00:02:28,000 --> 00:02:31,000 ya que la clave pública es de todos modos. 71 00:02:31,000 --> 00:02:33,000 Esto significa que RSA no tiene el mismo problema de inicio 72 00:02:33,000 --> 00:02:36,000 como los algoritmos de clave simétrica. 73 00:02:36,000 --> 00:02:39,000 Así que si quiero enviar un mensaje utilizando cifrado RSA 74 00:02:39,000 --> 00:02:42,000 a Rob, primero tendrás la clave pública de Rob. 75 00:02:42,000 --> 00:02:47,000 Para generar un par de claves, Rob tiene que escoger dos números primos grandes. 76 00:02:47,000 --> 00:02:50,000 Estos números se utilizan tanto en las llaves públicas y privadas, 77 00:02:50,000 --> 00:02:54,000 pero la clave pública sólo se utiliza el producto de estos números 2, 78 00:02:54,000 --> 00:02:56,000 no los propios números. 79 00:02:56,000 --> 00:02:59,000 Una vez que haya cifrado el mensaje con la clave pública de Rob 80 00:02:59,000 --> 00:03:01,000 Puedo enviar el mensaje a Rob. 81 00:03:01,000 --> 00:03:05,000 Para un equipo, los números de factoring es un problema difícil. 82 00:03:05,000 --> 00:03:09,000 La clave pública, recuerda, utiliza el producto de dos números primos. 83 00:03:09,000 --> 00:03:12,000 Este producto debe tener sólo 2 factores, 84 00:03:12,000 --> 00:03:16,000 que resultan ser los números que componen la clave privada. 85 00:03:16,000 --> 00:03:20,000 Con el fin de descifrar el mensaje, RSA se utiliza esta clave privada 86 00:03:20,000 --> 00:03:25,000 o los números multiplicados entre sí en el proceso de creación de la clave pública. 87 00:03:25,000 --> 00:03:28,000 Debido a que es computacionalmente difícil factorizar el número 88 00:03:28,000 --> 00:03:32,000 utilizado en una clave pública en los 2 números utilizados en la clave privada 89 00:03:32,000 --> 00:03:36,000 es difícil para un atacante descifrar la clave privada 90 00:03:36,000 --> 00:03:39,000 que será necesario para descifrar el mensaje. 91 00:03:39,000 --> 00:03:43,000 Ahora vamos a entrar en algunos detalles de menor nivel de RSA. 92 00:03:43,000 --> 00:03:46,000 Primero vamos a ver cómo podemos generar un par de claves. 93 00:03:46,000 --> 00:03:49,000 En primer lugar, vamos a necesitar dos números primos. 94 00:03:49,000 --> 00:03:52,000 Vamos a llamar a estos números 2 p y q. 95 00:03:52,000 --> 00:03:56,000 Con el fin de recoger p y q, en la práctica seudoaleatoria generaría 96 00:03:56,000 --> 00:03:59,000 grandes cantidades y luego usar una prueba para determinar si existe o no 97 00:03:59,000 --> 00:04:02,000 esos números son probablemente mejor momento. 98 00:04:02,000 --> 00:04:05,000 Podemos mantener la generación de números aleatorios y otra vez 99 00:04:05,000 --> 00:04:08,000 hasta que tengamos dos primos que podemos utilizar. 100 00:04:08,000 --> 00:04:15,000 Aquí vamos a escoger p = q = 23 y 43. 101 00:04:15,000 --> 00:04:19,000 Recuerde, en la práctica, p y q debe ser un número mucho mayor. 102 00:04:19,000 --> 00:04:22,000 Por lo que sabemos, cuanto mayores sean los números, más difícil será 103 00:04:22,000 --> 00:04:25,000 para romper un mensaje cifrado. 104 00:04:25,000 --> 00:04:29,000 Pero también es más caro para cifrar y descifrar mensajes. 105 00:04:29,000 --> 00:04:33,000 Hoy en día es a menudo se recomienda que p y q son al menos 1024 bits, 106 00:04:33,000 --> 00:04:37,000 que pone a cada número en más de 300 dígitos decimales. 107 00:04:37,000 --> 00:04:40,000 Pero vamos a recoger estos pequeños números de este ejemplo. 108 00:04:40,000 --> 00:04:43,000 Ahora vamos a multiplicar p y q en conjunto para obtener un número de 3 º, 109 00:04:43,000 --> 00:04:45,000 que llamaremos n. 110 00:04:45,000 --> 00:04:55,000 En nuestro caso, n = 23 * 43, que = 989. 111 00:04:55,000 --> 00:04:58,000 Tenemos n = 989. 112 00:04:58,000 --> 00:05:02,000 A continuación vamos a multiplicar p - 1 con q - 1 113 00:05:02,000 --> 00:05:05,000 para obtener un número de cuarto, que llamaremos m. 114 00:05:05,000 --> 00:05:15,000 En nuestro caso, m = 22 * ​​42, que = 924. 115 00:05:15,000 --> 00:05:18,000 Contamos con m = 924. 116 00:05:18,000 --> 00:05:22,000 Ahora vamos a necesitar un número e que es primo con m 117 00:05:22,000 --> 00:05:25,000 y menos de m. 118 00:05:25,000 --> 00:05:28,000 Dos números son primos relativos o primos entre sí, 119 00:05:28,000 --> 00:05:33,000 si el número entero único positivo que los divide de manera uniforme tanto: 1. 120 00:05:33,000 --> 00:05:37,000 En otras palabras, el máximo común divisor de e y m 121 00:05:37,000 --> 00:05:39,000 debe ser 1. 122 00:05:39,000 --> 00:05:44,000 En la práctica, es común que e sea el número primo 65537 123 00:05:44,000 --> 00:05:48,000 siempre y cuando este número no pasa de ser un factor de m. 124 00:05:48,000 --> 00:05:53,000 Para las llaves, vamos a recoger e = 5 125 00:05:53,000 --> 00:05:57,000 ya que 5 es primo con 924. 126 00:05:57,000 --> 00:06:01,000 Por último, vamos a necesitar un número más, que llamaremos d. 127 00:06:01,000 --> 00:06:11,000 D debe ser un valor que satisface la ecuación de = 1 (mod m). 128 00:06:11,000 --> 00:06:17,000 Este mod m significa que vamos a usar algo llamado aritmética modular. 129 00:06:17,000 --> 00:06:21,000 En la aritmética modular, una vez que recibe un número más alto que algunas límite superior 130 00:06:21,000 --> 00:06:24,000 que bajara a 0. 131 00:06:24,000 --> 00:06:27,000 Un reloj, por ejemplo, utiliza la aritmética modular. 132 00:06:27,000 --> 00:06:31,000 Un minuto después de 1:59, por ejemplo, es 2:00, 133 00:06:31,000 --> 00:06:33,000 no 1:60. 134 00:06:33,000 --> 00:06:36,000 El minutero se ha envuelto alrededor de 0 135 00:06:36,000 --> 00:06:39,000 al llegar a un límite superior de 60. 136 00:06:39,000 --> 00:06:46,000 Por lo tanto, podemos decir que 60 es equivalente a 0 (mod 60) 137 00:06:46,000 --> 00:06:57,000 y 125 es equivalente a 65 es equivalente a 5 (mod 60). 138 00:06:57,000 --> 00:07:02,000 Nuestra clave pública será el par electrónico y n 139 00:07:02,000 --> 00:07:09,000 donde en este caso e es 5 y n es 989. 140 00:07:09,000 --> 00:07:15,000 Nuestra llave privada será el par d y n, 141 00:07:15,000 --> 00:07:22,000 que en nuestro caso es de 185 y 989. 142 00:07:22,000 --> 00:07:25,000 Observe que nuestro original de números primos p y q no aparecen 143 00:07:25,000 --> 00:07:29,000 en cualquier parte de nuestras claves privadas o públicas. 144 00:07:29,000 --> 00:07:33,000 Ahora que tenemos nuestro par de llaves, vamos a echar un vistazo a cómo podemos cifrar 145 00:07:33,000 --> 00:07:36,000 y descifrar un mensaje. 146 00:07:36,000 --> 00:07:38,000 Quiero enviar un mensaje a Rob, 147 00:07:38,000 --> 00:07:42,000 por lo que será el de generar este par de claves. 148 00:07:42,000 --> 00:07:46,000 Entonces voy a pedir Rob por su clave pública, que voy a utilizar 149 00:07:46,000 --> 00:07:48,000 para cifrar un mensaje para enviar a él. 150 00:07:48,000 --> 00:07:53,000 Recuerda, es totalmente aceptable para Rob para compartir su clave pública conmigo. 151 00:07:53,000 --> 00:07:56,000 Pero no estaría bien compartir su clave privada. 152 00:07:56,000 --> 00:08:00,000 No tengo ni idea de lo que su clave privada. 153 00:08:00,000 --> 00:08:03,000 Podemos dividir nuestro mensaje m para arriba en varios trozos 154 00:08:03,000 --> 00:08:07,000 todo menor que n y luego encriptar cada uno de los trozos. 155 00:08:07,000 --> 00:08:12,000 Vamos a cifrar la cadena CS50, que podemos dividir en 4 trozos, 156 00:08:12,000 --> 00:08:14,000 uno por cada letra. 157 00:08:14,000 --> 00:08:17,000 Para encriptar mi mensaje, voy a tener que convertirlo en 158 00:08:17,000 --> 00:08:20,000 algún tipo de representación numérica. 159 00:08:20,000 --> 00:08:25,000 Vamos a concatenar los valores ASCII con los personajes de mi mensaje. 160 00:08:25,000 --> 00:08:28,000 Con el fin de cifrar un mensaje dado m 161 00:08:28,000 --> 00:08:37,000 Voy a tener que calcular c = m al E (mod n). 162 00:08:37,000 --> 00:08:40,000 Pero m debe ser menor que n, 163 00:08:40,000 --> 00:08:45,000 o bien el mensaje completo no puede ser expresado módulo n. 164 00:08:45,000 --> 00:08:49,000 Podemos romper m hasta en varios trozos, todos los cuales son más pequeñas que n, 165 00:08:49,000 --> 00:08:52,000 y cifrar cada uno de esos trozos. 166 00:08:52,000 --> 00:09:03,000 Cifrado de cada uno de estos trozos, obtenemos c1 = 67 a la 5 (mod 989) 167 00:09:03,000 --> 00:09:06,000 que = 658. 168 00:09:06,000 --> 00:09:15,000 Para nuestro segundo fragmento que tenemos 83 a la 5 (mod 989) 169 00:09:15,000 --> 00:09:18,000 que = 15. 170 00:09:18,000 --> 00:09:26,000 Para nuestro trozo tercera tenemos 53 a la 5 (mod 989) 171 00:09:26,000 --> 00:09:30,000 que es = 799. 172 00:09:30,000 --> 00:09:39,000 Y por último, para nuestro trozo fin tenemos 48 a la 5 (mod 989) 173 00:09:39,000 --> 00:09:43,000 que = 975. 174 00:09:43,000 --> 00:09:48,000 Ahora podemos enviar a través de estos valores cifrados a Rob. 175 00:09:54,000 --> 00:09:58,000 Aquí tienes, Rob. 176 00:09:58,000 --> 00:10:01,000 Mientras que nuestro mensaje está en vuelo, vamos a echar otro vistazo 177 00:10:01,000 --> 00:10:07,000 en cómo hemos llegado hasta ese valor para d. 178 00:10:07,000 --> 00:10:17,000 Nuestro número d necesaria para satisfacer 5d = 1 (mod 924). 179 00:10:17,000 --> 00:10:24,000 Esto hace que d el inverso multiplicativo de 5 modulo 924. 180 00:10:24,000 --> 00:10:28,000 Dado 2 enteros, A y B, el algoritmo de Euclides extendido 181 00:10:28,000 --> 00:10:33,000 se puede utilizar para encontrar el máximo común divisor de estos 2 números enteros. 182 00:10:33,000 --> 00:10:37,000 También nos dan 2 otros números, x e y, 183 00:10:37,000 --> 00:10:47,000 que satisfacen la ecuación ax + by = el máximo común divisor de a y b. 184 00:10:47,000 --> 00:10:49,000 ¿Cómo nos ayuda? 185 00:10:49,000 --> 00:10:52,000 Bueno, conectar e = 5 para una 186 00:10:52,000 --> 00:10:56,000 y m = 924 para b 187 00:10:56,000 --> 00:10:59,000 ya sabemos que estos números son primos entre sí. 188 00:10:59,000 --> 00:11:03,000 Su máximo común divisor es 1. 189 00:11:03,000 --> 00:11:09,000 Esto nos da 5x + 924y = 1 190 00:11:09,000 --> 00:11:17,000 o 5x = 1 - 924y. 191 00:11:17,000 --> 00:11:22,000 Pero si sólo se preocupan por todo modulo 924 192 00:11:22,000 --> 00:11:25,000 entonces podemos abandonar la - 924y. 193 00:11:25,000 --> 00:11:27,000 Piense en el reloj. 194 00:11:27,000 --> 00:11:31,000 Si el minutero está en 1 y luego pasar exactamente 10 horas, 195 00:11:31,000 --> 00:11:35,000 sabemos que la manecilla de los minutos todavía estará en el 1. 196 00:11:35,000 --> 00:11:39,000 Aquí empezamos a 1 y luego envolver veces exactamente de y, 197 00:11:39,000 --> 00:11:41,000 por lo que todavía va a estar en 1. 198 00:11:41,000 --> 00:11:49,000 Tenemos 5x = 1 (mod 924). 199 00:11:49,000 --> 00:11:55,000 Y aquí esta x es el mismo que el d buscábamos antes, 200 00:11:55,000 --> 00:11:58,000 por lo que si se utiliza el algoritmo de Euclides extendido 201 00:11:58,000 --> 00:12:04,000 para obtener este número x, que es el número que debe usar como nuestro d. 202 00:12:04,000 --> 00:12:07,000 Ahora vamos a ejecutar el algoritmo extendido de Euclides para a = 5 203 00:12:07,000 --> 00:12:11,000 y b = 924. 204 00:12:11,000 --> 00:12:14,000 Vamos a utilizar un método llamado el método de la tabla. 205 00:12:14,000 --> 00:12:21,000 La mesa contará con 4 columnas, x, y, d, k. 206 00:12:21,000 --> 00:12:23,000 Nuestra mesa comienza con 2 filas. 207 00:12:23,000 --> 00:12:28,000 En la primera fila tenemos 1, 0, entonces nuestro valor de a, que es 5, 208 00:12:28,000 --> 00:12:37,000 y nuestra segunda fila es 0, 1, y nuestro valor de b, que es 924. 209 00:12:37,000 --> 00:12:40,000 El valor de la columna cuarta, k, será el resultado 210 00:12:40,000 --> 00:12:45,000 de dividir el valor de d en la fila de arriba con el valor de d 211 00:12:45,000 --> 00:12:49,000 en la misma fila. 212 00:12:49,000 --> 00:12:56,000 Tenemos 5 dividido por 924 es 0 con algún resto. 213 00:12:56,000 --> 00:12:59,000 Eso significa que tenemos k = 0. 214 00:12:59,000 --> 00:13:05,000 Ahora el valor de todas las demás células será el valor de la celda 2 filas por encima de lo 215 00:13:05,000 --> 00:13:09,000 menos el valor de la fila por encima de ella k veces. 216 00:13:09,000 --> 00:13:11,000 Vamos a empezar con d en la 3 ª fila. 217 00:13:11,000 --> 00:13:19,000 Tenemos 5 a 924 * 0 = 5. 218 00:13:19,000 --> 00:13:25,000 Siguiente tenemos 0 - 1 * 0 que es 0 219 00:13:25,000 --> 00:13:30,000 y 1 - 0 * 0 que es 1. 220 00:13:30,000 --> 00:13:33,000 No está mal, así que vamos a pasar a la siguiente fila. 221 00:13:33,000 --> 00:13:36,000 En primer lugar tenemos nuestro valor de k. 222 00:13:36,000 --> 00:13:43,000 924 dividido por 5 = 184 con algún resto, 223 00:13:43,000 --> 00:13:46,000 por lo que nuestro valor de k es 184. 224 00:13:46,000 --> 00:13:54,000 Ahora 924 a 5 * 184 = 4. 225 00:13:54,000 --> 00:14:05,000 1 a 0 * 184 es 1 y 0 - 1 * 184 es -184. 226 00:14:05,000 --> 00:14:07,000 Muy bien, vamos a hacer la siguiente fila. 227 00:14:07,000 --> 00:14:10,000 Nuestro valor de k será 1 porque 228 00:14:10,000 --> 00:14:15,000 5 dividido por 4 = 1 con algún resto. 229 00:14:15,000 --> 00:14:17,000 Vamos a llenar las otras columnas. 230 00:14:17,000 --> 00:14:21,000 5-4 * 1 = 1. 231 00:14:21,000 --> 00:14:25,000 0 a 1 * 1 = -1. 232 00:14:25,000 --> 00:14:33,000 Y 1 - 184 * 1 es 185. 233 00:14:33,000 --> 00:14:35,000 Vamos a ver lo que nuestro siguiente valor de k sería. 234 00:14:35,000 --> 00:14:40,000 Bueno, parece que tenemos 4 dividido por 1, que es 4. 235 00:14:40,000 --> 00:14:43,000 En este caso en el que estamos dividiendo por 1 tal que k es igual a 236 00:14:43,000 --> 00:14:50,000 el valor de d en la fila de arriba significa que hemos terminado con nuestro algoritmo. 237 00:14:50,000 --> 00:14:58,000 Podemos ver aquí que tenemos x = 185 ey = -1 en la última fila. 238 00:14:58,000 --> 00:15:00,000 Ahora vamos a volver a nuestra meta original. 239 00:15:00,000 --> 00:15:04,000 Hemos dicho que el valor de x, como resultado de la ejecución de este algoritmo 240 00:15:04,000 --> 00:15:08,000 sería el inverso multiplicativo de un (b mod). 241 00:15:08,000 --> 00:15:15,000 Esto significa que 185 es el inverso multiplicativo de 5 (mod 924) 242 00:15:15,000 --> 00:15:20,000 lo que significa que tienen un valor de 185 para d. 243 00:15:20,000 --> 00:15:23,000 El hecho de que d = 1 en la última fila 244 00:15:23,000 --> 00:15:26,000 verifica que el correo fue primos entre sí a m. 245 00:15:26,000 --> 00:15:30,000 Si no fuera 1, entonces tendríamos que escoger un correo nuevo. 246 00:15:30,000 --> 00:15:33,000 Ahora vamos a ver si Rob ha recibido mi mensaje. 247 00:15:33,000 --> 00:15:35,000 Cuando alguien me envía un mensaje cifrado 248 00:15:35,000 --> 00:15:38,000 siempre que he mantenido mi clave privada en secreto 249 00:15:38,000 --> 00:15:41,000 Yo soy la única persona que puede descifrar el mensaje. 250 00:15:41,000 --> 00:15:46,000 Para descifrar un pedazo c puedo calcular el mensaje original 251 00:15:46,000 --> 00:15:53,000 es igual a la cantidad de potencia d (mod n). 252 00:15:53,000 --> 00:15:57,000 Recuerde que d y n son de mi clave privada. 253 00:15:57,000 --> 00:16:01,000 Para obtener un mensaje lleno de sus fragmentos que descifrar cada bloque 254 00:16:01,000 --> 00:16:04,000 y concatenar los resultados. 255 00:16:04,000 --> 00:16:08,000 Exactamente qué tan seguro es RSA? 256 00:16:08,000 --> 00:16:10,000 La verdad es que no lo sé. 257 00:16:10,000 --> 00:16:14,000 La seguridad se basa en el tiempo que le tomaría a un atacante descifrar un mensaje 258 00:16:14,000 --> 00:16:16,000 encriptada con RSA. 259 00:16:16,000 --> 00:16:19,000 Recuerde que un atacante tiene acceso a su clave pública, 260 00:16:19,000 --> 00:16:21,000 que contiene tanto e y n. 261 00:16:21,000 --> 00:16:26,000 Si el atacante consigue factorizar n en sus 2 primos, p y q, 262 00:16:26,000 --> 00:16:30,000 entonces podría calcular d usando el algoritmo de Euclides extendido. 263 00:16:30,000 --> 00:16:35,000 Esto le da la clave privada, que se puede utilizar para descifrar cualquier mensaje. 264 00:16:35,000 --> 00:16:38,000 Pero la rapidez podemos factorizar enteros? 265 00:16:38,000 --> 00:16:41,000 Una vez más, no lo sé. 266 00:16:41,000 --> 00:16:43,000 Nadie ha encontrado una manera rápida de hacerlo, 267 00:16:43,000 --> 00:16:46,000 lo que significa que dado n suficientemente grande 268 00:16:46,000 --> 00:16:49,000 que llevaría a un atacante irrealmente largo 269 00:16:49,000 --> 00:16:51,000 factorizar el número. 270 00:16:51,000 --> 00:16:54,000 Si alguien revela una forma rápida de factorizar enteros 271 00:16:54,000 --> 00:16:57,000 RSA se rompería. 272 00:16:57,000 --> 00:17:01,000 Pero incluso si factorización de enteros es inherentemente lento 273 00:17:01,000 --> 00:17:04,000 el algoritmo RSA todavía podría tener algún defecto en ella 274 00:17:04,000 --> 00:17:07,000 que permite la fácil descifrado de mensajes. 275 00:17:07,000 --> 00:17:10,000 Nadie ha encontrado y revela una falla, sin embargo, 276 00:17:10,000 --> 00:17:12,000 pero eso no significa que no existe uno. 277 00:17:12,000 --> 00:17:17,000 En teoría, alguien podría estar por ahí leyendo todos los datos cifrados con RSA. 278 00:17:17,000 --> 00:17:19,000 Hay otro poco de un problema de privacidad. 279 00:17:19,000 --> 00:17:23,000 Si Tommy encripta algún mensaje con mi clave pública 280 00:17:23,000 --> 00:17:26,000 y un atacante cifra el mensaje mismo con mi clave pública 281 00:17:26,000 --> 00:17:29,000 el atacante se verá que los dos mensajes son idénticos 282 00:17:29,000 --> 00:17:32,000 y así saber lo que Tommy cifrado. 283 00:17:32,000 --> 00:17:36,000 A fin de evitar esto, los mensajes son típicamente rellenado con bits aleatorios 284 00:17:36,000 --> 00:17:39,000 antes de ser cifrados para que el mismo mensaje cifrado 285 00:17:39,000 --> 00:17:44,000 múltiples veces será diferente, siempre y cuando el relleno en el mensaje es diferente. 286 00:17:44,000 --> 00:17:47,000 Pero recuerda cómo tenemos que dividir los mensajes en trozos 287 00:17:47,000 --> 00:17:50,000 de modo que cada fragmento es menor que n? 288 00:17:50,000 --> 00:17:52,000 Relleno los trozos significa que tengamos que dividir las cosas 289 00:17:52,000 --> 00:17:57,000 en trozos aún más desde el trozo acolchado debe ser menor que n. 290 00:17:57,000 --> 00:18:01,000 El cifrado y descifrado son relativamente caros con RSA, 291 00:18:01,000 --> 00:18:05,000 y por lo tanto necesidad de romper un mensaje en trozos muchos puede ser muy costoso. 292 00:18:05,000 --> 00:18:09,000 Si un gran volumen de datos tiene que ser cifrados y descifrados 293 00:18:09,000 --> 00:18:12,000 podemos combinar los beneficios de algoritmos de clave simétrica 294 00:18:12,000 --> 00:18:16,000 con los de RSA para obtener la seguridad y la eficiencia. 295 00:18:16,000 --> 00:18:18,000 Aunque no voy a entrar en ello aquí, 296 00:18:18,000 --> 00:18:23,000 AES es un algoritmo de clave simétrica como el cifrado Vigenère y César 297 00:18:23,000 --> 00:18:25,000 pero mucho más difícil de roer. 298 00:18:25,000 --> 00:18:30,000 Por supuesto, no podemos usar AES sin establecer una clave secreta compartida 299 00:18:30,000 --> 00:18:34,000 entre los 2 sistemas y vimos el problema con eso antes. 300 00:18:34,000 --> 00:18:40,000 Pero ahora podemos utilizar RSA para establecer la clave secreta compartida entre los 2 sistemas. 301 00:18:40,000 --> 00:18:43,000 Llamaremos a la computadora que envía los datos del remitente 302 00:18:43,000 --> 00:18:46,000 y el equipo que recibe los datos del receptor. 303 00:18:46,000 --> 00:18:49,000 El receptor tiene un par de claves RSA y envía 304 00:18:49,000 --> 00:18:51,000 la clave pública al remitente. 305 00:18:51,000 --> 00:18:54,000 El emisor genera una clave de AES, 306 00:18:54,000 --> 00:18:57,000 cifra con la clave pública RSA del receptor, 307 00:18:57,000 --> 00:19:00,000 y envía la clave AES para el receptor. 308 00:19:00,000 --> 00:19:04,000 El receptor descifra el mensaje con su clave privada RSA. 309 00:19:04,000 --> 00:19:09,000 Tanto el emisor como el receptor tienen ahora una clave compartida AES entre ellos. 310 00:19:09,000 --> 00:19:14,000 AES, que es mucho más rápido en el cifrado y descifrado de RSA, 311 00:19:14,000 --> 00:19:18,000 Ahora se puede utilizar para cifrar los grandes volúmenes de datos y enviarlos al receptor, 312 00:19:18,000 --> 00:19:21,000 que puede descifrar utilizando la misma clave. 313 00:19:21,000 --> 00:19:26,000 AES, que es mucho más rápido en el cifrado y descifrado de RSA, 314 00:19:26,000 --> 00:19:30,000 Ahora se puede utilizar para cifrar los grandes volúmenes de datos y enviarlos al receptor, 315 00:19:30,000 --> 00:19:32,000 que puede descifrar utilizando la misma clave. 316 00:19:32,000 --> 00:19:36,000 Sólo necesitábamos RSA para transferir la clave compartida. 317 00:19:36,000 --> 00:19:40,000 Ya no necesita usar RSA en absoluto. 318 00:19:40,000 --> 00:19:46,000 Parece que tengo un mensaje. 319 00:19:46,000 --> 00:19:49,000 No importa si alguien lee lo que hay en el avión de papel antes de que me llamó 320 00:19:49,000 --> 00:19:55,000 porque yo soy el único que tiene la clave privada. 321 00:19:55,000 --> 00:19:57,000 Vamos a descifrar cada uno de los trozos en el mensaje. 322 00:19:57,000 --> 00:20:07,000 El primer trozo, 658, elevamos a la potencia d, que es de 185, 323 00:20:07,000 --> 00:20:18,000 mod n, que es 989, es igual a 67, 324 00:20:18,000 --> 00:20:24,000 que es la letra C en ASCII. 325 00:20:24,000 --> 00:20:31,000 Ahora, en el segundo fragmento. 326 00:20:31,000 --> 00:20:35,000 El segundo fragmento tiene un valor 15, 327 00:20:35,000 --> 00:20:41,000 que elevamos a la potencia 185a, 328 00:20:41,000 --> 00:20:51,000 mod 989, y esto es igual a 83 329 00:20:51,000 --> 00:20:57,000 que es la letra S en ASCII. 330 00:20:57,000 --> 00:21:06,000 Ya por el trozo tercero, que tiene un valor 799, elevamos a 185, 331 00:21:06,000 --> 00:21:17,000 mod 989, y esto es igual a 53, 332 00:21:17,000 --> 00:21:24,000 que es el valor del carácter ASCII en 5. 333 00:21:24,000 --> 00:21:30,000 Ahora, para el último fragmento, que tiene un valor 975, 334 00:21:30,000 --> 00:21:41,000 elevamos a 185, mod 989, 335 00:21:41,000 --> 00:21:51,000 y esto es igual a 48, que es el valor de 0 en el carácter ASCII. 336 00:21:51,000 --> 00:21:57,000 Mi nombre es Rob Bowden, y esto es CS50. 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 RSA en absoluto. 339 00:22:08,000 --> 00:22:14,000 RSA en absoluto. [Risas] 340 00:22:14,000 --> 00:22:17,000 En todas.