公開鍵暗号

同義語:公開鍵暗号方式非対称暗号public-key cryptographypublic-key encryptionasymmetric encryption

概要

公開鍵暗号(public-key cryptography)とは、受け手が公開鍵と秘密鍵の組を作り、誰でも公開鍵で暗号化できるが、秘密鍵をもつ受け手だけが復号できるようにする暗号の方式である。安全性は計算の難しさについての仮定に基づき、暗号化に乱数を使わない方式は、攻撃者が選んだ 2 つの平文のどちらを暗号化したかを必ず見分けられてしまうので意味的に安全でない。位数が素数の巡回群上の ElGamal 暗号は判定 Diffie–Hellman 問題が難しければ意味的に安全であり、Rabin 暗号では、一様に選んだ平文の暗号文を復号することが、成功の確率が半分になる程度の差を除いて法 $n=pq$ の素因数分解と同じ難しさになる。

$$\newcommand{C}[0]{\mathbb{C}} \newcommand{div}[0]{\mathbin{÷}} \newcommand{N}[0]{\mathbb{N}} \newcommand{Q}[0]{\mathbb{Q}} \newcommand{R}[0]{\mathbb{R}} \newcommand{Z}[0]{\mathbb{Z}} $$

前提知識: 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})$ を 公開鍵暗号方式 という。

  1. 鍵生成 $\mathsf{Gen}$ は乱数を使い、公開鍵 $\mathit{pk}$ と 秘密鍵 $\mathit{sk}$ の組を出力する。
  2. 暗号化 $\mathsf{Enc}$ は公開鍵と平文 $m\in\mathcal M$ から、乱数を使ってよい手順で 暗号文 $c=\mathsf{Enc}(\mathit{pk},m)$ を出力する。
  3. 復号 $\mathsf{Dec}$ は秘密鍵と暗号文から、乱数を使わない手順で平文を出力する。
    さらに、$\mathsf{Gen}$ が出力しうるすべての $(\mathit{pk},\mathit{sk})$ とすべての $m\in\mathcal M$ について、確率 $1$ で $\mathsf{Dec}(\mathit{sk},\mathsf{Enc}(\mathit{pk},m))=m$ が成り立つ(正しさ)ことを要求する。

各手順は効率よく(鍵の長さの多項式時間で)計算できるものとする(BS23 Definition 11.1、p. 436)。安全性は、攻撃者に何を許し、何を達成されたら破られたとみなすかで定める。以下、攻撃者も乱数を使ってよい手順とし、確率は鍵生成・暗号化・攻撃者のすべての乱数についてとる。

一方向性と意味的安全性
  1. 一方向性:鍵を生成し、平文 $m$ を $\mathcal M$ から一様に選んで $c=\mathsf{Enc}(\mathit{pk},m)$ を作る。攻撃者 $\mathsf A$ が $(\mathit{pk},c)$ から $m$ を出力する確率を $\mathsf A$ の 復号の成功確率 という。効率のよいどの攻撃者でもこれが無視できるほど小さいとき、方式は 一方向 であるという。
  2. 意味的安全性:$b\in\{0,1\}$ について、次の実験 $b$ を考える。鍵を生成して $\mathit{pk}$ を攻撃者 $\mathsf A$ に渡し、$\mathsf A$ は平文 $m_0,m_1\in\mathcal M$ を選び、$c=\mathsf{Enc}(\mathit{pk},m_b)$ を受け取って $0$ か $1$ を出力する。実験 $b$ で $\mathsf A$ が $1$ を出力する確率を $p_b$ として、$\operatorname{Adv}^{\mathrm{SS}}(\mathsf A):=\lvert p_0-p_1\rvert$ を $\mathsf A$ の 識別の優位度 という。効率のよいどの攻撃者でもこれが無視できるほど小さいとき、方式は 意味的に安全(semantically secure)であるという。

意味的安全性は、攻撃者が自分で選んだ 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))。以下では、はじめから乱数を使う方式と、一方向性を素因数分解に結びつけられる方式を扱う。

ElGamal 暗号

以下、$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$ とする。

ElGamal 暗号

平文の集合を $\mathcal M=G$ とする。

  1. 鍵生成:$\alpha\in\mathbb Z_q$ を一様に選び、公開鍵 $u:=g^\alpha$、秘密鍵 $\alpha$ とする。
  2. 暗号化:平文 $m\in G$ に対し、$\beta\in\mathbb Z_q$ を暗号化のたびに新しく一様に選び、暗号文 $(v,e):=(g^\beta,\ u^\beta m)$ を出力する。
  3. 復号:暗号文 $(v,e)$ から $e\,(v^\alpha)^{-1}$ を出力する。

$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 暗号として扱われている。

法 23 の位数 11 の部分群での暗号化

$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$ が戻る。

ElGamal 暗号の意味的安全性

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 問題とちょうど同値になる。

ElGamal 暗号の復号と計算 Diffie–Hellman 問題
  1. $(g^x,g^y)$ から $g^{xy}$ を求める手順があれば、公開鍵と暗号文だけから平文が求まる。
  2. 平文を $G$ から一様に選んだとき、$(u,v,e)$ から確率 $\varepsilon$ で平文を求める手順 $\mathsf A$ があれば、一様に選んだ $(g^x,g^y)$ から確率 $\varepsilon$ で $g^{xy}$ を求める手順がある($\mathsf A$ を 1 回使い、$G$ の演算を数回加える)。
一様な元を暗号文に見立てる
  1. 公開鍵 $u=g^\alpha$ と暗号文の $v=g^\beta$ から $g^{\alpha\beta}=u^\beta$ が求まり、$m=e\,(u^\beta)^{-1}$ である。
  2. $(X,Y)=(g^x,g^y)$ を受け取ったら、$e\in G$ を一様に選んで $m':=\mathsf A(X,Y,e)$ を計算し、$e\,m'^{-1}$ を出力する。本物の暗号化では $m$ が一様で $\alpha,\beta$ と独立なので、$e=u^\beta m$ は $(u,v)$ を固定しても $G$ 上で一様であり、$(u,v,e)$ の分布は「$\alpha,\beta$ と独立に一様な $e$」と同じである。よってこの手順の入力 $(X,Y,e)$ は本物の $(u,v,e)$ と同じ分布をもち、確率 $\varepsilon$ で $m'$ は $e=X^ym'$ を満たす平文 $m'=e\,(g^{xy})^{-1}$ に等しい。このとき出力は $e\,m'^{-1}=g^{xy}$ である。$\square$

Rabin 暗号

RSA 暗号では、$e$ 乗の逆を求めることが素因数分解と同じ難しさかどうかは分かっていない(RSA暗号 の注意「安全性は証明された定理ではない」)。指数を $2$ にすると、復号の難しさを素因数分解の難しさにちょうど結びつけられる。以下、$\mathbb Z_n^\times$ を法 $n$ で $n$ と互いに素な剰余類の乗法群とする。

Rabin 暗号

相異なる素数 $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$ の素因数を出力する手順がある。

2 つの平方根の差の最大公約数

手順:$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$ がいつも正しく答える場合)にある。

法 77 の平方根から分解する

$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}$ である。

補足

実際の使い方

公開鍵暗号の計算は共通鍵の暗号より重いので、実際には、乱数で作った共通鍵(擬似乱数)を公開鍵暗号で送り、長いデータはその共通鍵で暗号化することが多い(BS23 §11.1.1、p. 435)。また意味的安全性は盗聴だけをする攻撃者を想定したもので、攻撃者が暗号文を書き換えて受け手に復号させる攻撃まで考えると、より強い安全性が必要になる(同書 Chapter 12)。電子署名は秘密鍵で作り公開鍵で確かめる仕組みで、RSA暗号 の注意「電子署名」のように同じ数学を使い、長い文書には ハッシュ関数 の値に署名する。

関連項目

参考文献

Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する