1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [RSA] 2 00:00:02,000 --> 00:00:04,000 [ロブボーデン] [トミーM​​acWilliam] [ハーバード大学] 3 00:00:04,000 --> 00:00:07,000 [これはCS50です。] [CS50.TV] 4 00:00:07,000 --> 00:00:11,000 のは、RSA、データを暗号化するために広く使われているアルゴリズムを見てみましょう。 5 00:00:11,000 --> 00:00:16,000 シーザーとVigenère暗号のような暗号化アルゴリズムでは、非常に安全ではありません。 6 00:00:16,000 --> 00:00:20,000 シーザー暗号を使用すると、攻撃者はわずか25の異なる鍵を試す必要があります 7 00:00:20,000 --> 00:00:22,000 メッセージのプレーンテキストを取得します。 8 00:00:22,000 --> 00:00:25,000 Vigenère暗号はシーザー暗号よりも安全ですが 9 00:00:25,000 --> 00:00:28,000 なぜなら、一度のキーの大きな探索空間、攻撃の 10 00:00:28,000 --> 00:00:30,000 Vigenère暗号のキーの長さは、知っている 11 00:00:30,000 --> 00:00:34,000 れ、暗号化されたテキスト内のパターンの解析を介して決定することができます 12 00:00:34,000 --> 00:00:38,000 Vigenère暗号は、そのはるかに安全なシーザー暗号以外ではありません。 13 00:00:38,000 --> 00:00:42,000 RSAは、他の一方で、このような攻撃に対して脆弱ではありません。 14 00:00:42,000 --> 00:00:45,000 シーザー暗号とVigenère暗号が同じキーを使用する 15 00:00:45,000 --> 00:00:47,000 暗号化と復号化の両方へのメッセージ。 16 00:00:47,000 --> 00:00:51,000 このプロパティでは、これらの暗号、対称鍵アルゴリズムを作る。 17 00:00:51,000 --> 00:00:54,000 対称鍵アルゴリズムの基本的な問題 18 00:00:54,000 --> 00:00:57,000 彼らはメッセージを暗号化して送るものに依存していることである 19 00:00:57,000 --> 00:00:59,000 と1は、メッセージを受信して​​復号化する 20 00:00:59,000 --> 00:01:03,000 すでに彼らは両方使用するキーに先行を合意しています。 21 00:01:03,000 --> 00:01:06,000 しかし、我々はここで起動時の問題のビットを持っています。 22 00:01:06,000 --> 00:01:10,000 どのように通信する2台のコンピュータは、それらの間の秘密鍵を確立するのですか? 23 00:01:10,000 --> 00:01:16,000 鍵は秘密でなければならないなら、私たちは鍵を暗号化および復号化するための方法が必要です。 24 00:01:16,000 --> 00:01:18,000 我々が持っているすべては、対称鍵暗号である場合 25 00:01:18,000 --> 00:01:21,000 その後、我々はちょうど同じ問題に戻ってきました。 26 00:01:21,000 --> 00:01:25,000 RSAは、その一方で、鍵のペアを使用しています 27 00:01:25,000 --> 00:01:28,000 復号用の暗号化と別のもの。 28 00:01:28,000 --> 00:01:32,000 一つは公開鍵と呼ばれ、もう一つは秘密鍵です。 29 00:01:32,000 --> 00:01:34,000 公開鍵は、メッセージを暗号化するために使用されます。 30 00:01:34,000 --> 00:01:38,000 あなたはその名前で察しのとおり、私たちは私たちの公開鍵を共有することができます 31 00:01:38,000 --> 00:01:43,000 我々は暗号化されたメッセージのセキュリティを損なうことなく、誰でも欲しい。 32 00:01:43,000 --> 00:01:45,000 公開鍵を使用して暗号化したメッセージ 33 00:01:45,000 --> 00:01:49,000 唯一それに対応する秘密鍵で復号化することができます。 34 00:01:49,000 --> 00:01:53,000 あなたの公開鍵を共有できますが、常にあなたの秘密鍵を秘密にしておく必要があります。 61 00:01:55,000 --> 00:01:58,000 そして唯一の秘密鍵は、メッセージを復号化するために使用することができます 62 00:01:58,000 --> 00:02:02,000 2ユーザーは、RSAで暗号化されたメッセージを送信したい場合は、 63 00:02:02,000 --> 00:02:07,000 前後に両方のユーザーは、自分の公開鍵と秘密鍵のペアを持っている必要があります。 64 00:02:07,000 --> 00:02:10,000 ユーザ1からユーザ2へのメッセージ 65 00:02:10,000 --> 00:02:15,000 唯一のユーザ2からユーザ1にユーザ2の鍵のペア、およびメッセージを使用 66 00:02:15,000 --> 00:02:17,000 唯一のユーザー1の鍵ペアを使用しています。 67 00:02:17,000 --> 00:02:21,000 暗号化と復号化メッセージに2つの独立したキーが存在するという事実 68 00:02:21,000 --> 00:02:24,000 RSA非対称鍵アルゴリズムになります。 69 00:02:24,000 --> 00:02:28,000 我々は、別のコンピュータにそれを送信するために、公開鍵を暗号化する必要はありません。 70 00:02:28,000 --> 00:02:31,000 キーはとにかく公開されているからです。 71 00:02:31,000 --> 00:02:33,000 これは、RSAが同じ起動時の問題を持っていないことを意味 72 00:02:33,000 --> 00:02:36,000 対称鍵アルゴリズムとして。 73 00:02:36,000 --> 00:02:39,000 だから私は、RSA暗号化を使用してメッセージを送信したい場合 74 00:02:39,000 --> 00:02:42,000 ロブには、私は最初にロブの公開鍵が必要になるでしょう。 75 00:02:42,000 --> 00:02:47,000 鍵のペアを生成するには、ロブは2つの大きな素数を選ぶ必要があります。 76 00:02:47,000 --> 00:02:50,000 これらの番号は、パブリックキーとプライベートキーの両方で使用されます 77 00:02:50,000 --> 00:02:54,000 しかし、公開鍵のみが、これらの2つの数値の積を使用します 78 00:02:54,000 --> 00:02:56,000 番号ではなく自分自身。 79 00:02:56,000 --> 00:02:59,000 私はロブの公開鍵を使ってメッセージを暗号化したら 80 00:02:59,000 --> 00:03:01,000 私はロブにメッセージを送ることができます。 81 00:03:01,000 --> 00:03:05,000 コンピュータについては、ファクタリング番号は困難な問題である。 82 00:03:05,000 --> 00:03:09,000 公開鍵は、覚えている、2素数の積を使用していました。 83 00:03:09,000 --> 00:03:12,000 この製品は、その後、唯一の2つの要因を持っている必要があります 84 00:03:12,000 --> 00:03:16,000 その秘密鍵を構成する数値であることが起こる。 85 00:03:16,000 --> 00:03:20,000 メッセージを解読するために、RSAはこの秘密鍵を使用します 86 00:03:20,000 --> 00:03:25,000 または番号は、公開鍵を作成する過程で一緒に乗算。 87 00:03:25,000 --> 00:03:28,000 それは数を素因数分解するのは困難だから 88 00:03:28,000 --> 00:03:32,000 秘密鍵で使用される2つの数値に公開鍵で使用 89 00:03:32,000 --> 00:03:36,000 攻撃者が秘密鍵を把握するのは困難だ 90 00:03:36,000 --> 00:03:39,000 それは、メッセージを復号化する必要があるだろう。 91 00:03:39,000 --> 00:03:43,000 今度は、RSAのいくつかの低レベルの詳細に行くことができます。 92 00:03:43,000 --> 00:03:46,000 まず、鍵のペアを生成する方法を見てみましょう。 93 00:03:46,000 --> 00:03:49,000 まず、我々は2素数が必要になります。 94 00:03:49,000 --> 00:03:52,000 我々は、これらの2つの数pとqと呼ぶことにします。 95 00:03:52,000 --> 00:03:56,000 pとqを選択するためには、実際に我々が擬似乱数発生させるでしょう 96 00:03:56,000 --> 00:03:59,000 次に大きな数字とは、かどうかを判定するためのテストを使用する 97 00:03:59,000 --> 00:04:02,000 これらの数字は、おそらく素数である。 98 00:04:02,000 --> 00:04:05,000 我々は何度も繰り返し乱数を生成維持することができます 99 00:04:05,000 --> 00:04:08,000 我々は我々が使用できる2素数を持つまで。 100 00:04:08,000 --> 00:04:15,000 ここのは、p = 23、Q = 43を選ぶことができます。 101 00:04:15,000 --> 00:04:19,000 覚えておいて、実際には、pとqははるかに大きい数字でなければなりません。 102 00:04:19,000 --> 00:04:22,000 私たちの知る限りでは、数値より大きい、難しくはある 103 00:04:22,000 --> 00:04:25,000 暗号化されたメッセージを解読します。 104 00:04:25,000 --> 00:04:29,000 しかし、それはまた、暗号化と復号化メッセージに、より高価です。 105 00:04:29,000 --> 00:04:33,000 今日では、多くの場合、pとqは少なくとも1024ビットであることをお勧めします 106 00:04:33,000 --> 00:04:37,000 これは、300以上の桁でそれぞれの番号を入れます。 107 00:04:37,000 --> 00:04:40,000 しかし、我々はこの例のために、これらの小さな数字を選ぶでしょう。 108 00:04:40,000 --> 00:04:43,000 今、私たちは、第三番号を取得するために一緒にpとqを掛けます 109 00:04:43,000 --> 00:04:45,000 我々は、n呼びます。 110 00:04:45,000 --> 00:04:55,000 私たちのケースでは、n = 23 989 = * 43。 111 00:04:55,000 --> 00:04:58,000 我々は、n = 989を持っています。 112 00:04:58,000 --> 00:05:02,000 qで - 1 - 1次の我々は、pを掛け'll 113 00:05:02,000 --> 00:05:05,000 我々は、mを呼ぶことにします第四数を取得します。 114 00:05:05,000 --> 00:05:15,000 私たちの場合、m = 22 924 = * 42。 115 00:05:15,000 --> 00:05:18,000 我々は、m = 924を持っています。 116 00:05:18,000 --> 00:05:22,000 今、私たちは、mと互いに素である数eが必要になります 117 00:05:22,000 --> 00:05:25,000 とm未満。 118 00:05:25,000 --> 00:05:28,000 2つの数字は相対的に素数または互いに素 119 00:05:28,000 --> 00:05:33,000 両方均等に分割のみ正の整数が1である場合。 120 00:05:33,000 --> 00:05:37,000 言い換えれば、eとmの最大公約数で 121 00:05:37,000 --> 00:05:39,000 1でなければなりません。 122 00:05:39,000 --> 00:05:44,000 eは素数65537であるためには、実際には、それが一般的です 123 00:05:44,000 --> 00:05:48,000 ある限り、この数字は、mの因子であることが起こりません。 124 00:05:48,000 --> 00:05:53,000 私達のキーの場合は、e = 5を選ぶでしょう 125 00:05:53,000 --> 00:05:57,000 5以降924と互いに素である。 126 00:05:57,000 --> 00:06:01,000 最後に、我々はDと呼ぶことにしますもう一つの数を、必要があります。 127 00:06:01,000 --> 00:06:11,000 Dは方程式を満たすいくつかの値でなければなりませんデ= 1(mod m)を。 128 00:06:11,000 --> 00:06:17,000 このmod mは、我々はモジュラ演算と呼ばれるものを使うことにします意味します。 129 00:06:17,000 --> 00:06:21,000 モジュラー算術では、いったん数がいくつかの上限よりも高くなる 130 00:06:21,000 --> 00:06:24,000 それが0に戻って周りに折り返されます。 131 00:06:24,000 --> 00:06:27,000 クロックは、例えば、モジュラー演算を使用しています。 132 00:06:27,000 --> 00:06:31,000 1:59 1分後には、例えば、2時です 133 00:06:31,000 --> 00:06:33,000 1:60ません。 134 00:06:33,000 --> 00:06:36,000 分針が0にラップアラウンドした 135 00:06:36,000 --> 00:06:39,000 60の上限に到達したとき。 136 00:06:39,000 --> 00:06:46,000 そこで、我々は60が0(MOD 60)と等価であると言うことができます 137 00:06:46,000 --> 00:06:57,000 と125 65と同等である5(MOD 60)と等価である。 138 00:06:57,000 --> 00:07:02,000 私たちの公開鍵は、ペアeとnとなります 139 00:07:02,000 --> 00:07:09,000 この場合にはeが5であり、nは989です。 140 00:07:09,000 --> 00:07:15,000 私たちの秘密鍵は、ペアDとNとなります 141 00:07:15,000 --> 00:07:22,000 我々の場合にはこれは185と989です。 142 00:07:22,000 --> 00:07:25,000 当社独自の素数pとqが表示されないことに注意してください 143 00:07:25,000 --> 00:07:29,000 どこでも私たちのプライベートまたはパブリックキーインチ 144 00:07:29,000 --> 00:07:33,000 今、私たちは私たちの鍵のペアを持っている、のは、我々は暗号化する方法について見ていきましょう 145 00:07:33,000 --> 00:07:36,000 とメッセージを解読する。 146 00:07:36,000 --> 00:07:38,000 私は、ロブにメッセージを送信したい 147 00:07:38,000 --> 00:07:42,000 だから彼は、この鍵ペアを生成するには1になります。 148 00:07:42,000 --> 00:07:46,000 その後、私は使用します、彼の公開鍵のためにロブを頼むよ 149 00:07:46,000 --> 00:07:48,000 彼に送信するメッセージを暗号化します。 150 00:07:48,000 --> 00:07:53,000 ロブは私と一緒に自分の公開鍵を共有するために覚えておいて、それは完全に大丈夫です。 151 00:07:53,000 --> 00:07:56,000 しかし、それは自分の秘密鍵を共有しても大丈夫ではないでしょう。 152 00:07:56,000 --> 00:08:00,000 私は自分の秘密鍵が何であるか、任意のアイデアを持っていない。 153 00:08:00,000 --> 00:08:03,000 我々は、いくつかのチャンクに私たちのメッセージmを破ることができる 154 00:08:03,000 --> 00:08:07,000 すべてはそれからnよりも小さいと、それらの断片のそれぞれを暗号化します。 155 00:08:07,000 --> 00:08:12,000 我々は、我々は4チャンクに分割することができる文字列CS50を暗号化します 156 00:08:12,000 --> 00:08:14,000 文字ごとに1。 157 00:08:14,000 --> 00:08:17,000 私のメッセージを暗号化するために、私はにそれを変換する必要があります 158 00:08:17,000 --> 00:08:20,000 数値表現のいくつかの種類。 159 00:08:20,000 --> 00:08:25,000 私のメッセージで文字のASCII値を連結してみましょう。 160 00:08:25,000 --> 00:08:28,000 与えられたメッセージmを暗号化するために、 161 00:08:28,000 --> 00:08:37,000 私はe(mod n)とにc = mを計算する必要があります。 162 00:08:37,000 --> 00:08:40,000 しかし、mがnよりも小さくなければなりません 163 00:08:40,000 --> 00:08:45,000 あるいは完全なメッセージはmodulo nを表現することはできません。 164 00:08:45,000 --> 00:08:49,000 我々は、nより小さいすべてのうちいくつかのチャンク、にメートルを破ることができる 165 00:08:49,000 --> 00:08:52,000 そして、それらの断片のそれぞれを暗号化します。 166 00:08:52,000 --> 00:09:03,000 これらのチャンクのそれぞれの暗号化、我々は得るC1〜5 = 67(MOD 989) 167 00:09:03,000 --> 00:09:06,000 どちら= 658。 168 00:09:06,000 --> 00:09:15,000 私たちの第2のチャンクのために私達は5(MOD 989)に83を持っている 169 00:09:15,000 --> 00:09:18,000 どちら= 15。 170 00:09:18,000 --> 00:09:26,000 我々の3番目のチャンクのために私達は5(MOD 989)〜53持っている 171 00:09:26,000 --> 00:09:30,000 どちら= 799。 172 00:09:30,000 --> 00:09:39,000 そして最後に、私たちの最後のチャンクに対して我々は5(MOD 989)〜48持っている 173 00:09:39,000 --> 00:09:43,000 どちら= 975。 174 00:09:43,000 --> 00:09:48,000 今、私たちはロブにこれらの暗号化された値を上に送信することができます。 175 00:09:54,000 --> 00:09:58,000 ここでは、ロブに行く。 176 00:09:58,000 --> 00:10:01,000 私たちのメッセージが飛行中であるが、のは別のを見てみましょう 177 00:10:01,000 --> 00:10:07,000 どのように我々は、Dに対して、その値を得た。 178 00:10:07,000 --> 00:10:17,000 我々の数dは5D = 1(MOD 924)を満足する必要がありました。 179 00:10:17,000 --> 00:10:24,000 これは、D 5モジュロ924の逆数になります。 180 00:10:24,000 --> 00:10:28,000 与えられた2つの整数であり、bは、拡張ユークリッドの互除法 181 00:10:28,000 --> 00:10:33,000 これらの2つの整数の最大公約数を見つけるために使用することができます。 182 00:10:33,000 --> 00:10:37,000 それはまた、私たちに、xとyを、他の2つの数字を与える 183 00:10:37,000 --> 00:10:47,000 それはaとbの=最大公約数で方程式ax +を満たす。 184 00:10:47,000 --> 00:10:49,000 これはどのように私たちを助けるのですか? 185 00:10:49,000 --> 00:10:52,000 まあ、のためのe = 5を差し込む 186 00:10:52,000 --> 00:10:56,000 aとbのm = 924 187 00:10:56,000 --> 00:10:59,000 我々はすでにこれらの数字は互いに素であることを知っている。 188 00:10:59,000 --> 00:11:03,000 それらの最大公約数は1である。 189 00:11:03,000 --> 00:11:09,000 これは私達に5倍+ 924y = 1を与える 190 00:11:09,000 --> 00:11:17,000 または5x = 1 - 924y。 191 00:11:17,000 --> 00:11:22,000 しかし、我々は唯一のすべてモジュロ924を心配している場合 192 00:11:22,000 --> 00:11:25,000 924y - それから私達はドロップすることができます。 193 00:11:25,000 --> 00:11:27,000 クロックに戻って考えてみてください。 194 00:11:27,000 --> 00:11:31,000 分針は1日で、その後正確に10時間では、合格した場合 195 00:11:31,000 --> 00:11:35,000 我々は、分針がまだ1日になることを知っている。 196 00:11:35,000 --> 00:11:39,000 ここでは、1から始まり、その後正確にy回包み込む、 197 00:11:39,000 --> 00:11:41,000 そう、我々はまだ1時になるでしょう。 198 00:11:41,000 --> 00:11:49,000 我々は、5倍= 1(MOD 924)があります。 199 00:11:49,000 --> 00:11:55,000 そしてここでこのxは、我々の前に探していたdと同じです 200 00:11:55,000 --> 00:11:58,000 我々は、拡張ユークリッドの互除法を使うので、もし 201 00:11:58,000 --> 00:12:04,000 この数値xを得るために、それは私達が私達dとして使用する必要がある番号です。 202 00:12:04,000 --> 00:12:07,000 今すぐ= 5のための拡張ユークリッドアルゴリズムを実行してみましょう 203 00:12:07,000 --> 00:12:11,000 およびb = 924。 204 00:12:11,000 --> 00:12:14,000 我々は、テーブル方式と呼ばれる方法を使うことにします。 205 00:12:14,000 --> 00:12:21,000 私たちのテーブルには4列のx、y、d、およびKを持つことになります。 206 00:12:21,000 --> 00:12:23,000 私たちのテーブルには2行から始まります。 207 00:12:23,000 --> 00:12:28,000 最初の行では、その後、1、0、5での我々の価値を、持っている 208 00:12:28,000 --> 00:12:37,000 そして我々の第二行は、​​0,1、および924はb、私たちの値です。 209 00:12:37,000 --> 00:12:40,000 第四列の値、kは結果になるでしょう 210 00:12:40,000 --> 00:12:45,000 dの値と、その上の行のdの値を分​​割する 211 00:12:45,000 --> 00:12:49,000 同じ行にある。 212 00:12:49,000 --> 00:12:56,000 我々は、924で割った5がいくつか残りは0である必要があります。 213 00:12:56,000 --> 00:12:59,000 それは、我々は、k = 0を意味しています。 214 00:12:59,000 --> 00:13:05,000 今では他のすべてのセルの値は、その上のセル2行の値になります 215 00:13:05,000 --> 00:13:09,000 それ回K上の行の値を引いた。 216 00:13:09,000 --> 00:13:11,000 第三行にdから始めてみましょう。 217 00:13:11,000 --> 00:13:19,000 924 * 0 = 5 - 私たちは5になっています。 218 00:13:19,000 --> 00:13:25,000 1 * 0 0です - 次に、我々は0を持っている 219 00:13:25,000 --> 00:13:30,000 と1 - 1である0 * 0。 220 00:13:30,000 --> 00:13:33,000 それほど悪くはないので、の次の行に移りましょう。 221 00:13:33,000 --> 00:13:36,000 まず、kの我々の価値を必要としています。 222 00:13:36,000 --> 00:13:43,000 いくつかの残りが5 = 184で割って924、 223 00:13:43,000 --> 00:13:46,000 そうkのための私達の値は184です。 224 00:13:46,000 --> 00:13:54,000 今すぐ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 すべての権利は​​、次の行を実行してみましょう。 227 00:14:07,000 --> 00:14:10,000 kの値は、私たちのために1になります 228 00:14:10,000 --> 00:14:15,000 いくつかの残りは4 = 1で割った5。 229 00:14:15,000 --> 00:14:17,000 他の列に記入しましょう​​。 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 と1から184 * 1は185です。 233 00:14:33,000 --> 00:14:35,000 kの私たちの次の値がどうなるか見てみましょう。 234 00:14:35,000 --> 00:14:40,000 我々は4である1で4を分け持っているようにまあ、それが見えます。 235 00:14:40,000 --> 00:14:43,000 我々は1で割るいるこのケースではそのようなことkがに等しい 236 00:14:43,000 --> 00:14:50,000 上の行にdの値は、我々は我々のアルゴリズムで行われていることを意味します。 237 00:14:50,000 --> 00:14:58,000 我々は、我々が最後の行でx = 185とy = -1を持っていることをここに見ることができます。 238 00:14:58,000 --> 00:15:00,000 現在、私たちの本来の目的に戻ってきましょう。 239 00:15:00,000 --> 00:15:04,000 我々は、このアルゴリズムを実行した結果として、xの値と言った 240 00:15:04,000 --> 00:15:08,000 (MOD b)の逆数となります。 241 00:15:08,000 --> 00:15:15,000 185 5(MOD 924)の逆数であることを意味します 242 00:15:15,000 --> 00:15:20,000 これは、我々はdの185の値を持つことを意味します。 243 00:15:20,000 --> 00:15:23,000 事実d = 1の最後の行に 244 00:15:23,000 --> 00:15:26,000 その電子がmと互いに素であったかどうかを検証します。 245 00:15:26,000 --> 00:15:30,000 それが1でなかったならば、我々は新しい電子を選択しなければならないでしょう。 246 00:15:30,000 --> 00:15:33,000 今ロブが私のメッセージを受け取ったかどうかを確認してみましょう。 247 00:15:33,000 --> 00:15:35,000 誰かが私に暗号化されたメッセージを送信するとき 248 00:15:35,000 --> 00:15:38,000 限り、私は私の秘密鍵を秘密に保たれてきたように 249 00:15:38,000 --> 00:15:41,000 私はメッセージを解読することができるだけだ。 250 00:15:41,000 --> 00:15:46,000 解読するチャンクcに私は元のメッセージを計算することができます 251 00:15:46,000 --> 00:15:53,000 Dパワーにチャンク(mod n)と等しくなります。 252 00:15:53,000 --> 00:15:57,000 dとnは私の秘密鍵からのものであることを覚えておいてください。 253 00:15:57,000 --> 00:16:01,000 我々解読各チャンクのチャンクから完全なメッセージを取得するには 254 00:16:01,000 --> 00:16:04,000 し、結果を連結します。 255 00:16:04,000 --> 00:16:08,000 RSAは、正確にどのように安全ですか? 256 00:16:08,000 --> 00:16:10,000 真実は、我々は知らない。 257 00:16:10,000 --> 00:16:14,000 セキュリティは、それはメッセージを解読する攻撃を取るとどのくらいに基づいている 258 00:16:14,000 --> 00:16:16,000 RSAで暗号化されます。 259 00:16:16,000 --> 00:16:19,000 攻撃者は自分の公開鍵へのアクセス権を持っていることを忘れないでください、 260 00:16:19,000 --> 00:16:21,000 これは、eとnの両方が含まれています。 261 00:16:21,000 --> 00:16:26,000 攻撃者は、その2素数pとqにnを因数分解する管理している場合 262 00:16:26,000 --> 00:16:30,000 それから彼女は、拡張ユークリッドの互除法を用いてdを計算することができる。 263 00:16:30,000 --> 00:16:35,000 これは彼女にどんなメッセージを復号化するために使用することができる秘密鍵を与える。 264 00:16:35,000 --> 00:16:38,000 しかし、どのようにすぐに我々は、整数を因数分解することができますか? 265 00:16:38,000 --> 00:16:41,000 再び、我々は知らない。 266 00:16:41,000 --> 00:16:43,000 誰も、それを行うための高速な方法を見つけていません 267 00:16:43,000 --> 00:16:46,000 これは、十分な大きさn指定されたことを意味します 268 00:16:46,000 --> 00:16:49,000 それは非現実的に長い攻撃を取るだろう 269 00:16:49,000 --> 00:16:51,000 数を因数分解する。 270 00:16:51,000 --> 00:16:54,000 誰かがファクタリング整数の高速な方法を明らかにした場合 271 00:16:54,000 --> 00:16:57,000 RSAは破られるだろう。 272 00:16:57,000 --> 00:17:01,000 しかし、素因数分解は本質的に低速であっても、 273 00:17:01,000 --> 00:17:04,000 RSAアルゴリズムはまだそれにいくつかの欠陥を持っている可能性が 274 00:17:04,000 --> 00:17:07,000 それは、メッセージを簡単に解読することができます。 275 00:17:07,000 --> 00:17:10,000 誰も、まだこのような欠陥を発見したと明らかにした 276 00:17:10,000 --> 00:17:12,000 しかし、それは1つが存在しないという意味ではありません。 277 00:17:12,000 --> 00:17:17,000 理論的には、誰かがRSAで暗号化されたすべてのデータを読み取るそこにある可能性があります。 278 00:17:17,000 --> 00:17:19,000 プライバシーの問題の別のビットがあります。 279 00:17:19,000 --> 00:17:23,000 トミーは自分の公開鍵を使用して、いくつかのメッセージを暗号化した場合 280 00:17:23,000 --> 00:17:26,000 そして、攻撃者は自分の公開鍵を使用して同じメッセージを暗号化し 281 00:17:26,000 --> 00:17:29,000 攻撃者は、2つのメッセージが同一であることがわかります 282 00:17:29,000 --> 00:17:32,000 したがって、トミーは暗号化され知っている。 283 00:17:32,000 --> 00:17:36,000 これを防止するために、メッセージは、一般的にランダムビットで埋められます 284 00:17:36,000 --> 00:17:39,000 同じメッセージが暗号化されたように、暗号化される前に 285 00:17:39,000 --> 00:17:44,000 複数回メッセージのパディングが異なる限り、違って見えるでしょう。 286 00:17:44,000 --> 00:17:47,000 しかし、我々はチャンクにメッセージを分割する必要がどのように覚えている 287 00:17:47,000 --> 00:17:50,000 各チャンクはnよりも小さくなるように? 288 00:17:50,000 --> 00:17:52,000 塊を水増しすることは我々は物事を分割する必要性があることを意味 289 00:17:52,000 --> 00:17:57,000 さらにチャンクにパディングチャンクはnよりも小さくなければならないからです。 290 00:17:57,000 --> 00:18:01,000 暗号化および復号化は、RSAと比較的高価である 291 00:18:01,000 --> 00:18:05,000 と非常に多くのチャンクにメッセージを分割する必要があることは非常に高価なことができます。 292 00:18:05,000 --> 00:18:09,000 大量のデータが暗号化されており、解読する必要がある場合 293 00:18:09,000 --> 00:18:12,000 我々は、対称鍵アルゴリズムの利点を組み合わせることができます 294 00:18:12,000 --> 00:18:16,000 RSAのものとし、セキュリティと効率の両方を取得します。 295 00:18:16,000 --> 00:18:18,000 我々はここでそれには触れませんが、 296 00:18:18,000 --> 00:18:23,000 AESはVigenèreとシーザー暗号のような対称鍵アルゴリズムです 297 00:18:23,000 --> 00:18:25,000 クラックすることが、はるかに難しい。 298 00:18:25,000 --> 00:18:30,000 もちろん、我々は共有秘密鍵を確立せずにAESを使用することはできません。 299 00:18:30,000 --> 00:18:34,000 2システム間で、我々は前にその問題を見ました。 300 00:18:34,000 --> 00:18:40,000 しかし、今、私たちは2つのシステム間の共有秘密鍵を確立するためのRSAを使用することができます。 301 00:18:40,000 --> 00:18:43,000 我々は、データの送信者を送信しているコンピュータと呼ぶことにします 302 00:18:43,000 --> 00:18:46,000 とコンピュータがデータを受信機を受信。 303 00:18:46,000 --> 00:18:49,000 受信機は、RSA鍵のペアを持っており、送信する 304 00:18:49,000 --> 00:18:51,000 送信者への公開鍵。 305 00:18:51,000 --> 00:18:54,000 送信者は、AESキーを生成 306 00:18:54,000 --> 00:18:57,000 レシーバのRSA公開鍵で暗号化し、 307 00:18:57,000 --> 00:19:00,000 とレシーバにAESのキーを送信します。 308 00:19:00,000 --> 00:19:04,000 受信機は、RSA秘密鍵でメッセージを復号化します。 309 00:19:04,000 --> 00:19:09,000 送信者と受信者の両方が今、それらの間の共有のAESキーを持っています。 310 00:19:09,000 --> 00:19:14,000 RSAより暗号化と復号化ではるかに高速であるAES、 311 00:19:14,000 --> 00:19:18,000 今では、大量のデータを暗号化し、受信機にそれらを送信するために使用することができます 312 00:19:18,000 --> 00:19:21,000 復号化に同じ鍵を使用できる人。 313 00:19:21,000 --> 00:19:26,000 RSAより暗号化と復号化ではるかに高速であるAES、 314 00:19:26,000 --> 00:19:30,000 今では、大量のデータを暗号化し、受信機にそれらを送信するために使用することができます 315 00:19:30,000 --> 00:19:32,000 復号化に同じ鍵を使用できる人。 316 00:19:32,000 --> 00:19:36,000 私達はちょうど共有鍵を転送するためにRSAを必要としていました。 317 00:19:36,000 --> 00:19:40,000 私たちはもはや全くRSAを使用する必要はありません。 318 00:19:40,000 --> 00:19:46,000 私がメッセージを持っているように見えます。 319 00:19:46,000 --> 00:19:49,000 誰も私がそれをキャッチする前に、紙飛行機の上にあるものを読むかどうかは関係ありません 320 00:19:49,000 --> 00:19:55,000 私は、秘密鍵でだけだからです。 321 00:19:55,000 --> 00:19:57,000 メッセージ内のチャンクのそれぞれ解読してみましょう。 322 00:19:57,000 --> 00:20:07,000 最初の塊、658、我々は、185であるd電源に引き上げる 323 00:20:07,000 --> 00:20:18,000 989あるmod nを、67に等しいので、 324 00:20:18,000 --> 00:20:24,000 これは、ASCIIの文字Cである。 325 00:20:24,000 --> 00:20:31,000 さて、第2のチャンクにドラッグします。 326 00:20:31,000 --> 00:20:35,000 第二チャンクは、値15を有している 327 00:20:35,000 --> 00:20:41,000 我々は第百八十五べき乗、どの 328 00:20:41,000 --> 00:20:51,000 モッズ989、これは83に等しい 329 00:20:51,000 --> 00:20:57,000 これは、ASCIIの文字のSです。 330 00:20:57,000 --> 00:21:06,000 値799を持つ第三塊のために今、私たちは、185に上げる 331 00:21:06,000 --> 00:21:17,000 モッズ989、これは53に等しく、 332 00:21:17,000 --> 00:21:24,000 ASCIIの文字5の値である。 333 00:21:24,000 --> 00:21:30,000 今値975を持つ最後のチャンクに対して、 334 00:21:30,000 --> 00:21:41,000 我々は、185にMOD 989を上げる 335 00:21:41,000 --> 00:21:51,000 これは、ASCIIの文字0の値は48に等しい。 336 00:21:51,000 --> 00:21:57,000 私の名前はロブ·ボーデンであり、これはCS50です。 337 00:21:57,000 --> 00:22:00,000 [CS50.TV] 338 00:22:06,000 --> 00:22:08,000 すべてのRSA。 339 00:22:08,000 --> 00:22:14,000 すべてのRSA。 [笑い] 340 00:22:14,000 --> 00:22:17,000 まったく。