公開鍵暗号(public-key cryptography)とは、受け手が公開鍵と秘密鍵の組を作り、誰でも公開鍵で暗号化できるが、秘密鍵をもつ受け手だけが復号できるようにする暗号の方式である。安全性は計算の難しさについての仮定に基づき、暗号化に乱数を使わない方式は、攻撃者が選んだ 2 つの平文のどちらを暗号化したかを必ず見分けられてしまうので意味的に安全でない。位数が素数の巡回群上の ElGamal 暗号は判定 Diffie–Hellman 問題が難しければ意味的に安全であり、Rabin 暗号では、一様に選んだ平文の暗号文を復号することが、成功の確率が半分になる程度の差を除いて法 $n=pq$ の素因数分解と同じ難しさになる。
前提知識: RSA暗号, Diffie–Hellman鍵共有, 離散対数, 中国剰余定理
これまでの暗号では、送り手と受け手があらかじめ同じ秘密の鍵を共有している必要があった。公開鍵暗号(public-key cryptography)では、受け手が鍵を 2 つ作り、暗号化に使う 公開鍵 は誰にでも公開し、復号に使う 秘密鍵 だけを手元に置く。誰でも公開鍵で暗号文を作れるが、それを読めるのは秘密鍵をもつ受け手だけである。この考え方は Diffie と Hellman が提案し(DH76 §III、p. 648)、代表的な方式に RSA暗号 がある。
公開鍵から秘密鍵が計算できてはならないので、公開鍵暗号の安全性は必ず「ある計算が難しい」という仮定に頼る。この記事では、方式と安全性を定義したうえで、次を証明する。暗号化に乱数を使わない方式は、2 つの平文のどちらを暗号化したかを必ず見分けられてしまうこと(thm-pke-deterministic)。位数が素数の巡回群上の ElGamal 暗号は、判定 Diffie–Hellman 問題が難しければ意味的に安全であること(thm-pke-elgamal)。一様に選んだ平文に対する Rabin 暗号の復号は、成功の確率が半分になる程度の差を除いて、法の素因数分解と同じ難しさであること(thm-pke-rabin)。
有限集合 $\mathcal M$(平文の集合)について、次の 3 つの手順の組 $(\mathsf{Gen},\mathsf{Enc},\mathsf{Dec})$ を 公開鍵暗号方式 という。
各手順は効率よく(鍵の長さの多項式時間で)計算できるものとする(BS23 Definition 11.1、p. 436)。安全性は、攻撃者に何を許し、何を達成されたら破られたとみなすかで定める。以下、攻撃者も乱数を使ってよい手順とし、確率は鍵生成・暗号化・攻撃者のすべての乱数についてとる。
意味的安全性は、攻撃者が自分で選んだ 2 つの平文のどちらが暗号化されたかすら見分けられないことを求める(BS23 Attack Game 11.1・Definition 11.2、pp. 436–437)。一方向性のほうは、一様に選んだ平文が丸ごと復元されないことしか求めない。公開鍵暗号では誰でも暗号化ができるので、攻撃者は何度でも好きな平文を暗号化してみることができる。このことから次が従う。
$\lvert\mathcal M\rvert\ge2$ とし、$\mathsf{Enc}$ が乱数を使わない($\mathit{pk}$ と $m$ で暗号文が決まる)とする。このとき、$\mathsf{Enc}$ を 1 回計算するだけの攻撃者 $\mathsf A$ で $\operatorname{Adv}^{\mathrm{SS}}(\mathsf A)=1$ となるものがある。
$\mathsf A$ は相異なる $m_0,m_1$ を選び、受け取った $c$ と自分で計算した $c_0:=\mathsf{Enc}(\mathit{pk},m_0)$ を比べ、$c=c_0$ なら $0$、そうでなければ $1$ を出力する。実験 $0$ では $c=c_0$ なので $p_0=0$ である。実験 $1$ では $c=\mathsf{Enc}(\mathit{pk},m_1)$ で、正しさから $\mathsf{Dec}(\mathit{sk},c)=m_1\ne m_0=\mathsf{Dec}(\mathit{sk},c_0)$ なので $c\ne c_0$、よって $p_1=1$ である。$\square$
この攻撃は BS23 §11.3.1(pp. 438–439)にある。RSA暗号 の定義「RSA暗号の鍵・暗号化・復号」のままの暗号化は決定的なので、意味的に安全でない(同記事の注意「実際の運用での注意」)。RSA 暗号は、秘密の情報があれば逆向きが計算でき、それがなければ逆向きの計算が難しいと考えられている写像(落とし戸つき一方向置換)の候補で、実際にはこれに乱数を組み合わせて使う(BS23 Definition 10.2(p. 400)、§10.3(pp. 403–406)、§11.4(pp. 441–445))。以下では、はじめから乱数を使う方式と、一方向性を素因数分解に結びつけられる方式を扱う。
以下、$G$ を位数が素数 $q$ の巡回群、$g$ をその生成元とし、$G$ と $g$ は公開されているとする。指数は $\mathbb Z_q=\{0,1,\dots,q-1\}$ の元とみなす(離散対数)。Diffie–Hellman鍵共有 の定義「Diffie–Hellman 問題」に従い、$x,y\in\mathbb Z_q$ を独立に一様に選んだ三つ組 $(g^x,g^y,g^{xy})$ の分布を $\mathcal D$、$x,y,z$ を独立に一様に選んだ $(g^x,g^y,g^z)$ の分布を $\mathcal R$ とし、三つ組を受け取って $0$ か $1$ を出力する手順 $\mathsf B$ の優位度を $\operatorname{Adv}^{\mathrm{DDH}}(\mathsf B):=\lvert\Pr[\mathsf B(\mathcal D)=1]-\Pr[\mathsf B(\mathcal R)=1]\rvert$ とする。
平文の集合を $\mathcal M=G$ とする。
$v^\alpha=g^{\alpha\beta}=u^\beta$ なので、$e\,(v^\alpha)^{-1}=u^\beta m\,(u^\beta)^{-1}=m$ であり、正しさが成り立つ。送り手は Diffie–Hellman 鍵共有の一方の役を 1 回だけ演じ、共有された元 $u^\beta=g^{\alpha\beta}$ を平文に掛けて隠している、と見ることができる。この形の方式は BS23 Exercise 11.5(p. 459)で乗法的 ElGamal 暗号として扱われている。
$p=23$ の平方剰余のなす位数 $q=11$ の部分群 $G=\{1,2,3,4,6,8,9,12,13,16,18\}$ で $g=2$ とする(Diffie–Hellman鍵共有 の例「法 23 の位数 11 の部分群」)。秘密鍵 $\alpha=3$ なら公開鍵は $u=2^3=8$ である。平文 $m=6$ を $\beta=7$ で暗号化すると、$v=2^7\equiv13$、$u^\beta=8^7\equiv12$、$e=12\cdot6\equiv3\pmod{23}$ で、暗号文は $(13,3)$ である。復号では $v^\alpha=13^3\equiv12$、$12^{-1}\equiv2$($12\cdot2=24\equiv1$)なので、$3\cdot2=6$ が戻る。
def-pke-elgamal の方式を攻撃する任意の攻撃者 $\mathsf A$ に対し、$\mathsf A$ を 1 回走らせて $G$ の演算を数回加えるだけの手順 $\mathsf B$ で
$$
\operatorname{Adv}^{\mathrm{SS}}(\mathsf A)=2\operatorname{Adv}^{\mathrm{DDH}}(\mathsf B)
$$
となるものがある。したがって、判定 Diffie–Hellman 問題が難しければ(効率のよいどの $\mathsf B$ でも $\operatorname{Adv}^{\mathrm{DDH}}(\mathsf B)$ が無視できるほど小さければ)、ElGamal 暗号は意味的に安全である。
$\mathsf B$ は三つ組 $(X,Y,Z)\in G^3$ を受け取り、次を行う。$X$ を公開鍵として $\mathsf A$ に渡し、$\mathsf A$ が選んだ $m_0,m_1$ を受け取る。$b\in\{0,1\}$ を一様に選び、$(Y,\ Zm_b)$ を暗号文として $\mathsf A$ に渡す。$\mathsf A$ の出力 $\hat b$ が $b$ に等しければ $1$、そうでなければ $0$ を出力する。
段 1(本物の三つ組)。$(X,Y,Z)=(g^x,g^y,g^{xy})$ なら、$X$ は $\alpha=x$ の公開鍵と同じ分布をもち、$(Y,Zm_b)=(g^y,X^ym_b)$ は $\beta=y$ による $m_b$ の暗号文そのものである。よって $\mathsf A$ から見た状況は実験 $b$ と同じで、
$$
\Pr[\mathsf B(\mathcal D)=1]=\Pr[\hat b=b]=\tfrac12(1-p_0)+\tfrac12p_1=\tfrac12+\tfrac12(p_1-p_0)
$$
である。
段 2(無作為な三つ組)。$(X,Y,Z)=(g^x,g^y,g^z)$ で $z$ がほかのすべてと独立なら、$x,y$、$\mathsf A$ の乱数、$b$ を固定したとき $m_b$ は決まり、$g^z$ は $G$ 上で一様なので $Zm_b=g^zm_b$ も $G$ 上で一様である。よって $\mathsf A$ が受け取るもの $(X,Y,Zm_b)$ の分布は $b$ によらず、$\hat b$ は $b$ と独立である。したがって $\Pr[\mathsf B(\mathcal R)=1]=\Pr[\hat b=b]=\frac12$ である。
段 1 と段 2 の差をとると $\operatorname{Adv}^{\mathrm{DDH}}(\mathsf B)=\frac12\lvert p_1-p_0\rvert=\frac12\operatorname{Adv}^{\mathrm{SS}}(\mathsf A)$ である。$\square$
BS23 Exercise 11.5 (a)(p. 459)は、優位度が $2\operatorname{Adv}^{\mathrm{DDH}}(\mathsf B)$ 以下になることを演習として挙げている。証明の要点は、判定 Diffie–Hellman 問題が難しければ、平文に掛けた $u^\beta=g^{\alpha\beta}$ が、$u$ と $v$ を見た攻撃者にとって無作為な元と区別できず、ワンタイムパッド(一様な元を掛けて隠すこと)と同じになることにある。一方向性は、もっと弱い仮定である計算 Diffie–Hellman 問題とちょうど同値になる。
RSA 暗号では、$e$ 乗の逆を求めることが素因数分解と同じ難しさかどうかは分かっていない(RSA暗号 の注意「安全性は証明された定理ではない」)。指数を $2$ にすると、復号の難しさを素因数分解の難しさにちょうど結びつけられる。以下、$\mathbb Z_n^\times$ を法 $n$ で $n$ と互いに素な剰余類の乗法群とする。
相異なる素数 $p,q$ で $p\equiv q\equiv3\pmod4$ となるものを選び、$n:=pq$ を公開鍵、$(p,q)$ を秘密鍵とする。平文 $m\in\mathbb Z_n^\times$ の暗号文は $c:=m^2\bmod n$ である。復号では、$c$ の法 $n$ での平方根を prop-pke-sqrt で求める。
$p\equiv3\pmod4$ を素数、$c$ を $p$ で割り切れない法 $p$ の平方剰余(ある整数 $r$ で $c\equiv r^2\pmod p$)とすると、$s:=c^{(p+1)/4}\bmod p$ は $s^2\equiv c\pmod p$ を満たし、法 $p$ での平方根は $\pm s$ のちょうど 2 つである。したがって $n=pq$($p,q$ は相異なる奇素数)について、$c=r^2$($r\in\mathbb Z_n^\times$)の法 $n$ での平方根はちょうど 4 つある。$p\equiv q\equiv3\pmod4$ なら、前半の式と 中国剰余定理 で 4 つとも計算できる。
Fermatの小定理 により $s^2\equiv c^{(p+1)/2}\equiv r^{p+1}=r^{p-1}r^2\equiv r^2\equiv c\pmod p$ である。一般に奇素数 $p$ と $p\nmid r$ について、$x^2\equiv r^2$ なら $(x-r)(x+r)\equiv0$ で、$p$ は素数なので $x\equiv\pm r$ であり、$p$ が奇数なので $r\not\equiv-r$ である。よって法 $p$ の平方根はちょうど 2 つである。法 $n$ では、$x^2\equiv c\pmod n$ は $x^2\equiv c$ が法 $p$ と法 $q$ の両方で成り立つことと同値で、それぞれ 2 つの解の組合せ 4 通りが、中国剰余定理 によりちょうど 4 つの剰余類に対応する。$\square$
平方根が 4 つあるので、受け手はどれが送られた平文かを決めなければならない。実際には、平文に決まった形の冗長な部分を付けておき、その形をもつ平方根を選ぶ。
$n=pq$($p,q$ は相異なる奇素数)とする。$r\in\mathbb Z_n^\times$ を一様に選んだ $c=r^2\bmod n$ に対し、確率 $\varepsilon$ で $c$ の平方根を出力する手順 $\mathsf A$ があれば、$\mathsf A$ を 1 回使い、Euclidの互除法 を加えるだけで、確率 $\varepsilon/2$ 以上で $n$ の素因数を出力する手順がある。
手順:$r\in\mathbb Z_n^\times$ を一様に選び、$c:=r^2\bmod n$ として $s:=\mathsf A(n,c)$ を得る。$s^2\equiv c$ かつ $s\not\equiv\pm r\pmod n$ なら $\gcd(s-r,n)$ を出力する。
段 1(出力は素因数)。$s^2\equiv r^2$ なので $n\mid(s-r)(s+r)$ である。$p\mid s-r$ でなければ $p\mid s+r$ である。$p$ と $q$ がどちらも $s-r$ を割れば $n\mid s-r$、どちらも $s+r$ を割れば $n\mid s+r$ となり、$s\not\equiv\pm r$ に反する。よって $p,q$ の一方だけが $s-r$ を割り、$\gcd(s-r,n)$ は $p$ か $q$ である。
段 2(成功の確率)。$c$ を固定すると、prop-pke-sqrt により $r^2\equiv c$ となる $r\in\mathbb Z_n^\times$ はちょうど 4 つで、$r$ を一様に選んだので、$c$ を与えたときの $r$ の条件付き分布はこの 4 つの上の一様分布である。$\mathsf A$ の出力 $s$ は $c$ と $\mathsf A$ の乱数だけで決まり、$r$ が 4 つのどれであるかとは独立である。$s$ が正しい平方根のとき、$r\in\{s,-s\}$ となる条件付き確率は $\frac24=\frac12$ である($s\not\equiv-s$ は $n$ が奇数で $s\in\mathbb Z_n^\times$ だから)。よって成功の確率は $\varepsilon\cdot\frac12$ 以上である。$\square$
逆に $p,q$ を知っていれば prop-pke-sqrt で平方根が求まる。したがって、一様に選んだ平文の Rabin 暗号文から平文を求めることは、成功の確率が半分になる程度の差を除いて、$n$ を分解することと同じ難しさである。この帰着は Sho08 §12.5.3(pp. 352–353。$\mathsf A$ がいつも正しく答える場合)にある。
$p=7$、$q=11$(どちらも $4$ で割ると $3$ 余る)、$n=77$ とする。平文 $m=20$ の暗号文は $c=400\bmod77=15$ である。法 $7$ では $c\equiv1$、$1^{(7+1)/4}=1$ で平方根は $\pm1$、法 $11$ では $c\equiv4$、$4^{(11+1)/4}=64\equiv9$ で平方根は $\pm9$ である。組み合わせると 4 つの平方根 $13,20,57,64$ が得られる。秘密鍵を知らない人が $r=20$ を選び、平方根を答える手順から $s=13$ を得たとすると、$s\not\equiv\pm20$($-20\equiv57$)なので $\gcd(13-20,77)=7$ で分解できる。$s=64$ なら $\gcd(44,77)=11$ である。
thm-pke-elgamal と thm-pke-rabin の前提を 1 つずつ外すと、次のように破れる。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 平文が $G$ の元 | $G$ は法 $23$ の位数 $11$ の部分群のまま、平文を $(\mathbb Z/23\mathbb Z)^\times$ から $m_0=1$、$m_1=5$ と選ぶ | $e\in G$ かどうかで $b$ が分かり、識別の優位度が $1$ |
| 群の位数が素数 | $G=(\mathbb Z/23\mathbb Z)^\times$(位数 $22$)、$g=5$、$m_0=1$、$m_1=5$ | 平方剰余かどうかで $b$ が分かり、識別の優位度が $1$ |
| $\beta$ を暗号化のたびに一様に選ぶ | $\beta=1$ に固定し、暗号文を $(g,\ um)$ とする | 誰でも $e\,u^{-1}=m$ を計算でき、識別の優位度が $1$ |
| 法が相異なる 2 素数の積 | 法を素数 $p=19$ にする | 誰でも $c^5\bmod19$ で平方根を計算でき、秘密鍵なしで復号できる |
1 行目:$u^\beta\in G$ なので、$e=u^\beta m_b\in G$ は $m_b\in G$ と同値である。$1\in G$、$5\notin G$($5$ は法 $23$ の平方非剰余)なので、$e\in G$ なら $0$、そうでなければ $1$ と答えれば必ず当たる。
2 行目:$5$ は法 $23$ の原始根で、$5^k$ が平方剰余であることは $k$ が偶数であることと同値である。$u^\beta=5^{\alpha\beta}$ が平方剰余であることは、$\alpha$ か $\beta$ が偶数、すなわち $u$ か $v$ が平方剰余であることと同値で、これは公開の情報から Legendre記号 で判定できる。$e=u^\beta m_b$ の Legendre 記号は $u^\beta$ と $m_b$ の Legendre 記号の積なので、$m_b$ が平方剰余かどうか、すなわち $b$ が分かる。判定 Diffie–Hellman 問題もこのとき易しい(Diffie–Hellman鍵共有 の系「法 $p$ の乗法群全体では偶奇が漏れる」)。
4 行目:$19\equiv3\pmod4$ なので、prop-pke-sqrt の前半から $c^{(19+1)/4}=c^5$ が平方根である。たとえば $c=5$ なら $5^5\equiv9$ で、$9^2=81\equiv5\pmod{19}$ である。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する