種も仕掛けもない数 (暗号)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/10/20 13:50 UTC 版)
暗号理論における種も仕掛けもない数 (Nothing-up-my-sleeve number) とは、なんらかの性質が隠されていないことが自明であるように作られた数を指す。こういった数は暗号学的ハッシュ関数やサイファ[訳注 1]といった暗号学的関数を設計する際に用いられる。これらのアルゴリズムはしばしばデータを初期化したりデータに加え入れたりするための適当な定数を必要とするが、暗号設計者はこれらの定数が悪意ある目的(例えばバックドアを仕込むなど)で選ばれたものでないことを明示したい場合がある[1]。このようなときには調節の余地が少ないよう作られた数を使うことができる。例えば円周率の最初の何桁かを定数として採用するなどである[2]。一方で「円周率の小数点以下何桁も後ろの方」などは、暗号設計者が後で悪用するための秘密の脆弱性を仕込むことを目的として作為的にその位置を選んだ可能性があるので、信頼できるとはみなされない。
円周率、ネイピア数、代数的無理数などの実数を位取り記数法で表記したときの桁は均等に出現すると予想されている(正規数を参照)。これらの数は一見ランダムではあるものの情報量は非常に低いので、コルモゴロフ複雑性の観点からは乱数ではない。こういった数を用いることは 1975 年アメリカ合衆国政府から発表された Data Encryption Standard (DES) に関する初期の論争が動機づけとなった。DES は S ボックスで用いている定数に対する説明がないことで批判を受けていたのである(実際には現在でいうところの差分解読法を防ぐため注意深く選択された定数であったことがのちに判明したが)[3]。こういった事情から、暗号に用いる定数を生成するためのより透明性の高い方法の必要性が感じられていた。

「種も仕掛けもない数」は英語では "nothing-up-my-sleeve number" というが、"nothing up my sleeve" とはマジシャンがマジックを行う前に袖を開いて何も隠していないことを示すときに使うフレーズである。
例
- ロナルド・リベストは今日広く使われている MD5 ハッシュにおいて正弦関数を定数の生成に用いた[4]。
- アメリカ国家安全保障局 (Nasional Security Agency, NSA) は Secure Hash Algorithm のうち SHA-1 と SHA-2 において、最初の 8 個の素数の平方根を定数の生成に用いた[5]。また SHA-1 はハッシュ計算の初期値として 0x0123456789ABCDEFFEDCBA9876543210F0E1D2C3 を用いている。
- Blowfish 暗号は鍵スケジュールの初期化に円周率の二進表記(最初の 3 は除く)を用いている[2]。
- RFC 3526は internet key exchange に用いられる素数(それ自体も円周率から生成されたもの)について記述している。
- NewDES の S ボックス はアメリカ独立宣言を基に作られた[6]。
- Advanced Encryption Standard の候補だった DFC で用いられているすべての任意定数(S ボックス内のすべてのエントリを含む)はネイピア数の二進表記から作られた[7]。
- ARIA は 1/π の二進表記を鍵スケジュールに用いている[8]。
- RC5 の鍵スケジュールはネイピア数と黄金数の二進表記を鍵スケジュールに用いている[9]。
- Tiny Encryption Algorithm や Red Pike などの複数の暗号が用いている 0x9e3779b9(十進法では 2654435769)は
- 種も仕掛けもない数 (暗号)のページへのリンク