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