1

解説

暗号系の安全性検証 — 入門から計算機による証明まで
川本 裕輔
本論文では，暗号系の安全性を検証する方法について，暗号理論の初歩からコンピュータ上で安全性証明を書く最先端の研究までを解説する．暗号系の安全性は攻撃の確率や計算量を用いて定式化されるため，その数学的証明は煩雑であり，しばしば間違いも生じる．そこで，安全性証明を形式手法で記述し，証明の正しさをコンピュータ上で機械的に確かめる研究が盛んになっており，様々な検証ツールが開発されている．その中でも，検証ツール EasyCryptは，従来のツールよりも簡単に，厳密な安全性証明が得られる．本論文では，まず，確率的多項式時間チューリング
機械の間のゲームとして暗号系の安全性を定式化し，ゲームの書き換えによって安全性を証明する手法を説明する．
次に，確率関係ホーア論理を用いた安全性証明の形式化について述べ，検証ツール EasyCrypt を用いて安全性証明を書く方法を紹介する．なお，本論文は暗号理論や定理証明支援系についての知識を仮定していない．

This paper gives an overview of verification methods for the security of cryptosystems from basic conceptsof cryptography to advanced topics on computer-aided security proofs. The security of cryptosystems isformalized using probabilities and computational complexity of attacks while the mathematical proofs forsuch security tend to be complicated and error prone. To obtain rigorous security proofs there have been
many studies on formalizing and machine-checking proofs using formal methods. Among various verification
tools EasyCrypt is the most successful tool that can rigorously construct security proofs more easily thanprevious tools. In this paper we introduce a method for defining the security of cryptosystems as games
among probabilistic polynomial-time (PPT) Turing machines and proving it by game transformation techniques. Then we explain how to formalize such security proofs in the framework of probabilistic relational
Hoare logic (pRHL) and to write and machine-check proofs using EasyCrypt. Note that readers do not need
to be familiar with cryptography or interactive theorem provers.

物理的な危険も生じてしまう．

1 はじめにそこで，コンピュータ上で，暗号系の安全性証明を

現代の暗号は数学に基づいており，様々な暗号系に記述し，検証する研究が盛んに行われている．これら

対して数学的な安全性の証明が考えられてきた．しかの研究では，プログラミング言語理論の分野で蓄積さし，安全性証明は，確率，計算量，通信（並行性）をれた知見が暗号系の安全性検証に活用されている．

扱って煩雑であり，間違いが見つかることも多い．

本稿では，暗号系の安全性を証明する方法につい仮に暗号系が安全でなければ，問題が生じるのはて，暗号理論の初歩からコンピュータ上で安全性証明

情報セキュリティだけではない．自動車や医療機器なを書く最先端の研究までを解説する．暗号理論や定理

どあらゆるモノがインターネットにつながる時代が証明支援系を知らなくても，概略を掴めるよう説明す

近づいており，もし暗号系の安全性に不備があれば，る．まず，2 節では数学的に安全性を証明する方法を

Verification of Cryptosystems – from Introduction to
Computer-Aided Security Proofs.
Yusuke Kawamoto, 国立研究開発法人産業技術総合研究所, AIST, Japan.
コンピュータソフトウェア, Vol.33, No.4 (2016), pp.1–17.
[解説論文] 2016 年 3 月 31 日受付.

紹介する．3 節で形式手法（確率関係ホーア論理）を用いて証明を厳密に記述する方法を紹介し，4 節で検証ツール EasyCrypt を用いてコンピュータ上で証明を行う方法を紹介する．5 節では関連研究を紹介する．
本稿を読んでも，直ちにコンピュータ上で証明を書コンピュータソフトウェア

2

けるようにはならないが，コンピュータ上での証明の密鍵のペア (pk , sk ) をランダムに生成する．

書き方を知ることは，人手で証明を記述する際にも良• 暗号化アルゴリズム E は，公開鍵 pk と平文（メッい影響を及ぼすものと筆者は考える．また，前提知識セージ）m を受け取り，その暗号文 c を返す．

を持たずに，EasyCrypt についての論文やマニュアル• 復号アルゴリズム D は，秘密鍵 sk と暗号文 cを理解することは非常に難しく，本稿がこれらを読む
ための足がかりとなることを期待している．

を受け取り，復号の結果を返す．
なお，暗号化アルゴリズムが内部で乱数を生成して使っている場合は，同じ公開鍵と平文に対して，毎回

2 数学的に安全性を証明

異なるビット列の暗号文を生成できる．

暗号の歴史は，破られては新しい方式が考案されるということの繰り返しだったが，数学的に安全性

公開鍵暗号は，正当性（correctness）と秘匿性（se-curity）を満たす必要がある．

が保証された暗号も提案されるようになった．この• 正当性とは，秘密鍵 sk を使って暗号文 c を復号ような暗号を証明可能安全性（provable security）をすると元の平文 m を取り出せるという性質で，持つ暗号という．本節では公開鍵暗号（public-key
encryption）の証明可能安全性を紹介する †1 ．

式で表すと，D(sk , E(pk , m)) = m である．

• 秘匿性とは，暗号を解読できる確率（秘密鍵 sk
を持たない人が元の平文 m を取り出せる確率）

2. 1 公開鍵暗号が非常に小さいという性質である．鍵の長さ η が

公開鍵暗号には，公開鍵と秘密鍵の 2 種類の鍵があ大きいほど，秘匿性の度合いが増す．

り，それぞれ暗号化と復号に用いる．A さんが B さ

2. 1. 2 公開鍵暗号の例： ElGamal 暗号

んに平文（メッセージ）m を暗号化して伝えたい場

単純な公開鍵暗号の例として ElGamal 暗号 [20]1 受信者 B さんの公開鍵 pkB を合，図 1 のとおり，○を取り上げよう．アルゴリズムを図 2 に示す．

2 暗号文（暗号化された
使って平文 m を暗号化し，○3 受信者 B さんがこの暗号文
メッセージ）を送る．○

を復号する際には，B さん自身の秘密鍵 skB を使う．
送信者 A

受信者 B
E(pkB , m)

1 B の公開鍵 pkB
3 B の秘密鍵 skB○- ○で平文 mを暗号化 ○で暗号文を復号
2 暗号文を送信

図 1: 公開鍵暗号による通信

η ビットの素数 q に対して，G を位数 q の巡回群とし，
g を G の生成元とし，平文を m ∈ G とする．

鍵生成アルゴリズム KG

KG(η) = sk ← Z∗q ; pk ← g sk ; return (pk , sk );def$

暗号化アルゴリズム E

E(pk , m) = y ← Z∗q ; c ← (g y, pk y · m); return c;
def$

復号アルゴリズム D
def

D(sk , c) = (a, b) ← c; m ← b/ask ; return m;
ここで，秘密鍵 skB は B さんだけが持っているも

図 2: ElGamal 暗号のだから，他の人はこの暗号文を復号できない．一方，公開鍵 pkB は公開されているため，誰でも「Bさんしか復号できない暗号文」を生成できる．

確率的代入 sk ← Z∗q は，集合 Z∗q = {1, . . . , q − 1}$

def

からランダムに取ってきた要素を sk とおくことを表

2. 1. 1 公開鍵暗号の定義と性質

す．より厳密に言うと，他の事象から独立に，Z∗q の要

公開鍵暗号は以下の 3 つのアルゴリズムの組

1
素を一様に（等確率 q−1で）選ぶという意味である．

(KG, E, D) として定義される．
• 鍵生成アルゴリズム KG は，鍵の長さ（セキュリティ・パラメータ）η を受け取り，公開鍵と秘†1 暗号理論の基礎を説明するので，証明可能安全性に詳しい読者は 2. 1 節〜2. 3 節を読み飛ばしてほしい．

一方，pk ← g sk は通常の決定的代入を表す．g sk や

pk y · m は巡回群 G の元である．
ElGamal 暗号の正当性は，簡単な式変形
D(sk , E(pk , m)) = (pk y · m)/(g y )sk = m
で確認できる．ElGamal 暗号の秘匿性は離散対数問

Vol. 33 No. 4 Nov. 2016

3

題（の変種）の難しさに基づいている．例えば，鍵力を持っていたら，すべての可能性を調べ上げて平文の長さ η が十分に大きいとき，巡回群 G の位数 q がを特定できてしまう．そのため，秘匿性の定義では，

大き過ぎて，公開鍵 gsk

から秘密鍵 sk を計算することが困難である．y が乱数であるため，乗算の結果

pk y · m から平文 m を取り出すことも困難である．
2. 2 計算量的安全性

攻撃者を確率的多項式時間（PPT）チューリング機械 †2 としてモデル化することが多い．
定義 1 任意の PPT 攻撃者に対し，「IND-CPA ゲーム′
で b = b となる確率」と 1/2 の差が無視できる †3 ほ
ど小さいとき，IND-CPA 安全性が成り立つという．

ElGamal 暗号の秘匿性を数学的に証明するために，
まず，秘匿性とは何であるかを数学的に定義しよう．

2. 3 安全性証明の仮定

証明可能安全性の理論では，暗号の秘匿性を，攻撃者

暗号の証明可能安全性は，数学の問題の難しさに基と挑戦者の間のゲームを用いて定義する．大雑把にづいている．例えば，ElGamal 暗号の IND-CPA 安

言うと，このゲームでは，「挑戦者が用意した暗号文」

全性の証明では，DDH 問題（離散対数問題の変種）

を攻撃者が解読しようとする．攻撃者が平文についてを解くことの困難さを利用して，多項式時間帰着の議の情報を全く手に入れられないとき，攻撃者の負けで論を行う．DDH 問題の定義を図 4 に示す．

あり，このとき，秘匿性が成り立つと定義する．

攻撃者(m0 , m1 , σ) ← A0(pk )ただし m0 と m1
は同じ長さとする



攻撃者

挑戦者

pk

1 公開鍵
○

m0 , m1-(pk , sk )← KG(η)

b′ ← A1 (c, σ)  cb′ ← A(t);$b ← {0, 1}

2 平文の候補○c ← E(pk , mb )挑戦者
b = 0 のとき
(g x , g y , g xy )

b′

$



$

b ← {0, 1};

b = 1 のとき
(g x , g y , g z )

推測の結果

?

x, y, z ← Z∗q ;Z∗q = {1, . . . , q − 1}

図 4: DDH ゲーム

3 暗号文
○

4 推測の結果
b′ ○DDH ゲームでは，挑戦者が集合 Z∗q からランダム?

図 3: IND-CPA ゲームに x, y, z を選び，ビット b ∈ {0, 1} をランダムに選
ぶ．b = 0 のとき (g x , g y , g xy ) を攻撃者に送り，b = 1

厳密には，図 3 の IND-CPA ゲームで定義され1 攻撃者は最初に公開鍵 pk を受け取る．○
2 攻る．○のときは (g x , g y , g z ) を送る．攻撃者は，g xy と g z のどちらを受け取ったのか（b の値）を推測する．

撃者が，同じ長さの平文 m0 と m1 を用意し，挑戦者

DDH 問題とは，DDH ゲームにおけるビット b を

3 挑戦者は，ビット b ∈ {0, 1} をランダムに渡す．○

正しく求める問題である．DDH 問題の難しさは，数に選び，mb を暗号化し，暗号文 c を攻撃者に渡す．

学的には証明されていないが，広く信じられており，（このとき，m0 を暗号化する確率も，m1 を暗号化す

さまざまな暗号系の安全性を証明する上で仮定され4 攻撃者は，暗号文 c が m0 と m1る確率も 50%．
）○ている．DDH 仮定を厳密に書くと，のどちらの暗号文なのか（すなわちビット b の値）をいかなる PPT 攻撃者 A に対しても，「攻撃′推測し，推測の結果を b とおく．
攻撃者がどちらの平文なのかを正しく推測できる′確率（つまり b = b が成り立つ確率）がほとんど 1/2のとき，暗号の秘匿性が成り立つものと定義する．
ここで，秘匿性が成り立つためには，攻撃者の計算能力に制限が必要である．というのも，可能な平文や鍵の数が有限であるため，仮に攻撃者が無限の計算能†2 PPT チューリング機械（PPT 攻撃者）は，乱数テー
プを読み，入出力テープを通じて挑戦者と通信を行い，
η の多項式で表される回数の動作の後に停止する．
†3 鍵の長さ η が大きくなるにつれて，「b = b′ となる確′率」は 1/2 に近づく．
「b = b となる確率」と 1/2 の差を p(η) とおく．どんな多項式 poly(η) に対しても，
1
η を十分に大きく取ったときに p(η) < poly(η)となるとき，関数 p(η) が無視できる（negligible）という．

コンピュータソフトウェア

4者 A が DDH ゲームのビット b を正しく推測できる確率」と 1/2 の差が無視できる，となる．

CPA(S, A):

G2 (A):(pk , sk ) ← KG(η);

x, y ← Z∗q ;(m0 , m1 , σ) ← A0 (pk );(m0 , m1 , σ) ← A0 (g x );

$

$

$

2. 4 ゲーム列による安全性証明

b ← {0, 1};z ← Z∗q ;c ← E(pk , mb );b′ ← A1((g y , g z ), σ);$b′ ← A1(c, σ);暗号系の安全性を証明する方法としてゲーム列による安全性証明 [12] [21] [28] を紹介する．具体例として「ElGamal 暗号が，DDH 仮定のもとで，IND-CPA
安全性を満たすこと」の証明を説明する．

2. 4. 1 証明したいこと
証明したい事柄は，「いかなる PPT 攻撃者も DDH 問題を効率的に解くことができない」ならば，「いかなるPPT 攻撃者も ElGamal 暗号の IND-CPA

b ← {0, 1};

res ← (b = b′ );res ← (b = b′ );補題 (1)?

補題 (5)
6

G1 (A):

CPAElGamal (A):$$x ← Z∗q ;x, y ← Z∗q ;(m0 , m1 , σ) ← A0 (g x );$$b ← {0, 1}; y ← Z∗q ;c ← (g y , g xy · mb );b′ ← A1(c, σ);res ← (b = b′ );(m0 , m1 , σ) ← A0 (g x );$b ← {0, 1};$z ← Z∗q ;b′ ← A1((g y, g z · mb ),σ);res ← (b = b′ );補題 (2)?

安全性を破ることができない」

補題 DDH1 (InvA ):$(3) x, y, z ←Z∗q ;-DDH0 (InvA ):である．
公開鍵暗号 S = (KG, E, D) の IND-CPA ゲームを，
図 5 の CPA(S, A) のように記述する．ゲーム末尾の補題 (4)
6$x, y ← Z∗q ;res ← InvA (g x , g y , g xy );res ← InvA (g x , g y , g z );ブール型変数 res の値は，b = b′ のとき true ，b ̸= b′のとき false である．ゲーム CPA(S, A) を実行した後InvA (α, β, γ):

で変数 res の値が true である確率を(m0 , m1 , σ) ← A0 (α);

Pr[CPA(S, A) : res]$b ← {0, 1};と書くことにする．すると，ElGamal 暗号の IND-b′ ← A1 (β, γ · mb , σ);CPA 安全性は，任意の確率的多項式時間アルゴリズ

return (b = b′ );ムの対 A = (A0 , A1 ) に対して，確率

図 5: ゲーム列|Pr[CPA(ElGamal, A) : res] − 1/2|が無視できることを証明すれば十分である．

が無視できることである．

これを示すために，図 5 の各ゲームの間の確率が2. 4. 2 証明の全体概要
IND-CPA 安全性を証明するために，図 5 に示す
ゲームの列を考える． このゲーム列では，左上のゲー

等しいか，もしくは差が無視できることを証明する．
具体的には以下の補題 (1)〜(5) を示す．

ム CPA を，CPAElGamal , DDH0 , DDH1 , G1 , G2 の順に， (1) Pr[CPA(ElGamal, A) : res] = Pr[CPAElGamal (A) : res]
少しずつ書き換えている．

(2) Pr[CPAElGamal (A) : res] = Pr[DDH0 (InvA ) : res]′

一番最後のゲーム G2 では，b と b が独立に選ばれ′ているため，b = b となる確率はちょうど 1/2 である．すなわち，任意の PPT 攻撃者の対 A に対し，

Pr[G2 (A) : res] = 1/2
である．よって，(3) |Pr[DDH0 (InvA ) : res] − Pr[DDH1 (InvA ) : res]|が無視できる(4) Pr[DDH1 (InvA ) : res] = Pr[G1 (A) : res]
(5) Pr[G1 (A) : res] = Pr[G2 (A) : res]
これらの補題により，任意の PPT 攻撃者 A に対し，

| Pr[CPA(ElGamal, A) : res] − 1/2 || Pr[CPA(ElGamal, A) : res] − Pr[G2 (A) : res] |が無視できること（IND-CPA 安全性）を示すには，= |Pr[DDH0 (InvA ) : res] − Pr[DDH1 (InvA ) : res]|| Pr[CPA(ElGamal, A) : res] − Pr[G2 (A) : res] |が無視できることが導かれる．

Vol. 33 No. 4 Nov. 20165

2. 4. 3 証明の各ステップ

要がある．このような強い攻撃者のもとで安全な暗号

各補題の証明を詳しく見てみよう．

系は，ElGamal 暗号よりもはるかに複雑である．そ

まず補題 (1) を示そう．ゲーム CPA(S, A) の手続き

KG と E に，ElGamal 暗号のアルゴリズムを代入すのため，安全性の証明はじつに煩雑であり，後から間違いが見つかることも多い †4 ．

る．すると，pk = g x ，sk = x，c = (g y , g xy · mb ) よ

間違った証明を書いてしまう原因は色々考えられる

り，ゲーム CPAElGamal (A) が得られる．これらの代入

が，証明の導出の途中を省略したときに多い．省略し操作は，確率を変えないため，補題 (1) が成り立つ．

た箇所で，なんとなく正しいと信じている事柄を使っ

次に補題 (2) を示そう．x と y を生成する箇所以て，推論を飛躍させたり間違えたりするのである．

xy外を別のゲーム InvA (g , g , gxy) としてまとめると，安全性証明に間違いが見つかっては新しい暗号系とゲーム DDH0 (A) が得られる．これらの操作は並べ替

安全性証明が考案されるということの繰り返しを防えだけで，確率を変えないため，補題 (2) が成り立つ．

ぐためには，証明の導出を省略せず，証明を形式的に次に補題 (3) を証明しよう．ゲーム DDH0 (InvA ) と記述することが有効である．形式的に記述すれば，仮DDH1 (InvA ) の違いは，サブルーチン InvA に対して

定を正しく使っているか，式変形に飛躍がないかなど

xyzを渡すか，あるいは g を渡すかという点であをもっと厳密に確認できる．本節では，確率関係ホーる．仮に補題 (3) が成り立たない，すなわち確率の差

ア論理を用いて証明を記述する方法を紹介したい．

g| Pr[DDH0 (InvA ) : b = b′ ] − Pr[DDH1 (InvA ) : b = b′ ]|が無視できないほど大きいと仮定しよう．すると，PPT 攻撃者 InvA が gxyz

3. 1 ゲームを記述するための言語 pWhileと g のどちらを受け取った

まず，暗号系の安全性定義に用いるゲームを厳密にのかを識別できてしまい，DDH 仮定に反する．よっ

記述するための言語として，確率的手続き型プログラて，背理法により補題 (3) が成り立つ．

ミング言語 pWhile を考えよう．図 6 に pWhile の次 に 補 題 (4) を 示 そ う．ゲ ー ム DDH1 (InvA ) と構文を示す．

G1 (A) の違いは，乱数 z を生成する箇所である．z は，
DDH1 (InvA ) では冒頭に生成されているが，G1 (A) では b を選んだ後で生成されている．しかし，z は他の′

文 ::= skip

（何もしない）| 変数 ← 数式$（決定的代入）変数から独立に生成されているため，b = b が成り立

| 変数 ← 確率分布表現

つ確率は二つのゲームで等しく，補題 (4) が成り立つ．

| if 条件式 then 文 else 文（条件文）| while 条件式 do 文

（ループ）

最後に補題 (5) を示そう．ゲーム G1 (A) と G2 (A)（確率的代入）の違いは，A1 の引数として g z · mb を渡すか，g z を| 変数 ← 手続 (数式, . . . , 数式) （手続き呼出し）

渡すかである．z は一様かつ独立な乱数であるため，| 文; 文

（逐次実行）

g も一様かつ独立である．そのため，g · mb も同様
zzであり，二つのゲームで b = b′ となる確率は等しく，

図 6: プログラミング言語 pWhile の構文

補題 (5) が成り立つ．
この言語では，通常の決定的代入，条件文，ループ，

3 形式的に安全性を証明

手続き呼び出し，逐次実行だけでなく，（有限集合上

前節で紹介した ElGamal 暗号は最も単純な暗号系の）確率的代入を記述できる．確率的代入 x ← d は，のひとつであり，IND-CPA 安全性ではメッセージを確率分布 d から値を取って，変数 x に代入する操作

盗聴するだけの比較的弱い攻撃者（受動的攻撃者）を†4 誤りのない証明を書くことは難しい．暗号系の安全性証
明に限らず，著名な数学者でさえ，飛躍や誤りのある証
明を書くことがある．例えば，Wikipedia の英語版には
不完全な証明の一覧がある．https://en.wikipedia.
org/wiki/List_of_incomplete_proofs

扱っているため，安全性の証明は比較的単純である．
しかし，実用上は，メッセージを送信したり改竄したりできる強い攻撃者（能動的攻撃者）を考慮する必$コンピュータソフトウェア

6を表す．例えば，x ← [1 ... q] は，集合 {1, ... , q} か3. 3. 1 ホーア式

ら値をランダムに選ぶことを表す．数式では，ブール

節 2. 4 で述べたように，暗号系の安全性証明では値，整数値，固定長ビット列，リストなどを扱える．

ゲームの間の関係についての推論を行う．二つのゲー

言語 pWhile を用いると，暗号系の安全性証明のム G1 と G2 の間の関係は，例えば図 7 のように，ゲー$

ゲームを，2. 4 節の図 5 のように記述できる．

ムを実行する前と後で変化する．
実行前の状態

実行後の状態の分布

G1 を実行3. 2 言語 pWhile の意味論m1

言語 pWhile で記述されたゲーム G の振る舞いは，

G をプログラムとして実行したときのメモリ状態の変化として説明できる．ここで，メモリ状態とは，変数から値への写像のことである．例えば，メモリ状態

m で変数 x の値が 5 のとき，m(x) = 5 と書く．

- [[G1 ]](m1 )関係 L(Φ)関係 Ψ

G2 を実行m2- [[G2 ]](m2 )図 7: 二つのゲームの間の関係

何らかのメモリ状態においてゲーム G を実行し，実行後のメモリ状態がどうなるか考えてみよう．ゲーム

ゲーム G1 と G2 の間の関係は，実行によって変化

G が乱数を使ったり，確率的な手続き呼び出しを含んするメモリ状態の間の関係として表現できる．図 7 ででいると，実行後のメモリ状態は一つに定まらない．

は，初期メモリ状態 m1 と m2 の間に関係 Ψ が成り

例えば，一つの命令文だけからなるゲーム x ← [0 ... 3]

立っており，これを m1 Ψ m2 で表す．この状態 m1を実行すると，あるメモリ状態 m に確率 0.25 で遷移でゲーム G1 を実行し，状態 m2 でゲーム G2 を実行

して m(x) = 0 となり，別の状態 m′ に確率 0.25 ですると，実行後のメモリ状態の確率分布がそれぞれ遷移して m′ (x) = 1 となる．そういうわけで，ゲー[[G1 ]](m1 ) と [[G2 ]](m2 ) となり，図 7 ではこの二つの$ムを実行した後の状況は，「メモリ状態の確率分布」として捉えることができる †5 ．
ゲーム G の意味を，「実行前のメモリ状態」から「実行後のメモリ状態の確率分布」への関数 [[G]] として定義しよう †6 ．このとき，メモリ状態 m でゲーム G を実行した後のメモリ状態の確率分布は [[G]](m) と書け

確率分布の間に，関係 L(Φ) が成り立っている．
この L(Φ) は，メモリ状態の間の関係 Φ を「確率分布に持ち上げて」得られた「状態の確率分布の間の関係」である．持ち上げ L の特殊な場合については

3. 3. 2 節で簡単に説明するが，L の厳密な定義 [22] に興味のある読者は注釈 †7 を参照してほしい．

る．メモリ状態 m でゲーム G を実行した後に事象 E

さて，図 7 のような二つのゲームの間の関係は，確が成り立つ確率を Pr[ G, m : E ] と書くことにする．

率関係ホーア論理を用いて記述できる．m1 Ψ m2
を 満 た す 任 意 の メ モ リ 状 態 m1 と m2 に 対 し て ，

3. 3 確率関係ホーア論理[[G1 ]](m1 )L(Φ)[[G2 ]](m2 ) が成り立つことを，確率関

それでは，言語 pWhile で記述されたゲームを使って，暗号系の安全性について推論する方法を考えよう．推論を記述する枠組みとして，本稿では確率関係
ホーア論理（pRHL）を紹介する．
†5 ゲームがループを含んでいて停止しない場合，いかなるメモリ状態にも到達しない．したがって，厳密には，確率の総和が 1 より小さいかもしれない部分分布（sub-distribution）を考える必要がある．本稿では単純化のため，ループを含まないゲームのみを扱う．
†6 意味論の詳細は [9] を参照．厳密には確率分布をモナドで定義している [3]．

†7 二つの状態集合 M1 と M2 の間の関係 Φ の確率分布への持ち上げ L(Φ) とは，M1 上の分布と M2 上の分
布の間の関係で，次の条件を満たすものとする [10]：d1 L(Φ) d2 を満たす任意の分布 d1 と d2 に対して，
M1 × M2 上の確率分布 d が存在し，
1. 任意の (m1 , m2 ) ∈ M1 ×M2 に対し，d(m1 , m2 ) > 0
ならば m1 Φ m2 ，∑d(m1 , m2 )，2. 任意の m1 ∈ M1 に対し，d1 (m1 ) =m2∑∈M2

3. 任意の m2 ∈ M2 に対し，d2 (m2 ) =d(m1 , m2 )．

m1 ∈M1Vol. 33 No. 4 Nov. 2016

7

係ホーア論理では，ホーア式（judgment）

実行後の状態の確率分布 [[G1 ]](m1 ) と G2 実行後の状|= G1 ∼ G2 : Ψ ⇒ Φ†
8で表す ．Ψ を事前条件といい，Φ を事後条件という．

態の確率分布 [[G2 ]](m2 ) の間に，関係 L(x + 2 = y)が成り立つ．

この記法は複雑でやや紛らわしいかもしれない．矢この具体例の [[G1 ]](m1 ) と [[G2 ]](m2 ) は，同一の確

印 ⇒ は古典論理の「ならば」ではない．記号 ∼ を使

率分布ではないけれども，事後条件 x + 2 = y を介す

うことで二つのゲームの振る舞いが「等しい」ようにることにより，同一の確率分布となるものである．

見えるが，通常想像する意味での「等しさ」ではない．

なお，状態の確率分布の間の関係 L(x + 2 = y) が3. 3. 2 事後条件を確率分布に持ち上げた関係成り立っていても，状態の間の関係 x + 2 = y 自体は事後条件 Φ を確率分布に持ち上げた関係 L(Φ) に必ずしも成り立たないことに注意したい．x と y は独

ついて少し説明しよう．分かりやすくするために，本立にランダムに選ばれており，例えば，x + 2 = 2 か

稿では「事後条件 Φ が同値関係の場合」だけを説明

つ y = 3 となる場合がある．

する．実際のところ，多くの暗号系の安全性証明を記述する際には同値関係を考えれば十分である．
例えば，次の二つのゲーム G1 と G2 を考えよう．
def

$

def

$

• G1 = x ← {0, 1}• G2 = y ← {2, 3}

3. 4 証明図とその書き方
さて，確率関係ホーア論理において，式（ホーア式
や確率の等式・不等式）の証明をどのように記述するのかを大雑把に見てみよう †10 ．

G1 と G2 を実行する前のメモリ状態を，それぞれ m1 ,3. 4. 1 証明図とはm2 で表す．G1 と G2 の実行の前後の状態に対し，式の証明には，次の形の推論規則を用いる．

def• 事前条件 Ψ = truedef

• 事後条件 Φ = (x + 2 = y)

J1

· · · Jn

J2
J

[規則の名称]を考える．事前条件 Ψ が true であるとは，初期状態

横線の上にある式 J1 , J2 , . . ., Jn を前提と呼び，横m1 と m2 が何でもよいことを意味する．事後条件 Φ

線の下にある式 J を結論と呼ぶ．
この推論規則は，「前提 J1 , J2 , . . ., Jn が成り立つ

を確率分布に持ち上げた関係 L(x + 2 = y) は「x + 2の確率分布と y の確率分布が等しいこと」を表す †9 ．

とき，結論 J が成り立つ」ことを表す．
（逆は必ずしそれでは，ホーア式 |= G1 ∼ G2 : Ψ ⇒ Φ，つまりも成り立たない．すなわち，結論 J が成り立つとき$$|= x ← {0, 1} ∼ y ← {2, 3} : true ⇒ (x + 2 = y)が成り立つことを確かめてみよう．
任意の初期状態 m1 と m2 から G1 と G2 をそれぞに，前提 J1 , J2 , . . ., Jn が成り立つとは限らない．
）
前提の個数 n が 0 のとき，すなわち前提条件なしに必ず式 J が成り立つとき，J を公理と呼ぶ．

れ実行すると，x の値は，確率 1/2 で 0，確率 1/2 で確率関係ホーア論理には，3. 5 節に示すように，推1 となる．すなわち x は集合 {0, 1} 上の一様分布に論規則がたくさんある．式を証明するためには，この従う．このとき x + 2 の確率分布は，{2, 3} 上の一様ような推論規則を組み合わせて，証明図を作成する．

分布であり，y の確率分布と同一である．つまり，G1

証明図は，図 8 のような木構造をしている．
図 8 の証明図の一番下にある式 J （木構造の根の部†8 通常のホーア論理のホーア式は，一つのプログラム Gとその事前条件 Ψ および事後条件 Φ からなる三つ組{Ψ} G {Φ} であり，ホーアの三つ組（Hoare triple）と呼ばれる．一方，関係ホーア論理では二つのプログ
ラムの間の関係を扱うため，四つ組である．
†9 より厳密に言うと，([[G1 ]](m1 )) L(Φ) ([[G2 ]](m2 )) が表すのは，
「x + 2 の値の確率分布」と「y の値の確率分布」が等しくなるような関係が，「G1 実行後の状態分
布 [[G1 ]](m1 )」と「G2 実行後の状態分布 [[G2 ]](m2 )」の間に成り立つということである．

分）が 証明したいことである．式 J の証明図を上から下に読んでみよう．まず，証明図の一番上にある式

J11 , J12 , J2（木構造の葉の部分）が公理であり，前提†10 本稿は論理学の知識を仮定せずに説明しているつもりなので，証明論や定理証明器を熟知している読者
は 3. 4 節を読み飛ばしてほしい．そうでない読者は，当たり前に見えても，証明を機械的に読んで検査する計算機になったつもりで，辛抱強く読んでほしい．

コンピュータソフトウェア

8J11[規則 c]J12

J1[規則 d][規則 b]とは何もないから，証明は完成している．

J2

J （証明したいこと）[規則 e][規則 a]

3. 5 確率関係ホーア論理の推論規則
それでは，証明図を書く際に，具体的にどんな推論

図 8: 証明図

規則を使うのかを見てみよう．

3. 5. 1 推論規則 PrEq と PrLe
なしに成り立っている．公理 J11 と J12 に対して，規

まず，確率の等式や不等式を証明するために，どの

則 b を用いると，式 J1 が得られる．式 J1 と公理 J2

ような確率関係ホーア論理のホーア式を証明すればに対して，規則 a を用いると，証明したい式 J が得よいのかを考えてみよう．

られる．

初期メモリ状態 m1 と m2 において m1 Ψ m2 が成

3. 4. 2 証明図の書き方

り立つときに，m1 でゲーム G1 を実行し，m2 で G2

では，どうやって図 8 の証明図を作り上げるのか，を実行し，事後条件 Φ が成り立つ場合を考える．こ

手順を説明しよう．最初に証明したい式 J を書き，そのとき，ホーア式 |= G1 ∼ G2 : Ψ ⇒ Φ が成り立つ．

こから徐々に証明図を下から上へ書いていく．
証明したい式 J に適用できる規則を探してみて，規則 a を適用できると気付き，証明図の一部分
J1
J2[規則 a]
Jが得られたとしよう．これは「式 J1 と J2 が成り立つならば，式 J が成り立つ」ことを表す．したがって，式 J1 と J2 が証明できれば，式 J が証明できた

事後条件 Φ が成り立つときに，論理式 A と B が論理同値である，すなわち|= Φ ⇒ (A ⇔ B)が成り立つものとする．すると，事後条件 Φ が成り立つとき「A が成り立つ確率」と「B が成り立つ確率」が等しい．よって，「G1 実行後に A が成り立つ確率」と「G2 実行後に B が成り立つ確率」も等しい．
すなわち，ことになる．
そういうわけで，次に証明したいことは式 J1 と J2である †11 ．証明したい式 J に対して規則 e を適用

Pr[ G1 , m1 : A ] = Pr[ G2 , m2 : B ]である．これをまとめたものが推論規則 PrEq である．

2|= m1 Ψm2 かつ |= G1 ∼ G2 : Ψ ⇒ Φ

できたとしよう．

J1 （未証明）
JJ2

かつ |= Φ ⇒ (A ⇔ B)
[PrEq]
Pr[ G1 , m1 : A ] = Pr[ G2 , m2 : B ][規則 e][規則 a]式 J2 の上には式が現れない．つまり，J2 は公理であ|= m1 Ψm2 かつ |= G1 ∼ G2 : Ψ ⇒ Φり，前提なしに成り立っている．

J2 に関しては，これ以上証明することは何も残っていないから，次に証明したいことは式 J1 である．

J1

[規則 b]J （証明したいこと）J2

かつ |= Φ ⇒ (A ⇒ B)

Pr[ G1 , m1 : A ] ≤ Pr[ G2 , m2 : B ][PrLe]

3. 5. 2 推論規則 Rnd

J1 に規則 b を適用できて証明図の一部分
J11（未証明） J12（未証明）

不等式に関しては，以下の推論規則 PrLe がある．

[規則 e][規則 a]が得られたとしよう．さらに，これまでの要領で規則

c と規則 d を適用し，式 J11 と J12 が公理であることを示せば，図 8 の証明図が得られる．図 8 の証明図
では，すべての葉が公理であり，これ以上証明するこ†11 しかし，もしかしたら J1 か J2 が証明できないかもしれない．その場合は，証明したい式 J に対し，規則 a 以外の別の規則を適用することを考える．

次に，整数値の確率的代入の場合を見てみよう．具体例として，3. 3. 2 節で見たホーア式$$|= x ← {0, 1} ∼ y ← {2, 3} : true ⇒ (x + 2 = y)を導くために，どんな推論規則を使うのかを考えたい．
そもそも，このホーア式の意味は，任意の初期メモリ状態 m1 と m2 において，$$それぞれ x ← {0, 1} と y ← {2, 3} を実行したときに，（前者の）x + 2 の確率分布と（後Vol. 33 No. 4 Nov. 20169′者の）y の確率分布が同一である，

おいて e を e に対応させる全単射 f を考えればよく，というものだった．x の確率分布と y の確率分布がこのdefような関係を満たすことを導くためには，f (v) = v+2

決定的代入の推論規則 Assn は以下のようになる．
|= Ψ ⇔ Φ[e/x, e′ /y][Assn]|= x ← e ∼ y ← e′ : Ψ ⇒ Φ

で定義される全単射 f : {0, 1} → {2, 3} を考えて，
各 v ∈ {0, 1} に対し，
「x の値が v である確

3. 5. 4 推論規則 Seq

率」と「y の値が f (v) である確率」が等し次に，ゲームを逐次実行する場合を見てみよう．
「c1
を実行して c′1 を実行するゲーム c1 ; c′1 」と「c2 を実

いことを示せばよい．実際，いずれの確率も 21 で等しい．

行して c′2 を実行するゲーム c2 ; c′2 」の間に成り立つ

以上の議論を一般化しよう．確率分布 di に対し，確性質を証明したいとき，ゲームをそれぞれ分割して，率が 0 でない要素の集合を supp(di ) で表し，値 v を取

• c1 と c2 の間の性質 |= c1 ∼ c2 : Ψ ⇒ Θ の証明

る確率を di (v) と書くことにする．整数値の確率分布• c′1 と c′2 の間の性質 |= c′1 ∼ c′2 : Θ ⇒ Φ の証明

d1 と d2 として，ある全単射 f : supp(d1 ) → supp(d2 )に証明の作業を分解できる．そのための推論規則が以が存在して，すべての v ∈ supp(d1 ) に対して，

下に示す規則 [Seq] である．

を満たすようなものを考える．このとき，確率的代入のための推論規則 Rnd は以下のようになる †12 ．
f|= Ψ ⇔∧v∈supp(d1 )|= x ← d1 ∼ y ← d2 : Ψ ⇒ Φ
こ の 規 則 Rndf を 前 述 の ホ ー ア 式 に 適 用 し て
def

def

def

み よ う．d1 = {0, 1}, d2 = {2, 3}, Ψ = true ,defΦ = (x + 2 = y) とおくと，前述のホーア式は$$|= x ← d1 ∼ y ← d2 : true ⇒ Φ
defと書ける．d1 から d2 への全単射 f (v) = v + 2 に対し，∧
Φ[v/x, f (v)/y] ∧ d1 (v) = d2 (f (v))
v∈{0,1}⇔∧(x + 2 = y)[v/x, f (v)/y] ∧ 12 = 12v∈{0,1}

⇔

∧

[Seq]

1 ゲームをどの部分で分
この推論規則を使うには，○

よいのか，をよく考える必要がある．
[Rndf ]$|= c1 ; c′1 ∼ c2 ; c′2 : Ψ ⇒ Φ

2 どのような Θ を中間条件として使えば割するか，○

Φ[v/x, f (v)/y] ∧ d1 (v) = d2 (f (v))$|= c′1 ∼ c′2 : Θ ⇒ Φ|= c1 ∼ c2 : Ψ ⇒ Θ

d1 (v) = d2 (f (v))(v + 2 = f (v))

v∈{0,1}def⇔ true = Ψであるから，このホーア式が Rndf を用いて導かれる．

3. 5. 3 推論規則 Assn

3. 5. 5 推論規則 Swap
次に，ゲームを変形する推論規則を見てみよう．具体例としてランダムな整数を 2 回生成するゲームを考えてみよう．X = {0, 1}，Y = {2, 3} とおく．
$

$

$

$

|= x1 ← X; y1 ← Y ∼ y2 ← Y ; x2 ← X : true ⇒ x1 = x2
このホーア式では，xi と yi のどちらを先に生成しても，x1 の値の確率分布と x2 の値の確率分布が同じであることを主張している．実際，xi と yi は独立に選ばれているから，このホーア式は成り立つ．
このホーア式を証明するためには，プログラムの順序を入れ替えるための推論規則を使う．プログラム

c2 と c3 が独立である場合，すなわち• c2 が c3 に現れる変数に書き込まず，• c3 も c2 に現れる変数に書き込まず，• c2 も c3 も共通の変数を持たない

次に，整数値の決定的代入の場合を見てみよう．決場合を考えよう．
（上の例だと c2 = x1 ← X と c3 =定的代入 x ← e は，数式 e を変数 x に確率 1 で代入

y1 ← Y は独立である．
）このとき，ゲームの中で c2 とする確率的代入と見なせる．よって，規則 Rndf に

c3 の実行順序を入れ替えても，何も変わらない．そ†12 単純化のため，本稿では全単射 f が存在する場合を紹介している．例えば，集合 supp(d1 ) と supp(d2 )の要素数が異なる場合には，supp(d1 ) から supp(d2 )への全単射が存在しないため，規則 Rndf を適用できない．一般の場合の推論規則は [9] を参照．

こで，実行順序の入れ替えの推論規則を適用できる．

def

$

def

$

|= c1 ; c3 ; c2 ; c4 ∼ c′ : Ψ ⇒ Φ|= c1 ; c2 ; c3 ; c4 ∼ c′ : Ψ ⇒ Φ[Swap]

順序を入れ替える c2 と c3 の独立性を確かめなけれコンピュータソフトウェア

10ば，この推論規則を適用できないことに注意したい．

仮定を破ってしまう（無視できるほど小さな）確率」

なお，右側のゲームで順序を入れ替える規則もある．

に等しいことを証明する．すなわち，任意の PPT 攻
撃者 A に対して，ある PPT 攻撃者 InvA が存在し，

3. 5. 6 推論規則 Skip
他にも非常に多くの推論規則があるが，本節では最後に，何もしないゲーム skip についての規則|= Φ ⇒ Ψ[Skip]|= skip ∼ skip : Φ ⇒ Ψを見てみよう．この規則は，横線の下のホーア式を証明するためには，一階述語論理式 Φ ⇒ Ψ を証明すれば十分であることを表している．

3. 6 確率関係ホーア論理で安全性証明を形式化
前節までは確率関係ホーア論理における証明について見てきた．道具がすべてそろったから，いよいよ暗号系の安全性証明を形式化する方法を紹介しよう．

2. 4 節で紹介した ElGamal 暗号の IND-CPA 安全性|Pr[CPA(ElGamal, A) : res] − 1/2|
= |Pr[DDH0 (InvA ) : res] − Pr[DDH1 (InvA ) : res]|が成り立つことを証明する．

3. 6. 2 安全性証明における攻撃者の形式化
安全性証明で考えたい攻撃者は，特定の攻撃者ではなくて，任意の PPT 攻撃者である．そこで，攻撃者は，具体的なゲームとしてではなく，ゲームの型（モジュール型）として形式化する．

IND-CPA 安全性の証明では，図 10 のとおり，攻撃者 A を二つの手続き A0 と A1 からなるゲームの型として形式化する． ここで，手続き A0 と A1 の記

module type A = {proc A0 (pk : pkey) : plaintext × plaintextの証明を例にとって説明する．

proc A1 (c : ciphertext) : bool

3. 6. 1 証明したいことの形式化
暗号系の IND-CPA 安全性は，2. 2 節で述べたよ
うに，ゲームを用いて定義する．IND-CPA ゲームを

pWhile 言語（3. 1 節）で記述したものを図 9 に示す．

}
図 10: IND-CPA 攻撃者を記述するゲームの型 A
述では，引数と返り値の型だけを記述し，具体的な(pk , sk ) ← KG(η);

プログラムを与えない．A0 は，公開鍵を受け取って，(m0 , m1 ) ← A0 (pk );平文の対を返す任意の手続きであり，A1 は，暗号文$b ← {0, 1};c ← E(pk , mb );b′ ← A1 (c);res ← (b = b′ );図 9: 言語 pWhile で記述したゲーム CPA(S, A)．
ただし S = (KG, E, D) は公開鍵暗号，A = (A0 , A1 )．

を受け取って，ブール値を返す任意の手続きである．
手続き A0 と A1 は，ひとつのモジュール型 A の宣言に記述され，攻撃者の内部状態 globA を共有している．そのため，図 9 と図 10 の A0 と A1 の引数や返り値には globA の受け渡しを記述していない．
最後に，注意したい点として，「攻撃者が確率的多項
式時間（PPT）の計算しかできない」という条件は，

ElGamal 暗号の IND-CPA 安全性について証明したいことは，任意の PPT 攻撃者 A に対して，|Pr[CPA(ElGamal, A) : res] − 1/2|が無視できるほど小さいことである（2. 4. 1 節）．
確率関係ホーア論理の枠組みでは，攻撃の確率が「無視できるほど小さい」こと自体を証明する代わりに，「攻撃の確率を表現した式」が成り立つことを証明する．例えば，ElGamal 暗号の IND-CPA 安全性の証明では，「IND-CPA 安全性を破る確率」が「DDH

じつは攻撃者 A の記述自体には現れていない．実際のところ，ElGamal 暗号の IND-CPA 安全性を証明するには，「攻撃者が DDH 問題を解けない」という仮定だけを使えば十分である．言い換えれば，「DDH問題を解けない任意の攻撃者」というより強い攻撃者のもとで安全性を証明できる．したがって，攻撃者の計算能力の限界に関しては，「DDH 問題を解けない」という仮定だけを記述している †13 ．
†13 オラクルにアクセスする攻撃者を扱う場合だったら，多項式回のアクセスという条件が必要になってくる．

Vol. 33 No. 4 Nov. 201611

3. 6. 3 安全性証明の形式化の概要

密さだけではない．例えば，確率関係ホーア論理を拡

確率関係ホーア論理で形式化したい安全性証明は，張したプログラミング言語を用いると，機能ごとに

2. 4. 2 節の図 5 のようなゲーム列を用いた証明である．

モジュールに分割できて，複合的で階層的に証明を記

確率関係ホーア論理を用いて証明を形式化する際述できるため，証明を読む人（特に暗号の研究者や技には，3. 4 節で説明したように，証明図を作成する．

術者）にとって，より分かりやすくなる．また，ツー証明図では，証明のすべての推論に対して，それぞれルによる支援により，証明の瑣末な部分を自動化した

いかなる推論規則を用いて導いたのかを，推論を飛躍り，証明にかかる時間や労力を減らしたりできる．

させることなく厳密に記述する．
しかし，一般に暗号系の安全性証明は非常に煩雑で

4. 1 検証ツール EasyCryptあるから，証明のすべての推論を同じレベルで記述す検証ツール EasyCrypt [11] は，確率関係ホーア論理

ると，証明図が膨大で複雑になり，読みにくくなる．

に基づいて，暗号系の安全性証明の記述を支援し，証そこで，暗号系の安全性証明を記述する際には，証明の正しさを機械的に確認するためのソフトウェアで明を次の二つの階層に分けて記述する．

ある．このツールは，暗号系の計算量的安全性（や情(A) 確率ホーア論理の枠組みの中で，「ゲーム変報理論的安全性）の検証ツールの中で，最も注目を集

換の各ステップに関する補題」をそれぞれ示す．

めているものである．2011 年に Barthe らによって（2. 4. 3 節の各補題 (1)〜 (5) の証明の形式化．
）

発表され，2016 年現在も開発が続き，進化し続けて(B) 確率ホーア論理の枠組みの外で，「ゲーム変換のいる．本節では EasyCrypt の概要を紹介する．

各ステップに関する補題」を組み合わせて，確率

まず，EasyCrypt における証明記述のやり方を，確の議論を行い，証明の全体を完成させる．
（2. 4. 2

率関係ホーア論理の証明図と比べながら，説明しよう．

節の証明の全体構造の記述の形式化．
）
実際のところ，「ゲーム変換の各ステップに関する補題」の証明も，すべての推論を同じレベルで記述
すると，煩雑になりがちである．そのため，安全性証明の形式化の詳細は，4. 2 節において，検証ツール

EasyCrypt を紹介しながら説明する．

4 コンピュータ上で安全性を証明
前節で紹介した確率関係ホーア論理では，安全性証
明の各推論を飛躍させることなく厳密に記述するたJ11[規則 c]J1

J12[規則 d][規則 b]6下かJ2J （証明したいこと）(a) 確率関係ホーア論理の証明図
proof .
a.
e.
b.
c.
d.
qed .

め，証明の正しさを厳密に確認できそうである．
しかし，安全性証明の導出を一切省略せずに，人手で書くわけにもいかない．長い証明を書くのは大変[規則 e][規則 a]

ら
上
へ
書
く

上
か
ら
下
へ
書
?く

(b) EasyCrypt の証明記述

図 11: 証明図に対応する EasyCrypt の証明記述

だし，それを読む人も退屈する．また，人の行いに間違いはつきものであり，長い証明を紙の上に書けば，思わぬミスをしてしまうものである．

証明図では，図 11 のとおり，一番下に「証明したいこと」を書き，推論規則を次々に適用しながら，下か

人手で安全性証明を書くたびに，間違いを見つけらら上へ書いていき，すべての葉が公理であることを確れては，人手で新しい証明を書き直す，ということの認できると，証明図が完成するのであった．EasyCrypt

繰り返しを防ぐには，コンピュータを用いて証明を記における証明記述は，大雑把にいうと，こうして適用

述し，機械的に正しさを確認することが有効である．

していった推論規則の列である．証明図と EasyCrypt

コンピュータ上で証明を記述する利点は，証明の厳の記述の間の対応は，図 11 のとおりである．

コンピュータソフトウェア

12

厳密に言うと，EasyCrypt の証明記述には推論規則の名前ではなく，タクティック（tactic）の名前を書
く．タクティックは，必ずしも一つの推論規則ではな
く，一つ以上の推論規則の列に対応する †14 ．

EasyCrypt の見かけや使い方は，定理証明支援系
Coq [29] を参考に作られている．EasyCrypt のユーザ
は，テキストエディタ Emacs の画面上で，EasyCryptの出力表示を見てタクティックを入力するという作業を繰り返すことで，証明を対話的に作成できる．
証明を対話的に作成する手順は以下のとおりである．

1. 最初にユーザが「証明したいこと」（ゴール）をEasyCrypt に入力する．
2. EasyCrypt が表示した「次に証明すべきこと」（その時点でのゴール）に対して，ユーザは「次に適用するタクティック」を入力する．

3. EasyCrypt は，タクティックがゴールに適用できるとき，「次に証明すべきこと」（ゴール）を表示する．そうでないときはエラーを表示する．

4. これらを繰り返すうちに，証明すべきこと（ゴール）がなくなり，証明が完成する．

4. 2 EasyCrypt による安全性証明の例
では，ElGamal 暗号の IND-CPA 安全性の証明を例にとり，EasyCrypt で証明を記述する方法を見てみrequire import DiffieHellman FMap .
type pkey= group .
type skey= F.t.
type plaintext = group .
type ciphertext = group * group .
require PKE .
clone import PKE as PKE_ with
type pkey <- pkey ,type skey <- skey ,type plaintext <- plaintext ,type ciphertext <- ciphertext .
module ElGamal : Scheme = {proc kg () : pkey * skey = {var sk ;sk = $ FDistr . dt ;return ( g ^ sk , sk ) ;}proc enc ( pk : pkey , m : plaintext ) :ciphertext = {var y ;
y = $ FDistr . dt ;return ( g ^y , ( pk ^ y ) * m ) ;}proc dec ( sk : skey , c : ciphertext ) :plaintext option = {var gy , gxym ;( gy , gxym ) = c ;return Some ( gxym * gy ^ ( - sk ) ) ;}}.

図 12: EasyCrypt における ElGamal 暗号の記述

よう．記述したい証明は，2. 4. 2 節の図 5 のゲーム列による証明だが，本節ではその一部分を解説する．

現れず，DDH 仮定に隠れていることに注意したい．

4. 2. 1 暗号系の記述

4. 2. 2 補題の記述

EasyCrypt では，専用のプログラミング言語を用いゲーム変換のひとつのステップについての補題を記て，暗号系の仕様と安全性定義をプログラムとして記述する方法を紹介する．図 13 に再掲するゲーム G1

述する．詳細には立ち入らないが，例えば，ElGamal

から G2 への変換を例にとって説明する．なお，G1 と暗号は図 12 のように記述される．冒頭ではライブラリ

G2 の違いは，破線で囲まれた部分（ビット b の生成をインポートし，データ型を定義している．ElGamal

箇所と，手続き A1 が受け取るメッセージ）である．

暗号を記述するゲームを，公開鍵暗号方式を表す型

証明したいことは，任意の PPT 攻撃者 A に対し，Scheme のモジュール ElGamal として定義している．

Pr[G1 (A) : res] = Pr[G2 (A) : res]モジュールの記述は抽象化されており，巡回群 Z∗qが成り立つこと（2. 4. 2 節の補題 (5)）である．Easy-の詳細はライブラリに含まれる．そのため，例えば qの選び方の条件が，図 12 の定義にも安全性証明にも†14 証明の記述と作業を簡潔にするために，定理証明支援系 Coq と同様，タクティカル（他のタクティック
を引数に取るタクティック）も用意されている．

Crypt では，この補題を以下のように記述する．
lemma lem_G1_G2 (A<: Adversary ) & m :Pr [ G1 (A). main () @ & m : res ]= Pr [ G2 (A). main () @ & m : res ].

なお，&m はゲームを実行する前のメモリ状態を表す．

Vol. 33 No. 4 Nov. 2016
G2 (A)
4. 2. 4 図 14 の証明の各行の説明$∗

G1 (A)$

x, y ← Z∗q ;(m0 , m1 ) ← A0 (g x );$b ← {0, 1};$z ← Z∗q ;x, y ← Zq ;x
補題 (m0 , m1 ) ← A0 (g );$(5) z ←Z∗q ;-b′ ← A1 (g y , g z );13

証明 2 行目：確率の等式からホーア式へ
補題 lem G1 G2 の証明では，最初に，推論規則 PrEq
（3. 5. 1 節）に対応するタクティック byequiv => //b′ ← A1 (g y , g z · mb );b ← {0, 1};（図 14 の証明 2 行目）を適用する．これにより，確率res ← (b = b′ );res ← (b = b′ );の議論を確率ホーア論理の推論に持ち込むことがで$

図 13: 補題 (5) のゲーム変換
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

proof .
byequiv = > // .
proc .
swap {2} 10 - 4.
call ( _ : true ).
wp .
rnd( fun z , z + log ( if b then m 1 else m 0 ){2})( fun z , z - log ( if b then m 1 else m 0 ){2}).
rnd .
call ( _ : true ).
wp ; rnd ; rnd .
skip .
progress ; smt .
qed .

き，次に証明したいことが以下のとおり表示される．
Current goalType variables : < none >A : Adversary& m : memory---------------------------------pre = ( glob A){2} = ( glob A){ m } /\( glob A){1} = ( glob A){ m }G1 (A). main ∼ G2 (A). main
post = = { res }A は任意の攻撃者，m は任意の初期メモリ状態を表す．
pre はホーア式の事前条件, post は事後条件を表す．
二つのゲームに現れる同じ変数を区別するために，ゲーム Gi の各変数 α を α{i} で表そう．G1 の変数

globA は globA{1}，G2 の変数 globA は globA{2} と
図 14: EasyCrypt による lem G1 G2 の証明

書ける．={res} は両ゲームの変数 res の値が等しいこ

4. 2. 3 証明の記述と方針と，すなわち res{1} = res{2} の略記である．ホー

確率関係ホーア論理に基づく証明は，定義（例えばア式の意味は，「ゲーム G1 と G2 の実行前に攻撃者の暗号系の仕様や IND-CPA 安全性の定義）や証明し状態 glob A が等しいとき，G1 と G2 の実行後に得らたい補題と同じファイルに記述できる．EasyCrypt にれる変数 res の値の確率分布が等しい」である．

よる証明の記述は，証明図を作成するのに用いたタク

証明 3 行目：ゲームの手続きを展開する

ティックの列となっている．例えば，補題 lem G1 G2

次に，タクティック proc（図 14 の証明 3 行目）で，の証明は，図 14 のように書ける．
証明の方針を説明しよう．最初に，補題 lem G1 G2の確率の等式をホーア式に変形する．次に，|= G1 ∼G2 : pre ⇒ post という形のホーア式に対し，推論規則 Seq と他の規則から構成されるタクティックを次々に用いて，ゲーム G1 と G2 の末尾から各々ひとつず
つ命令文を削っていく．両ゲームから命令文を削る
度に，削られた命令文の間の関係が事後条件 post に加わっていく．最終的に二つのゲームは空っぽになって，|= skip ∼ skip : true ⇒ post′ という形のホーア式が得られ，一階述語論理式 post′ を証明すれば十手続き main を展開すると，次のホーア式を得る．
pre= ( glob A){2} = ( glob A){ m } /\( glob A){1} = ( glob A){ m }x = $ FDistr . dt
(1) x = $ FDistr . dt
y = $ FDistr . dt(2) y = $ FDistr . dt
gx = g ^ x(3) gx = g ^ x
gy = g ^ y(4) gy = g ^ y( m 0 ,m 1 ) =A. A 0 ( gx ) (5) ( m 0 ,m 1 ) =A. A 0 ( gx )b = $ {0 ,1}(6) z = $ FDistr . dt
z = $ FDistr . dt(7) gz = g ^ z
gz = g ^ z(8) c = ( gy , gz )c = ( gy , gz * ( b ? m 1 : m 0 ))(9) b ’ = A. A 1 ( c )b ’ = A. A 1 ( c )(10) b = $ {0 ,1}分となる．post′ は人に読みにくい巨大な論理式になりがちなので，外部ツールで自動証明を試みる．

post = ( b {1} = b ’{1}) = ( b {2} = b ’{2})行番号の左側が G1 ，右側が G2 のプログラムである．

コンピュータソフトウェア

14

証明 4 行目：命令文の順番を入れ替える

証明 7〜9 行目：確率的代入を取り除く

次に，タクティック swap{2} 10 -4（図 14 の証明

このとき，左右のゲームの最終行 (7) が確率的代入

4 行目）を適用すると，ゲーム G2 の (10) b =${0,1}z =$FDistr.dt（すなわち z← Z∗q ）であるから，推が 4 行上に移動し，ゲーム G1 の (6) と一致する．

論規則 rnd（3. 5. 2 節）を適用できる．

......
b = $ {0 ,1}(6) b = $ {0 ,1}
z = $ FDistr . dt(7) z = $ FDistr . dt
gz = g ^ z(8) gz = g ^ z
c = ( gy , gz * ( b ? m 1 : m 0 ))(9) c = ( gy , gz )b ’ = A. A 1 ( c )(10) b ’ = A. A 1 ( c )post = ( b {1} = b ’{1}) = ( b {2} = b ’{2})証明 5 行目：攻撃者の手続き呼び出しを取り除く
さて，次に，左右のゲームで両方とも (10) が b’ =A.A1 (c) であることに着目し，攻撃者の性質に関する以下のホーア式を用いることを考える．

|= b’ ← A.A1 (c) ∼ b’ ← A.A1 (c) :(globA{1} = globA{2}) ∧ (c{1} = c{2})⇒ (globA{1} = globA{2}) ∧ (b’{1} = b’{2})$ここで注意すべき点は，どのような全単射 f を用
いるかである．事後条件の中には，「左側のゲームのz{1}g∗ (if b{1} then m {1} else m {1}) の値の確率分
10

布」と「右側のゲームの g z{2} の値の確率分布」が等しいという条件が現れてくる．そのため，3. 5. 2 節の議論に従うと，全単射
g z{2} 7→ g z{1} ∗ (if b{1} then m {1} else m {1})10を考えればよい．両辺の対数をとると，全単射

f : z{2} 7→ z{1} + logg (if b{1} then m1 {1} else m0 {1})を考えることになる．
こうしてタクティック rnd f f −1 （図 14 の証明 7〜9 行目）を適用すると，事後条件が代入によって書き換わり，両方のゲームから (7) が取り除かれる．
証明 10〜12 行目：空になるまで命令文を取り除く$

このホーア式では，左右のゲームで攻撃者の内部状態

次に，左右のゲームの (6) b ← {0, 1} も確率的代

globA{1} と globA{2} が等しいときに，攻撃者の手入であるから，タクティック rnd を適用して，(6) を続き A1 を同一の入力 c でそれぞれ実行すると，A1 実取り除く（図 14 の証明 10 行目）．今度は全単射とし行後の内部状態 globA{1} と globA{2} も等しく，A1て恒等写像を考えればよい．

の返り値 b’{1} と b’{2} も等しくなることを表す．

pre

このホーア式の適用に対応するタクティックが call

( :true)（図 14 の証明 5 行目）である．これにより，両方のゲームから (10) b’ = A.A1 (c) が除かれ，事後条件に (globA{1} = globA{2}) ∧ (c{1} = c{2}) が追加される．
証明 6 行目：決定的代入を取り除く
次に，推論規則 Assn（3. 5. 3 節）に対応するタク
ティック wp（図 14 の証明 6 行目）を用いる．すると，(8) と (9) の代入で，事後条件が書きかわり，左右のゲームから (8) と (9) が取り除かれる．
......
( m 0 ,m 1 ) = A. A 0 ( gx ) (5) ( m 0 ,m 1 ) = A. A 0 ( gx )b = $ {0 ,1}(6) b = $ {0 ,1}
z = $ FDistr . dt(7) z = $ FDistr . dt

= ( glob A){2} = ( glob A){ m } /\( glob A){1} = ( glob A){ m }x = $ FDistr . dt
y = $ FDistr . dt
gx = g ^ x
gy = g ^ y( m 0 ,m 1 ) = A. A 0 ( gx )

(1)
(2)
(3)
(4)
(5)

x = $ FDistr . dt
y = $ FDistr . dt
gx = g ^ x
gy = g ^ y( m 0 ,m 1 ) = A. A 0 ( gx )post = ......

次に，左右のゲームの (5) がどちらも (m0 ,m1 )= A.A0 (gx) だから，再びタクティック call ( :true)を適用し（図 14 の証明 11 行目），(5) を取り除く．
その後も，決定的代入に対してタクティック wp を適用し，確率的代入に対してタクティック rnd を適用
すると，左右のゲームは空っぽのプログラムとなる．
pre= ( glob A){2} = ( glob A){ m } /\( glob A){1} = ( glob A){ m }post = ......
post = ......

Vol. 33 No. 4 Nov. 201615

証明 13 行目：ホーア式から一階述語論理式へ

Coq を用いて，深い埋め込み（deep embedding）に空のプログラムに対しては，推論規則 Skip（3. 5. 6よりゲームを定式化し，ゲーム列による PRP/PRF節）に対応するタクティック skip を適用する．する

Switching Lemma の証明を形式化した．

と，pre → post という形の（確率を含まない）一階

Barthe ら [9] は，深い埋め込みによりゲーム列を用

述語論理式を得る．証明を完成させるには，この論理

いて安全性を証明するための検証ツール CertiCrypt

式が成り立つことを示せば十分である．

を Coq の上に開発し，確率関係ホーア論理の枠組み

証明 14 行目：一階述語論理式の自動証明

で FHD 署名や RSA-OAEP の安全性証明を形式化しこの一階述語論理式 pre → post を証明するためた．しかし，CertiCrypt は，実数演算の形式化の負担に，タクティックの列 progress; smt を適用する．すも大きく，自動化もないため，小さな証明であってもると，progress が論理式をより小さな論理式に自動

膨大な時間と労力がかかるもので，暗号研究者には使的に分解し，smt がこれらを Why3 プラットフォーム

えそうにないツールだった．

[19] のフォーマットに変換して外部ツール（SMT ソ

そこで，Barthe らは CertiCrypt よりも簡単に扱えルバ）を呼び出し，論理式が成り立つかを判定する．

る検証ツールとして，EasyCrypt の開発を 2009 年にEasyCrypt では，このように外部ツールを用いて証開始し，プロトタイプ EasyCrypt 0.2 [11] を発表した．

明の一部を自動化しており，外部ツールの信頼性に依

EasyCrypt は Coq の上に作られておらず，CertiCrypt存しているが，定理証明支援系 Coq [29] の上に作られより実行時間が短く，証明の行数も少なくて済む．

た検証ツール CertiCrypt より使いやすくなっている．

SMT ソルバを呼び出すことにより，証明の瑣末な部
分の自動化が可能で，CertiCrypt よりも使いやすい．

5 関連研究2012 年からは，EasyCrypt 0.2 の記述力を高めた

5. 1 ゲーム列による安全性証明の形式化

EasyCrypt 1.0 [6] を実装し直している [7]．抽象化のメ

暗号系の安全性証明を形式化する枠組みやツール

カニズムにより，複合的で階層的に証明を記述でき，は，EasyCrypt 以外にも様々なものが研究されてきた．

大規模な暗号系の安全性証明を記述しやすくなってい

5. 1. 1 最初の検証ツール CryptoVerif

る．これにより，検証可能計算や認証付き鍵交換プロ

ゲーム列による安全性証明のための最初の検証ツー

トコルの安全性証明も記述できるようになっている．

ルは CryptoVerif [13] である．CryptoVerif では，確Barthe らは，この他に，パディングを用いる公開率プロセス計算のプロセスとしてゲームをモデル化し，鍵暗号の自動解析ツール ZooCrypt [5] や，ジェネリッ

プロセスの間の双模倣性を用いてゲーム変換を形式

ク群モデルの計算量的仮定を解析するためのツール

化する．CryptoVerif を用いて，FDH（Full Domain

GenericGroupAnalyzer [8] を開発した．

Hash）署名，Kerberos 認証，SSH トランスポート層

5. 1. 4 浅い埋め込みによる定式化

プロトコルなどの検証が行われている．

一 方 ，Nowak [24] は ，Coq 上 で ，浅 い 埋 め 込 み

5. 1. 2 ホーア論理を用いた初期の研究（shallow embedding）によりゲームを定式化し，El-

ゲーム列による安全性証明を確率ホーア論理で初

Gamal 暗号の IND-CPA 安全性の証明をより簡潔にめて形式化したのは Corin と den Hartog [16] である．

形式化した．この手法では攻撃者の計算量的限界を扱

しかし，表現力が不十分で，証明には形式的でないえなかったため，Nowak ら [25] は，確率ラムダ計算部分もあった．Courant ら [17] は，ホーア論理を拡張の一種 CSLR の拡張を提案し，Blum-Blum-Shub のし，公開鍵暗号の一般的構成法の IND-CPA 安全性を

擬似乱数生成器を形式化した．最近では，浅い埋め込検証するための（不完全な）自動ツールを開発した．

みによってより少ない労力で証明を行うための新た5. 1. 3 深い埋め込みによる定式化

な枠組みとして，Coq ライブラリ FCF [26] が提案さ

定理証明支援系を用いた形式化の研究も，同時期れ，検索可能暗号の証明 [27] が形式化されている．

に始まった．Aﬀeldt ら [2] は，初めて定理証明支援系

16

コンピュータソフトウェア

5. 2 形式手法の計算論的健全性
従来の形式手法 [18] は，暗号プロトコルの設計ミス

謝辞の発見に役立ってきたが，攻撃の確率や計算量を考

原稿完成を辛抱強く待ってくださった編集委員の真慮しておらず，暗号プロトコルの計算量的安全性を検野健氏（NTT コミュニケーション科学基礎研究所）

証できなかった．そこで，Abadi と Rogaway の研究と有益なコメントをくださった査読者に感謝します．

[1] 以来，「形式手法で攻撃が見つからなかった暗号プ

EasyCrypt Summer School 2013 の情報を提供してくロトコルが，どのような条件のもとで計算量的安全性ださった Gergely Bana 氏（INRIA）と，有益な助言を満たすのか」についての研究（形式手法の計算論的をくださった櫻田英樹氏（NTT コミュニケーション科健全性）も盛んに行われてきた [4] [23] [14] [15]．

学基礎研究所），Reynald Aﬀeldt 氏と照屋唯紀氏（産これらの計算論的健全性の研究は，既存の形式手法
を計算量的安全性の検証に役立てる上で欠かせない．

業技術総合研究所）に感謝します．本稿執筆は JSPS
科研費 JP15H06886 の助成を受けたものです．

しかし，計算論的健全性の証明は，非常に煩雑であり，2016 年現在ほとんど注目を集めなくなっている．

6 むすびに本稿では，暗号系の安全性証明を形式検証する方法，特に，検証ツール EasyCrypt について解説した．

EasyCrypt はまだ実用的とは言い難い．
（本稿執筆時点では）C 言語のソースコードを検証することも，検証済みのソースコードを生成することもできない．
そもそも，EasyCrypt による証明が本当に絶対に正
しいかどうかも分からない．EasyCrypt は比較的新しい開発中のツールで，バグが見つかることがある．人の行いに間違いはつきもので，キリがない．
それでも，EasyCrypt のような形式検証ツールを使うと，間違いを減らせることは確かである．暗号技術
は社会の基盤であり，より信頼できる形で安全性を確かめておく必要があり，形式検証を行う意義がある．
暗号系の形式検証の他の枠組みについて知りたい
読者は，日本語の書籍 [30] を参照してほしい．

EasyCrypt のことをもっと知りたい読者は，公式ウェブサイト https://www.easycrypt.info/ からツールを入手して使ってみてほしい．サイトにはチュート
リアル，マニュアル，サマースクール等のスライドや練習問題もあり，メーリングリストもある．ただし，EasyCrypt は開発中のツールであり，マニュアルは十分でない．EasyCrypt を使いこなすには，定理証明支援系 Coq [29] を勉強するのが近道かもしれない．

参 考 文 献[ 1 ] Abadi, M. and Rogaway, P.: Reconciling Two
Views of Cryptography (The Computational Soundness of Formal Encryption), Journal of Cryptology,
Vol. 15, No. 2(2002), pp. 103 – 127.
[ 2 ] Aﬀeldt, R., Tanaka, M., and Marti, N.: Formal
Proof of Provable Security by Game-Playing in a
Proof Assistant, in Proc. First International Conference on Provable Security (ProvSec’07), 2007,
pp. 151–168.
[ 3 ] Audebaud, P. and Paulin-Mohring, C.: Proofs ofrandomized algorithms in Coq, Sci. Comput. Program., Vol. 74, No. 8(2009), pp. 568–589.
[ 4 ] Backes, M., Pfitzmann, B., and Waidner, M.:
A composable cryptographic library with nested
operations, in Proc. 10th ACM Concerence on
Computer and Communications Security (CCS’03),
2003, pp. 220–230.
[ 5 ] Barthe, G., Crespo, J. M., Grégoire, B., Kunz,
C., Lakhnech, Y., Schmidt, B., and Béguelin, S. Z.:
Fully automated analysis of padding-based encryption in the computational model, in Proc. 20th
ACM Conference on Computer and Communications Security (CCS’13), 2013, pp. 1247–1260.
[ 6 ] Barthe, G., Dupressoir, F., Grégoire, B., Kunz,
C., Schmidt, B., and Strub, P.-Y.: EasyCrypt: A
Tutorial, Foundations of Security Analysis and Design VII, Springer, 2014, pp. 146–166.
[ 7 ] Barthe, G., Dupressoir, F., Grégoire, B.,
Schmidt, B., and Strub, P.-Y.: Computer-Aided
Cryptography: Some Tools and Applications, in
Proc. All about Proofs, Proofs for All, 2014.
[ 8 ] Barthe, G., Fagerholm, E., Fiore, D., Mitchell,
J. C., Scedrov, A., and Schmidt, B.: AutomatedAnalysis of Cryptographic Assumptions in GenericGroup Models, Advances in Cryptology - proc. 34th
Annual Cryptology Conference (CRYPTO’14) PartI, 2014, pp. 95–112.
[ 9 ] Barthe, G., Grégoire, B., and Béguelin, S. Z.:
Formal certification of code-based cryptographic

Vol. 33 No. 4 Nov. 2016
proofs, in Proc. 36th ACM SIGPLAN-SIGACT
Symposium on Principles of Programming Languages (POPL’09), 2009, pp. 90–101.
[10] Barthe, G., Grégoire, B., and Béguelin, S. Z.:
Probabilistic Relational Hoare Logics for ComputerAided Security Proofs, in Proc. 11th International
Conference on Mathematics of Program Construction (MPC’12), 2012, pp. 1–6.
[11] Barthe, G., Grégoire, B., Heraud, S., andBéguelin, S. Z.: Computer-Aided Security Proofs
for the Working Cryptographer, Advances in Cryptology - proc. 31st Annual Cryptology Conference(CRYPTO’11), 2011, pp. 71–90.
[12] Bellare, M. and Rogaway, P.: The Securityof Triple Encryption and a Framework for CodeBased Game-Playing Proofs, Advances in Cryptology - proc. 25th Annual International Conference
on the Theory and Applications of Cryptographic
Techniques (EUROCRYPT’06), 2006, pp. 409–426.
[13] Blanchet, B.: A Computationally Sound Mechanized Prover for Security Protocols, IEEE Trans.
Dependable Sec. Comput., Vol. 5, No. 4(2008),
pp. 193–207.
[14] Comon-Lundh, H. and Cortier, V.: Computational soundness of observational equivalence,in Proc. 15th ACM Conference on Computerand Communications Security (CCS’08), 2008,
pp. 109–118.
[15] Comon-Lundh, H., Hagiya, M., Kawamoto, Y.,
and Sakurada, H.: Computational Soundness of Indistinguishability Properties without Computable
Parsing, in Proc. 8th International Conference on
Information Security Practice and Experience (ISPEC’12), 2012, pp. 63–79.
[16] Corin, R. and den Hartog, J.: A Probabilistic Hoare-style Logic for Game-Based Cryptographic Proofs, in Proc. 33rd International Colloquium on Automata, Languages and Programming(ICALP’06) Part II, 2006, pp. 252–263.
[17] Courant, J., Daubignard, M., Ene, C., Lafourcade, P., and Lakhnech, Y.: Towards automatedproofs for asymmetric encryption schemes in the
random oracle model, in Proc. 15th ACM Conference on Computer and Communications Security(CCS’08), 2008, pp. 371–380.
[18] Dolev, D. and Yao, A.: On the security of public
key protocols, IEEE Transactions on Information
Theory, Vol. 29, No. 2(1983), pp. 198–207.
[19] Filliâtre, J. and Paskevich, A.: Why3 - Where
Programs Meet Provers, in Proc. 22nd European
Symposium on Programming on Programming Languages and Systems (ESOP’13), 2013, pp. 125–128.
[20] Gamal, T. E.: A public key cryptosystem
and a signature scheme based on discrete logarithms, IEEE Trans. Information Theory, Vol. 31,
No. 4(1985), pp. 469–472.

17[21] Halevi, S.: A plausible approach to computeraided cryptographic proofs, IACR Cryptology
ePrint Archive, Report 2005/181, 2005.
[22] Jonsson, B., Yi, W., and Larsen, K. G.: Probabilistic extensions of process algebras, Handbook ofprocess algebra, (2001), pp. 685–710.
[23] Micciancio, D. and Warinschi, B.: Soundness ofFormal Encryption in the Presence of Active Adversaries, in Proc. Theory of Cryptography Conference (TCC’04), Lecture Notes in Computer Science,Vol. 2951, 2004, pp. 133–151.
[24] Nowak, D.: A Framework for Game-Based Security Proofs, in Proc. 9th International Conference on Information and Communications Security(ICICS’07), 2007, pp. 319–333.
[25] Nowak, D. and Zhang, Y.: A Calculus for GameBased Security Proofs, in Proc. 4th International
Conference on Provable Security (ProvSec’10),
2010, pp. 35–52.
[26] Petcher, A. and Morrisett, G.: The Foundational Cryptography Framework, in Proc. 4th International Conference on Principles of Security andTrust (POST’15), 2015, pp. 53–72.
[27] Petcher, A. and Morrisett, G.: A Mechanized
Proof of Security for Searchable Symmetric Encryption, in Proc. IEEE 28th Computer Security Foundations Symposium (CSF’15), 2015, pp. 481–494.
[28] Shoup, V.: Sequences of games: a tool for taming complexity in security proofs, IACR Cryptology
ePrint Archive, Report 2004/332, 2004.
[29] The Coq Development Team: The Coq proof assistant reference manual: Version 8.5, 2016. http://coq.inria.fr.
[30] 萩谷昌己, 塚田恭章 (編): 数理的技法による情報セキュリティ, 日本応用数理学会監修, シリーズ応用数理,
第 1 巻, 共立出版, 2010 年.

川本裕輔
確率的プログラムや暗号プロトコルの検証を研究．2005 年東京大学理学
部情報科学科卒業．2007 年同大学大学院情報理工学系研究科コンピュータ科学専攻修士課程修了．2010 年同専攻博士課程修了．博士（情報理工学）．仏国カシャン高等師範学校（ENS Cachan），英国バーミンガム大学，仏国国立
情報学自動制御研究所 (INRIA)・理工科学校 (École

Polytechnique) にて博士研究員．2015 年より国立研
究開発法人 産業技術総合研究所 研究員．