乱数表

乱数表（らんすうひょう、）とは、乱数列の数表のことだが、この記事ではもっぱら暗号に関係するものについて主に暗号理論の観点から述べる。なお、日本において広く知られているものに野球における乱数表があり、暗号の一種ではあるが限定された話となるので、独立記事の「野球における乱数表」の方を参照のこと。また英語版記事としては、対応している random number table の他、 も参照。
暗号と乱数.
文字の出現頻度の偏りなどといった統計的特徴は、しばしば暗号解読の手がかり、場合によっては決め手にもなる。対抗手段として確実性の高い方法に、乱数の利用によって「スクランブル」を掛ける、という手法がある。その場合に、正規の受信者は乱数から元の数字や文字に戻すために、送信側と同一の、あるいはペアの（逆関数となっている）表が必要になる。そのような、暗号化と復号のための乱数を表にしたものを「乱数表」という。
乱数表は、擬似乱数でない何らかの方法で作られた真の乱数、それも良質な乱数であることが望まれる（コンピュータ普及以前は擬似乱数によるものでも意味があったが、現代では普通の（コンピュータで容易に得られる）擬似乱数の乱数表はあまり意味がない）。レインボーテーブルなども見た目は乱数が並んだ表であるが、乱数としてではなく、特別の目的を持っている点で異なる。
コードと乱数.
「コード (暗号) 」とは、英単語のようなある程度まとまった情報を単位として符号を割振る形式の暗号であり、次節のサイファーと対置される。一例としては「敵艦隊見ゆとの警報に接し、連合艦隊は直ちに出動、これを撃沈 滅せんとす」という元の文章を「（アテヨイカヌ）ミユトノケイホウニセツシ（ノレツヲハイ）タダチニ（ヨシス）コレヲ（ワケフウメル）セントス」という暗号文とするような暗号である（平文は略）。この例では「（仮名3文字）」のコードのうち2文字目が平文を連想させるようなものになっているのは扱いの簡便さが目的だが、暗号としてはそのぶん弱いといえる。これを、乱数（字の場合は「乱字」とも言う）によってランダムに割振ることで、推測を難しくできる。
サイファーと乱数.
「サイファー」（w:Cipher）とは、電子化以前の暗号において、文字単位で転置や置換を掛けるようなタイプの暗号であり、前節のコードと対置される。電子化以後のブロック暗号なども、目的の情報とは無関係に、固定のデータサイズで変換する、一種のサイファーと言える。暗号学において狭義には乱数表とは、このようなサイファーにおいて表の選択に使う乱数を、帳面に印刷もしくは筆記したものである。乱数表に使う乱数は、できれば擬似乱数でない真の乱数のほうが望ましいが、それよりも実際の安全性に影響が大きいのは、その運用法である。次節で述べるワンタイムパッドとして運用できれば良いが、そのためには通信に使うだけの量の乱数列をあらかじめ送信者と受信者の間で共有しておく、という大きなコストが掛かる。一方で、同じ乱数列の再利用を続ければ、敵にその内容を悟られる危険は高い。
ワンタイムパッドと乱数.
真の乱数を使い一度使った乱数列は2度と使わない（ワンタイムパッド）、という運用が正しくなされた乱数による暗号について暗号理論では、情報理論的安全性がある、と言う。理論上「最も強い」ということだが（どのように解読したとしても、どのような解読も「同様にもっともらしい」ということになるので、解読が不可能）、システムとしての暗号の強さは、その運用の難易度などといったことも含めて評価されねばならず、ワンタイムパッドには、その正しい運用はコストが極めて高い、という弱点がある（正しくない運用は、暗号自体の理論的な強度を台無しにする弱点に、容易になり得る）。