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 [To je CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Oglejmo si na JAR, se pogosto uporablja algoritem za šifriranje podatkov. 5 00:00:11,000 --> 00:00:16,000 Algoritmi šifriranja, kot Cezar in Vigenère šifer niso zelo varna. 6 00:00:16,000 --> 00:00:20,000 Z Cezarjeva šifra, napadalec potrebuje samo poskusiti 25 različnih ključev 7 00:00:20,000 --> 00:00:22,000 da bi dobili sporočilo v golo besedilo. 8 00:00:22,000 --> 00:00:25,000 Medtem ko je šifra Vigenère je bolj varna kot Cezarjeva šifra 9 00:00:25,000 --> 00:00:28,000 zaradi večjega prostora za iskanje za ključe, potem ko napadalec 10 00:00:28,000 --> 00:00:30,000 ve dolžino ključa v šifro Vigenère, 11 00:00:30,000 --> 00:00:34,000 ki se lahko določi z analizo vzorcev v šifrirani besedila, 12 00:00:34,000 --> 00:00:38,000 se številka Vigenère ni, da je veliko bolj varna kot Cezarjeva šifra. 13 00:00:38,000 --> 00:00:42,000 RSA, na drugi strani pa ni ranljiv za napade, kot je ta. 14 00:00:42,000 --> 00:00:45,000 Caesar šifra in Vigenère šifra uporabljati isti ključ 15 00:00:45,000 --> 00:00:47,000 tako šifriranje in dešifriranje sporočila. 16 00:00:47,000 --> 00:00:51,000 Ta lastnost naredi teh šifer simetričnega ključa algoritmov. 17 00:00:51,000 --> 00:00:54,000 Temeljni problem pri simetričnih algoritmov ključnih 18 00:00:54,000 --> 00:00:57,000 je, da se zanašajo na eni kriptiranjem in pošiljanje sporočil 19 00:00:57,000 --> 00:00:59,000 in tisti, sprejemanje in dekodiranje sporočila 20 00:00:59,000 --> 00:01:03,000 da so se že dogovorili vnaprej, na njej pa bosta uporabljali. 21 00:01:03,000 --> 00:01:06,000 Toda imamo nekaj zagonskega problem tukaj. 22 00:01:06,000 --> 00:01:10,000 Kako 2 računalnika, ki želijo vzpostaviti komunikacijo med njimi skrivni ključ? 23 00:01:10,000 --> 00:01:16,000 Če mora biti ključ skrivnost, potem moramo način za šifriranje in dešifriranje ključ. 24 00:01:16,000 --> 00:01:18,000 Če vse, kar imate, je simetrična ključi 25 00:01:18,000 --> 00:01:21,000 Nato smo se pravkar vrnil z enako težavo. 26 00:01:21,000 --> 00:01:25,000 RSA, na drugi strani pa uporablja par ključev, 27 00:01:25,000 --> 00:01:28,000 enega za šifriranje in dešifriranje za drugo. 28 00:01:28,000 --> 00:01:32,000 Ena se imenuje javni ključ, drugi pa je zasebni ključ. 29 00:01:32,000 --> 00:01:34,000 Javni ključ se uporablja za šifriranje sporočil. 30 00:01:34,000 --> 00:01:38,000 Kot ste lahko uganiti, s svojim imenom, lahko delimo naš javni ključ z 31 00:01:38,000 --> 00:01:43,000 kdorkoli si želimo, ne da bi ogrozili varnost šifrirano sporočilo. 32 00:01:43,000 --> 00:01:45,000 Sporočila kodirana z uporabo javnega ključa 33 00:01:45,000 --> 00:01:49,000 lahko samo decrypted z ustreznim zasebnim ključem. 34 00:01:49,000 --> 00:01:53,000 Medtem ko lahko delite svoj javni ključ, morate vedno svoj zasebni ključ v tajnosti. 61 00:01:55,000 --> 00:01:58,000 in lahko samo zasebni ključ za dešifriranje sporočil 62 00:01:58,000 --> 00:02:02,000 če 2 uporabniki želijo poslati sporočilo šifrirano z JAR 63 00:02:02,000 --> 00:02:07,000 naprej in nazaj, tako uporabniki morajo imeti svoj javni in zasebni par ključev. 64 00:02:07,000 --> 00:02:10,000 Sporočila uporabnika od 1 do 2 uporabnika 65 00:02:10,000 --> 00:02:15,000 uporabljajte le Uporabnik 2 je par ključev, in sporočil od uporabnika do uporabnika 1 2 66 00:02:15,000 --> 00:02:17,000 uporabljajte le par ključev 1 user je. 67 00:02:17,000 --> 00:02:21,000 Dejstvo, da obstajajo 2 ločeni ključi za šifriranje in dešifriranje sporočila 68 00:02:21,000 --> 00:02:24,000 Zaradi RSA asimetrična algoritem ključa. 69 00:02:24,000 --> 00:02:28,000 Ne potrebujemo za šifriranje javnega ključa, da bi ga poslali v drug računalnik 70 00:02:28,000 --> 00:02:31,000 saj je ključ javno vseeno. 71 00:02:31,000 --> 00:02:33,000 To pomeni, da RSA nima enake težave pri zagonu 72 00:02:33,000 --> 00:02:36,000 kot simetričnih ključnih algoritmov. 73 00:02:36,000 --> 00:02:39,000 Torej, če želim poslati sporočilo z šifriranje RSA 74 00:02:39,000 --> 00:02:42,000 Rob se bom najprej morali javni ključ Rob je. 75 00:02:42,000 --> 00:02:47,000 Če želite ustvariti par ključev, Rob mora izbrati 2 velika praštevila. 76 00:02:47,000 --> 00:02:50,000 Te številke se bodo uporabljali tako v javnih in zasebnih ključev, 77 00:02:50,000 --> 00:02:54,000 ampak javni ključ uporablja samo proizvod teh 2 številk 78 00:02:54,000 --> 00:02:56,000 ne številke same. 79 00:02:56,000 --> 00:02:59,000 Ko sem šifrirano sporočilo z javnim ključem je Rob 80 00:02:59,000 --> 00:03:01,000 Ne morem poslati sporočilo robu. 81 00:03:01,000 --> 00:03:05,000 Za računalnik, faktoring številke je težko problem. 82 00:03:05,000 --> 00:03:09,000 Javni ključ, se spomnite, ki se uporablja za izdelek 2 praštevila. 83 00:03:09,000 --> 00:03:12,000 Ta izdelek je potem samo 2 dejavnike, 84 00:03:12,000 --> 00:03:16,000 , ki se zgodi, da so številke, ki sestavljajo zasebni ključ. 85 00:03:16,000 --> 00:03:20,000 Da bi dešifriranje sporočila, bo RSA uporabo tega zasebni ključ 86 00:03:20,000 --> 00:03:25,000 ali številke pomnožijo skupaj v procesu oblikovanja javnega ključa. 87 00:03:25,000 --> 00:03:28,000 Ker je računsko težko vključijo tudi število 88 00:03:28,000 --> 00:03:32,000 uporabljajo javni ključ v 2 številkah v zasebni ključ 89 00:03:32,000 --> 00:03:36,000 je težko za napadalca, da ugotovimo, zasebni ključ 90 00:03:36,000 --> 00:03:39,000 da bo treba dešifrirati sporočila. 91 00:03:39,000 --> 00:03:43,000 Zdaj pa pojdimo na nekaj nižji ravni podrobnosti JAR. 92 00:03:43,000 --> 00:03:46,000 Naj najprej videti, kako lahko ustvarimo par ključev. 93 00:03:46,000 --> 00:03:49,000 Najprej bomo potrebovali 2 praštevil. 94 00:03:49,000 --> 00:03:52,000 Poklicali bomo te številke 2 p in q. 95 00:03:52,000 --> 00:03:56,000 Za prevzem P in Q, v praksi bi si ustvarila pseudorandomly 96 00:03:56,000 --> 00:03:59,000 Velike številke in nato uporabite test za ugotavljanje, ali 97 00:03:59,000 --> 00:04:02,000 te številke so verjetno prime. 98 00:04:02,000 --> 00:04:05,000 Mi lahko vodijo ustvarjanje naključnih števil, znova in znova 99 00:04:05,000 --> 00:04:08,000 dokler ne bomo imeli 2 praštevila, ki jih lahko uporabite. 100 00:04:08,000 --> 00:04:15,000 Tukaj pa si izberete p = 23 in q = 43. 101 00:04:15,000 --> 00:04:19,000 Ne pozabite, da v praksi, bi p in q lahko veliko večje številke. 102 00:04:19,000 --> 00:04:22,000 Kolikor vemo, je večje številke, težje je 103 00:04:22,000 --> 00:04:25,000 crack šifrirano sporočilo. 104 00:04:25,000 --> 00:04:29,000 Ampak to je tudi dražji za šifriranje in dešifriranje sporočil. 105 00:04:29,000 --> 00:04:33,000 Danes je pogosto priporočljivo, da p in q vsaj 1024 bitov, 106 00:04:33,000 --> 00:04:37,000 ki postavlja vsako številko na več kot 300 decimalnih mest. 107 00:04:37,000 --> 00:04:40,000 Ampak bomo izbrali te majhne številke za ta primer. 108 00:04:40,000 --> 00:04:43,000 Zdaj bomo pomnožimo P in Q skupaj, da bi dobili 3. številko, 109 00:04:43,000 --> 00:04:45,000 ki bomo poklicali n. 110 00:04:45,000 --> 00:04:55,000 V našem primeru je n = 23 * 43 = 989, ki. 111 00:04:55,000 --> 00:04:58,000 Imamo n = 989. 112 00:04:58,000 --> 00:05:02,000 Nato bomo pomnožimo P - 1 q - 1 113 00:05:02,000 --> 00:05:05,000 pridobiti 4. številko, ki bomo poklicali m. 114 00:05:05,000 --> 00:05:15,000 V našem primeru je m = 22 * ​​42 = 924, ki. 115 00:05:15,000 --> 00:05:18,000 Imamo m = 924. 116 00:05:18,000 --> 00:05:22,000 Zdaj bomo potrebovali številko E, ki je relativno prime, da m 117 00:05:22,000 --> 00:05:25,000 in manj kot m. 118 00:05:25,000 --> 00:05:28,000 Dva številke so relativno prime ali coprime 119 00:05:28,000 --> 00:05:33,000 če le pozitivno celo, da jih je razdelil tako enakomerno je 1. 120 00:05:33,000 --> 00:05:37,000 Z drugimi besedami, največji skupni delitelj E in M 121 00:05:37,000 --> 00:05:39,000 mora biti 1. 122 00:05:39,000 --> 00:05:44,000 V praksi je skupna za e, da je praštevilo 65537 123 00:05:44,000 --> 00:05:48,000 Dokler se to število ne zgodi, da se faktor m. 124 00:05:48,000 --> 00:05:53,000 Za naše tipk, bomo izbrali e = 5 125 00:05:53,000 --> 00:05:57,000 od 5. relativno prime za 924. 126 00:05:57,000 --> 00:06:01,000 Končno, bomo potrebovali še eno številko, ki bomo poklicali d. 127 00:06:01,000 --> 00:06:11,000 D mora biti nekaj vrednost, ki ustreza enačbi de = 1 (mod m). 128 00:06:11,000 --> 00:06:17,000 To pomeni, mod m bomo uporabili nekaj, kar ti modularna aritmetika. 129 00:06:17,000 --> 00:06:21,000 V modularne aritmetike, ko postane številka višja od nekaterih zgornja meja 130 00:06:21,000 --> 00:06:24,000 se bo sklenil nazaj okoli 0. 131 00:06:24,000 --> 00:06:27,000 Ura, na primer, uporablja modularne aritmetike. 132 00:06:27,000 --> 00:06:31,000 Minuto po 01:59, na primer, je 2:00, 133 00:06:31,000 --> 00:06:33,000 Ne 1:60. 134 00:06:33,000 --> 00:06:36,000 Minutni kazalec je ovita okoli 0 135 00:06:36,000 --> 00:06:39,000 ob prihodu zgornja meja 60 let. 136 00:06:39,000 --> 00:06:46,000 Torej lahko rečemo, 60 je enak 0 (mod 60) 137 00:06:46,000 --> 00:06:57,000 in 125 je enaka 65 je enaka do 5 (mod 60). 138 00:06:57,000 --> 00:07:02,000 Naš javni ključ bo par e in n 139 00:07:02,000 --> 00:07:09,000 če v tem primeru e je 5 in n 989. 140 00:07:09,000 --> 00:07:15,000 Naše zasebni ključ bo par d in n, 141 00:07:15,000 --> 00:07:22,000 ki je v našem primeru 185 in 989. 142 00:07:22,000 --> 00:07:25,000 Obvestilo, da je naša prvotna praštevil p in q se ne pojavljajo 143 00:07:25,000 --> 00:07:29,000 kjerkoli v naših zasebnih ali javnih ključev. 144 00:07:29,000 --> 00:07:33,000 Zdaj, ko imamo par ključev, pa si oglejte, kako lahko šifriranje 145 00:07:33,000 --> 00:07:36,000 in dešifriranje sporočila. 146 00:07:36,000 --> 00:07:38,000 Želim poslati sporočilo Rob, 147 00:07:38,000 --> 00:07:42,000 Tako bo on tisti, ki bo generiral par ključev. 148 00:07:42,000 --> 00:07:46,000 Potem bom vprašal Rob za njegov javni ključ, ki bom uporabo 149 00:07:46,000 --> 00:07:48,000 za šifriranje sporočila, da pošlje k ​​njemu. 150 00:07:48,000 --> 00:07:53,000 Ne pozabite, da je popolnoma v redu, Rob deliti svoje javni ključ z mano. 151 00:07:53,000 --> 00:07:56,000 Ampak to ne bi bilo prav, da delijo svojim zasebnim ključem. 152 00:07:56,000 --> 00:08:00,000 Nimam pojma, kaj je njegov zasebni ključ. 153 00:08:00,000 --> 00:08:03,000 Mi lahko zlomiti sporočilo metrov v več kosih 154 00:08:03,000 --> 00:08:07,000 vse manjša od n in nato šifriranje vsako od teh koščkih. 155 00:08:07,000 --> 00:08:12,000 Mi bomo šifriranje niz CS50, ki ga lahko razdelite v 4 kose, 156 00:08:12,000 --> 00:08:14,000 ena na pisma. 157 00:08:14,000 --> 00:08:17,000 Za šifriranje moje sporočilo, bom potreboval, da se pretvori v 158 00:08:17,000 --> 00:08:20,000 neke vrste številske predstavitve. 159 00:08:20,000 --> 00:08:25,000 Naj spenjanje ASCII vrednosti z znaki v mojem sporočilu. 160 00:08:25,000 --> 00:08:28,000 Za šifriranje določenega m sporočilo 161 00:08:28,000 --> 00:08:37,000 Potreboval bom za izračun c = m na e (mod n). 162 00:08:37,000 --> 00:08:40,000 Vendar mora biti manjši od m n 163 00:08:40,000 --> 00:08:45,000 ali pa celotna sporočila ni mogoče izraziti modulo n. 164 00:08:45,000 --> 00:08:49,000 Mi lahko razbije m v več kosih, vsi, ki so manjša od n, 165 00:08:49,000 --> 00:08:52,000 šifriranje in vsako od teh koščkih. 166 00:08:52,000 --> 00:09:03,000 Šifriranje vsako od teh koščkih, dobimo c1 = 67 do 5 (mod 989) 167 00:09:03,000 --> 00:09:06,000 ki = 658. 168 00:09:06,000 --> 00:09:15,000 Za naš drugi kos imamo 83 do 5 (mod 989) 169 00:09:15,000 --> 00:09:18,000 ki = 15. 170 00:09:18,000 --> 00:09:26,000 Za naše tretje bloku imamo 53 do 5 (mod 989) 171 00:09:26,000 --> 00:09:30,000 ki = 799. 172 00:09:30,000 --> 00:09:39,000 In končno, na našem zadnjem bloku imamo 48 do 5 (mod 989) 173 00:09:39,000 --> 00:09:43,000 ki = 975. 174 00:09:43,000 --> 00:09:48,000 Sedaj lahko pošljete preko te šifrirane vrednosti robu. 175 00:09:54,000 --> 00:09:58,000 Tukaj imaš, no. 176 00:09:58,000 --> 00:10:01,000 Čeprav je naše sporočilo, v letu, dajmo še enkrat pogledati 177 00:10:01,000 --> 00:10:07,000 o tem, kako smo dobili to vrednost za d. 178 00:10:07,000 --> 00:10:17,000 Naša številka d potrebne za zadovoljitev 5D ​​= 1 (mod 924). 179 00:10:17,000 --> 00:10:24,000 To pomeni, d za množenje inverzna 5 modulo 924. 180 00:10:24,000 --> 00:10:28,000 Glede na to, cela 2, A in B, razširjeni Evklidov algoritem 181 00:10:28,000 --> 00:10:33,000 se lahko uporablja, da bi našli največji skupni delitelj teh števil 2. 182 00:10:33,000 --> 00:10:37,000 To bo tudi nam 2 drugih številk, X in Y, 183 00:10:37,000 --> 00:10:47,000 ki izpolnjuje enačbo ax + by = največji skupni delitelj a in b. 184 00:10:47,000 --> 00:10:49,000 Kako nam to pomaga? 185 00:10:49,000 --> 00:10:52,000 No, priklopom na e = 5 za 186 00:10:52,000 --> 00:10:56,000 in m = 924 za B 187 00:10:56,000 --> 00:10:59,000 že vemo, da so te številke coprime. 188 00:10:59,000 --> 00:11:03,000 Njihov največji skupni delitelj 1. 189 00:11:03,000 --> 00:11:09,000 To nam daje 5x + 924y = 1 190 00:11:09,000 --> 00:11:17,000 ali 5x = 1 - 924y. 191 00:11:17,000 --> 00:11:22,000 Ampak, če bomo samo skrbi vse modulo 924 192 00:11:22,000 --> 00:11:25,000 potem bomo lahko spusti - 924y. 193 00:11:25,000 --> 00:11:27,000 Pomisli nazaj na uro. 194 00:11:27,000 --> 00:11:31,000 Če minutni kazalec je na 1 in potem točno 10 ur mimo, 195 00:11:31,000 --> 00:11:35,000 Vemo minutni kazalec bo še vedno na 1. 196 00:11:35,000 --> 00:11:39,000 Tu smo začeli na 1 in nato ovijte okoli točno y-krat, 197 00:11:39,000 --> 00:11:41,000 tako da bomo še vedno na 1. 198 00:11:41,000 --> 00:11:49,000 Imamo 5x = 1 (mod 924). 199 00:11:49,000 --> 00:11:55,000 In tukaj je ta x je enak kot d smo iskali pred 200 00:11:55,000 --> 00:11:58,000 tako da, če bomo uporabili razširjeno Evklidov algoritem 201 00:11:58,000 --> 00:12:04,000 da se to število x, da je številka, da bi morali uporabiti kot naše d. 202 00:12:04,000 --> 00:12:07,000 Zdaj pa teče razširjenega Evklidov algoritem za = 5 203 00:12:07,000 --> 00:12:11,000 in b = 924. 204 00:12:11,000 --> 00:12:14,000 Uporabili bomo metodo, ki se imenuje tabela način. 205 00:12:14,000 --> 00:12:21,000 Naša miza bo imela 4 stolpce, X, Y, d, in k. 206 00:12:21,000 --> 00:12:23,000 Naša miza prične z 2 vrstic. 207 00:12:23,000 --> 00:12:28,000 V prvi vrsti moramo 1, 0, potem je naša vrednost, kar je za 5, 208 00:12:28,000 --> 00:12:37,000 in naša druga vrsta je 0, 1, in naša vrednost za b, kar je 924. 209 00:12:37,000 --> 00:12:40,000 Vrednost 4. stolpcu, k se bo rezultat 210 00:12:40,000 --> 00:12:45,000 delitve vrednost d v vrstici nad njo z vrednostjo d 211 00:12:45,000 --> 00:12:49,000 na isti vrsti. 212 00:12:49,000 --> 00:12:56,000 Imamo 5 deljeno s 924 je 0 z nekaj ostanka. 213 00:12:56,000 --> 00:12:59,000 To pomeni, da moramo k = 0. 214 00:12:59,000 --> 00:13:05,000 Zdaj bo vrednost vsake druge celice je vrednost celice 2 vrstic nad njo 215 00:13:05,000 --> 00:13:09,000 minus vrednost vrstici nad njo krat k. 216 00:13:09,000 --> 00:13:11,000 Začnimo z d v 3. vrsti. 217 00:13:11,000 --> 00:13:19,000 Imamo 5-924 * 0 = 5. 218 00:13:19,000 --> 00:13:25,000 Nato imamo 0-1 * 0, ki je 0 219 00:13:25,000 --> 00:13:30,000 in 1 - 0 * 0, ki je 1. 220 00:13:30,000 --> 00:13:33,000 Ni slabo, tako da gremo na naslednjo vrstico. 221 00:13:33,000 --> 00:13:36,000 Najprej moramo našo vrednost k. 222 00:13:36,000 --> 00:13:43,000 924 deljeno s 5 = 184 z nekaj preostalega 223 00:13:43,000 --> 00:13:46,000 Tako naša vrednost k je 184. 224 00:13:46,000 --> 00:13:54,000 Zdaj 924-5 * 184 = 4. 225 00:13:54,000 --> 00:14:05,000 1-0 * 184 je 1 in 0 - 1 * 184 je -184. 226 00:14:05,000 --> 00:14:07,000 V redu, naredimo naslednjo vrstico. 227 00:14:07,000 --> 00:14:10,000 Naša vrednost k bo 1, ker 228 00:14:10,000 --> 00:14:15,000 5 deljeno s 4 = 1 z nekaj ostanka. 229 00:14:15,000 --> 00:14:17,000 Naj izpolnijo v drugih stolpcih. 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 In 1-184 * 1 je 185. 233 00:14:33,000 --> 00:14:35,000 Poglejmo, kaj bo naša naslednja vrednost k biti. 234 00:14:35,000 --> 00:14:40,000 No, izgleda, da imamo 4 deli z 1, kar je 4. 235 00:14:40,000 --> 00:14:43,000 V tem primeru, ko smo delila z 1, tako da je k enak 236 00:14:43,000 --> 00:14:50,000 vrednost d v zgornji vrstici pomeni, da bomo končali z našim algoritmom. 237 00:14:50,000 --> 00:14:58,000 Tukaj lahko vidimo, da imamo x = 185 in y = -1, v zadnji vrsti. 238 00:14:58,000 --> 00:15:00,000 Pojdimo zdaj vrnil na naš prvotni cilj. 239 00:15:00,000 --> 00:15:04,000 Rekli smo, da je vrednost x zaradi tega teče algoritem 240 00:15:04,000 --> 00:15:08,000 bi bilo multiplikativni inverz a (mod b). 241 00:15:08,000 --> 00:15:15,000 To pomeni, da 185 je multiplikativni inverz 5 (mod 924) 242 00:15:15,000 --> 00:15:20,000 kar pomeni, da imamo v vrednosti 185 za d. 243 00:15:20,000 --> 00:15:23,000 Dejstvo, da je d = 1 v zadnji vrsti 244 00:15:23,000 --> 00:15:26,000 preveri, e je coprime m. 245 00:15:26,000 --> 00:15:30,000 Če ne bi bilo 1, potem bi morali izbrati nov e. 246 00:15:30,000 --> 00:15:33,000 Zdaj pa poglejmo, če je Rob prejel moje sporočilo. 247 00:15:33,000 --> 00:15:35,000 Ko vam nekdo pošlje mi šifrirano sporočilo 248 00:15:35,000 --> 00:15:38,000 tako dolgo, kot sem držal zasebnega ključa skrivnost 249 00:15:38,000 --> 00:15:41,000 Jaz sem edini, ki lahko dešifrira sporočilo. 250 00:15:41,000 --> 00:15:46,000 Za dešifriranje kosi C lahko jaz izračun izvirno sporočilo 251 00:15:46,000 --> 00:15:53,000 je enak kos na d moči (mod n). 252 00:15:53,000 --> 00:15:57,000 Ne pozabite, da d in n so iz mojega zasebnega ključa. 253 00:15:57,000 --> 00:16:01,000 Da bi dobili celotno sporočilo iz svojih koščkih smo dešifriranje vsak kos 254 00:16:01,000 --> 00:16:04,000 in združevanje rezultatov. 255 00:16:04,000 --> 00:16:08,000 Točno, kako varna je RSA? 256 00:16:08,000 --> 00:16:10,000 Resnica je, da ne vemo. 257 00:16:10,000 --> 00:16:14,000 Varnost temelji na tem, kako dolgo bi trajalo, da bi onemogočili napadalca sporočilo 258 00:16:14,000 --> 00:16:16,000 zaščiteni z JAR. 259 00:16:16,000 --> 00:16:19,000 Zapomnite si, da napadalec nima dostopa do vašega javnega ključa, 260 00:16:19,000 --> 00:16:21,000 , ki vsebuje tako e in n. 261 00:16:21,000 --> 00:16:26,000 Če napadalec uspel faktor N v svoje praštevil 2, p in q, 262 00:16:26,000 --> 00:16:30,000 potem bi ona izračun d s podaljšanim Evklidov algoritem. 263 00:16:30,000 --> 00:16:35,000 To ji daje zasebni ključ, ki se lahko uporablja za dešifriranje vsako sporočilo. 264 00:16:35,000 --> 00:16:38,000 Toda, kako hitro lahko dejavnik cela? 265 00:16:38,000 --> 00:16:41,000 Še enkrat, ne vemo. 266 00:16:41,000 --> 00:16:43,000 Nihče še ni našel hiter način delovanje, 267 00:16:43,000 --> 00:16:46,000 kar pomeni, da daje dovolj velike n 268 00:16:46,000 --> 00:16:49,000 da bi se z napadalcem nerealno dolgo 269 00:16:49,000 --> 00:16:51,000 na faktorja številko. 270 00:16:51,000 --> 00:16:54,000 Če nekdo pokazal hiter način faktoring celih 271 00:16:54,000 --> 00:16:57,000 RSA bi zlomljen. 272 00:16:57,000 --> 00:17:01,000 A tudi če celo Faktorizacija dokaj počasna 273 00:17:01,000 --> 00:17:04,000 RSA algoritem lahko še nekaj pomanjkljivost v njej 274 00:17:04,000 --> 00:17:07,000 ki omogoča enostavno dešifriranje sporočil. 275 00:17:07,000 --> 00:17:10,000 Nihče še ni našel in pokazal takšno napako še, 276 00:17:10,000 --> 00:17:12,000 vendar to ne pomeni, da to ne obstaja. 277 00:17:12,000 --> 00:17:17,000 V teoriji bi lahko nekdo tam bere vse šifriranja podatkov z JAR. 278 00:17:17,000 --> 00:17:19,000 Še en malo zasebnosti izdaje. 279 00:17:19,000 --> 00:17:23,000 Če Tommy šifrira nekaj sporočilo z mojo javni ključ 280 00:17:23,000 --> 00:17:26,000 in napadalec šifrira isto sporočilo z mojo javni ključ 281 00:17:26,000 --> 00:17:29,000 napadalec bo videl, da so enaki 2 sporočil 282 00:17:29,000 --> 00:17:32,000 in tako vedeli, kaj Tommy šifrirani. 283 00:17:32,000 --> 00:17:36,000 Da bi to preprečili, so sporočila po navadi podložena z naključnimi bitov 284 00:17:36,000 --> 00:17:39,000 pred šifrirane, tako da isto sporočilo šifrirano 285 00:17:39,000 --> 00:17:44,000 večkrat bo videti drugačen, dokler oblazinjenje v sporočilu, je drugačen. 286 00:17:44,000 --> 00:17:47,000 Ampak ne pozabite, kako moramo razdeliti na kose sporočil 287 00:17:47,000 --> 00:17:50,000 tako, da vsak kos je manjši od n? 288 00:17:50,000 --> 00:17:52,000 Oblazinjenje the kose pomeni, da bomo morali razdeliti stvari 289 00:17:52,000 --> 00:17:57,000 v še bolj kose, saj mora biti oblazinjen kos biti manjše od n. 290 00:17:57,000 --> 00:18:01,000 Šifriranje in dešifriranje relativno drago z RSA, 291 00:18:01,000 --> 00:18:05,000 in tako da bi morali pustiti sporočilo na več koščkih zelo drago. 292 00:18:05,000 --> 00:18:09,000 Če je prisotna velika količina podatkov, ki mora biti šifrirana in dešifrirajo 293 00:18:09,000 --> 00:18:12,000 lahko združujejo prednosti simetričnih algoritmov ključnih 294 00:18:12,000 --> 00:18:16,000 s tistimi iz JAR, da se tako varnost in učinkovitost. 295 00:18:16,000 --> 00:18:18,000 Kljub temu, da ne bo šel v to tukaj, 296 00:18:18,000 --> 00:18:23,000 AES je simetrični ključ algoritem kot Vigenère in šifer Caesar 297 00:18:23,000 --> 00:18:25,000 ampak veliko težje crack. 298 00:18:25,000 --> 00:18:30,000 Seveda ne moremo uporabljati AES brez vzpostavitve skupnega skrivni ključ 299 00:18:30,000 --> 00:18:34,000 med 2 sistemov, in videli smo, da je problem s prej. 300 00:18:34,000 --> 00:18:40,000 Ampak zdaj lahko uporabimo RSA vzpostaviti skupni tajni ključ med 2 sistemov. 301 00:18:40,000 --> 00:18:43,000 Poklicali bomo računalnik pošlje podatke pošiljatelja 302 00:18:43,000 --> 00:18:46,000 in računalnik, ki prejme podatke sprejemnik. 303 00:18:46,000 --> 00:18:49,000 Sprejemnik ima RSA par ključev, ki ga pošlje 304 00:18:49,000 --> 00:18:51,000 javni ključ pošiljatelju. 305 00:18:51,000 --> 00:18:54,000 Pošiljatelja ustvari ključ AES, 306 00:18:54,000 --> 00:18:57,000 ga šifrira z RSA sprejemnika javni ključ, 307 00:18:57,000 --> 00:19:00,000 in pošlje ključ AES sprejemnik. 308 00:19:00,000 --> 00:19:04,000 Sprejemnik dekodira sporočilo z RSA zasebnega ključa. 309 00:19:04,000 --> 00:19:09,000 Tako je pošiljatelj, prejemnik pa ima zdaj skupno AES ključ med njimi. 310 00:19:09,000 --> 00:19:14,000 AES, kar je precej hitrejši pri šifriranje in dešifriranje kot RSA, 311 00:19:14,000 --> 00:19:18,000 se zdaj lahko uporablja za šifriranje velike količine podatkov in jih pošlje sprejemniku, 312 00:19:18,000 --> 00:19:21,000 kdo lahko dešifrira z isto tipko. 313 00:19:21,000 --> 00:19:26,000 AES, kar je precej hitrejši pri šifriranje in dešifriranje kot RSA, 314 00:19:26,000 --> 00:19:30,000 se zdaj lahko uporablja za šifriranje velike količine podatkov in jih pošlje sprejemniku, 315 00:19:30,000 --> 00:19:32,000 kdo lahko dešifrira z isto tipko. 316 00:19:32,000 --> 00:19:36,000 Pravkar smo potrebni RSA za prenos v skupni rabi tipko. 317 00:19:36,000 --> 00:19:40,000 Mi ni treba več uporabljati RSA sploh. 318 00:19:40,000 --> 00:19:46,000 Izgleda, da sem dobil sporočilo. 319 00:19:46,000 --> 00:19:49,000 Ni važno, če je kdo prebral, kaj je na papirju letala, preden sem ga ujel 320 00:19:49,000 --> 00:19:55,000 ker sem edini, ki se z zasebnim ključem. 321 00:19:55,000 --> 00:19:57,000 Naj dešifrirati vsako kose v sporočilu. 322 00:19:57,000 --> 00:20:07,000 Prvi kos, 658, dvignemo na d moči, kar je 185, 323 00:20:07,000 --> 00:20:18,000 mod n, ki je 989, ki je enak 67, 324 00:20:18,000 --> 00:20:24,000 ki je črka C v ASCII. 325 00:20:24,000 --> 00:20:31,000 Zdaj, na drugem bloku. 326 00:20:31,000 --> 00:20:35,000 Drugi Blok ima vrednost 15, 327 00:20:35,000 --> 00:20:41,000 ki smo jo dvigniti na 185. moči, 328 00:20:41,000 --> 00:20:51,000 mod 989, kar je enako 83 329 00:20:51,000 --> 00:20:57,000 ki je črka S, ki v ASCII. 330 00:20:57,000 --> 00:21:06,000 Sedaj že tretje bloku, ki ima vrednost 799, se poveča na 185, 331 00:21:06,000 --> 00:21:17,000 mod 989, kar je enako 53, 332 00:21:17,000 --> 00:21:24,000 ki je vrednost značaja 5 v ASCII. 333 00:21:24,000 --> 00:21:30,000 Zdaj za zadnji kos, ki ima vrednost 975, 334 00:21:30,000 --> 00:21:41,000 bomo dvignili na 185, 989, mod 335 00:21:41,000 --> 00:21:51,000 in to je enako 48, ki je vrednost 0 znakov v ASCII. 336 00:21:51,000 --> 00:21:57,000 Moje ime je Rob Bowden, in to je CS50. 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 RSA sploh. 339 00:22:08,000 --> 00:22:14,000 RSA sploh. [Smeh] 340 00:22:14,000 --> 00:22:17,000 Na vse.