プロトコルの実行モデル


まず、一般にプロトコル実行のモデルを用意する。

プロトコルを実行する各パーティは(入力テープからの)実行要求や
(入力メッセージテープからの)入力メッセージを受け取ると、
あらかじめ定められたコードに従って、
出力メッセージや出力値を計算する対話的チューリング機械と考える。

UM モデル (Unauthenticated-link Model)

プロトコル実行のマルチセッションモデル。
  • プロトコル実行は攻撃者が指示する。
    • 各セッションは攻撃者による実行要求によって、指定された参加者間で実行される。
  • 参加者間のメッセージは攻撃者が配送する。
    • このとき、メッセージは攻撃者によって改ざんされる可能性がある。
    • また、偽メッセージが挿入されたり、送ったはずのメッセージが欠落する可能性がある。
  • さらに、攻撃者はコラプト・セッション状態開示・セッション出力開示の各クエリを実行し、
    • 任意のパーティの秘密鍵・セッション状態・セッション出力を知ることができる。

[参加エンティティ]
  • プロトコルπの参加者 P1, ... , Pn
    • 各Piの入力は xi.
  • UM攻撃者U
  • 初期化関数 I
[プロトコル実行]
  • 初期化:
    • 各Piは入力xiでプロトコルπ(Pi)を呼び出す。
    • 各Piは I(r, k)i を、攻撃者Uは I(r, k)0 を得る。
    • (rはランダムテープ、kはセキュリテイパラメータ)
  • 停止するまで、攻撃者Uは:
    • 実行要求または(あるPjを送信者と指定した)入力メッセージによって、あるパーティPiを活性化してよい:
      • 活性化されたPiは、そのコードπに従って計算を行う。
      • 実行要求または出力メッセージをUに返す。
      • 「秘密」ラベルをもたないローカル出力もUに返す。
    • あるパーティPiコラプトしてよい:
      • UはPiの(長期的な秘密情報を含む)状態を知る。
      • コラプトされたことを示す特殊なメッセージがPiのローカル出力に追加される。
      • これ以降、パーティPiが再び活性化されることはない。
      • とくに、これ以降、Piのローカル出力への書き込みは発生しない。
    • あるパーティPi内のあるセッションについてセッション状態開示クエリを発行してよい:
      • UはPiの該当セッションの(長期的な秘密情報は含まない)セッション状態を常に知る状態となる。
      • 該当セッションが開示されたことを示す特殊なメッセージがPiのローカル出力に追加される。
      • 以降、このセッションでは、Piのローカル出力への書き込みは発生しない。
    • あるパーティPi内のあるセッションについてセッション出力開示クエリを発行してよい:
      • UはPiの該当セッションの秘密ラベルつきローカル出力を知る。
      • 該当セッションが出力クエリを受けたことを示す特殊なメッセージがPiのローカル出力に追加される。
  • Uと各パーティの出力を連結した大域出力UNAUTHπ,Uを出力する:
    • UNAUTHπ,U(k, x, r) = UM-ADVπ,U(k,x,r) | UNAUTHπ,U(k,x,r)1 | ... | UNAUTHπ,U(k,x,r)n
      • (x = x1...xn, r = r0r1...rn ).

[確率変数UNAUTHπ,U]
  • UNAUTHπ,U =def { UNAUTHπ,U(k,x,r)}k∈N,x∈B*.

AMモデル (Authenticated-link Model)

以下を除いてUMモデルと同じ:
  • AM攻撃者Aが(まだコラプトされていないパーティPjが送信者として指定された)入力メッセージによって
  • パーティPiを活性化するとき、そのメッセージは実際にPjが生成したものでなければならない。
    • すなわち、Aによるメッセージの改ざんや偽メッセージの挿入は許されない。
  • さらに、Aは各メッセージを(配送するとしたら)高々1回のみしか配送できない。
    • すなわち、Aによるメッセージの再送は許されない。
  • ただし、送ったはずのメッセージの欠落はあり得る。

[確率変数AUTHπ,U]
  • AUTHπ,A =def { AUTHπ,A(k,x,r)}k∈N,B*.
    • AUTHπ,A(k, x, r) = AM-ADVπ,A(k,x,r) | AUTHπ,A(k,x,r)1 | ... | AUTHπ,A(k,x,r)n.
      • (x = x1...xn, r = r0r1...rn ).

鍵共有プロトコル

鍵共有プロトコルの実行モデル

[実行要求]
  • (establish_session, Pi, Pj, s)
    • パーティPiに対し, パーティPjとの間でセッション鍵を共有することを要求する。
    • sはセッション識別子を表す。
    • 同一参加パーティ集合{Pi, Pj}について、セッション識別子の重複した実行要求は許されない。

[ローカル出力]
  • (Pi, Pj, s, κ)
ただし、セッション鍵κは秘密ラベルを持つ。

[攻撃者Uの追加アクション]
  • あるパーティPiセッション失効クエリを発行していよい:
    • パーティPi内のすべての完了セッション(Pi, Pj, s)について、
      • このセッション鍵κはPiのメモリから消去される。
      • このセッションは「失効」ラベルをもつ。
  • 攻撃者Uは失効セッションに対し
    • セッション鍵クエリ(セッション出力開示クエリ)は許されない。
    • コラプトしても、そのセッション鍵は入手できない。

鍵共有プロトコルの安全性定義

2つのセッション(Pi, Pj, s)と(Pj, Pi, s')は
同じセッション識別子をもつ(s=s' である)とき
マッチングしているという。

パーティPi内の鍵共有セッション(Pi, Pj, s)が局所暴露であるとは、
攻撃者Uがこのセッションに対し、以下のいずれかのアクションを実行したことを意味する:
  • セッション状態開示クエリを発行
  • セッション出力開示クエリを発行
  • セッションが失効する前に、パーティPiをコラプト。

鍵共有セッションが暴露であるとは、
該当セッションまたはそのマッチチングセッションが局所暴露であることをいう。

攻撃者Uの追加アクション
  • Uは任意の時点で1度だけ、テストセッションクエリを発行する:
    • Uは完了・未失効・未暴露のセッションを一つ選択する。
    • b ← {0,1}
      • b =? 0 : Uにランダムストリング r を渡す。
      • b =? 1 : Uに該当セッションのセッション鍵κを渡す。
    • 以降、Uはテストセッション(とそのマッチングセッション)を暴露することはできない。
      • ただし、テストセッションを失効させたのちは、テストセッションのピアをコラプトしてもよい。
    • 終了時にUはビットb' を出力する。

定義(SK安全)
鍵共有プロトコルπがSK安全であるとは、
どのような攻撃者Uについても、
  • 完全性: πの実行において、
    • コラプトされていない2パーティがマッチングセッションを完了したら、それらのセッション鍵は一致し、
  • 秘匿性: πの実行に対するテストセッションクエリにおいて、
    • Pr[ b' = b ] ≦ 1/2 + (あるネグリジブル関数).
であることをいう。

注意(フォワード秘匿性)
失効クエリを用いることができる攻撃者Uは、
それによってテストセッションを失効させ、その後、当該ピアをコラプトすることができる。
よって、鍵共有プロトコルがSK安全であるには、テストセッションのセッション鍵は、
(セッション完了後に)攻撃者Uが当該ピアの長期秘密情報を入手しても、守られなければならないことになる。

定義(フォワード秘匿性なしのSK安全)
鍵共有プロトコルπがフォワード秘匿性なしのSK安全であるとは、
πが、失効クエリを用いない任意の攻撃者UについてSK安全であることをいう。

安全な鍵共有プロトコルの構成

プロトコル 2DH
プロトコル 2DH
  • [部品] 群生成アルゴリズム GenG
  • [初期化] (q, g) ← GenG(1k) は(初期化関数Iに含まれる)公開パラメータ。
  • [イニシエーター Pi の入力] 実行要求 (establish_session, Pi, Pj, s)
  • [レシーバー Pj の入力] 実行要求 (establish_session, Pi, Pj, s)
  • [プロトコル] ※ (Pi, s, α), (Pj, s, β).
    • Pi → Pj:x ← Zq, α = gx, (Pi, s, α)を送信。
    • Pj → Pi:y ← Zq, β = gy, (Pj, s, β)を送信するとともに、
      • γ = αyを計算し, yを消去。(Pj, Pi, s, γ)を出力。
    • Pi : γ' = βxを計算し, xを消去。(Pi, Pj, s, γ')を出力。

定理(2DH)
GenGに対する判定DH仮定のもとで、
鍵共有プロトコル2DHはAMモデルにおいてSK安全である。


プロトコル SIG-DH
プロトコル SIG-DH
  • [部品] 群生成アルゴリズム GenG, ディジタル署名 Σ=(Gen, Sign, Verify)
  • [初期化] (q, g) ← GenG(1k)、各パーティごとに (ski, vki) ← Gen(1k).
  • [イニシエーター Pi の入力] 実行要求 (establish_session, Pi, Pj, s)
  • [レシーバー Pj の入力] 実行要求 (establish_session, Pi, Pj, s)
  • [プロトコル] ※ (Pi, s, α), (Pj, s, β, σ), (Pi, s, σ').
    • Pi → Pj : x ← Zq, α = gx, (Pi, s, α)を送信。
    • Pj → Pi : y ← Zq, β = gy, σ ← Sign(skj, (Pj,s,β,α,Pi))
      • (Pj, s, β, σ)を送信するとともに、γ = αyを計算し, yを消去。
    • Pi → Pj :
      • Verify(vkj, (Pj,s,β,α,Pi), σ) =? 1 ならば、
        • γ = βxを計算し, xを消去。σ' ← Sign(ski, (Pi,s,α,β,Pj)) 
        • (Pi, s, σ')を送信するとともに、(Pi, Pj, s, γ)を出力。
    • Pj :
      • Verify(vki, (Pi,s,α,β,Pj), σ') =? 1 ならば、(Pj, Pi, s, γ)を出力。

定理(SIG-DH)
GenGについて判定DH仮定が成り立ち、
ディジタル署名Σが適応的選択文書攻撃において存在的偽造不可ならば、
鍵共有プロトコルSIG-DHはUMモデルにおいてSK安全である。


セキュアチャネル


安全な鍵共有プロトコルを部品として用いて、
セキュアチャネル(認証チャネルや秘匿チャネル)を構成する。

プロトコルエミュレーション

定義(Emulation)
プロトコルπがプロトコルπ' をエミュレートするとは、
任意のUM攻撃者Uに対し、あるAM攻撃者Aがあって、
  • AUTHπ,Ac UNAUTHπ',U
であることをいう。

注意
このとき、プロトコルπ'をUMモデルで攻撃するどのような攻撃者Uであっても、
それができることは、プロトコルπをAMモデルで攻撃して実現できることでしかない。
つまり、攻撃者Uにとってプロトコルπ'は、AMモデルにおけるプロトコルπと同じ。

認証チャネル

認証チャネルの安全性定義
プロトコル SMT
  • Piは、実行要求(establish-session, Pi, Pj, s) を受け取ると、
    • (established, Pj, s)をローカル出力に記録。
  • Piは、実行要求(expire-session, Pi, Pj, s) を受け取ると、
    • (established, Pj, s)がローカル出力に記録されていたら、
      • (expired, Pj, s)をローカル出力に記録。
  • Piは、実行要求(send, Pi, Pj, s, m) を受け取ると、
    • ローカル出力に(established, Pj, s)が存在し、(expired, Pj, s)が存在しないなら、
      • メッセージ (Pi, s, m) をPjに送信。
      • (sent, Pj, s, m)をローカル出力に記録。
  • Piは、入力メッセージ(Pj, s, m) を受け取ると、
    • ローカル出力に(established, Pj, s)が存在し、(expired, Pj, s)が存在しないなら、
      • (received, Pj, s, m) をローカル出力に記録。

プロトコル NetChan
  • [部品] 鍵共有プロトコル π, 鍵付き関数 snd, rcv
  • [初期化] πの初期化関数Iを実行し、必要な情報を必要なパーティに配布。
  • [プロトコル]
    • Piは、実行要求(establish-session, Pi, Pj, s) を受け取ると、
      • パーティPjとの間で、(Pi, Pj, s)を入力として鍵共有プロトコルπを実行し、セッション鍵κを得る。
      • (established, Pj, s)をローカル出力に記録し、(key, Pj, s, κ)を保存。
    • Piは、実行要求(expire-session, Pi, Pj, s) を受け取ると、
      • (established, Pj, s)がローカル出力に記録されていたら、
        • (key, Pj, s, κ)を消去し、(expired, Pj, s)をローカル出力に記録。
    • Piは、実行要求(send, Pi, Pj, s, m) を受け取ると、
      • ローカル出力に(established, Pj, s)が存在し、(expired, Pj, s)が存在しないなら、
        • (key, Pj, s, κ)を検索し、m' = sndκ(m)を計算し、メッセージ (Pi, s, m') をPjに送信。
        • (sent, Pj, s, m)をローカル出力に記録。
    • Piは、入力メッセージ(Pj, s, m') を受け取ると、
      • ローカル出力に(established, Pj, s)が存在し、(expired, Pj, s)が存在しないなら、
        • (key, Pj, s, κ)を検索し、(m, ok) = rcvκ(m')を計算する。
        • ok = 1 ならば、(received, Pj, s, m) をローカル出力に記録。

定義(認証チャネル)
プロトコルNetChan(π,snd,rcv)が認証チャネルであるとは、
それがプロトコルSMTをエミュレートすることをいう。

注意
このとき、攻撃者Uにとって、プロトコルNetChan(π,snd,rcv)は
AMモデルにおけるプロトコルSMTと同じ。
すなわち、プロトコルNetChan(π,snd,rcv)は理想的な認証チャネルを実現している。

安全な認証チャネルの構成
プロトコル NetAuth
  • [部品] 鍵共有プロトコル π, 認証子生成関数 f
  • [プロトコル] NetAuth(π, f) := NetChan(π, snd, rcv) :
    • sndκ(m) :
      • return (m, fκ(m)).
    • rcvκ(m'=(m,t)) :
      • mがフレッシュ(同じセッション内で受け取ったどのメッセージとも異なる)で、かつ t =? fκ(m) ならば、
        • ok = 1、そうでないならば ok = 0
      • ok = 1 ならば v = m、 そうでないならば v = ⊥
      • return (v, ok).

定理(安全な認証チャネル)
鍵共有プロトコルπがUMモデルにおいてSK安全で、
認証子生成関数fが選択文書攻撃で安全ならば、
プロトコルNetAuth(π,f)は認証チャネルである。


秘匿チャネル

秘匿チャネルの安全性定義
NetChan(π,snd,rcv)に対する攻撃者Uの追加アクション
  • Uは任意の時点で1度だけ、テストセッションクエリを発行する:
    • Uは完了・未失効・未暴露のセッション(Pi, Pj, s)を一つ選択する。
    • さらに、Uは2つの異なる(同じ長さの)メッセージm0とm1を出力する。
    • b ← {0,1}
    • Piを(send, Pi, Pj, s, mb)で活性化する。
      • ただし、例外的に、これによってPiやPjのローカル出力にmbは書き込まれないとする。
    • 以降、Uはテストセッション(Pi, Pj, s)(とそのマッチングセッション)を暴露することはできない。
      • ただし、テストセッションを失効させたのちは、テストセッションのピアをコラプトしてもよい。
    • 終了時にUはビットb' を出力する。

定義(秘匿チャンネル)
NetChan(π,snd,rcv)が秘匿チャネルであるとは、
どのような上記追加アクションが許されたUMモデルにおける攻撃者Uについても、
  • Pr[ b' = b ] ≦ 1/2 + (あるネグリジブル関数).
であることをいう。

定義(セキュアチャンネル)
NetChan(π,snd,rcv)がセキュアチャネルであるとは、
  • それは認証チャネルであって、
  • 秘匿チャネルでもある
ことをいう。

安全な秘匿チャネルの構成
プロトコル NetSec
  • [部品] 鍵共有プロトコル π, 認証子生成関数 f , 共通鍵鍵暗号 Enc, 疑似ランダム関数 F
  • [プロトコル] NetSec(π, f) = NetChan(π, snd, rcv) :
  • sndκ(m = (m-id, m-pl)) :
    • κe = Fκ(0), κa = Fκ(1)
    • c = Enc(κe, m-pl), t = f(κa, m-id, c)
    • return (m-id, c, t).
  • rcvκ(m'=(m-id,c,t))
    • κe = Fκ(0), κa = Fκ(1)
    • ok = 1 ⇔ 『m-id ≠ 同じセッション内で以前に受け取ったどのメッセージのid、t = f(κa, m-id, c)』
    • ok =? 1 : m-pl = Enc-1e, c), m = (m-id, m-pl)
    • else ok =? 0 : m = ⊥
    • return m.

定理(NetSec)
鍵共有プロトコルπがUMモデルにおいてSK安全で、
認証子生成関数 f が選択文書攻撃において偽造不可能で、
共通鍵暗号 Enc が選択平文攻撃において識別不可能で、
Fが疑似ランダム関数ならば、
プロトコルNetSec(π, f, Enc, F)はセキュアチャネルである。




























最終更新:2009年12月17日 19:35