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 é CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Imos dar un ollo na RSA, un algoritmo utilizado para cifrar datos. 5 00:00:11,000 --> 00:00:16,000 Algoritmos de cifrado como César e cifras de Vigenère non son moi seguras. 6 00:00:16,000 --> 00:00:20,000 Coa cifra de César, o dianteiro só precisa probar 25 claves diferentes 7 00:00:20,000 --> 00:00:22,000 para texto simple da mensaxe. 8 00:00:22,000 --> 00:00:25,000 Aínda que a cifra de Vigenère é máis seguro que a cifra de César 9 00:00:25,000 --> 00:00:28,000 por mor do maior espazo de procura de claves, unha vez que un atacante 10 00:00:28,000 --> 00:00:30,000 coñece a lonxitude da clave de cifrado de Vigenère, 11 00:00:30,000 --> 00:00:34,000 que pode ser determinada a través dunha análise dos patróns de texto codificado, 12 00:00:34,000 --> 00:00:38,000 a cifra de Vigenère que non é moito máis seguro que a cifra de César. 13 00:00:38,000 --> 00:00:42,000 RSA, por outra banda, non é vulnerable a ataques como este. 14 00:00:42,000 --> 00:00:45,000 A cifra de César e Vigenère cifra de usar a mesma clave 15 00:00:45,000 --> 00:00:47,000 para cifrar e descifrar mensaxes. 16 00:00:47,000 --> 00:00:51,000 Esta propiedade fai que esas cifras de algoritmos de claves simétricas. 17 00:00:51,000 --> 00:00:54,000 Un problema fundamental con algoritmos de claves simétricas 18 00:00:54,000 --> 00:00:57,000 é que contan coa cifrar e enviar unha mensaxe 19 00:00:57,000 --> 00:00:59,000 eo de recepción e decodificación da mensaxe 20 00:00:59,000 --> 00:01:03,000 para xa acordaron adiantado na clave ambos han empregar. 21 00:01:03,000 --> 00:01:06,000 Pero nós temos un pouco de un problema de arranque aquí. 22 00:01:06,000 --> 00:01:10,000 Como dous ordenadores que queren comunicarse establecer unha clave secreta entre eles? 23 00:01:10,000 --> 00:01:16,000 Se a chave debe ser secreta, entón necesitamos un xeito de cifrar e descifrar a chave. 24 00:01:16,000 --> 00:01:18,000 Se todo o que temos é a criptografía de clave simétrica 25 00:01:18,000 --> 00:01:21,000 entón acabamos de volver para o mesmo problema. 26 00:01:21,000 --> 00:01:25,000 RSA, por outra banda, utiliza un par de chaves, 27 00:01:25,000 --> 00:01:28,000 un para cifrado e outro para a decodificación. 28 00:01:28,000 --> 00:01:32,000 Unha está chamada a clave pública, e outra é a clave privada. 29 00:01:32,000 --> 00:01:34,000 A clave pública é usada para cifrar mensaxes. 30 00:01:34,000 --> 00:01:38,000 Como podes imaxinar polo nome, podemos compartir a nosa chave pública con 31 00:01:38,000 --> 00:01:43,000 calquera persoa que queira, sen comprometer a seguridade dunha mensaxe cifrada. 32 00:01:43,000 --> 00:01:45,000 Mensaxes cifradas con unha chave pública 33 00:01:45,000 --> 00:01:49,000 só pode ser decifrada coa súa clave privada correspondente. 34 00:01:49,000 --> 00:01:53,000 Mentres pode compartir a súa chave pública, ten que sempre manter o seu segredo da clave privada. 61 00:01:55,000 --> 00:01:58,000 e só a clave privada pode ser usado para descifrar as mensaxes 62 00:01:58,000 --> 00:02:02,000 dous usuarios queren enviar mensaxes cifradas con RSA 63 00:02:02,000 --> 00:02:07,000 adiante e cara atrás ambos os usuarios precisan ter o seu par de chaves pública e privada propia chave. 64 00:02:07,000 --> 00:02:10,000 Mensaxes de usuario para un usuario 2 65 00:02:10,000 --> 00:02:15,000 usar só un par de chaves 2 usuarios e mensaxes de usuario a usuario 2 1 66 00:02:15,000 --> 00:02:17,000 usar só un par de claves de usuario. 67 00:02:17,000 --> 00:02:21,000 O feito de que hai dúas chaves separadas para cifrar e descifrar mensaxes 68 00:02:21,000 --> 00:02:24,000 RSA fai un algoritmo de clave asimétrica. 69 00:02:24,000 --> 00:02:28,000 Nós non precisamos para cifrar a clave pública, a fin de envialo a outro ordenador 70 00:02:28,000 --> 00:02:31,000 xa que a clave é pública calquera maneira. 71 00:02:31,000 --> 00:02:33,000 Isto significa que o RSA non teñen o mesmo problema de inicio 72 00:02:33,000 --> 00:02:36,000 como os algoritmos de clave simétrica. 73 00:02:36,000 --> 00:02:39,000 Entón, se eu quero enviar unha mensaxe utilizando o cifrado RSA 74 00:02:39,000 --> 00:02:42,000 para Rob, eu vou primeiro precisa de clave pública de Rob. 75 00:02:42,000 --> 00:02:47,000 Para xerar un par de chaves, Rob necesita escoller dous números primos grandes. 76 00:02:47,000 --> 00:02:50,000 Eses números serán usados ​​en ambas as chaves, público e privado, 77 00:02:50,000 --> 00:02:54,000 pero a clave pública só vai usar o produto deses dous números, 78 00:02:54,000 --> 00:02:56,000 non os propios números. 79 00:02:56,000 --> 00:02:59,000 Unha vez que eu teño a mensaxe cifrada usando a chave pública de Rob 80 00:02:59,000 --> 00:03:01,000 Podo enviar a mensaxe a Rob. 81 00:03:01,000 --> 00:03:05,000 A un ordenador, fatorar números é un problema difícil. 82 00:03:05,000 --> 00:03:09,000 A clave pública, lembre, usou o produto de dous números primos. 83 00:03:09,000 --> 00:03:12,000 Este produto debe entón ter só dous elementos, 84 00:03:12,000 --> 00:03:16,000 que acontecen ser os números que compoñen a chave privada. 85 00:03:16,000 --> 00:03:20,000 A fin de descifrar a mensaxe, a RSA vai utilizar esta clave privada 86 00:03:20,000 --> 00:03:25,000 ou os números multiplicados xuntos no proceso de creación da clave pública. 87 00:03:25,000 --> 00:03:28,000 Por computacionalmente difícil fatorar o número 88 00:03:28,000 --> 00:03:32,000 utilizado en unha chave pública para os dous números utilizados na clave privada 89 00:03:32,000 --> 00:03:36,000 É difícil para un invasor descubrir a clave privada 90 00:03:36,000 --> 00:03:39,000 que será necesaria para descifrar a mensaxe. 91 00:03:39,000 --> 00:03:43,000 Agora imos entrar en algúns detalles de nivel máis baixo da RSA. 92 00:03:43,000 --> 00:03:46,000 Imos primeiro ver como podemos xerar un par de claves. 93 00:03:46,000 --> 00:03:49,000 En primeiro lugar, imos ter que dous números primos. 94 00:03:49,000 --> 00:03:52,000 Imos chamar eses dous números pe q. 95 00:03:52,000 --> 00:03:56,000 A fin de elixir p e q, na práctica, sería pseudorandomly xerar 96 00:03:56,000 --> 00:03:59,000 grandes números e, a continuación, usar unha proba para determinar se ou non 97 00:03:59,000 --> 00:04:02,000 estes números son probablemente primo. 98 00:04:02,000 --> 00:04:05,000 Podemos manter a xeración de números aleatorios e outra vez 99 00:04:05,000 --> 00:04:08,000 ata que teñamos dous curmáns que podemos utilizar. 100 00:04:08,000 --> 00:04:15,000 Aquí imos escoller p = 23 e q = 43. 101 00:04:15,000 --> 00:04:19,000 Lembra, na práctica, p e q deben ser números moi grandes. 102 00:04:19,000 --> 00:04:22,000 Tanto como sabemos, o maior dos números, o que é máis difícil 103 00:04:22,000 --> 00:04:25,000 para romper unha mensaxe cifrada. 104 00:04:25,000 --> 00:04:29,000 Pero tamén é máis caro para cifrar e descifrar mensaxes. 105 00:04:29,000 --> 00:04:33,000 Hoxe é frecuentemente recomendado que p e q son polo menos 1024 bits, 106 00:04:33,000 --> 00:04:37,000 o que pon cada número en máis de 300 díxitos decimais. 107 00:04:37,000 --> 00:04:40,000 Pero imos incorporarse eses números pequenos para este exemplo. 108 00:04:40,000 --> 00:04:43,000 Agora imos multiplicar p e q xuntos para obter un número de 3, 109 00:04:43,000 --> 00:04:45,000 que chamaremos de n. 110 00:04:45,000 --> 00:04:55,000 No noso caso, n = 23 * 43, que é = 989. 111 00:04:55,000 --> 00:04:58,000 Temos n = 989. 112 00:04:58,000 --> 00:05:02,000 A continuación, imos multiplicar p - 1 con q - 1 113 00:05:02,000 --> 00:05:05,000 para obter un número 4, que chamaremos de m. 114 00:05:05,000 --> 00:05:15,000 No noso caso, m = 22 * ​​42, que é = 924. 115 00:05:15,000 --> 00:05:18,000 Temos m = 924. 116 00:05:18,000 --> 00:05:22,000 Agora imos ter un número e que é relativamente privilexiada para m 117 00:05:22,000 --> 00:05:25,000 e menos que m. 118 00:05:25,000 --> 00:05:28,000 Dous números son relativamente primos ou primos entre si 119 00:05:28,000 --> 00:05:33,000 o enteiro positivo só que divide os dous uniformemente é 1. 120 00:05:33,000 --> 00:05:37,000 Noutras palabras, o maior divisor común de e em 121 00:05:37,000 --> 00:05:39,000 debe ser 1. 122 00:05:39,000 --> 00:05:44,000 Na práctica, é común e ser o número primo 65537 123 00:05:44,000 --> 00:05:48,000 mentres este número non ocorrer de ser un factor de m. 124 00:05:48,000 --> 00:05:53,000 Para os nosos chaves, nós imos busca-e = 5 125 00:05:53,000 --> 00:05:57,000 desde 5 é relativamente privilexiada para 924. 126 00:05:57,000 --> 00:06:01,000 Finalmente, imos ter máis dun número, que chamaremos de d. 127 00:06:01,000 --> 00:06:11,000 D ten que ser un valor que satisfai a ecuación de = 1 (mod m). 128 00:06:11,000 --> 00:06:17,000 Este mod m significa que imos usar algo chamado aritmética modular. 129 00:06:17,000 --> 00:06:21,000 Na aritmética modular, xa que un número maior que recibe algún límite superior 130 00:06:21,000 --> 00:06:24,000 el volverá a 0. 131 00:06:24,000 --> 00:06:27,000 Un reloxo, por exemplo, usa aritmética modular. 132 00:06:27,000 --> 00:06:31,000 Un minuto despois da 1:59, por exemplo, é de 2:00, 133 00:06:31,000 --> 00:06:33,000 non 1:60. 134 00:06:33,000 --> 00:06:36,000 O punteiro dos minutos ten enrolado a 0 135 00:06:36,000 --> 00:06:39,000 ao alcanzar un límite superior de 60 anos. 136 00:06:39,000 --> 00:06:46,000 Entón, podemos dicir que 60 é equivalente a 0 (mod 60) 137 00:06:46,000 --> 00:06:57,000 e 125 é equivalente a 65 é igual a 5 (mod 60). 138 00:06:57,000 --> 00:07:02,000 A nosa clave pública será o é par e n 139 00:07:02,000 --> 00:07:09,000 onde, neste caso, e 5 e n ​​é 989. 140 00:07:09,000 --> 00:07:15,000 A nosa clave privada será o par D e N, 141 00:07:15,000 --> 00:07:22,000 que no noso caso é de 185 e 989. 142 00:07:22,000 --> 00:07:25,000 Teña en conta que a nosa orixinal primos p e q non aparecen 143 00:07:25,000 --> 00:07:29,000 en calquera lugar nas nosas chaves privadas ou públicas. 144 00:07:29,000 --> 00:07:33,000 Agora que temos o noso par de chaves, imos dar un ollo a como podemos cifrar 145 00:07:33,000 --> 00:07:36,000 e descifrar mensaxes. 146 00:07:36,000 --> 00:07:38,000 Eu quero enviar unha mensaxe a Rob, 147 00:07:38,000 --> 00:07:42,000 entón el vai ser o único a xerar ese par de chaves. 148 00:07:42,000 --> 00:07:46,000 Entón eu vou pedir para Rob súa chave pública, que eu vou usar 149 00:07:46,000 --> 00:07:48,000 para cifrar unha mensaxe para enviar a el. 150 00:07:48,000 --> 00:07:53,000 Lembre, é totalmente ben para Rob para compartir a súa clave pública comigo. 151 00:07:53,000 --> 00:07:56,000 Pero non sería bo para compartir a súa clave privada. 152 00:07:56,000 --> 00:08:00,000 Eu non teño ningunha idea do que a súa clave privada é. 153 00:08:00,000 --> 00:08:03,000 Podemos romper a nosa mensaxe m-se ​​en varios anacos 154 00:08:03,000 --> 00:08:07,000 todos menores que n e, a continuación, cifrar cada un destes bloques. 155 00:08:07,000 --> 00:08:12,000 Imos cifrar o CS50 cadea, que pode dividirse en catro anacos, 156 00:08:12,000 --> 00:08:14,000 unha por letra. 157 00:08:14,000 --> 00:08:17,000 Para cifrar a miña mensaxe, eu vou ter que convertelo 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 Imos concatenar os valores ASCII cos personaxes da miña mensaxe. 160 00:08:25,000 --> 00:08:28,000 Para cifrar unha mensaxe m dado 161 00:08:28,000 --> 00:08:37,000 Vou ter para calcular c = m para o correo (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 ou ben a mensaxe completa non pode ser expresada módulo n. 164 00:08:45,000 --> 00:08:49,000 Podemos dividir m por enriba en varios anacos, as cales son menores que n, 165 00:08:49,000 --> 00:08:52,000 e codificar cada unha destas partes. 166 00:08:52,000 --> 00:09:03,000 Criptografando cada un destes anacos, temos C1 = 67 para o 5 (mod 989) 167 00:09:03,000 --> 00:09:06,000 que = 658. 168 00:09:06,000 --> 00:09:15,000 Para o noso anaco segundo temos 83 a 5 (mod 989) 169 00:09:15,000 --> 00:09:18,000 cal = 15. 170 00:09:18,000 --> 00:09:26,000 Para o noso anaco terceiro temos 53 ao 5 (mod 989) 171 00:09:26,000 --> 00:09:30,000 que = 799. 172 00:09:30,000 --> 00:09:39,000 E, finalmente, para o noso último anaco temos 48 ao 5 (mod 989) 173 00:09:39,000 --> 00:09:43,000 que é = 975. 174 00:09:43,000 --> 00:09:48,000 Agora podemos enviar máis estes valores criptografada para Rob. 175 00:09:54,000 --> 00:09:58,000 Aquí está, Rob. 176 00:09:58,000 --> 00:10:01,000 Mentres que a nosa mensaxe está en voo, imos ter outro ollar 177 00:10:01,000 --> 00:10:07,000 como chegamos ese valor para d. 178 00:10:07,000 --> 00:10:17,000 O noso número d necesario para satisfacer 5D = 1 (mod 924). 179 00:10:17,000 --> 00:10:24,000 Isto fai que o d inverso multiplicativo módulo de 5 924. 180 00:10:24,000 --> 00:10:28,000 Dado dous enteiros, A e B, o algoritmo estendido de Euclides 181 00:10:28,000 --> 00:10:33,000 pode ser usada para atopar o maior divisor común destes dous números enteiros. 182 00:10:33,000 --> 00:10:37,000 Tamén pode dar-nos outros dous números, X e Y, 183 00:10:37,000 --> 00:10:47,000 que satisfán a ecuación ax + by = máximo divisor común de a e b. 184 00:10:47,000 --> 00:10:49,000 Como iso pode axudar? 185 00:10:49,000 --> 00:10:52,000 Ben, conectar e = 5 para un 186 00:10:52,000 --> 00:10:56,000 e m = 924 para b 187 00:10:56,000 --> 00:10:59,000 xa sabemos que estes números son primos entre si. 188 00:10:59,000 --> 00:11:03,000 O seu maior divisor común é 1. 189 00:11:03,000 --> 00:11:09,000 Iso nos dá 5x + 924y = 1 190 00:11:09,000 --> 00:11:17,000 ou 5x = 1 - 924y. 191 00:11:17,000 --> 00:11:22,000 Pero, só se preocupan con todo o módulo 924 192 00:11:22,000 --> 00:11:25,000 entón podemos deixar caer o - 924y. 193 00:11:25,000 --> 00:11:27,000 Pense de novo para o reloxo. 194 00:11:27,000 --> 00:11:31,000 Se o punteiro dos minutos é o 1 e, a continuación, exactamente 10 horas pasan, 195 00:11:31,000 --> 00:11:35,000 sabemos que o punteiro dos minutos vai aínda estar na 1. 196 00:11:35,000 --> 00:11:39,000 Aquí comezan o 1 e, a continuación, participa en torno a veces exactamente y, 197 00:11:39,000 --> 00:11:41,000 por iso aínda vai ser en 1. 198 00:11:41,000 --> 00:11:49,000 Temos 5x = 1 (mod 924). 199 00:11:49,000 --> 00:11:55,000 E aquí está x é o mesmo que o d estabamos buscando antes, 200 00:11:55,000 --> 00:11:58,000 así, usar o algoritmo estendido de Euclides 201 00:11:58,000 --> 00:12:04,000 para obter este número x, que é o número que debe usar como o noso d. 202 00:12:04,000 --> 00:12:07,000 Agora imos facer o algoritmo estendido de Euclides para a = 5 203 00:12:07,000 --> 00:12:11,000 e b = 924. 204 00:12:11,000 --> 00:12:14,000 Imos usar un método chamado de método de táboa. 205 00:12:14,000 --> 00:12:21,000 Nosa mesa terá 4 columnas, x, y, d, e k. 206 00:12:21,000 --> 00:12:23,000 Nosa mesa comeza con dúas liñas. 207 00:12:23,000 --> 00:12:28,000 Na primeira liña temos 1, 0, entón o noso valor de un, o que é 5, 208 00:12:28,000 --> 00:12:37,000 ea nosa segunda liña é 0, 1, eo seu valor para b, que é 924. 209 00:12:37,000 --> 00:12:40,000 O valor da columna 4, k, será o resultado 210 00:12:40,000 --> 00:12:45,000 de dividir o valor d na liña anterior co valor de d 211 00:12:45,000 --> 00:12:49,000 na mesma liña. 212 00:12:49,000 --> 00:12:56,000 Temos 5 dividido por 924 é 0, con algún resto. 213 00:12:56,000 --> 00:12:59,000 Isto significa que temos k = 0. 214 00:12:59,000 --> 00:13:05,000 Agora, o valor de todas as outras células, será o valor da cela de 2 liñas por riba dela 215 00:13:05,000 --> 00:13:09,000 menos o valor da liña enriba k veces. 216 00:13:09,000 --> 00:13:11,000 Imos comezar con d na liña 3. 217 00:13:11,000 --> 00:13:19,000 Temos 5-924 * 0 = 5. 218 00:13:19,000 --> 00:13:25,000 A continuación, temos 0-1 * 0 que é 0 219 00:13:25,000 --> 00:13:30,000 e 1-0 * 0 que é 1. 220 00:13:30,000 --> 00:13:33,000 Non é tan malo, entón imos pasar á seguinte liña. 221 00:13:33,000 --> 00:13:36,000 Primeiro necesitamos do noso 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 entón o seu valor para k é 184. 224 00:13:46,000 --> 00:13:54,000 Agora 924-5 * 184 = 4. 225 00:13:54,000 --> 00:14:05,000 1-0 * 184 é 1, 0 - 1 * 184 é -184. 226 00:14:05,000 --> 00:14:07,000 Todo ben, imos facer a seguinte liña. 227 00:14:07,000 --> 00:14:10,000 O noso 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 Imos encher as outras columnas. 230 00:14:17,000 --> 00:14:21,000 5-4 * 1 = 1. 231 00:14:21,000 --> 00:14:25,000 0-1 * 1 = -1. 232 00:14:25,000 --> 00:14:33,000 E 1 - 184 * 1 é 185. 233 00:14:33,000 --> 00:14:35,000 Imos ver o que o noso próximo valor de k sería. 234 00:14:35,000 --> 00:14:40,000 Ben, parece que temos 4 dividido por 1, que é 4. 235 00:14:40,000 --> 00:14:43,000 Neste caso en que estamos a dividir por 1 k tal que é igual á 236 00:14:43,000 --> 00:14:50,000 o valor d na liña anterior significa que estamos a facer co noso algoritmo. 237 00:14:50,000 --> 00:14:58,000 Podemos ver aquí que temos x = 185 e y = -1 na última fila. 238 00:14:58,000 --> 00:15:00,000 Imos agora volver ao noso obxectivo orixinal. 239 00:15:00,000 --> 00:15:04,000 Dixemos que o valor de x, como resultado da execución deste algoritmo 240 00:15:04,000 --> 00:15:08,000 sería o inverso multiplicativo dun (mod b). 241 00:15:08,000 --> 00:15:15,000 Isto significa que 185 é o inverso multiplicativo de 5 (mod 924) 242 00:15:15,000 --> 00:15:20,000 o que significa que ten un valor de 185 para d. 243 00:15:20,000 --> 00:15:23,000 O feito de que d = 1 na última liña 244 00:15:23,000 --> 00:15:26,000 comproba se e foi coprime m. 245 00:15:26,000 --> 00:15:30,000 Se non fose un entón teriamos que escoller un e novo. 246 00:15:30,000 --> 00:15:33,000 Agora imos ver se Rob recibiu a miña mensaxe. 247 00:15:33,000 --> 00:15:35,000 Cando alguén me envía unha mensaxe cifrada 248 00:15:35,000 --> 00:15:38,000 mentres eu mantiven a miña chave privada en segredo 249 00:15:38,000 --> 00:15:41,000 Eu son a única persoa que pode descifrar a mensaxe. 250 00:15:41,000 --> 00:15:46,000 Para descifrar un anaco c podo calcular a mensaxe orixinal 251 00:15:46,000 --> 00:15:53,000 é igual ao bloque de potencia d (mod n). 252 00:15:53,000 --> 00:15:57,000 Lembre que d e n son da miña clave privada. 253 00:15:57,000 --> 00:16:01,000 Para se ter unha mensaxe chea de seus anacos que descifrar cada peza 254 00:16:01,000 --> 00:16:04,000 e concatenar os resultados. 255 00:16:04,000 --> 00:16:08,000 Exactamente o quão seguro é o RSA? 256 00:16:08,000 --> 00:16:10,000 A verdade é que non sabemos. 257 00:16:10,000 --> 00:16:14,000 A seguridade está baseada en canto tempo levaría un atacante para romper unha mensaxe 258 00:16:14,000 --> 00:16:16,000 cifrada con RSA. 259 00:16:16,000 --> 00:16:19,000 Lembre que un atacante ten acceso á súa chave pública, 260 00:16:19,000 --> 00:16:21,000 a cal contén o correo e n. 261 00:16:21,000 --> 00:16:26,000 Se o atacante pode factor N seus dous primos, P e Q, 262 00:16:26,000 --> 00:16:30,000 entón ela podería calcular d usando o algoritmo estendido de Euclides. 263 00:16:30,000 --> 00:16:35,000 Isto dá-lle a clave privada, a cal pode ser usada para descodificar unha mensaxe. 264 00:16:35,000 --> 00:16:38,000 Pero a rapidez con que podemos fatorar números enteiros? 265 00:16:38,000 --> 00:16:41,000 Unha vez máis, non sabemos. 266 00:16:41,000 --> 00:16:43,000 Ninguén atopou unha forma rápida de facelo, 267 00:16:43,000 --> 00:16:46,000 o que significa que, dada suficientemente grande n 268 00:16:46,000 --> 00:16:49,000 levaría un atacante irrealisticamente longo 269 00:16:49,000 --> 00:16:51,000 factor para o número. 270 00:16:51,000 --> 00:16:54,000 Se alguén revelou unha maneira rápida de enteiros de factoring 271 00:16:54,000 --> 00:16:57,000 RSA sería roto. 272 00:16:57,000 --> 00:17:01,000 Pero mesmo se factorização enteira é lenta 273 00:17:01,000 --> 00:17:04,000 o algoritmo RSA aínda pode ter algunha falla nela 274 00:17:04,000 --> 00:17:07,000 que permite a fácil descodificación de mensaxes. 275 00:17:07,000 --> 00:17:10,000 Ninguén descubriu e revelou tal fallo, con todo, 276 00:17:10,000 --> 00:17:12,000 pero iso non significa que un non existe. 277 00:17:12,000 --> 00:17:17,000 En teoría, alguén podería estar alí fóra, lendo todos os datos criptografada con RSA. 278 00:17:17,000 --> 00:17:19,000 Hai un pouco de unha cuestión de privacidade. 279 00:17:19,000 --> 00:17:23,000 Se Tommy criptografía algunha mensaxe usando a miña chave pública 280 00:17:23,000 --> 00:17:26,000 e un dianteiro criptografía a mesma mensaxe utilizando a clave pública 281 00:17:26,000 --> 00:17:29,000 o dianteiro vai ver que as dúas mensaxes son idénticas 282 00:17:29,000 --> 00:17:32,000 e, polo tanto, sabe o que Tommy criptografada. 283 00:17:32,000 --> 00:17:36,000 A fin de evitar isto, as mensaxes son normalmente cubertos con bits aleatorios 284 00:17:36,000 --> 00:17:39,000 antes de ser codificado de xeito que a mesma mensaxe cifrada 285 00:17:39,000 --> 00:17:44,000 varias veces será diferente, sempre que a impregnación en que a mensaxe é diferente. 286 00:17:44,000 --> 00:17:47,000 Pero lembre-se así que temos que dividir as mensaxes en anacos 287 00:17:47,000 --> 00:17:50,000 de xeito que cada bloque é menor que n? 288 00:17:50,000 --> 00:17:52,000 Recheo dos anacos significa que podemos ter que dividir as cousas 289 00:17:52,000 --> 00:17:57,000 en anacos aínda máis desde o anaco acolchado debe ser menor que n. 290 00:17:57,000 --> 00:18:01,000 Criptografía e descriptografar son relativamente caros con RSA, 291 00:18:01,000 --> 00:18:05,000 e así a necesidade de acabar con unha mensaxe en anacos moitos pode ser moi caro. 292 00:18:05,000 --> 00:18:09,000 Un gran volume de datos debe ser criptografada e descriptografados 293 00:18:09,000 --> 00:18:12,000 podemos combinar os beneficios de algoritmos de claves simétricas 294 00:18:12,000 --> 00:18:16,000 cos da RSA para a seguridade e eficiencia. 295 00:18:16,000 --> 00:18:18,000 Aínda non entrarei aquí, 296 00:18:18,000 --> 00:18:23,000 AES é un algoritmo de chave simétrica, como o Vigenère e cifras de César 297 00:18:23,000 --> 00:18:25,000 pero moito máis difícil de descifrar. 298 00:18:25,000 --> 00:18:30,000 Por suposto, non podemos usar AES sen establecer unha clave secreta compartida 299 00:18:30,000 --> 00:18:34,000 entre os dous sistemas, e vimos o problema con iso antes. 300 00:18:34,000 --> 00:18:40,000 Pero agora podemos utilizar RSA para establecer a chave secreta compartida entre os dous sistemas. 301 00:18:40,000 --> 00:18:43,000 Imos chamar o ordenador que envía os datos do remitente 302 00:18:43,000 --> 00:18:46,000 E o ordenador recibe os datos do receptor. 303 00:18:46,000 --> 00:18:49,000 O receptor ten un par de claves RSA e envía 304 00:18:49,000 --> 00:18:51,000 a clave pública do remitente. 305 00:18:51,000 --> 00:18:54,000 O remitente xera unha clave AES, 306 00:18:54,000 --> 00:18:57,000 criptografía con chave RSA do receptor pública, 307 00:18:57,000 --> 00:19:00,000 e envía a clave AES para o receptor. 308 00:19:00,000 --> 00:19:04,000 O receptor decifra a mensaxe coa súa chave privada RSA. 309 00:19:04,000 --> 00:19:09,000 Tanto o remitente como o receptor teñen agora unha chave AES compartido entre eles. 310 00:19:09,000 --> 00:19:14,000 AES, que é moito máis rápido a codificación e decodificación de RSA, 311 00:19:14,000 --> 00:19:18,000 agora pode ser usado para cifrar os grandes volumes de datos e envialos para o receptor, 312 00:19:18,000 --> 00:19:21,000 que poden descifrar usando a mesma clave. 313 00:19:21,000 --> 00:19:26,000 AES, que é moito máis rápido a codificación e decodificación de RSA, 314 00:19:26,000 --> 00:19:30,000 agora pode ser usado para cifrar os grandes volumes de datos e envialos para o receptor, 315 00:19:30,000 --> 00:19:32,000 que poden descifrar usando a mesma clave. 316 00:19:32,000 --> 00:19:36,000 Nós só necesitabamos RSA para trasladar a clave compartida. 317 00:19:36,000 --> 00:19:40,000 Nós non precisamos máis usar RSA en todo. 318 00:19:40,000 --> 00:19:46,000 Parece que eu teño unha mensaxe. 319 00:19:46,000 --> 00:19:49,000 Non importa se alguén ler o que está no avión de papel antes de que eu peguei 320 00:19:49,000 --> 00:19:55,000 porque eu son o único a chave privada. 321 00:19:55,000 --> 00:19:57,000 Imos descifrar cada un dos anacos na mensaxe. 322 00:19:57,000 --> 00:20:07,000 O primeiro anaco, 658, que aumenta para poder d, que é de 185, 323 00:20:07,000 --> 00:20:18,000 mod n, que é 989, é igual a 67, 324 00:20:18,000 --> 00:20:24,000 que é a letra C en ASCII. 325 00:20:24,000 --> 00:20:31,000 Agora, para o segundo anaco. 326 00:20:31,000 --> 00:20:35,000 O anaco segundo ten valor 15, 327 00:20:35,000 --> 00:20:41,000 que levantamos o poder 185, 328 00:20:41,000 --> 00:20:51,000 mod 989, e esta é igual a 83 329 00:20:51,000 --> 00:20:57,000 que é a letra S en ASCII. 330 00:20:57,000 --> 00:21:06,000 Agora, para o terceiro bloque, que ten un valor 799, elevamos a 185, 331 00:21:06,000 --> 00:21:17,000 mod 989, e esta é igual a 53, 332 00:21:17,000 --> 00:21:24,000 que é o valor do carácter 5 en ASCII. 333 00:21:24,000 --> 00:21:30,000 Agora, para o último anaco, que ten 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 e esta é igual a 48, o cal é o valor de 0 a personaxe en ASCII. 336 00:21:51,000 --> 00:21:57,000 O meu nome é Rob Bowden, e este é o CS50. 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 RSA en todo. 339 00:22:08,000 --> 00:22:14,000 RSA en todo. [Risas] 340 00:22:14,000 --> 00:22:17,000 De todo.