擬似乱数(pseudorandom number)とは、乱数の代わりに使う目的で、有限個の状態を決まった規則で更新して作る数の列である。状態が有限なので列は必ず周期をもち、線形合同法 $x_{n+1}=(ax_n+c)\bmod m$ の周期が最大の $m$ になるのは、$c$ と $m$ が互いに素で、$m$ の各素因数 $p$ について $p\mid a-1$ であり、$4\mid m$ なら $4\mid a-1$ であるときに限る(Hull–Dobell の定理)。周期が最大でも連続する値の組は少数の平行な超平面に乗り、種が $s$ 通り、出力が $r$ 通り($s< r$)の生成器は、すべての種を試す検定で優位度 $1-s/r$ 以上で見分けられる。そのため暗号では、効率よく計算できる検定で見分けられないことを安全性の定義とする。
前提知識: 乱数とシミュレーション, 合同式, 原始根, 確率空間
計算機で乱数を使うとき、実際に使われるのは、決まった規則で次々に計算される数の列である。たとえば $x_{n+1}=(13x_n+7)$ を $32$ で割った余り、という規則で $x_0=0$ から計算すると、$0,7,2,1,20,11,22,5,\dots$ と $0$ から $31$ までの数がちょうど 1 回ずつ現れてから同じ並びを繰り返す。このように、乱数の代わりに使う目的で決まった規則から作る数の列を 擬似乱数(pseudorandom number)という。
規則が決まっている以上、本当の乱数とはどこかで違う。この記事では、その違いを測る 2 つの見方を扱う。1 つは列の構造で、線形合同法の周期が最大になる条件(Hull–Dobell の定理、thm-prng-hull-dobell)と、連続する値の組が少数の平行な超平面に乗ること(thm-prng-hyperplanes)を証明する。もう 1 つは検定で見分けられるかどうかで、計算の手間を制限しない検定は、種の集合が出力の集合よりずっと小さい生成器を $1$ に近い優位度で見分けてしまうこと(thm-prng-statistical)を示し、暗号で使う計算量的な定義を述べる。高校で学ぶ線形合同法の定義と周期の存在は 乱数とシミュレーション の節「擬似乱数の作り方:線形合同法」にある。
有限集合 $\mathcal S$、写像 $f\colon\mathcal S\to\mathcal S$、集合 $\mathcal Y$ への写像 $g\colon\mathcal S\to\mathcal Y$ の組 $(\mathcal S,f,g)$ を 擬似乱数生成器(pseudorandom number generator)という。$\mathcal S$ の元を 状態、$f$ を 更新、$g$ を 出力 という。種(seed)$s_0\in\mathcal S$ から $s_{n+1}:=f(s_n)$ で状態の列を作り、$y_n:=g(s_n)$ を出力の列とする。ある $n_0\ge0$ があって $n\ge n_0$ のすべてで $s_{n+\rho}=s_n$ となるような最小の整数 $\rho\ge1$ を、種 $s_0$ からの列の 周期 という。
整数 $m\ge2$ と整数 $a,c$ を決める。$\mathbb Z_m:=\{0,1,\dots,m-1\}$ を状態の集合とし、更新を $f(x):=(ax+c)\bmod m$、出力を $g(x):=x/m\in[0,1)$ とする擬似乱数生成器を 線形合同法(linear congruential generator)という。ここで整数 $z$ について $z\bmod m$ は $z$ を $m$ で割った余り($\mathbb Z_m$ の元)である。$c=0$ の場合を 乗算合同法 という。
def-prng の生成器では、どの種からの列にも周期があり、周期は $\lvert\mathcal S\rvert$ 以下である。$f$ が全単射なら、$n_0=0$ にとれる(列ははじめから繰り返す)。
$s_0,\dots,s_{\lvert\mathcal S\rvert}$ の $\lvert\mathcal S\rvert+1$ 個は $\mathcal S$ の元なので、鳩の巣原理 により $0\le i< j\le\lvert\mathcal S\rvert$ で $s_i=s_j$ となるものがある。$s_{n+1}$ は $s_n$ だけで決まるので、帰納法で $n\ge i$ のすべてで $s_{n+(j-i)}=s_n$ である。よって周期が存在し、周期は $j-i$ 以下なので $\lvert\mathcal S\rvert$ 以下である。$f$ が全単射なら、周期を $\rho$ とし、それを与える $n_0$ をとると、$s_{n_0+\rho}=s_{n_0}$ に $f^{-1}$ を $n_0$ 回施して $s_\rho=s_0$ を得るので、帰納法で $n\ge0$ のすべてで $s_{n+\rho}=s_n$ である。$\square$
線形合同法では $\lvert\mathcal S\rvert=m$ なので、周期は $m$ 以下である(乱数とシミュレーション の命題「線形合同法の列はくり返す」)。出力 $x_n/m$ が $[0,1)$ をむらなく埋めるためには、周期がちょうど $m$ であることが望ましい。
以下、$a$ について
$$
W_n(a):=1+a+a^2+\dots+a^{n-1}\qquad(n\ge1)
$$
とおく。$(a-1)W_n(a)=a^n-1$ である。帰納法で $f^n(x)\equiv a^nx+cW_n(a)\pmod m$ がわかる。素数 $p$ と $0$ でない整数 $z$ について、$z$ を割り切る $p$ の冪の最大の指数を $v_p(z)$ と書く。
$p$ を素数とし、整数 $a$ は $p\mid a-1$ を満たし、$p=2$ のときはさらに $4\mid a-1$ を満たすとする。このとき $W_n(a)\ne0$ であり、すべての $n\ge1$ で $v_p(W_n(a))=v_p(n)$ である。
$a=1$ なら $W_n(a)=n$ なので正しい。$a\ne1$ とし、$t:=a-1$、$k:=v_p(t)$ とおく($k\ge1$、$p=2$ なら $k\ge2$)。$W_n(a)=0$ は $a^n=1$ を意味し、$a\ne1$ の整数では $a=-1$ に限る。このとき $a-1=-2$ は、$p$ が奇数なら $p$ で割り切れず、$p=2$ なら $4$ で割り切れないので、仮定に反する。よって $W_n(a)\ne0$ である。
段 1($p\nmid n$)。$a\equiv1\pmod p$ なので $W_n(a)\equiv n\not\equiv0\pmod p$ であり、$v_p(W_n(a))=0=v_p(n)$ である。
段 2($n=p$)。$a^i=(1+t)^i\equiv1+it\pmod{t^2}$ なので $W_p(a)\equiv p+t\cdot\frac{p(p-1)}2\pmod{t^2}$ である。$p$ が奇数なら $\frac{p-1}2$ は整数で、$t\cdot\frac{p(p-1)}2$ と $t^2$ はどちらも $p^2$ で割り切れるので、$W_p(a)\equiv p\pmod{p^2}$、すなわち $v_p(W_p(a))=1$ である。$p=2$ なら $W_2(a)=2+t$ で $4\mid t$ なので $v_2(W_2(a))=1$ である。さらに $a^p-1=tW_p(a)$ なので $v_p(a^p-1)=k+1$ であり、$a^p$ も仮定を満たす。
段 3(一般の $n$)。$\sum_{i< uv}a^i=\sum_{j< v}a^{uj}\sum_{i< u}a^i$ より $W_{uv}(a)=W_u(a)\,W_v(a^u)$ である。$v_p(n)$ についての帰納法で示す。$v_p(n)=0$ は段 1 である。$n=pn'$ なら $W_n(a)=W_p(a)W_{n'}(a^p)$ であり、段 2 と、$a^p$ に帰納法の仮定を当てたものから $v_p(W_n(a))=1+v_p(n')=v_p(n)$ である。$\square$
$m\ge2$ とし、線形合同法 $x_{n+1}=(ax_n+c)\bmod m$ を考える。次は同値である。
段 1(1 と 2 の同値)。種 $x_0$ からの周期が $m$ なら、$x_{n_0},\dots,x_{n_0+m-1}$ は相異なる $m$ 個の元で、$\mathbb Z_m$ 全体である。$f$ はこれらを順に次へ送るので、$f$ は $\mathbb Z_m$ 全体を 1 つの輪で回る全単射である。すると、どの種からも周期は $m$ である。逆は明らかである。さらにこのとき $\gcd(a,m)=1$ である。実際、$d:=\gcd(a,m)>1$ なら $f(0)=f(m/d)$ で $f$ は単射でない。
段 2((i) が必要なこと)。$d:=\gcd(c,m)>1$ とする。$x_{n+1}\equiv ax_n\pmod d$ なので、種 $x_0=0$ からの列はすべて $d$ の倍数であり、$1$ が現れない。よって 2 が成り立たない。
段 3(和の言葉に直す)。以下 $\gcd(a,m)=\gcd(c,m)=1$ とする。$f$ は全単射なので、2 は「$f^n(0)=0$ となる最小の $n\ge1$ が $m$ である」ことと同値である。$f^n(0)\equiv cW_n(a)$ で $c$ は法 $m$ で逆元をもつので、これは「$m\mid W_n(a)$ となる最小の $n\ge1$ が $m$ である」ことと同値である。一般に、法 $M$ について $\gcd(a,M)=1$ のとき、$h(x):=(ax+1)\bmod M$ は $\mathbb Z_M$ の全単射で $h^n(0)=W_n(a)\bmod M$ なので、$M\mid W_n(a)$ となる最小の $n\ge1$ が存在して $M$ 以下である。これを $N(M)$ と書く。$M\mid W_N(a)$($N=N(M)$)なら $a^N-1=(a-1)W_N(a)\equiv0$ なので、$W_{N+k}(a)=W_N(a)+a^NW_k(a)\equiv W_k(a)\pmod M$ である。よって $W_n(a)\bmod M$ は $n\bmod N$ だけで決まり、$M\mid W_n(a)\iff N(M)\mid n$ である。
段 4(素数の冪に分ける)。$m=p_1^{e_1}\cdots p_r^{e_r}$ と素因数分解すると、$m\mid W_n(a)$ はすべての $i$ で $p_i^{e_i}\mid W_n(a)$、すなわち $N(p_i^{e_i})\mid n$ と同値なので、$N(m)=\operatorname{lcm}_iN(p_i^{e_i})$ である。$N(p_i^{e_i})\le p_i^{e_i}$ なので $N(m)\le\prod_iN(p_i^{e_i})\le m$ であり、$N(m)=m$ はすべての $i$ で $N(p_i^{e_i})=p_i^{e_i}$ となることと同値である(逆向きは、互いに素な数の最小公倍数が積であることによる)。
段 5(素数の冪 $p^e$ の場合)。$p\nmid a$ のもとで、$N(p^e)=p^e$ は「$p\mid a-1$、かつ $p=2$、$e\ge2$ なら $4\mid a-1$」と同値であることを示す。
$m=2^k$($k\ge2$)なら、条件は「$c$ が奇数で $a\equiv1\pmod4$」になる。$m$ が平方因子をもたない数なら、(ii) は $a\equiv1\pmod m$ を意味し、$f(x)=x+c$ の単なる足し算になってしまう。周期を最大にしつつ $a$ を自由に選べるように、$m$ には $2$ の冪がよく使われる。
$c=0$ の乗算合同法では、$0$ が $f$ で動かないので周期は $m$ にならない。素数を法とするときは次のようになる。
$p$ を素数、$p\nmid a$ とし、$x_{n+1}=ax_n\bmod p$ とする。種 $x_0\ne0$ からの列の周期は、法 $p$ での $a$ の乗法的位数 $\operatorname{ord}_p(a)$ に等しく、$p-1$ の約数である。周期が $p-1$ になるのは、$a$ が法 $p$ の 原始根 であるときに限る。
$f$ は全単射なので、thm-prng-eventual により列ははじめから繰り返し、周期は $x_n=x_0$ となる最小の $n\ge1$ である。$x_n\equiv a^nx_0$ で $x_0$ は法 $p$ で逆元をもつので、$x_n=x_0\iff a^n\equiv1\pmod p$ である。よって周期は $\operatorname{ord}_p(a)$ で、Fermatの小定理 から $p-1$ の約数である。$\operatorname{ord}_p(a)=p-1=\varphi(p)$ は 原始根 の定義「乗法的位数と原始根」そのものである。$\square$
$m=32$、$a=13$、$c=7$ とする。$\gcd(7,32)=1$、$m$ の素因数は $2$ だけで $a-1=12$ は $4$ の倍数なので、thm-prng-hull-dobell の条件を満たす。実際、種 $0$ から
$$
0,7,2,1,20,11,22,5,8,15,10,9,28,19,30,13,16,23,18,17,4,27,6,21,24,31,26,25,12,3,14,29,0,\dots
$$
となり、$32$ 個の値がすべて 1 回ずつ現れる。
$p=31$ とする。$30$ の素因数は $2,3,5$ で、$3^{15}\equiv30$、$3^{10}\equiv25$、$3^6\equiv16$ はどれも $1$ でないので、原始根 の命題「原始根の判定法」により $a=3$ は法 $31$ の原始根である。種 $1$ からの列 $1,3,9,27,19,26,16,17,\dots$ は $1$ から $30$ までを 1 回ずつとって周期 $30$ である。一方 $a=2$ では $2^5=32\equiv1$ なので、列は $1,2,4,8,16,1,\dots$ で周期 $5$ しかない。
4 桁の数を 2 乗して 8 桁(足りなければ頭に $0$ を補う)とし、真ん中の 4 桁を次の数とする方法では、状態は $10^4$ 個あるが、種によっては周期がとても短い。$3792^2=14379264$ の真ん中は $3792$ なので、種 $3792$ からの列は $3792,3792,\dots$ と周期 $1$ である。thm-prng-eventual は周期が状態の数以下であることしか保証しない。
周期が最大でも、連続する値の組は空間にむらなく散らばるとは限らない。$k$ 個ずつ組にした点
$$
\boldsymbol u_n:=\Bigl(\frac{x_n}m,\frac{x_{n+1}}m,\dots,\frac{x_{n+k-1}}m\Bigr)\in[0,1)^k
$$
は、次のように少数の平行な超平面の上に乗る。
線形合同法 $x_{n+1}=(ax_n+c)\bmod m$ と $k\ge2$ について、整数 $b_0,\dots,b_{k-1}$(すべてが $0$ ではない)が
$$
b_0+b_1a+\dots+b_{k-1}a^{k-1}\equiv0\pmod m
$$
を満たすとする。このとき、すべての点 $\boldsymbol u_n$($n\ge0$)は、$\sum_jb_jt_j=$(定数)の形の平行な超平面のうち、高々 $\sum_j\lvert b_j\rvert$ 枚の上にある。さらに $c=0$ で、$b_j$ に正のものと負のものがともにあれば、その枚数は $\sum_j\lvert b_j\rvert-1$ 以下である。
$x_{n+j}\equiv a^jx_n+cW_j(a)\pmod m$($W_0(a):=0$)なので
$$
\sum_jb_jx_{n+j}\equiv\Bigl(\sum_jb_ja^j\Bigr)x_n+c\sum_jb_jW_j(a)\equiv K\pmod m,\qquad K:=c\sum_jb_jW_j(a)
$$
であり、$K$ は $n$ によらない。$m$ で割ると、$\sum_jb_j\frac{x_{n+j}}m\in\frac Km+\mathbb Z$ である。一方、$P:=\sum_{b_j>0}b_j$、$Q:=\sum_{b_j< 0}\lvert b_j\rvert$ とおくと、$0\le x/m< 1$ より $\sum_jb_j\frac{x_{n+j}}m$ は $-Q$ より大きく $P$ より小さいか、$P=0$ なら $0$ 以下、$Q=0$ なら $0$ 以上である。いずれにせよ値は長さ $P+Q$ の半開区間に入り、そこに入る $\frac Km+\mathbb Z$ の元は高々 $P+Q$ 個である。$c=0$ なら $K=0$ で値は整数であり、$P,Q>0$ なら値は開区間 $(-Q,P)$ に入るので、その整数 $-Q+1,\dots,P-1$ の $P+Q-1$ 個のどれかである。値が同じ点は同じ超平面に乗るので、主張が従う。$\square$
RANDU と呼ばれる乗算合同法 $m=2^{31}$、$a=65539=2^{16}+3$、$c=0$ を考える。
$$
a^2=2^{32}+6\cdot2^{16}+9\equiv6(2^{16}+3)-9=6a-9\pmod{2^{31}}
$$
なので、$(b_0,b_1,b_2)=(9,-6,1)$ が thm-prng-hyperplanes の条件を満たす。よって連続する 3 つの値の組 $\boldsymbol u_n=(x_n/m,x_{n+1}/m,x_{n+2}/m)$ は、$9t_0-6t_1+t_2=\ell$($\ell=-5,-4,\dots,9$)の $15$ 枚の平行な平面の上にしかない。種 $1$ から始めると $x_1=65539$、$x_2=393225$ で、$9\cdot1-6\cdot65539+393225=0$ である。3 次元の立方体を一様に埋めるべき点が、わずか $15$ 枚の平面に集まっている。乱数とシミュレーション の図で、$x_{k+1}=(5x_k+1)\bmod256$ の 2 次元の点が $5$ 本の直線に乗っていたのも同じ現象である($(b_0,b_1)=(-5,1)$ の場合で、定理の上界は $6$ 本)。
ここからは、生成器を「短い種を長い出力に引き伸ばす写像」として見る。有限集合 $\mathcal S$(種の集合)、$\mathcal R$(出力の集合)と写像 $G\colon\mathcal S\to\mathcal R$ を考える(def-prng の生成器で $L$ 個の出力を並べる写像 $s_0\mapsto(y_0,\dots,y_{L-1})$ がその例である)。
写像 $T\colon\mathcal R\to\{0,1\}$ を 検定 という。$\sigma$ を $\mathcal S$ 上の一様分布に従う確率変数、$\tau$ を $\mathcal R$ 上の一様分布に従う確率変数として
$$
\operatorname{Adv}_G(T):=\bigl|\Pr[T(G(\sigma))=1]-\Pr[T(\tau)=1]\bigr|
$$
を $T$ の $G$ に対する 優位度(advantage)という。乱数を使う検定は、使う乱数ごとの検定の平均として扱う。
統計学の検定、たとえば出力のビット列で $0$ と $1$ の個数や 2 ビットの組の個数の偏りを調べる検定は、この意味の検定の例である(BS23 §3.1、pp. 45–46)。どんな検定でも見分けられない生成器を作りたくなるが、それは不可能である。
$G\colon\mathcal S\to\mathcal R$ で $\lvert\mathcal S\rvert< \lvert\mathcal R\rvert$ とする。検定 $T_0:=\mathbf 1_{G(\mathcal S)}$(出力が $G$ の像に入れば $1$)は
$$
\operatorname{Adv}_G(T_0)=1-\frac{\lvert G(\mathcal S)\rvert}{\lvert\mathcal R\rvert}\ge1-\frac{\lvert\mathcal S\rvert}{\lvert\mathcal R\rvert}
$$
を満たし、これはすべての検定(乱数を使うものを含む)の優位度の最大値である。
$P(r):=\Pr[G(\sigma)=r]$、$U(r):=1/\lvert\mathcal R\rvert$ とおく。$r\in G(\mathcal S)$ なら $P(r)\ge1/\lvert\mathcal S\rvert>U(r)$、$r\notin G(\mathcal S)$ なら $P(r)=0$ である。$T_0$ については $\Pr[T_0(G(\sigma))=1]=1$、$\Pr[T_0(\tau)=1]=\lvert G(\mathcal S)\rvert/\lvert\mathcal R\rvert$ で、等式を得る。不等号は $\lvert G(\mathcal S)\rvert\le\lvert\mathcal S\rvert$ による。
最大であること:乱数を使わない検定 $T$ について $A:=T^{-1}(1)$ とおくと、$\Pr[T(G(\sigma))=1]-\Pr[T(\tau)=1]=\sum_{r\in A}(P(r)-U(r))$ である。$P-U$ が正になるのは $G(\mathcal S)$ の上だけなので、これは $\sum_{r\in G(\mathcal S)}(P(r)-U(r))=\operatorname{Adv}_G(T_0)$ 以下である。$A$ を補集合に替えると符号が変わるだけなので($\sum_r(P(r)-U(r))=0$)、絶対値も $\operatorname{Adv}_G(T_0)$ 以下である。乱数を使う検定の優位度は、乱数を固定した検定の差の平均の絶対値なので、やはり $\operatorname{Adv}_G(T_0)$ 以下である。$\square$
したがって、出力の集合が種の集合よりずっと大きい生成器は、すべての種を試す検定で $1$ に近い優位度で見分けられる。暗号で使う定義は、検定を 効率よく計算できるもの に限り、そのどれについても優位度が無視できるほど小さいとき生成器を 安全 とする(BS23 Attack Game 3.1・Definition 3.1、pp. 46–47)。最大の優位度 $\operatorname{Adv}_G(T_0)$ は $G(\sigma)$ と $\tau$ の分布の統計的距離に等しい(同書 Definition 3.5・Theorems 3.10–3.11、pp. 83–84)。
出力がビット列 $\mathcal R=\{0,1\}^L$ のとき、先頭の $i$ ビットから次のビットを当てる手順を 予測者 という。予測者 $A$ について、種を一様に選んだときに当たる確率を $\frac12+\varepsilon$ とする。
上の予測者 $A$($i$ ビット目を当てるもの。乱数を使ってもよい)から、検定 $T(r):=\mathbf 1\{A(r_0\cdots r_{i-1})=r_i\}$ を作ると、$\operatorname{Adv}_G(T)=\lvert\varepsilon\rvert$ である。
$r=G(\sigma)$ なら $T(r)=1$ は予測が当たることなので、確率は $\frac12+\varepsilon$ である。$r=\tau$ が一様なら、$\tau_i$ は先頭の $i$ ビットおよび $A$ の乱数と独立で一様なので、予測がどんな値でも当たる確率は $\frac12$ である。差は $\varepsilon$ である。$\square$
逆に、効率のよい予測者が存在しないなら効率のよい検定も存在しないことが知られている(Yao の定理。BS23 §3.5 の Theorem 3.6、p. 67)。この記事では証明しない。
法 $m=p$ が素数の線形合同法の連続する 3 つの値 $x_0,x_1,x_2$($x_1\ne x_0$)が分かれば、$x_2-x_1\equiv a(x_1-x_0)$ から $a\equiv(x_2-x_1)(x_1-x_0)^{-1}$、続いて $c\equiv x_1-ax_0\pmod p$ が求まり、以後の値はすべて計算できる。たとえば $p=101$ で $12,94,98$ が観測されたら、$a\equiv4\cdot82^{-1}\equiv37$、$c\equiv94-37\cdot12\equiv54$ で、次の値は $(37\cdot98+54)\bmod101=44$ である。出力が状態の上位ビットだけでも、格子の最も近い点を求める計算で状態を復元できることが多い(BS23 §3.7.1、pp. 70–73)。したがって線形合同法は、シミュレーションには使えても暗号には使えない。
thm-prng-hull-dobell の条件 (i)〜(iii) と、prop-prng-multiplicative の原始根の条件を 1 つずつ外す。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| (i) $\gcd(c,m)=1$ | $m=32$、$a=13$、$c=6$ | 周期が $16$(種 $0$ からは偶数だけ) |
| (ii) $p\mid a-1$($p=3$) | $m=9$、$a=2$、$c=1$ | 周期が $6$(種 $2$ からは $2,5,2,\dots$ で周期 $2$) |
| (iii) $4\mid a-1$ | $m=32$、$a=11$、$c=7$ | 周期が $16$ |
| $a$ が原始根 | $p=31$、$a=2$、$c=0$ | 周期が $5$(ex-prng-mult-31) |
1 行目:$a-1=12$ なので (ii)・(iii) は満たす。$x_{n+1}\equiv13x_n\pmod2$ なので偶奇は保たれ、種 $0$ から $0,6,20,10,8,14,28,18,16,22,4,26,24,30,12,2,0$ と $16$ 個の偶数を回る。
2 行目:$\gcd(1,9)=1$、$4\nmid9$ なので (i)・(iii) は満たす。種 $0$ から $0,1,3,7,6,4,0$ と周期 $6$ である。
3 行目:$\gcd(7,32)=1$、$2\mid10$ なので (i)・(ii) は満たす。種 $0$ から $0,7,20,3,8,31,28,27,16,23,4,19,24,15,12,11,0$ と周期 $16$ である。段 5 の議論では $v_2(W_{16}(11))=v_2(12)+v_2(8)=2+3=5$ で $32\mid W_{16}(11)$ となる。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する