「ランダムって、本当にランダムなんですか?」
由紀の質問に、陸が笑った。「哲学的だな」
「でも重要な問題だ」葵がノートを開いた。「コンピュータの乱数は、実は完全にランダムじゃない」
「え?」由紀が驚く。
「プログラムは決定論的に動く。同じ入力なら、常に同じ出力。だから、コンピュータが生成する『乱数』は、疑似乱数と呼ばれる」
陸が興味津々だ。「じゃあ、予測できるってこと?」
「理論上はね。種と呼ばれる初期値を知っていれば、全ての乱数列を再現できる」
その時、S教授が部室に入ってきた。
「興味深い話をしているね」
「教授!」三人が挨拶する。
「真の乱数と疑似乱数の違い、理解しているかな?」
葵が説明した。「疑似乱数は、アルゴリズムで生成される。パターンがあるけど、非常に複雑で予測困難」
「そうだ。暗号学的に安全な疑似乱数生成器は、たとえ数列の一部を見ても、次の値を予測できないように設計されている」
由紀がノートに書き留める。「じゃあ、真の乱数はどうやって作るんですか?」
「物理現象を使う」教授が答えた。「放射性崩壊、量子ノイズ、大気ノイズ。これらは本質的に予測不可能だ」
陸が手を挙げた。「サイコロも真の乱数?」
「微妙だ」葵が言った。「古典物理では、サイコロの動きは決定論的。でも、初期条件への敏感性が高すぎて、実質的に予測不可能」
「カオス理論」教授が補足した。「決定論的だけど、予測不可能。これが混沌の本質だ」
由紀が考え込んだ。「情報理論では、どう区別するんですか?」
葵が図を描いた。「情報理論的には、圧縮できない列が『ランダム』。パターンがあれば圧縮可能、つまり非ランダム」
「でも」陸が反論した。「長いパスワードも圧縮できないけど、人間が作ったものだよね」
「鋭い」教授が感心した。「コルモゴロフ複雑性という概念がある。ある列を生成する最短プログラムの長さ。もしプログラムが列自体より短ければ、パターンがあることになる」
葵が続けた。「真にランダムな列は、それ自体が最短の記述になる。つまり、圧縮不可能」
由紀の目が輝いた。「じゃあ、ランダムさって、説明の短さで測れる?」
「まさに。それがアルゴリズム的ランダムネスの定義だ」
陸がスマホを取り出した。「このアプリの乱数、信頼できるかな?」
教授が覗き込む。「用途による。ゲームなら疑似乱数で十分。でも、暗号鍵の生成には、暗号学的に安全な乱数が必要だ」
「セキュリティの問題?」
「そうだ。弱い乱数生成器は、攻撃者に予測される可能性がある」
葵が補足した。「実際、過去に疑似乱数の欠陥を突いた攻撃がいくつもある」
由紀が真剣に聞く。「じゃあ、どうやって良い乱数を作るんですか?」
「複数のエントロピー源を組み合わせる」教授が説明した。「キーボードのタイミング、マウスの動き、ハードウェアノイズ。これらを混ぜて、予測不可能な種を作る」
「なるほど」由紀が納得する。
陸が笑った。「俺の行動パターンも、良いエントロピー源になりそう」
「確かに予測不可能だけどね」葵が苦笑した。
教授が立ち去る前に言った。「ランダムさは、情報の基盤だ。完全な予測可能性は、情報量ゼロを意味する」
三人は静かに頷いた。
「ランダム先輩、今日も気まぐれに大事なことを教えてくれた」由紀が呟いた。
窓の外で、風が予測不可能に木の葉を揺らしていた。