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 [Ini adalah CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Mari kita lihat RSA, algoritma banyak digunakan untuk mengenkripsi data. 5 00:00:11,000 --> 00:00:16,000 Algoritma enkripsi seperti Caesar dan cipher Vigenère tidak sangat aman. 6 00:00:16,000 --> 00:00:20,000 Dengan cipher Caesar, penyerang hanya perlu untuk mencoba 25 kunci yang berbeda 7 00:00:20,000 --> 00:00:22,000 untuk mendapatkan teks biasa pesan. 8 00:00:22,000 --> 00:00:25,000 Sementara cipher Vigenère lebih aman daripada cipher Caesar 9 00:00:25,000 --> 00:00:28,000 karena ruang pencarian yang lebih besar untuk kunci, setelah penyerang 10 00:00:28,000 --> 00:00:30,000 mengetahui panjang kunci dalam cipher Vigenère, 11 00:00:30,000 --> 00:00:34,000 yang dapat ditentukan melalui analisis pola dalam teks terenkripsi, 12 00:00:34,000 --> 00:00:38,000 cipher Vigenère tidak yang jauh lebih aman dibandingkan dengan cipher Caesar. 13 00:00:38,000 --> 00:00:42,000 RSA, di sisi lain, tidak rentan terhadap serangan seperti ini. 14 00:00:42,000 --> 00:00:45,000 Cipher Caesar dan Vigenère cipher menggunakan kunci yang sama 15 00:00:45,000 --> 00:00:47,000 untuk kedua mengenkripsi dan mendekripsi pesan. 16 00:00:47,000 --> 00:00:51,000 Properti ini membuat algoritma ini cipher kunci simetris. 17 00:00:51,000 --> 00:00:54,000 Masalah mendasar dengan algoritma kunci simetrik 18 00:00:54,000 --> 00:00:57,000 adalah bahwa mereka bergantung pada satu enkripsi dan mengirim pesan 19 00:00:57,000 --> 00:00:59,000 dan satu yang menerima dan mendekripsi pesan 20 00:00:59,000 --> 00:01:03,000 untuk telah disepakati sebelumnya pada tombol mereka akan sama-sama menggunakan. 21 00:01:03,000 --> 00:01:06,000 Tapi kami memiliki sedikit masalah startup di sini. 22 00:01:06,000 --> 00:01:10,000 Bagaimana 2 komputer yang ingin berkomunikasi membangun kunci rahasia antara mereka? 23 00:01:10,000 --> 00:01:16,000 Jika kunci harus rahasia, maka kita perlu cara untuk mengenkripsi dan mendekripsi kunci. 24 00:01:16,000 --> 00:01:18,000 Jika semua yang kita miliki adalah kriptografi kunci simetrik 25 00:01:18,000 --> 00:01:21,000 maka kita baru saja kembali ke masalah yang sama. 26 00:01:21,000 --> 00:01:25,000 RSA, di sisi lain, menggunakan sepasang kunci, 27 00:01:25,000 --> 00:01:28,000 satu untuk enkripsi dan satu lagi untuk dekripsi. 28 00:01:28,000 --> 00:01:32,000 Salah satu disebut kunci publik, dan yang lainnya adalah kunci pribadi. 29 00:01:32,000 --> 00:01:34,000 Kunci publik digunakan untuk mengenkripsi pesan. 30 00:01:34,000 --> 00:01:38,000 Seperti yang Anda duga dengan namanya, kita bisa berbagi kunci publik kami dengan 31 00:01:38,000 --> 00:01:43,000 siapa pun yang kita inginkan tanpa mengorbankan keamanan pesan terenkripsi. 32 00:01:43,000 --> 00:01:45,000 Pesan dienkripsi menggunakan kunci publik 33 00:01:45,000 --> 00:01:49,000 hanya dapat didekripsi dengan kunci pribadi yang sesuai. 34 00:01:49,000 --> 00:01:53,000 Meskipun Anda dapat berbagi kunci publik Anda, Anda harus selalu menjaga rahasia kunci pribadi Anda. 61 00:01:55,000 --> 00:01:58,000 dan hanya kunci pribadi dapat digunakan untuk mendekripsi pesan 62 00:01:58,000 --> 00:02:02,000 jika 2 pengguna ingin mengirim pesan dienkripsi dengan RSA 63 00:02:02,000 --> 00:02:07,000 bolak-balik kedua pengguna harus memiliki pasangan sendiri utama mereka publik dan swasta. 64 00:02:07,000 --> 00:02:10,000 Pesan dari pengguna ke pengguna 1 2 65 00:02:10,000 --> 00:02:15,000 hanya menggunakan pasangan kunci pengguna 2, dan pesan dari pengguna ke pengguna 2 1 66 00:02:15,000 --> 00:02:17,000 hanya menggunakan pasangan kunci pengguna 1 itu. 67 00:02:17,000 --> 00:02:21,000 Fakta bahwa ada 2 tombol terpisah untuk mengenkripsi dan mendekripsi pesan 68 00:02:21,000 --> 00:02:24,000 membuat RSA algoritma kunci asimetrik. 69 00:02:24,000 --> 00:02:28,000 Kita tidak perlu untuk mengenkripsi kunci publik untuk mengirimkannya ke komputer lain 70 00:02:28,000 --> 00:02:31,000 karena kuncinya adalah masyarakat pula. 71 00:02:31,000 --> 00:02:33,000 Ini berarti bahwa RSA tidak memiliki masalah startup yang sama 72 00:02:33,000 --> 00:02:36,000 sebagai algoritma kunci simetrik. 73 00:02:36,000 --> 00:02:39,000 Jadi jika saya ingin mengirim pesan menggunakan enkripsi RSA 74 00:02:39,000 --> 00:02:42,000 untuk Rob, saya pertama kali akan membutuhkan kunci publik Rob. 75 00:02:42,000 --> 00:02:47,000 Untuk menghasilkan sepasang kunci, Rob perlu memilih 2 bilangan prima besar. 76 00:02:47,000 --> 00:02:50,000 Angka-angka ini akan digunakan dalam kedua kunci publik dan swasta, 77 00:02:50,000 --> 00:02:54,000 namun kunci publik hanya akan menggunakan produk ini 2 angka, 78 00:02:54,000 --> 00:02:56,000 bukan nomor sendiri. 79 00:02:56,000 --> 00:02:59,000 Setelah saya sudah dienkripsi pesan menggunakan kunci publik Rob 80 00:02:59,000 --> 00:03:01,000 Saya dapat mengirim pesan ke Rob. 81 00:03:01,000 --> 00:03:05,000 Untuk komputer, nomor anjak piutang merupakan masalah yang sulit. 82 00:03:05,000 --> 00:03:09,000 Kunci publik, ingat, menggunakan produk dari 2 bilangan prima. 83 00:03:09,000 --> 00:03:12,000 Produk ini kemudian harus hanya memiliki 2 faktor, 84 00:03:12,000 --> 00:03:16,000 yang kebetulan menjadi angka yang membentuk kunci pribadi. 85 00:03:16,000 --> 00:03:20,000 Dalam rangka untuk mendekripsi pesan, RSA akan menggunakan kunci pribadi 86 00:03:20,000 --> 00:03:25,000 atau nomor dikalikan bersama-sama dalam proses menciptakan kunci publik. 87 00:03:25,000 --> 00:03:28,000 Karena itu komputasi sulit untuk faktor nomor 88 00:03:28,000 --> 00:03:32,000 digunakan dalam kunci publik ke 2 nomor yang digunakan dalam kunci pribadi 89 00:03:32,000 --> 00:03:36,000 sulit bagi penyerang untuk mengetahui kunci pribadi 90 00:03:36,000 --> 00:03:39,000 yang akan diperlukan untuk mendekripsi pesan. 91 00:03:39,000 --> 00:03:43,000 Sekarang mari kita pergi ke beberapa rincian tingkat yang lebih rendah dari RSA. 92 00:03:43,000 --> 00:03:46,000 Mari kita pertama melihat bagaimana kita bisa menghasilkan sepasang kunci. 93 00:03:46,000 --> 00:03:49,000 Pertama, kita akan membutuhkan 2 bilangan prima. 94 00:03:49,000 --> 00:03:52,000 Kita akan menyebutnya 2 nomor p dan q. 95 00:03:52,000 --> 00:03:56,000 Dalam rangka untuk memilih p dan q, dalam prakteknya kita pseudorandomly akan menghasilkan 96 00:03:56,000 --> 00:03:59,000 jumlah besar dan kemudian menggunakan tes untuk menentukan apakah atau tidak 97 00:03:59,000 --> 00:04:02,000 angka-angka mungkin prima. 98 00:04:02,000 --> 00:04:05,000 Kita bisa terus menghasilkan angka acak berulang-ulang 99 00:04:05,000 --> 00:04:08,000 sampai kita memiliki 2 bilangan prima yang dapat kita gunakan. 100 00:04:08,000 --> 00:04:15,000 Berikut mari kita memilih p = 23 dan q = 43. 101 00:04:15,000 --> 00:04:19,000 Ingat, dalam prakteknya, p dan q harus nomor jauh lebih besar. 102 00:04:19,000 --> 00:04:22,000 Sejauh yang kami ketahui, semakin besar angka, semakin sulit 103 00:04:22,000 --> 00:04:25,000 untuk memecahkan pesan terenkripsi. 104 00:04:25,000 --> 00:04:29,000 Tapi itu juga lebih mahal untuk mengenkripsi dan mendekripsi pesan. 105 00:04:29,000 --> 00:04:33,000 Hari itu sering direkomendasikan bahwa p dan q adalah minimal 1024 bit, 106 00:04:33,000 --> 00:04:37,000 yang menempatkan setiap angka di lebih dari 300 digit desimal. 107 00:04:37,000 --> 00:04:40,000 Tapi kita akan memilih angka-angka kecil untuk contoh ini. 108 00:04:40,000 --> 00:04:43,000 Sekarang kita akan kalikan p dan q bersama-sama untuk mendapatkan nomor 3, 109 00:04:43,000 --> 00:04:45,000 yang akan kita sebut n. 110 00:04:45,000 --> 00:04:55,000 Dalam kasus kami, n = 23 * 43, yang = 989. 111 00:04:55,000 --> 00:04:58,000 Kami memiliki n = 989. 112 00:04:58,000 --> 00:05:02,000 Selanjutnya kita akan kalikan p - 1 dengan q - 1 113 00:05:02,000 --> 00:05:05,000 untuk memperoleh nomor 4, yang akan kita sebut m. 114 00:05:05,000 --> 00:05:15,000 Dalam kasus kami, m = 22 * ​​42, yang = 924. 115 00:05:15,000 --> 00:05:18,000 Kami memiliki m = 924. 116 00:05:18,000 --> 00:05:22,000 Sekarang kita akan membutuhkan e angka yang relatif prima terhadap m 117 00:05:22,000 --> 00:05:25,000 dan kurang dari m. 118 00:05:25,000 --> 00:05:28,000 Dua angka yang relatif prima atau coprime 119 00:05:28,000 --> 00:05:33,000 jika bilangan bulat hanya positif yang membagi mereka berdua merata adalah 1. 120 00:05:33,000 --> 00:05:37,000 Dengan kata lain, pembagi umum terbesar dari e dan m 121 00:05:37,000 --> 00:05:39,000 harus 1. 122 00:05:39,000 --> 00:05:44,000 Dalam prakteknya, itu umum untuk e menjadi bilangan prima 65.537 123 00:05:44,000 --> 00:05:48,000 asalkan jumlah ini tidak terjadi menjadi faktor m. 124 00:05:48,000 --> 00:05:53,000 Untuk kunci kami, kami akan memilih e = 5 125 00:05:53,000 --> 00:05:57,000 sejak 5 relatif prima terhadap 924. 126 00:05:57,000 --> 00:06:01,000 Akhirnya, kita perlu satu lagi nomor, yang akan kita sebut d. 127 00:06:01,000 --> 00:06:11,000 D harus ada nilai yang memenuhi persamaan de = 1 (mod m). 128 00:06:11,000 --> 00:06:17,000 Ini m mod menandakan kita akan menggunakan sesuatu yang disebut aritmatika modular. 129 00:06:17,000 --> 00:06:21,000 Dalam aritmatika modular, setelah mendapat nomor lebih tinggi daripada beberapa batas atas 130 00:06:21,000 --> 00:06:24,000 itu akan membungkus kembali sekitar ke 0. 131 00:06:24,000 --> 00:06:27,000 Sebuah jam, misalnya, menggunakan aritmatika modular. 132 00:06:27,000 --> 00:06:31,000 Satu menit setelah 01:59, misalnya, adalah 2:00, 133 00:06:31,000 --> 00:06:33,000 tidak 1:60. 134 00:06:33,000 --> 00:06:36,000 Jarum menit telah melilit ke 0 135 00:06:36,000 --> 00:06:39,000 setelah mencapai batas atas 60. 136 00:06:39,000 --> 00:06:46,000 Jadi, kita dapat mengatakan 60 adalah setara dengan 0 (mod 60) 137 00:06:46,000 --> 00:06:57,000 dan 125 adalah setara dengan 65 adalah setara dengan 5 (mod 60). 138 00:06:57,000 --> 00:07:02,000 Kunci publik kami akan menjadi pasangan e dan n 139 00:07:02,000 --> 00:07:09,000 di mana dalam hal ini e adalah 5 dan n adalah 989. 140 00:07:09,000 --> 00:07:15,000 Kunci pribadi kita akan menjadi pasangan d dan n, 141 00:07:15,000 --> 00:07:22,000 yang dalam kasus kita adalah 185 dan 989. 142 00:07:22,000 --> 00:07:25,000 Perhatikan bahwa kami asli bilangan prima p dan q tidak muncul 143 00:07:25,000 --> 00:07:29,000 di mana saja di kunci kami privat atau publik. 144 00:07:29,000 --> 00:07:33,000 Sekarang bahwa kita memiliki sepasang kunci kami, mari kita lihat bagaimana kita dapat mengenkripsi 145 00:07:33,000 --> 00:07:36,000 dan mendekripsi pesan. 146 00:07:36,000 --> 00:07:38,000 Saya ingin mengirim pesan kepada Rob, 147 00:07:38,000 --> 00:07:42,000 sehingga ia akan menjadi satu untuk menghasilkan sepasang kunci. 148 00:07:42,000 --> 00:07:46,000 Lalu aku akan meminta Rob untuk kunci publik, yang saya akan menggunakan 149 00:07:46,000 --> 00:07:48,000 untuk mengenkripsi pesan untuk mengirim kepadanya. 150 00:07:48,000 --> 00:07:53,000 Ingat, itu benar-benar oke untuk Rob berbagi kunci publik dengan saya. 151 00:07:53,000 --> 00:07:56,000 Tapi itu tidak akan baik-baik saja untuk berbagi kunci pribadinya. 152 00:07:56,000 --> 00:08:00,000 Saya tidak tahu apa kunci pribadinya adalah. 153 00:08:00,000 --> 00:08:03,000 Kita dapat mematahkan m pesan kita menjadi beberapa potongan 154 00:08:03,000 --> 00:08:07,000 semua lebih kecil dari n dan kemudian mengenkripsi masing-masing potongan. 155 00:08:07,000 --> 00:08:12,000 Kami akan mengenkripsi CS50 string, yang kita dapat memecah menjadi 4 potongan, 156 00:08:12,000 --> 00:08:14,000 satu per surat. 157 00:08:14,000 --> 00:08:17,000 Dalam rangka untuk mengenkripsi pesan saya, saya harus mengubahnya menjadi 158 00:08:17,000 --> 00:08:20,000 semacam representasi numerik. 159 00:08:20,000 --> 00:08:25,000 Mari kita menggabungkan nilai-nilai ASCII dengan karakter dalam pesan saya. 160 00:08:25,000 --> 00:08:28,000 Dalam rangka untuk mengenkripsi pesan yang diberikan m 161 00:08:28,000 --> 00:08:37,000 Saya harus menghitung c = m ke e (mod n). 162 00:08:37,000 --> 00:08:40,000 Tapi m harus lebih kecil dari n, 163 00:08:40,000 --> 00:08:45,000 atau pesan penuh tidak dapat dinyatakan modulo n. 164 00:08:45,000 --> 00:08:49,000 Kita dapat mematahkan m menjadi beberapa potongan, yang semuanya lebih kecil dari n, 165 00:08:49,000 --> 00:08:52,000 dan mengenkripsi masing-masing potongan. 166 00:08:52,000 --> 00:09:03,000 Enkripsi masing-masing potongan, kita mendapatkan c1 = 67 ke 5 (mod 989) 167 00:09:03,000 --> 00:09:06,000 yang = 658. 168 00:09:06,000 --> 00:09:15,000 Untuk potongan kedua kami memiliki 83 ke 5 (mod 989) 169 00:09:15,000 --> 00:09:18,000 yang = 15. 170 00:09:18,000 --> 00:09:26,000 Untuk potongan ketiga kami memiliki 53 ke 5 (mod 989) 171 00:09:26,000 --> 00:09:30,000 yang = 799. 172 00:09:30,000 --> 00:09:39,000 Dan akhirnya, untuk potongan terakhir kami kami memiliki 48 ke 5 (mod 989) 173 00:09:39,000 --> 00:09:43,000 yang = 975. 174 00:09:43,000 --> 00:09:48,000 Sekarang kita bisa mengirim lebih dari nilai-nilai terenkripsi ke Rob. 175 00:09:54,000 --> 00:09:58,000 Di sini Anda pergi, Rob. 176 00:09:58,000 --> 00:10:01,000 Sementara pesan kita dalam penerbangan, mari kita lihat lagi 177 00:10:01,000 --> 00:10:07,000 bagaimana kami mendapat bahwa nilai d. 178 00:10:07,000 --> 00:10:17,000 Kami nomor d diperlukan untuk memenuhi 5d = 1 (mod 924). 179 00:10:17,000 --> 00:10:24,000 Hal ini membuat d invers perkalian dari 5 modulo 924. 180 00:10:24,000 --> 00:10:28,000 Mengingat 2 bilangan bulat, a dan b, algoritma Euclidean diperpanjang 181 00:10:28,000 --> 00:10:33,000 dapat digunakan untuk menemukan pembagi umum terbesar dari 2 bilangan bulat. 182 00:10:33,000 --> 00:10:37,000 Ini juga akan memberi kita 2 nomor lainnya, x dan y, 183 00:10:37,000 --> 00:10:47,000 yang memenuhi persamaan ax + by = pembagi umum terbesar dari a dan b. 184 00:10:47,000 --> 00:10:49,000 Bagaimana hal ini membantu kita? 185 00:10:49,000 --> 00:10:52,000 Nah, memasukkan e = 5 untuk 186 00:10:52,000 --> 00:10:56,000 dan m = 924 untuk b 187 00:10:56,000 --> 00:10:59,000 kita sudah tahu bahwa angka-angka coprime. 188 00:10:59,000 --> 00:11:03,000 Terbesar pembagi umum mereka adalah 1. 189 00:11:03,000 --> 00:11:09,000 Ini memberi kita 5x + 924y = 1 190 00:11:09,000 --> 00:11:17,000 atau 5x = 1 - 924y. 191 00:11:17,000 --> 00:11:22,000 Tetapi jika kita hanya peduli tentang segala sesuatu modulo 924 192 00:11:22,000 --> 00:11:25,000 maka kita bisa drop - 924y. 193 00:11:25,000 --> 00:11:27,000 Pikirkan kembali ke jam. 194 00:11:27,000 --> 00:11:31,000 Jika jarum menit pada 1 dan kemudian tepat 10 jam berlalu, 195 00:11:31,000 --> 00:11:35,000 kita tahu sisi menit masih akan berada di 1. 196 00:11:35,000 --> 00:11:39,000 Di sini kita mulai pada 1 dan kemudian membungkus kali persis y, 197 00:11:39,000 --> 00:11:41,000 jadi kami masih akan berada di 1. 198 00:11:41,000 --> 00:11:49,000 Kami memiliki 5x = 1 (mod 924). 199 00:11:49,000 --> 00:11:55,000 Dan di sini x ini adalah sama dengan d kita cari sebelumnya, 200 00:11:55,000 --> 00:11:58,000 jadi jika kita menggunakan algoritma Euclidean diperpanjang 201 00:11:58,000 --> 00:12:04,000 untuk mendapatkan nomor x, itulah jumlah yang harus kita gunakan sebagai d kami. 202 00:12:04,000 --> 00:12:07,000 Sekarang mari kita jalankan algoritma Euclidean diperpanjang untuk = 5 203 00:12:07,000 --> 00:12:11,000 dan b = 924. 204 00:12:11,000 --> 00:12:14,000 Kita akan menggunakan metode yang disebut metode tabel. 205 00:12:14,000 --> 00:12:21,000 Meja kami akan memiliki 4 kolom, x, y, d, dan k. 206 00:12:21,000 --> 00:12:23,000 Meja kami dimulai dengan 2 baris. 207 00:12:23,000 --> 00:12:28,000 Pada baris pertama kita punya 1, 0, maka nilai kita, yang adalah 5, 208 00:12:28,000 --> 00:12:37,000 dan baris kedua adalah 0, 1, dan nilai kami untuk b, yaitu 924. 209 00:12:37,000 --> 00:12:40,000 Nilai kolom 4, k, akan menjadi hasil 210 00:12:40,000 --> 00:12:45,000 membagi nilai d pada baris di atasnya dengan nilai d 211 00:12:45,000 --> 00:12:49,000 pada baris yang sama. 212 00:12:49,000 --> 00:12:56,000 Kami memiliki 5 dibagi dengan 924 adalah 0 dengan sisa beberapa. 213 00:12:56,000 --> 00:12:59,000 Itu berarti kita memiliki k = 0. 214 00:12:59,000 --> 00:13:05,000 Sekarang nilai setiap sel lainnya akan menjadi nilai dari 2 baris sel di atasnya 215 00:13:05,000 --> 00:13:09,000 dikurangi nilai dari baris di atas kali k. 216 00:13:09,000 --> 00:13:11,000 Mari kita mulai dengan d di baris ke-3. 217 00:13:11,000 --> 00:13:19,000 Kami memiliki 5-924 * 0 = 5. 218 00:13:19,000 --> 00:13:25,000 Selanjutnya kita memiliki 0 - 1 * 0 yang 0 219 00:13:25,000 --> 00:13:30,000 dan 1 - 0 * 0 yang adalah 1. 220 00:13:30,000 --> 00:13:33,000 Tidak terlalu buruk, jadi mari kita beralih ke baris berikutnya. 221 00:13:33,000 --> 00:13:36,000 Pertama kita perlu nilai kami k. 222 00:13:36,000 --> 00:13:43,000 924 dibagi dengan 5 = 184 dengan sisa beberapa, 223 00:13:43,000 --> 00:13:46,000 sehingga nilai kami untuk k adalah 184. 224 00:13:46,000 --> 00:13:54,000 Sekarang 924-5 * 184 = 4. 225 00:13:54,000 --> 00:14:05,000 1 - 0 * 184 adalah 1 dan 0 - 1 * 184 adalah -184. 226 00:14:05,000 --> 00:14:07,000 Baiklah, mari kita lakukan baris berikutnya. 227 00:14:07,000 --> 00:14:10,000 Nilai kami akan k 1 karena 228 00:14:10,000 --> 00:14:15,000 5 dibagi dengan 4 = 1 dengan sisa beberapa. 229 00:14:15,000 --> 00:14:17,000 Mari kita mengisi kolom lainnya. 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 Dan 1 - 184 * 1 adalah 185. 233 00:14:33,000 --> 00:14:35,000 Mari kita lihat apa nilai berikutnya kami akan k. 234 00:14:35,000 --> 00:14:40,000 Yah, sepertinya kita memiliki 4 dibagi oleh 1, yaitu 4. 235 00:14:40,000 --> 00:14:43,000 Dalam kasus di mana kita membaginya dengan 1 seperti k yaitu sebesar 236 00:14:43,000 --> 00:14:50,000 nilai d pada baris di atas berarti bahwa kita sudah selesai dengan algoritma kami. 237 00:14:50,000 --> 00:14:58,000 Kita bisa lihat di sini bahwa kita memiliki x = 185 dan y = -1 pada baris terakhir. 238 00:14:58,000 --> 00:15:00,000 Sekarang mari kita kembali ke tujuan asli kami. 239 00:15:00,000 --> 00:15:04,000 Kami mengatakan bahwa nilai x sebagai hasil dari menjalankan algoritma ini 240 00:15:04,000 --> 00:15:08,000 akan menjadi invers perkalian dari (mod b). 241 00:15:08,000 --> 00:15:15,000 Itu berarti bahwa 185 adalah invers perkalian dari 5 (mod 924) 242 00:15:15,000 --> 00:15:20,000 yang berarti bahwa kita memiliki nilai 185 untuk d. 243 00:15:20,000 --> 00:15:23,000 Kenyataan bahwa d = 1 di baris terakhir 244 00:15:23,000 --> 00:15:26,000 memverifikasi e yang coprime ke m. 245 00:15:26,000 --> 00:15:30,000 Jika bukan 1 maka kita akan harus memilih e baru. 246 00:15:30,000 --> 00:15:33,000 Sekarang mari kita lihat apakah Rob telah menerima pesan saya. 247 00:15:33,000 --> 00:15:35,000 Ketika seseorang mengirim saya pesan terenkripsi 248 00:15:35,000 --> 00:15:38,000 selama saya sudah menyimpan kunci pribadi saya rahasia 249 00:15:38,000 --> 00:15:41,000 Saya satu-satunya yang dapat mendekripsi pesan. 250 00:15:41,000 --> 00:15:46,000 Untuk mendekripsi c sepotong saya bisa menghitung pesan asli 251 00:15:46,000 --> 00:15:53,000 adalah sama dengan potongan untuk d listrik (mod n). 252 00:15:53,000 --> 00:15:57,000 Ingat bahwa d dan n dari kunci pribadi saya. 253 00:15:57,000 --> 00:16:01,000 Untuk mendapatkan pesan penuh dari potongan yang kita mendekripsi potongan masing-masing 254 00:16:01,000 --> 00:16:04,000 dan menggabungkan hasilnya. 255 00:16:04,000 --> 00:16:08,000 Persis bagaimana aman adalah RSA? 256 00:16:08,000 --> 00:16:10,000 Yang benar adalah, kita tidak tahu. 257 00:16:10,000 --> 00:16:14,000 Keamanan didasarkan pada berapa lama waktu yang dibutuhkan seorang penyerang untuk memecahkan pesan 258 00:16:14,000 --> 00:16:16,000 dienkripsi dengan RSA. 259 00:16:16,000 --> 00:16:19,000 Ingat bahwa penyerang memiliki akses ke kunci publik Anda, 260 00:16:19,000 --> 00:16:21,000 yang berisi baik e dan n. 261 00:16:21,000 --> 00:16:26,000 Jika penyerang berhasil faktor n menjadi 2 nya bilangan prima, p dan q, 262 00:16:26,000 --> 00:16:30,000 maka dia bisa menghitung d dengan menggunakan algoritma Euclidean diperpanjang. 263 00:16:30,000 --> 00:16:35,000 Ini memberinya kunci pribadi, yang dapat digunakan untuk mendekripsi pesan apapun. 264 00:16:35,000 --> 00:16:38,000 Tapi seberapa cepat kita bisa faktor bilangan bulat? 265 00:16:38,000 --> 00:16:41,000 Sekali lagi, kita tidak tahu. 266 00:16:41,000 --> 00:16:43,000 Tak seorang pun telah menemukan cara cepat untuk melakukannya, 267 00:16:43,000 --> 00:16:46,000 yang berarti yang diberikan cukup besar n 268 00:16:46,000 --> 00:16:49,000 itu akan mengambil penyerang realistis lama 269 00:16:49,000 --> 00:16:51,000 untuk faktor nomor. 270 00:16:51,000 --> 00:16:54,000 Jika seseorang mengungkapkan cara cepat bilangan bulat anjak 271 00:16:54,000 --> 00:16:57,000 RSA akan rusak. 272 00:16:57,000 --> 00:17:01,000 Tetapi bahkan jika faktorisasi integer secara inheren lambat 273 00:17:01,000 --> 00:17:04,000 algoritma RSA masih bisa memiliki cacat beberapa di dalamnya 274 00:17:04,000 --> 00:17:07,000 yang memungkinkan untuk dekripsi pesan mudah. 275 00:17:07,000 --> 00:17:10,000 Tak seorang pun telah menemukan dan mengungkapkan seperti cacat belum, 276 00:17:10,000 --> 00:17:12,000 tapi itu bukan berarti salah satu tidak ada. 277 00:17:12,000 --> 00:17:17,000 Secara teori, seseorang bisa berada di luar sana membaca semua data dienkripsi dengan RSA. 278 00:17:17,000 --> 00:17:19,000 Ada lagi sedikit masalah privasi. 279 00:17:19,000 --> 00:17:23,000 Jika Tommy mengenkripsi beberapa pesan menggunakan kunci publik saya 280 00:17:23,000 --> 00:17:26,000 dan penyerang mengenkripsi pesan yang sama dengan menggunakan kunci publik saya 281 00:17:26,000 --> 00:17:29,000 penyerang akan melihat bahwa 2 pesan adalah identik 282 00:17:29,000 --> 00:17:32,000 dan dengan demikian tahu apa Tommy dienkripsi. 283 00:17:32,000 --> 00:17:36,000 Untuk mencegah hal ini, pesan biasanya diisi dengan bit acak 284 00:17:36,000 --> 00:17:39,000 sebelum dienkripsi sehingga pesan yang sama dienkripsi 285 00:17:39,000 --> 00:17:44,000 beberapa kali akan terlihat berbeda asalkan padding pada pesan yang berbeda. 286 00:17:44,000 --> 00:17:47,000 Tapi ingat bagaimana kita harus membagi pesan ke dalam potongan 287 00:17:47,000 --> 00:17:50,000 sehingga potongan masing-masing lebih kecil dari n? 288 00:17:50,000 --> 00:17:52,000 Pelapis potongan berarti bahwa kita mungkin harus membagi hal-hal 289 00:17:52,000 --> 00:17:57,000 menjadi potongan-potongan lebih karena potongan empuk harus lebih kecil dari n. 290 00:17:57,000 --> 00:18:01,000 Enkripsi dan dekripsi relatif mahal dengan RSA, 291 00:18:01,000 --> 00:18:05,000 sehingga perlu untuk memecah pesan menjadi potongan-potongan yang bisa sangat mahal. 292 00:18:05,000 --> 00:18:09,000 Jika volume data yang besar perlu dienkripsi dan didekripsi 293 00:18:09,000 --> 00:18:12,000 kita bisa menggabungkan manfaat dari algoritma kunci simetrik 294 00:18:12,000 --> 00:18:16,000 dengan orang-orang dari RSA untuk mendapatkan baik keamanan dan efisiensi. 295 00:18:16,000 --> 00:18:18,000 Meskipun kami tidak akan masuk ke sini, 296 00:18:18,000 --> 00:18:23,000 AES merupakan algoritma kunci simetrik seperti Vigenère dan Caesar cipher 297 00:18:23,000 --> 00:18:25,000 tetapi jauh lebih sulit untuk retak. 298 00:18:25,000 --> 00:18:30,000 Tentu saja, kita tidak dapat menggunakan AES tanpa membangun kunci rahasia bersama 299 00:18:30,000 --> 00:18:34,000 antara 2 sistem, dan kami melihat masalah dengan itu sebelumnya. 300 00:18:34,000 --> 00:18:40,000 Tapi sekarang kita dapat menggunakan RSA untuk membangun kunci rahasia bersama antara 2 sistem. 301 00:18:40,000 --> 00:18:43,000 Kami akan memanggil komputer pengirim data pengirim 302 00:18:43,000 --> 00:18:46,000 dan komputer menerima data penerima. 303 00:18:46,000 --> 00:18:49,000 Penerima memiliki sepasang kunci RSA dan mengirimkan 304 00:18:49,000 --> 00:18:51,000 kunci publik ke pengirim. 305 00:18:51,000 --> 00:18:54,000 Pengirim menghasilkan kunci AES, 306 00:18:54,000 --> 00:18:57,000 mengenkripsi dengan kunci publik RSA penerima, 307 00:18:57,000 --> 00:19:00,000 dan mengirim kunci AES ke penerima. 308 00:19:00,000 --> 00:19:04,000 Penerima dekripsi pesan dengan kunci RSA pribadi. 309 00:19:04,000 --> 00:19:09,000 Kedua pengirim dan penerima sekarang memiliki kunci AES bersama antara mereka. 310 00:19:09,000 --> 00:19:14,000 AES, yang jauh lebih cepat pada enkripsi dan dekripsi dari RSA, 311 00:19:14,000 --> 00:19:18,000 sekarang dapat digunakan untuk mengenkripsi data dalam jumlah besar dan mengirimnya ke penerima, 312 00:19:18,000 --> 00:19:21,000 yang dapat mendekripsi menggunakan tombol yang sama. 313 00:19:21,000 --> 00:19:26,000 AES, yang jauh lebih cepat pada enkripsi dan dekripsi dari RSA, 314 00:19:26,000 --> 00:19:30,000 sekarang dapat digunakan untuk mengenkripsi data dalam jumlah besar dan mengirimnya ke penerima, 315 00:19:30,000 --> 00:19:32,000 yang dapat mendekripsi menggunakan tombol yang sama. 316 00:19:32,000 --> 00:19:36,000 Kita hanya perlu RSA untuk mentransfer kunci bersama. 317 00:19:36,000 --> 00:19:40,000 Kita tidak perlu lagi menggunakan RSA sama sekali. 318 00:19:40,000 --> 00:19:46,000 Sepertinya aku punya pesan. 319 00:19:46,000 --> 00:19:49,000 Tidak peduli apakah ada orang membaca apa yang ada di pesawat kertas sebelum aku menangkapnya 320 00:19:49,000 --> 00:19:55,000 karena aku satu-satunya dengan kunci pribadi. 321 00:19:55,000 --> 00:19:57,000 Mari kita mendekripsi setiap potongan dalam pesan. 322 00:19:57,000 --> 00:20:07,000 Potongan pertama, 658, kami menaikkan dengan kekuatan d, yaitu 185, 323 00:20:07,000 --> 00:20:18,000 mod n, yaitu 989, sama dengan 67, 324 00:20:18,000 --> 00:20:24,000 yang merupakan huruf C dalam ASCII. 325 00:20:24,000 --> 00:20:31,000 Sekarang, ke potongan kedua. 326 00:20:31,000 --> 00:20:35,000 Potongan kedua memiliki nilai 15, 327 00:20:35,000 --> 00:20:41,000 yang kita meningkat menjadi kekuatan 185, 328 00:20:41,000 --> 00:20:51,000 mod 989, dan ini sama dengan 83 329 00:20:51,000 --> 00:20:57,000 yang merupakan huruf S dalam ASCII. 330 00:20:57,000 --> 00:21:06,000 Sekarang untuk potongan ketiga, yang memiliki nilai 799, kami meningkat menjadi 185, 331 00:21:06,000 --> 00:21:17,000 mod 989, dan ini sama dengan 53, 332 00:21:17,000 --> 00:21:24,000 yang merupakan nilai dari karakter ASCII 5 di. 333 00:21:24,000 --> 00:21:30,000 Sekarang untuk potongan terakhir, yang memiliki nilai 975, 334 00:21:30,000 --> 00:21:41,000 kami meningkat menjadi 185, mod 989, 335 00:21:41,000 --> 00:21:51,000 dan ini sama dengan 48, yang merupakan nilai dari 0 karakter dalam ASCII. 336 00:21:51,000 --> 00:21:57,000 Nama saya Rob Bowden, dan ini adalah CS50. 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 RSA sama sekali. 339 00:22:08,000 --> 00:22:14,000 RSA sama sekali. [Tertawa] 340 00:22:14,000 --> 00:22:17,000 Sama sekali.