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] [Universitatea Harvard] 3 00:00:04,000 --> 00:00:07,000 [Acest lucru este CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Să aruncăm o privire la RSA, un algoritm utilizat pe scară largă pentru criptarea datelor. 5 00:00:11,000 --> 00:00:16,000 Algoritmi de criptare, cum ar fi Cezar și cifruri Vigenere nu sunt foarte sigure. 6 00:00:16,000 --> 00:00:20,000 Cu cifru Cezar, un atacator trebuie doar să încercați 25 chei diferite 7 00:00:20,000 --> 00:00:22,000 pentru a obține textul mesajului simplu. 8 00:00:22,000 --> 00:00:25,000 În timp ce cifrul Vigenere este mai sigură decât cifrul Cezar 9 00:00:25,000 --> 00:00:28,000 din cauza spațiul de căutare mai mare pentru chei, odată ce un atacator 10 00:00:28,000 --> 00:00:30,000 stie lungimea cheie într-un cifru Vigenere, 11 00:00:30,000 --> 00:00:34,000 care poate fi determinată printr-o analiză a modelelor în textul criptat, 12 00:00:34,000 --> 00:00:38,000 cifrul Vigenere nu este atât de mult mai sigure decât cifrul Cezar. 13 00:00:38,000 --> 00:00:42,000 RSA, pe de altă parte, nu este vulnerabil la atacuri de acest gen. 14 00:00:42,000 --> 00:00:45,000 Cifrul Vigenere Cifrul Cezar și să utilizeze aceeași cheie 15 00:00:45,000 --> 00:00:47,000 atât cripta și decripta un mesaj. 16 00:00:47,000 --> 00:00:51,000 Aceasta proprietate face ca aceste cifruri simetrice algoritmi cheie. 17 00:00:51,000 --> 00:00:54,000 O problemă fundamentală cu algoritmi cu chei simetrice 18 00:00:54,000 --> 00:00:57,000 este faptul că acestea se bazează pe o criptare și trimiterea mesajului 19 00:00:57,000 --> 00:00:59,000 și cel care a primit și decriptarea mesajului 20 00:00:59,000 --> 00:01:03,000 au convenit să deja în avans pe tasta se vor folosi ambele. 21 00:01:03,000 --> 00:01:06,000 Dar avem un pic de o problemă de pornire aici. 22 00:01:06,000 --> 00:01:10,000 Cum 2 calculatoare care doresc să comunice stabili o cheie secretă între ele? 23 00:01:10,000 --> 00:01:16,000 Dacă cheia trebuie să fie secretă, atunci avem nevoie de o modalitate de a cripta și decripta cheia. 24 00:01:16,000 --> 00:01:18,000 Dacă tot ce avem este criptografia simetrică cheie 25 00:01:18,000 --> 00:01:21,000 apoi ne-am întors doar la aceeași problemă. 26 00:01:21,000 --> 00:01:25,000 RSA, pe de altă parte, folosește o pereche de chei, 27 00:01:25,000 --> 00:01:28,000 unul pentru criptare și decriptare pentru un alt. 28 00:01:28,000 --> 00:01:32,000 Unul se numește cheie publică, iar cealaltă este cheia privată. 29 00:01:32,000 --> 00:01:34,000 Cheia publică este utilizată pentru a cripta mesajele. 30 00:01:34,000 --> 00:01:38,000 Așa cum s-ar putea ghici dupa numele acestuia, putem împărtăși cheia noastră publică cu 31 00:01:38,000 --> 00:01:43,000 cineva ne-o dorim, fără a compromite securitatea unui mesaj criptat. 32 00:01:43,000 --> 00:01:45,000 Mesajele criptate folosind o cheie publică 33 00:01:45,000 --> 00:01:49,000 poate fi decriptat cu cheia sa privată corespunzătoare. 34 00:01:49,000 --> 00:01:53,000 În timp ce aveți posibilitatea să partajați cheia dvs. publică, ar trebui să păstreze întotdeauna tău secret cheia privată. 61 00:01:55,000 --> 00:01:58,000 și numai cheia privată poate fi utilizată pentru a decripta mesaje 62 00:01:58,000 --> 00:02:02,000 în cazul în care utilizatorii doresc să 2 trimite mesaje criptate cu RSA 63 00:02:02,000 --> 00:02:07,000 înainte și înapoi, atât pentru utilizatorii trebuie să aibă propriul lor pereche de public și privat cheie. 64 00:02:07,000 --> 00:02:10,000 Mesaje de la 1 la ghidul de utilizare 2 65 00:02:10,000 --> 00:02:15,000 utilizați numai 2 perechi utilizatorului cheie, și mesaje de la utilizator la utilizator 1 2 66 00:02:15,000 --> 00:02:17,000 utilizați numai pereche de chei utilizator 1 lui. 67 00:02:17,000 --> 00:02:21,000 Faptul că există 2 taste separate pentru a cripta și decripta mesaje 68 00:02:21,000 --> 00:02:24,000 RSA face un algoritm asimetric cheie. 69 00:02:24,000 --> 00:02:28,000 Nu avem nevoie pentru a cripta cheia publică, în scopul de a-l trimite la un alt calculator 70 00:02:28,000 --> 00:02:31,000 deoarece cheia este public, oricum. 71 00:02:31,000 --> 00:02:33,000 Acest lucru înseamnă că RSA nu are aceeași problemă de pornire 72 00:02:33,000 --> 00:02:36,000 ca algoritmi cu chei simetrice. 73 00:02:36,000 --> 00:02:39,000 Deci, dacă vreau să trimiteți un mesaj utilizând criptarea RSA 74 00:02:39,000 --> 00:02:42,000 la Rob, am nevoie de o cheie publică prima lui Rob. 75 00:02:42,000 --> 00:02:47,000 Pentru a genera o pereche de chei, Rob trebuie să aleagă 2 numere prime mari. 76 00:02:47,000 --> 00:02:50,000 Aceste numere vor fi utilizate în ambele taste public și privat, 77 00:02:50,000 --> 00:02:54,000 dar cheia publică va folosi numai produsul acestor 2 numere, 78 00:02:54,000 --> 00:02:56,000 nu și numerele în sine. 79 00:02:56,000 --> 00:02:59,000 După ce am criptat mesajul folosind cheia publică a lui Rob 80 00:02:59,000 --> 00:03:01,000 Eu pot trimite mesajul Rob. 81 00:03:01,000 --> 00:03:05,000 Pentru un calculator, numere de factoring este o problemă grea. 82 00:03:05,000 --> 00:03:09,000 Cheia publică, amintiți-vă, folosit produsul de 2 numere prime. 83 00:03:09,000 --> 00:03:12,000 Acest produs trebuie să aibă, apoi doar 2 factori, 84 00:03:12,000 --> 00:03:16,000 care se întâmplă să fie numerele care alcătuiesc cheia privată. 85 00:03:16,000 --> 00:03:20,000 În scopul de a decripta mesajul, RSA va folosi această cheie privată 86 00:03:20,000 --> 00:03:25,000 sau numerele de înmulțit împreună în procesul de creare a cheii publice. 87 00:03:25,000 --> 00:03:28,000 Pentru că e greu de calcul a factorului complementar, numărul 88 00:03:28,000 --> 00:03:32,000 utilizate într-o cheie publică în cele 2 numere utilizate în cheia privată 89 00:03:32,000 --> 00:03:36,000 E dificil pentru un atacator pentru a descoperi cheia privată 90 00:03:36,000 --> 00:03:39,000 care va fi necesară pentru a decripta mesajul. 91 00:03:39,000 --> 00:03:43,000 Acum hai să mergem în unele detalii de nivel inferior ale RSA. 92 00:03:43,000 --> 00:03:46,000 Să vedem mai întâi cum putem genera o pereche de chei. 93 00:03:46,000 --> 00:03:49,000 În primul rând, vom avea nevoie de 2 numere prime. 94 00:03:49,000 --> 00:03:52,000 Vom numi aceste 2 numere p și q. 95 00:03:52,000 --> 00:03:56,000 În scopul de a alege p și q, în practică ne-ar genera pseudorandomly 96 00:03:56,000 --> 00:03:59,000 numere mari și apoi utilizați un test pentru a determina dacă este sau nu 97 00:03:59,000 --> 00:04:02,000 aceste numere sunt, probabil, prim. 98 00:04:02,000 --> 00:04:05,000 Putem păstra generarea de numere aleatoare de peste si peste din nou 99 00:04:05,000 --> 00:04:08,000 până când vom avea 2 numere prime pe care le putem folosi. 100 00:04:08,000 --> 00:04:15,000 Aici sa aleg p = 23 și q = 43. 101 00:04:15,000 --> 00:04:19,000 Amintiți-vă, în practică, p și q trebuie să fie număr mult mai mare. 102 00:04:19,000 --> 00:04:22,000 În ceea ce știm, mai mare de numere, mai greu este 103 00:04:22,000 --> 00:04:25,000 pentru a sparge un mesaj criptat. 104 00:04:25,000 --> 00:04:29,000 Dar este, de asemenea, mult mai scumpe pentru a cripta și decripta mesaje. 105 00:04:29,000 --> 00:04:33,000 Astăzi este adesea recomandat ca p și q sunt de cel puțin 1024 biți, 106 00:04:33,000 --> 00:04:37,000 care pune fiecare număr de la peste 300 de cifre zecimale. 107 00:04:37,000 --> 00:04:40,000 Dar vom alege aceste numere mici, pentru acest exemplu. 108 00:04:40,000 --> 00:04:43,000 Acum ne vom multiplica p și q împreună pentru a obține un număr de 3, 109 00:04:43,000 --> 00:04:45,000 pe care o vom numi nr. 110 00:04:45,000 --> 00:04:55,000 În cazul nostru, n = 23 * 43, care = 989. 111 00:04:55,000 --> 00:04:58,000 Ne-am n = 989. 112 00:04:58,000 --> 00:05:02,000 Apoi, vom multiplica p - 1 cu q - 1 113 00:05:02,000 --> 00:05:05,000 pentru a obține un număr de 4, pe care o vom numi m. 114 00:05:05,000 --> 00:05:15,000 În cazul nostru, m = 22 * ​​42, care = 924. 115 00:05:15,000 --> 00:05:18,000 Avem m = 924. 116 00:05:18,000 --> 00:05:22,000 Acum, vom avea nevoie de un număr care e este relativ prim cu m 117 00:05:22,000 --> 00:05:25,000 și mai mică de metri. 118 00:05:25,000 --> 00:05:28,000 Două numere sunt prime între ele sau relativ prim 119 00:05:28,000 --> 00:05:33,000 în cazul în întreg numai pozitiv pe care le imparte in mod egal, atât este de 1. 120 00:05:33,000 --> 00:05:37,000 Cu alte cuvinte, cea mai mare divizor comun al e și m 121 00:05:37,000 --> 00:05:39,000 trebuie să fie 1. 122 00:05:39,000 --> 00:05:44,000 În practică, este comun pentru e să fie numar prim 65537 123 00:05:44,000 --> 00:05:48,000 atâta timp cât acest număr nu se întâmplă să fie un factor de metri. 124 00:05:48,000 --> 00:05:53,000 Pentru cheile noastre, vom alege e = 5 125 00:05:53,000 --> 00:05:57,000 din 5 este relativ prim la 924. 126 00:05:57,000 --> 00:06:01,000 În cele din urmă, vom avea nevoie de un număr mai, pe care vom numi d. 127 00:06:01,000 --> 00:06:11,000 D trebuie să fie o valoare care satisface ecuația de = 1 (mod m). 128 00:06:11,000 --> 00:06:17,000 Acest lucru semnifică m mod vom folosi ceva numit aritmetica modulara. 129 00:06:17,000 --> 00:06:21,000 În aritmetica modulara, o dată un număr devine mai mare decât unele legat de sus 130 00:06:21,000 --> 00:06:24,000 aceasta se va încadra în jurul valorii de înapoi la 0. 131 00:06:24,000 --> 00:06:27,000 Un ceas, de exemplu, folosește aritmetica modulara. 132 00:06:27,000 --> 00:06:31,000 La un minut după 1:59, de exemplu, este 2:00, 133 00:06:31,000 --> 00:06:33,000 not 1:60. 134 00:06:33,000 --> 00:06:36,000 Minutarul a înfășurat în jurul valorii de la 0 135 00:06:36,000 --> 00:06:39,000 la atingerea o limită superioară de 60. 136 00:06:39,000 --> 00:06:46,000 Deci, putem spune 60 este echivalent cu 0 (mod 60) 137 00:06:46,000 --> 00:06:57,000 și 125 este echivalent cu 65 de ani este echivalentă cu 5 (mod 60). 138 00:06:57,000 --> 00:07:02,000 Cheia noastră publică va fi perechea e și n 139 00:07:02,000 --> 00:07:09,000 în cazul în care, în acest caz, e este 5 și n este 989. 140 00:07:09,000 --> 00:07:15,000 Cheia noastră privată va fi perechea d și n, 141 00:07:15,000 --> 00:07:22,000 care, în cazul nostru este de 185 și 989. 142 00:07:22,000 --> 00:07:25,000 Observați că noastră originală prime p și q nu apar 143 00:07:25,000 --> 00:07:29,000 oriunde în cheile noastre publice sau private. 144 00:07:29,000 --> 00:07:33,000 Acum, că avem pereche de chei nostru, haideți să aruncăm o privire la modul în care putem cripta 145 00:07:33,000 --> 00:07:36,000 și decripta un mesaj. 146 00:07:36,000 --> 00:07:38,000 Vreau să trimit un mesaj la Rob, 147 00:07:38,000 --> 00:07:42,000 deci el va fi cel care va genera această pereche de chei. 148 00:07:42,000 --> 00:07:46,000 Atunci voi cere Rob pentru cheia sa publică, pe care voi folosi 149 00:07:46,000 --> 00:07:48,000 pentru a cripta un mesaj pentru a trimite la el. 150 00:07:48,000 --> 00:07:53,000 Amintiți-vă, e cu totul bine pentru Rob pentru a permite accesul cheia sa publica cu mine. 151 00:07:53,000 --> 00:07:56,000 Dar nu ar fi bine să împărtășească cheia sa privată. 152 00:07:56,000 --> 00:08:00,000 Eu nu am nici o idee despre ceea ce cheia sa privată este. 153 00:08:00,000 --> 00:08:03,000 Ne putem rupe m mesajul nostru în sus, în bucăți mai multe 154 00:08:03,000 --> 00:08:07,000 toate mai mici decât n și apoi cripta fiecare dintre aceste bucăți. 155 00:08:07,000 --> 00:08:12,000 Vom cripta CS50 șir, pe care ne putem rupe în sus, în 4 bucăți, 156 00:08:12,000 --> 00:08:14,000 unul pentru fiecare literă. 157 00:08:14,000 --> 00:08:17,000 În scopul de a cripta mesajul meu, am avea nevoie să-l transforme în 158 00:08:17,000 --> 00:08:20,000 un fel de reprezentare numerică. 159 00:08:20,000 --> 00:08:25,000 Să concatena valorile ASCII cu caracterele din mesajul meu. 160 00:08:25,000 --> 00:08:28,000 În scopul de a cripta un mesaj m dat 161 00:08:28,000 --> 00:08:37,000 Am nevoie pentru a calcula c = m de la e (mod n). 162 00:08:37,000 --> 00:08:40,000 Dar m trebuie să fie mai mic decât n, 163 00:08:40,000 --> 00:08:45,000 sau altceva mesajul complet nu poate fi exprimat modulo n. 164 00:08:45,000 --> 00:08:49,000 Ne putem rupe m în sus, în bucăți mai multe, toate din care sunt mai mici decât n, 165 00:08:49,000 --> 00:08:52,000 și cripta fiecare dintre aceste bucăți. 166 00:08:52,000 --> 00:09:03,000 Criptarea fiecare din aceste bucăți, se obține C1 = 67 la 5 (mod 989) 167 00:09:03,000 --> 00:09:06,000 care = 658. 168 00:09:06,000 --> 00:09:15,000 Pentru bucată a doua noastră, avem 83 la 5 (mod 989) 169 00:09:15,000 --> 00:09:18,000 care = 15. 170 00:09:18,000 --> 00:09:26,000 Pentru a treia bucată avem 53 la 5 (mod 989) 171 00:09:26,000 --> 00:09:30,000 care = 799. 172 00:09:30,000 --> 00:09:39,000 Și, în sfârșit, pentru bucata ultima noastră avem 48 la 5 (mod 989) 173 00:09:39,000 --> 00:09:43,000 care = 975. 174 00:09:43,000 --> 00:09:48,000 Acum putem trimite peste aceste valori criptate cu Rob. 175 00:09:54,000 --> 00:09:58,000 Aici te duci, Rob. 176 00:09:58,000 --> 00:10:01,000 În timp ce mesajul nostru este în zbor, să aruncăm o privire 177 00:10:01,000 --> 00:10:07,000 la modul în care am ajuns ca valoarea pentru d. 178 00:10:07,000 --> 00:10:17,000 Noastră numărul d necesară pentru a satisface 5d = 1 (mod 924). 179 00:10:17,000 --> 00:10:24,000 Acest lucru face ca d inversul multiplicativ de 5 modulo 924. 180 00:10:24,000 --> 00:10:28,000 Având în vedere 2 numere intregi, A și B, algoritmul euclidian extins 181 00:10:28,000 --> 00:10:33,000 poate fi folosit pentru a găsi cea mai mare divizor comun al acestor 2 numere întregi. 182 00:10:33,000 --> 00:10:37,000 Acesta va oferi, de asemenea, ne 2 numere, alte x și y, 183 00:10:37,000 --> 00:10:47,000 care satisfac ecuația ax + by = cea mai mare divizor comun a a și b. 184 00:10:47,000 --> 00:10:49,000 Cum acest lucru ne va ajuta? 185 00:10:49,000 --> 00:10:52,000 Ei bine, conectarea la e = 5 pentru un 186 00:10:52,000 --> 00:10:56,000 și m = 924 pentru b 187 00:10:56,000 --> 00:10:59,000 știm deja că aceste numere sunt prime între ele. 188 00:10:59,000 --> 00:11:03,000 Lor mai mare divizor comun este 1. 189 00:11:03,000 --> 00:11:09,000 Acest lucru ne dă 5x + 924y = 1 190 00:11:09,000 --> 00:11:17,000 sau 5x = 1 - 924y. 191 00:11:17,000 --> 00:11:22,000 Dar, dacă ne pasă doar despre tot modulo 924 192 00:11:22,000 --> 00:11:25,000 atunci putem picătură - 924y. 193 00:11:25,000 --> 00:11:27,000 Gandeste-te la ceas. 194 00:11:27,000 --> 00:11:31,000 Dacă minutarul este pe 1 și apoi exact 10 Orele trec, 195 00:11:31,000 --> 00:11:35,000 știm minutarul va fi în continuare de la 1. 196 00:11:35,000 --> 00:11:39,000 Aici, vom începe de la 1 și apoi înfășurați în jurul valorii de ori exact y, 197 00:11:39,000 --> 00:11:41,000 deci vom fi în continuare la 1. 198 00:11:41,000 --> 00:11:49,000 Avem 5x = 1 (mod 924). 199 00:11:49,000 --> 00:11:55,000 Și aici, în această x este aceeași ca și d am fost cautati înainte, 200 00:11:55,000 --> 00:11:58,000 așa că, dacă vom folosi algoritmul extins euclidiene 201 00:11:58,000 --> 00:12:04,000 pentru a obține acest număr de x, care e numărul de noi ar trebui să utilizeze ca d nostru. 202 00:12:04,000 --> 00:12:07,000 Acum, haideți să ruleze algoritmul euclidian extins pentru un termen de 5 = 203 00:12:07,000 --> 00:12:11,000 și b = 924. 204 00:12:11,000 --> 00:12:14,000 Vom folosi o metoda numita metoda de masa. 205 00:12:14,000 --> 00:12:21,000 Masa noastră va avea 4 coloane, x, y, d, și k. 206 00:12:21,000 --> 00:12:23,000 Masa noastră începe cu 2 rânduri. 207 00:12:23,000 --> 00:12:28,000 În primul rând, avem 1, 0, atunci valoarea noastră de a, care este de 5, 208 00:12:28,000 --> 00:12:37,000 și rândul al doilea este 0, 1, și valoarea noastră pentru b, care este 924. 209 00:12:37,000 --> 00:12:40,000 Valoarea coloanei 4, K, va fi rezultatul 210 00:12:40,000 --> 00:12:45,000 din împărțirea valorii d în rândul de mai sus, cu o valoare de d 211 00:12:45,000 --> 00:12:49,000 pe același rând. 212 00:12:49,000 --> 00:12:56,000 Avem 5 împărțit la 924 este 0, cu unele restul. 213 00:12:56,000 --> 00:12:59,000 Asta înseamnă că avem k = 0. 214 00:12:59,000 --> 00:13:05,000 Acum, valoarea fiecarei celule altele, vor fi valoarea celulei de 2 rânduri de mai sus, 215 00:13:05,000 --> 00:13:09,000 minus valoarea rândului de mai sus, ori k. 216 00:13:09,000 --> 00:13:11,000 Să începem cu d în rândul treia. 217 00:13:11,000 --> 00:13:19,000 Avem 5 - 924 * 0 = 5. 218 00:13:19,000 --> 00:13:25,000 Apoi, avem 0 - 1 * 0, care este 0 219 00:13:25,000 --> 00:13:30,000 și 1 - 0 * 0, care este de 1. 220 00:13:30,000 --> 00:13:33,000 Nu prea rău, așa că hai să trecem la rândul următor. 221 00:13:33,000 --> 00:13:36,000 În primul rând avem nevoie de valoarea noastra de k. 222 00:13:36,000 --> 00:13:43,000 924 împărțit la 5 = 184 cu unele rest, 223 00:13:43,000 --> 00:13:46,000 astfel încât valoarea noastră pentru k este 184. 224 00:13:46,000 --> 00:13:54,000 Acum 924 - 5 * 184 = 4. 225 00:13:54,000 --> 00:14:05,000 1 - 0 * 184 este de 1 și 0 - 1 * 184 este -184. 226 00:14:05,000 --> 00:14:07,000 În regulă, hai să facem rândul următor. 227 00:14:07,000 --> 00:14:10,000 Valoarea noastră de k va fi 1 deoarece 228 00:14:10,000 --> 00:14:15,000 5 împărțit la 4 = 1 cu unele restul. 229 00:14:15,000 --> 00:14:17,000 Să completați în celelalte coloane. 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 Și 1 la 184 * 1 este de 185. 233 00:14:33,000 --> 00:14:35,000 Să vedem ce valoare a lui k următoarea noastră ar fi. 234 00:14:35,000 --> 00:14:40,000 Ei bine, se pare ca avem 4, împărțită cu 1, care este de 4. 235 00:14:40,000 --> 00:14:43,000 În acest caz, în cazul în care suntem împărțirea la 1, astfel încât k este egal cu 236 00:14:43,000 --> 00:14:50,000 valoarea d în rândul de mai sus înseamnă că am terminat cu algoritmul nostru. 237 00:14:50,000 --> 00:14:58,000 Putem vedea aici că avem x = 185 si y = -1 în ultimul rând. 238 00:14:58,000 --> 00:15:00,000 Să vină acum la scopul nostru inițial. 239 00:15:00,000 --> 00:15:04,000 Am spus că valoarea lui x, ca urmare a executării acestui algoritm 240 00:15:04,000 --> 00:15:08,000 ar fi inversul multiplicativ de (mod b). 241 00:15:08,000 --> 00:15:15,000 Asta înseamnă că 185 este inversul multiplicativ de 5 (mod 924) 242 00:15:15,000 --> 00:15:20,000 ceea ce înseamnă că avem o valoare de 185 pentru d. 243 00:15:20,000 --> 00:15:23,000 Faptul că d = 1 în ultimul rând 244 00:15:23,000 --> 00:15:26,000 verifică faptul că e la m a fost prime între ele. 245 00:15:26,000 --> 00:15:30,000 În cazul în care nu au fost cu 1, atunci am avea de a alege un nou e. 246 00:15:30,000 --> 00:15:33,000 Acum, să vedem dacă Rob a primit mesajul meu. 247 00:15:33,000 --> 00:15:35,000 Atunci când cineva trimite-mi un mesaj criptat 248 00:15:35,000 --> 00:15:38,000 atâta timp cât am păstrat cheia privată un secret 249 00:15:38,000 --> 00:15:41,000 Eu sunt singurul care poate decripta mesajul. 250 00:15:41,000 --> 00:15:46,000 Pentru a decripta o bucată c pot calcula mesajul original 251 00:15:46,000 --> 00:15:53,000 este egal cu bucată la putere d (mod n). 252 00:15:53,000 --> 00:15:57,000 Amintiți-vă că d și n sunt de la cheia mea privată. 253 00:15:57,000 --> 00:16:01,000 Pentru a obține un mesaj plin de bucăți de ei ne decripta fiecare bucată 254 00:16:01,000 --> 00:16:04,000 și înlănțui rezultatele. 255 00:16:04,000 --> 00:16:08,000 Exact cum sigur este RSA? 256 00:16:08,000 --> 00:16:10,000 Adevărul este, nu știm. 257 00:16:10,000 --> 00:16:14,000 Securitatea se bazează pe cât de mult va dura un atacator pentru a sparge un mesaj 258 00:16:14,000 --> 00:16:16,000 criptate cu RSA. 259 00:16:16,000 --> 00:16:19,000 Amintiți-vă că un atacator are acces la cheia dvs. publică, 260 00:16:19,000 --> 00:16:21,000 care conține atât e și n. 261 00:16:21,000 --> 00:16:26,000 În cazul în care atacatorul reușește să factor N în cele 2 prime, p și q, 262 00:16:26,000 --> 00:16:30,000 atunci ea ar putea calcula cu ajutorul d algoritmul extins euclidian. 263 00:16:30,000 --> 00:16:35,000 Acest lucru îi dă cheia privată, care poate fi folosit pentru a decripta orice mesaj. 264 00:16:35,000 --> 00:16:38,000 Dar cât de repede putem factoriza numere întregi? 265 00:16:38,000 --> 00:16:41,000 Din nou, nu știm. 266 00:16:41,000 --> 00:16:43,000 Nimeni nu și-a găsit o modalitate rapidă de a face aceasta, 267 00:16:43,000 --> 00:16:46,000 ceea ce înseamnă că, având suficient de mare n 268 00:16:46,000 --> 00:16:49,000 ar fi nevoie de un atacator nerealist de timp 269 00:16:49,000 --> 00:16:51,000 să țină numărul. 270 00:16:51,000 --> 00:16:54,000 Dacă cineva a relevat o modalitate rapidă de numere întregi de factoring 271 00:16:54,000 --> 00:16:57,000 RSA-ar fi rupt. 272 00:16:57,000 --> 00:17:01,000 Dar, chiar dacă factorizare întreg este în mod inerent lentă 273 00:17:01,000 --> 00:17:04,000 Algoritmul RSA ar putea avea încă unele defect în ea 274 00:17:04,000 --> 00:17:07,000 care permite decriptarea pentru ușoară a mesajelor. 275 00:17:07,000 --> 00:17:10,000 Nimeni nu a găsit și a descoperit un astfel de defect încă, 276 00:17:10,000 --> 00:17:12,000 dar asta nu înseamnă că nu există. 277 00:17:12,000 --> 00:17:17,000 În teorie, cineva ar putea fi acolo citind toate datele criptate cu RSA. 278 00:17:17,000 --> 00:17:19,000 Există un alt pic de o problemă de confidențialitate. 279 00:17:19,000 --> 00:17:23,000 În cazul în care unele Tommy criptează mesaj utilizând cheia mea publică 280 00:17:23,000 --> 00:17:26,000 și un atacator criptează același mesaj folosind cheia mea publică 281 00:17:26,000 --> 00:17:29,000 atacatorul va vedea că cele 2 mesaje sunt identice 282 00:17:29,000 --> 00:17:32,000 și știu, astfel, ceea ce Tommy criptat. 283 00:17:32,000 --> 00:17:36,000 În scopul de a preveni acest lucru, mesajele sunt de obicei căptușite cu biți aleatorii 284 00:17:36,000 --> 00:17:39,000 înainte de a fi criptat, astfel încât același mesaj criptat 285 00:17:39,000 --> 00:17:44,000 de mai multe ori va arăta diferit atâta timp cât padding pe mesajul este diferit. 286 00:17:44,000 --> 00:17:47,000 Dar amintiți-vă cum trebuie să împartă mesaje în bucăți 287 00:17:47,000 --> 00:17:50,000 astfel încât fiecare bucată este mai mic decât n? 288 00:17:50,000 --> 00:17:52,000 Padding bucatile înseamnă că am putea avea de a împărți lucrurile 289 00:17:52,000 --> 00:17:57,000 în bucăți și mai multe de la bucată căptușit trebuie să fie mai mic decât n. 290 00:17:57,000 --> 00:18:01,000 Criptarea și decriptarea sunt relativ scumpe cu RSA, 291 00:18:01,000 --> 00:18:05,000 și astfel au nevoie pentru a rupe în bucăți un mesaj in mai multe pot fi foarte costisitoare. 292 00:18:05,000 --> 00:18:09,000 În cazul în care un volum mare de date trebuie să fie criptate și decriptate 293 00:18:09,000 --> 00:18:12,000 putem combina beneficiile algoritmi cu chei simetrice 294 00:18:12,000 --> 00:18:16,000 cu cele ale RSA pentru a obține atât securitatea și eficiența. 295 00:18:16,000 --> 00:18:18,000 Deși nu vom intra în ea aici, 296 00:18:18,000 --> 00:18:23,000 AES este un algoritm simetric cheie cum ar fi Vigenere și cifruri Cezar 297 00:18:23,000 --> 00:18:25,000 dar mult mai greu de spart. 298 00:18:25,000 --> 00:18:30,000 Desigur, nu putem folosi AES, fără a stabili o cheie partajată secretă 299 00:18:30,000 --> 00:18:34,000 între cele 2 sisteme, și am văzut problema cu asta înainte. 300 00:18:34,000 --> 00:18:40,000 Dar acum putem folosi RSA pentru a stabili cheia secretă partajată între cele 2 sisteme. 301 00:18:40,000 --> 00:18:43,000 Vom suna la calculatorul care trimite datele expeditorului 302 00:18:43,000 --> 00:18:46,000 și computerul care primește datele receptorului. 303 00:18:46,000 --> 00:18:49,000 Receptorul are o pereche de chei RSA și trimite 304 00:18:49,000 --> 00:18:51,000 cheia publică a expeditorului. 305 00:18:51,000 --> 00:18:54,000 Expeditorul generează o cheie AES, 306 00:18:54,000 --> 00:18:57,000 criptează cu cheia publică a receptorului RSA, 307 00:18:57,000 --> 00:19:00,000 și trimite cheia AES la receptor. 308 00:19:00,000 --> 00:19:04,000 Receptorul decriptează mesajul cu cheia privată RSA său. 309 00:19:04,000 --> 00:19:09,000 Atât expeditor și destinatar au acum o comună cheie AES între ele. 310 00:19:09,000 --> 00:19:14,000 AES, care este mult mai rapid la criptare și decriptare decât RSA, 311 00:19:14,000 --> 00:19:18,000 poate fi acum folosit pentru a cripta volume mari de date și le trimite la receptor, 312 00:19:18,000 --> 00:19:21,000 care poate decripta folosind aceeași cheie. 313 00:19:21,000 --> 00:19:26,000 AES, care este mult mai rapid la criptare și decriptare decât RSA, 314 00:19:26,000 --> 00:19:30,000 poate fi acum folosit pentru a cripta volume mari de date și le trimite la receptor, 315 00:19:30,000 --> 00:19:32,000 care poate decripta folosind aceeași cheie. 316 00:19:32,000 --> 00:19:36,000 Am avut nevoie de doar RSA pentru a transfera cheie partajată. 317 00:19:36,000 --> 00:19:40,000 Nu mai avem nevoie de a utiliza RSA deloc. 318 00:19:40,000 --> 00:19:46,000 Se pare ca am primit un mesaj. 319 00:19:46,000 --> 00:19:49,000 Nu contează dacă cineva citește ceea ce este pe hârtie înainte de avion l-am prins 320 00:19:49,000 --> 00:19:55,000 pentru că eu sunt singurul cu cheia privată. 321 00:19:55,000 --> 00:19:57,000 Să decripta fiecare dintre bucăți în mesaj. 322 00:19:57,000 --> 00:20:07,000 Bucată în primul rând, 658, vom ridica la putere d, care este de 185, 323 00:20:07,000 --> 00:20:18,000 mod n, care este 989, este egală cu 67, 324 00:20:18,000 --> 00:20:24,000 care este litera C în ASCII. 325 00:20:24,000 --> 00:20:31,000 Acum, pe bucată secunde. 326 00:20:31,000 --> 00:20:35,000 Bucată doilea are valoarea de 15, 327 00:20:35,000 --> 00:20:41,000 care ne ridica la putere 185th, 328 00:20:41,000 --> 00:20:51,000 Mod 989, iar acest lucru este egal cu 83 329 00:20:51,000 --> 00:20:57,000 care este litera S în ASCII. 330 00:20:57,000 --> 00:21:06,000 Acum, pentru bucată treia, care are o valoare 799, ne ridica la 185, 331 00:21:06,000 --> 00:21:17,000 Mod 989, iar acest lucru este egal cu 53, 332 00:21:17,000 --> 00:21:24,000 care este valoarea caracterului 5 în ASCII. 333 00:21:24,000 --> 00:21:30,000 Acum, pentru ultima bucată, care are o valoare 975, 334 00:21:30,000 --> 00:21:41,000 ne ridica la 185, Mod 989, 335 00:21:41,000 --> 00:21:51,000 și acest lucru este egal cu 48, care este valoarea 0 caractere în ASCII. 336 00:21:51,000 --> 00:21:57,000 Numele meu este Rob Bowden, iar acest lucru este CS50. 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 RSA, la toate. 339 00:22:08,000 --> 00:22:14,000 RSA, la toate. [Râsete] 340 00:22:14,000 --> 00:22:17,000 La toate.