擬似乱数(ぎじらんすう、pseudo-random number)とは、乱数列(乱数)のように見えるが、実際には確定的な計算によって求めている数列に含まれる数を指す。擬似乱数を生成する機器を擬似乱数生成器、生成アルゴリズムを擬似乱数生成法と呼ぶ。
乱数は本来規則性も再現性も無いために予測は不可能だが(例:サイコロを振る時、今までに出た目から次に出る目を予測するのは不可能)、擬似乱数は計算によって作るので、作り方が分かれば理論的には予測可能であり、また内部の初期値(シード)が分かれば、先に計算しておくこともできる。
何をもって擬似乱数と呼ぶのかは議論があるところだが、暗号理論では擬似乱数(生成器)に明確な定義がある。すなわち、多項式時間の計算機が乱数と識別不能な列を出力する機器のことを、擬似乱数生成器と呼び、この列に含まれる数を(暗号論的)擬似乱数という。 いかなる数列であれば乱数列であるかも議論のあるところではあるが、一様分布であることと過去の数から次の数が予測不能であることは同値であることが示されている(Yao)。そこで過去の数から次の数が予測不能であるかで、(暗号論的)擬似乱数か否かを区別する。
シミュレーション実験や、暗号などに利用されている。 物理乱数よりも手軽に扱え、また、シード値を元に戻すことで、まったく同じ乱数列を生成できるため、実験の再現ができるというメリットがある。 逆に、再現性を利用して、シード値の選択を意図的(不正に)に行う可能性を排除することが必要な場合もある(楕円曲線暗号のパラメータ生成など)。
様々な擬似乱数生成法が知られている。
予測可能、再現性あり
古典的生成法 - 平方採中法、線形合同法、混合合同法、線形帰還シフトレジスタ
新しい生成法 - メルセンヌ・ツイスタ、カオス乱数
予測不能、再現性あり
暗号学的に安全な生成法 - BBS(Blum Blum Shub)、Fortuna
予測不能、再現性なし
ハードウェア乱数生成器 - サイコロ
混合合同法(mixed congruential method) [編集]
下の式に適当な a、p、q を代入する(必要な桁数が採れれば何でも良い)。求まった a' の中間あたりの必要な桁数を乱数として採用し、それを新たな a として、再び下の式に代入する。
感染症
ケーブルテレビ
インフルエンザ
バイオリズム
戯曲
天体
喜劇
真菌学
日本画
宇宙ステーション
地層の作り
神社案内
未知の宇宙
脳と神経
日本の重要文化財
下町東京
広島の歴史
不動産用語
サンタはどこ
牛の生涯
ap + q = a'
(例)5 桁の擬似乱数を作ってみる。ただし、最初は a = 14992、p = 673、q = 944とし、求まった a' の、十の位から十万の位までを採用することとする。
14992×673+944 = 10090560 → 09056
09056×673+944 = 06095632 → 09563
09563×673+944 = 06436843 → 43684
43684×673+944 = 29400276 → 40027
40027×673+944 = 26939115 → 93911
…
こうして、擬似乱数列 {14992, 9056, 9563, 43684, 40027, 93911, …} を得る。
平方採中法(middle-square method) [編集]
1946年頃、ノイマンが提案
初期値に適当な a をきめ、それを 2 乗する。求まった値の中央にある、必要な桁数を採って乱数とし、それを 2 乗して求まった値の中央にある必要な桁数を採って次の乱数とする。これを繰り返して乱数列とする方法。ここで「中央」とは、求まった値を必要な桁数の 2 倍の桁数として見た時の中央とする。たとえば、4 桁を必要としていて、求まった値が 7 桁の時は、最上位の前の位(千万の位)に「0」を付け足して 8 桁とする(下の例を参照)。
(例)4 桁の擬似乱数を作ってみる。ただし、最初は a = 1763とする。
17632 = 03108169 → 1081
10812 = 01168561 → 1685
16852 = 02839225 → 8392
83922 = 70425664 → 4256
42562 = 18113536 → 1135
…
こうして、擬似乱数列 {1763, 1081, 1685, 8392, 4256, 1135, …} を得る
一般的には、平方採中法は偶数桁を採る時にしか使えないことと、周期が短い、つまり、どちらも、ずっと繰り返していればいつかは最初の数字に一致する数値が現れるが、それが平方採中法の方が早いことから、混合合同法を使うことの方が多いようである。