0:00:00.000,0:00:02.000 解決策を示します。 0:00:02.000,0:00:06.000 まずアリスとボブはある原始根と[br]生成元を使うことを確認し合います。 0:00:06.000,0:00:07.000 これは秘密ではありません。 0:00:07.000,0:00:10.000 この場合、17 と 3 にします。 0:00:10.000,0:00:15.000 次に、アリスは秘密の乱数、たとえば 15 を選んで[br]次のように計算します。 0:00:15.000,0:00:20.000 3 を 15 乗してから 17 で割り、 0:00:20.000,0:00:24.000 剰余をボブに公然と送ります。 0:00:24.000,0:00:29.000 同様に、ボブも自分の秘密の乱数、[br]たとえば 13 を選んで次のように計算します。 0:00:29.000,0:00:34.000 3 を 13 乗して、17 で割り、この計算の余り(剰余)を 0:00:34.000,0:00:38.000 特に秘密にせず、アリスに送ります。 0:00:38.000,0:00:40.000 ここからが、この手法の核心部分です。 0:00:40.000,0:00:43.000 アリスは、ボブから送られた数を 0:00:43.000,0:00:47.000 自分の秘密の数で累乗します。 0:00:47.000,0:00:51.000 これで、共有の秘密の数が得られます。[br]この場合は 10 です。 0:00:51.000,0:00:55.000 同様に、ボブもアリスが秘密にせずに送付した[br]計算結果を 0:00:55.000,0:00:57.000 自分の秘密の数値でべき乗すると、 0:00:57.000,0:01:00.000 同じ共有の秘密の数値が得られます。 0:01:00.000,0:01:05.000 一見、別々の計算のようですが、彼らは[br]まったく同じ計算を行っているのです。 0:01:05.000,0:01:06.000 アリスの場合、 0:01:06.000,0:01:10.000 ボブから受信した 12 は 0:01:10.000,0:01:14.000 3 を 13 乗して 17 で割った余りです。 0:01:14.000,0:01:21.000 このため、彼女の計算は、3 を 13 乗し、さらに 15乗して [br]17 で割った余りを求めるのと同じです。 0:01:21.000,0:01:22.000 ボブの場合、 0:01:22.000,0:01:26.000 彼がアリスから受信した 6 は、 0:01:26.000,0:01:30.000 3 を 15 乗して 17 で割った余りです。 0:01:30.000,0:01:31.000 このため彼の計算は 0:01:31.000,0:01:35.000 3 を 15 乗し、さらに 13 乗したのと[br]同じです。 0:01:35.000,0:01:39.000 彼らは同じ計算を、指数の順序を変えて[br]行っただけなのです。 0:01:39.000,0:01:42.000 指数の順序を入れ替えても、結果は変わりません。 0:01:42.000,0:01:44.000 このため、双方とも 3 を、 0:01:44.000,0:01:47.000 自分たちの秘密の数値で[br]累乗しています。 0:01:47.000,0:01:51.000 イブは、秘密の数値である 15,13 のいずれも知らないので、 0:01:51.000,0:01:55.000 答を出すことができません。 0:01:55.000,0:01:57.000 この方法を使えば安全です。 0:01:57.000,0:02:01.000 イブは、離散対数の問題に阻まれてしまうため、 0:02:01.000,0:02:03.000 十分に大きな数値を使えば、 0:02:03.000,0:02:06.000 イブは現実的な時間内では 0:02:06.000,0:02:09.000 この暗号を破ることができません。 0:02:09.000,0:02:11.000 こうして鍵交換の問題が解決されます。 0:02:11.000,0:02:14.000 この手法と疑似乱数生成機と併用すれば、 0:02:14.000,0:02:18.000 一度も会ったことのない人同士でも[br]暗号通信ができます。