1 00:00:10,588 --> 00:00:12,788 自然界を観察すると、 2 00:00:12,788 --> 00:00:15,528 いたるところに ランダムな揺らぎがある。 3 00:00:21,990 --> 00:00:24,717 「ノイズ」というランダムな揺らぎを 4 00:00:24,717 --> 00:00:28,327 計測することで、完全にランダムな数列を得られる。 5 00:00:28,635 --> 00:00:31,932 ノイズを抽出(計測)することで、 6 00:00:31,932 --> 00:00:33,866 数列を得るのだ。 7 00:00:35,558 --> 00:00:36,869 例えば、 8 00:00:36,869 --> 00:00:40,644 TVのノイズの電流をずっと計測すると、 9 00:00:40,644 --> 00:00:43,422 完全にランダムな数列が作られる。 10 00:00:45,760 --> 00:00:48,002 ランダムな数列を視覚化するには 11 00:00:48,002 --> 00:00:50,747 軌道を描き、その方向を 12 00:00:50,747 --> 00:00:52,261 数字によって変えれば良い。 13 00:00:52,261 --> 00:00:53,949 これを「ランダム・ウォーク」という。 14 00:00:54,903 --> 00:00:57,879 数列のどの範囲にも、どの部分にも 15 00:00:57,879 --> 00:00:59,188 規則が現れないことに注目しよう。 16 00:00:59,188 --> 00:01:04,135 次の動きは絶対に予測できないのだ。 17 00:01:04,135 --> 00:01:07,812 ランダムな過程は あらかじめ予測できないので、 18 00:01:07,812 --> 00:01:11,129 「非決定的」と呼ばれる。 19 00:01:11,744 --> 00:01:14,610 一方で、機械は「決定的」だ。 20 00:01:14,610 --> 00:01:18,248 その動作は予測でき、繰り返しになる。 21 00:01:18,248 --> 00:01:21,314 1946年、ジョン・フォン・ノイマン は 22 00:01:21,314 --> 00:01:23,946 コンピュータを軍事目的に使おうとしていた。 23 00:01:23,946 --> 00:01:27,030 特に水素爆弾の設計に関わっていた。 24 00:01:28,907 --> 00:01:30,998 ENIAC というコンピュータを用い、 25 00:01:30,998 --> 00:01:33,036 核融合の方法に関する計算を 26 00:01:33,036 --> 00:01:36,914 何度も行おうとした。 27 00:01:36,914 --> 00:01:39,296 しかし、そのためには 28 00:01:39,296 --> 00:01:41,093 繰り返しのあるランダムな数列に 29 00:01:41,093 --> 00:01:43,706 必要なだけ素早くアクセスする必要があった。 30 00:01:43,706 --> 00:01:46,379 しかし ENIAC の内部メモリは ひどく限られていたので、 31 00:01:46,379 --> 00:01:50,153 長いランダム数列を記憶することができなかった。 32 00:01:50,153 --> 00:01:52,476 そこで ノイマンは、次の方法で 33 00:01:52,476 --> 00:01:54,541 ランダムのゴチャゴチャ具合を 34 00:01:54,541 --> 00:01:58,260 機械で再現するアルゴリズムを開発した: 35 00:01:58,260 --> 00:02:01,986 まず「シード」と呼ばれる 完全にランダムな数字を選択する。 36 00:02:01,986 --> 00:02:04,369 この数字は ノイズの計測や、 37 00:02:04,369 --> 00:02:07,232 現在時刻のミリ秒によって決める。 38 00:02:07,232 --> 00:02:11,544 次に この数字を計算機に入力し、 簡単な処理をする。 39 00:02:11,544 --> 00:02:14,513 シードを 2乗 して、 40 00:02:14,513 --> 00:02:18,013 結果の まんなか を出力する。 41 00:02:18,013 --> 00:02:20,892 出力は次のシードとして用いられる。 42 00:02:20,892 --> 00:02:24,264 これを 必要な回数だけ繰り返す。 43 00:02:26,295 --> 00:02:28,894 これが「平方採中法」だ。 44 00:02:28,894 --> 00:02:31,696 乱数生成の方法は、 45 00:02:31,696 --> 00:02:34,204 他にも沢山ある。 46 00:02:34,204 --> 00:02:35,992 数列のランダムさは、 47 00:02:35,992 --> 00:02:39,498 初期シードのみに依存する。 48 00:02:39,498 --> 00:02:41,636 シードが同じなら、数列は同じ。 49 00:02:41,636 --> 00:02:45,635 さて、完全なランダムと 50 00:02:45,635 --> 00:02:48,202 擬似ランダムの違いは何だろう。 51 00:02:51,264 --> 00:02:54,605 各 数列を ランダム・ウォーク で表してみよう。 52 00:02:58,051 --> 00:03:01,675 似たように見えるが、スピードを上げると? 53 00:03:02,918 --> 00:03:06,420 擬似ランダムは 結局 繰り返しになる。 54 00:03:06,420 --> 00:03:09,684 これはアルゴリズムが 以前と同じシード値を 55 00:03:09,684 --> 00:03:11,263 生成すると発生し、 56 00:03:11,263 --> 00:03:13,019 そこから 周期的になる。 57 00:03:13,019 --> 00:03:16,697 擬似ランダムが繰り返しになるまでの 数列の長さをー 58 00:03:16,697 --> 00:03:18,990 「ピリオド」という。 59 00:03:18,990 --> 00:03:24,505 ピリオドは初期シードの桁数に強く制限される。 60 00:03:24,505 --> 00:03:26,990 例えば 2桁のシードを用いると、 61 00:03:26,990 --> 00:03:31,008 アルゴリズムが 同じシードを生成し、 繰り返しになるまで 62 00:03:31,008 --> 00:03:35,390 多くて 100通り の数字を生成できる。 63 00:03:35,390 --> 00:03:39,220 3桁のシードなら、 繰り返しまでの数を 64 00:03:39,220 --> 00:03:41,309 1000通りに拡大できる。 65 00:03:41,309 --> 00:03:45,312 4桁のシードなら、 繰り返しまでの数字の個数は 66 00:03:45,362 --> 00:03:46,935 1万まで広がる。 67 00:03:46,935 --> 00:03:49,337 しかし もしシードが十分に大きければ、 68 00:03:49,337 --> 00:03:53,984 繰り返しまで 数兆、数京もの数列を 69 00:03:53,984 --> 00:03:56,704 生成できる。 70 00:03:56,704 --> 00:03:59,955 しかしキーの違いには注意が必要だ。 71 00:03:59,955 --> 00:04:02,026 擬似ランダム数を生成する時、 72 00:04:02,026 --> 00:04:05,841 起こり得る数列はかなり制限される。 73 00:04:05,841 --> 00:04:07,339 例えば、 74 00:04:07,339 --> 00:04:11,844 アリスが完全ランダムで 20個のシフト数を生成したとする。 75 00:04:11,844 --> 00:04:14,504 これは あり得るシフト数列が書かれた、 76 00:04:14,504 --> 00:04:17,882 均一な紙の山から 1枚を選ぶのに等しい。 77 00:04:17,882 --> 00:04:22,179 この山には 26^20 ものページがあるから、 78 00:04:22,179 --> 00:04:24,639 天文学的な大きさになる。 79 00:04:24,639 --> 00:04:27,390 山の元に立って、光を上に向けて放つと、 80 00:04:27,390 --> 00:04:30,395 頂上にいる人間が光を目にするのは 81 00:04:30,395 --> 00:04:33,356 2億年先になる。 82 00:04:33,356 --> 00:04:37,943 これと比べて、アリスが 20桁の擬似ランダム数列を、 83 00:04:37,943 --> 00:04:40,961 4桁のシードで生成した場合は、 84 00:04:40,961 --> 00:04:44,143 10,000 通りの初期シードから 85 00:04:44,143 --> 00:04:48,136 1つを選ぶに等しい。 86 00:04:48,136 --> 00:04:52,740 つまり 彼女が生成できる数列は 10,000 通りしかなく、 87 00:04:52,740 --> 00:04:57,122 全数列のうちの ごく小さな 1部分にすぎない。 88 00:04:57,122 --> 00:05:00,873 シフト数をランダムから擬似ランダムに置き換えた時、 89 00:05:00,873 --> 00:05:06,224 鍵空間を ごくごく小さな シード空間にまで 縮めることになる。 90 00:05:06,224 --> 00:05:09,220 だから 擬似ランダムをー 91 00:05:09,220 --> 00:05:12,982 完全なランダムのように見せかけるには、 92 00:05:12,982 --> 00:05:15,699 コンピュータが 全てのシードを試みるのを 93 00:05:15,699 --> 00:05:19,194 現実的に不可能にする必要がある。 94 00:05:19,194 --> 00:05:22,807 ここで 情報工学の世界では、 次の2つがハッキリと区別される。 95 00:05:22,807 --> 00:05:25,264 「可能」と 96 00:05:25,414 --> 00:05:29,246 「現実的な時間内で可能」 の違い。 97 00:05:29,296 --> 00:05:32,189 例えるなら、自転車のダイヤル鍵と同じ理屈だ。 98 00:05:32,189 --> 00:05:36,002 全ての番号を試せば、 誰でも簡単に解除の番号が分かると 99 00:05:36,002 --> 00:05:38,421 知られている。 100 00:05:38,421 --> 00:05:40,706 しかし それには何日も掛かるので、 101 00:05:40,706 --> 00:05:45,348 8時間くらいなら、事実上 安全と考えられる。 102 00:05:46,502 --> 00:05:48,833 擬似ランダムの生成では、 103 00:05:48,833 --> 00:05:54,078 シードの桁数が増えるほど 強固なセキュリティになる。 104 00:05:54,078 --> 00:05:56,450 最も速いコンピュータが 105 00:05:56,450 --> 00:06:00,443 全てのシードを試すまでに 何百年も掛かるのなら、 106 00:06:00,443 --> 00:06:04,425 完璧に強固ではなくても、 事実上 安全とみなして 107 00:06:04,425 --> 00:06:06,515 差し支えない。 108 00:06:08,069 --> 00:06:09,744 コンピュータが速くなるのに従い、 109 00:06:09,744 --> 00:06:13,874 シードの大きさを増やす必要がある。 110 00:06:13,874 --> 00:06:17,664 擬似ランダムのお陰で、 アリスとボブは 111 00:06:17,664 --> 00:06:22,064 前もって全てのランダムシフト数を 共有しなくてよくなった。 112 00:06:22,064 --> 00:06:25,516 代わりに、それより短いランダムなシードを共有し、 113 00:06:25,516 --> 00:06:29,055 ランダムに見える数列を 必要な時に 生成すれば 114 00:06:29,055 --> 00:06:31,683 よい。 115 00:06:31,683 --> 00:06:32,893 しかし もし、 116 00:06:32,893 --> 00:06:39,461 彼らが二度と会えず、シードを共有できなくなったら どうなるだろう?