第 4 章 RFID システムの提案と安全性検証
4.6 人手による証明
4.6.2 Forward-secure タグ識別不可能性
もし,OMHSOプロコトルのForward-secure タグ識別不可能性安全性を破る攻撃者Aが
存在したら,第 4.5.1節で示した単純化 OMHSO プロコトルの単純化タグ識別不可能性の 安全性を破る攻撃者 Bを構成できること示す.ここで B が存在しないことが第4.5.2 節で
CryptoVerifにより証明されているため,そのようなAは存在しないことを示すことができる.
Aは,ServerオラクルSAに高々n回まで問い合わせを行い,TagオラクルTAに高々n回 まで問い合わせを行うとする.さらに,ランダムオラクルOH0,A,OH1,A,OH2,Aに対して,合 計qH 回の問い合わせを行うとする.このとき,タグとサーバー間の相互認証が成功するのは 高々n回であるから,高々n個のセッション鍵が存在しうる.そして,Aは,任意のタイミン
グでTag オラクルにTest(X∗)クエリを送り,(α∗, β∗)を受け取って,それが,Tagの出力であ るか,ランダムに選択された値であるかを識別しようとし,その結果b′ ∈ {0,1}を出力する.
Bは,ServerオラクルSBに高々n回まで問い合わせを行い,TagオラクルTBに高々n回 まで問い合わせを行うとする.さらに,ランダムオラクルOH0,B,OH1,B,OH2,Bに対して,合 計qH 回の問い合わせを行うとする.そして,(X∗)をChallengeオラクルに送り,(α∗, β∗)が Tagの出力であるか,ランダムに選択された値であるか否かを識別しようとする.
Send, Test
Send, Test, Reveal
Send
Send
Test
図4.2 Forward-Secureタグ識別攻撃者Aを利用したタグ識別攻撃者Bの構成.
Bは,あるセッション鍵SK2 =OH2,B(SK1,ID)を受け取り,RFIDタグIDのセッション鍵 SK1 が用いられるセッションを攻撃の対象とする.ここでは,Aが攻撃対象とする鍵のイン デックスiを予め推測し,そのiに対応する共有鍵S Ki がS Ki = SK1 となるように各オラク ルを構成し,Bへのチャレンジ問題をAに解かせようとするBを与える.Bは,S Ki =SK1
を与えられないため,S Ki がかかわる問い合わせには,SB,TB を利用して回答することで,
S Ki =SK1 となるようにSA,TAをシミュレートする.
また,それ以外のセッションは,Aの視点からは,SK1,SK2に関わるセッション鍵が使わ れる実際のプロトコル実行と区別が出来ないようにSA,TAをシミュレートする.そして,A
からのTestクエリをBのChallengeオラクルに転送することで,Bのチャレンジ問題をAの
チャレンジ問題に割り当てる.このようにして,Aの解がBの解にもなるように,各オラク ルを構成する.
簡単のため,sid = j||ssid ,jはセッション鍵の世代とし,あるセッション sidに対応する ServerオラクルをSsidA ,TagオラクルをTAsid と記述する.また,Bの攻撃対象のプロトコル 実行を実環境,Bがシミュレートして行うプロトコル実行をシミュレート環境と呼ぶ.
まず,Bの構成を示す.Bは,SA,TA,OH0,A,OH1,A,OH2,AをシミュレートしてAを動作
させ,Challengeオラクルからのチャレンジに答えようとする.図.4.2は,Aを用いたBの構
成である.Bは次のように各オラクルをシミュレートし,シミュレートが成功したときにA が出力するb′を得て,Bはb′ を出力する.
■初期設定 まず,Bは,ターゲットとなるRFIDのIDと,攻撃のターゲットするセッショ ンの次のセッション鍵SK2 を受け取る.Bは,Aがターゲットとするセッション鍵のイン デックスi ←R [1,n]を予測し,S Ki+1 ← SK2 と設定する.そして,ランダムにS K1 を選択し て,H2,Bに対して問い合わせを行い,H2,Aに対して
S K2 = H2,A(S K1,ID) :=H2,B(S K1,ID), ...
S Ki−1 = H2,A(S Ki−2,ID) := H2,B(S Ki−2,ID) と設定する.
また,H2,Bに問い合わせを行い,H2,Aに対して S Ki+2 = H2,A(S Ki+1,ID) := H2,B(S Ki+1,ID),
...
S Kn = H2,A(S Kn−1,ID) := H2,B(S Kn−1,ID) と設定する.
そして,Bは,IDをAに与え,Aを動作させる.
■ランダムオラクルのシミュレート AからランダムオラクルOH0,A,OH1,A,OH2,Aへの問い 合わせに対して,Bは,OH0,A,OH1,A,OH2,Aへの問い合わせを,そのままOH0,B,OH1,B,OH2,B
に転送し,OH0,B,OH1,B,OH2,Bから受け取った値をOH0,A,OH1,A,OH2,A の出力として返す.
■SA のシミュレート S Ki = SK1 が無ければ正しく回答できない問い合わせに対して,SB
を利用してシミュレートを行い,それ以外の問い合わせに対しては,Bが設定した共有鍵を用 いてシミュレートを行う.そのために,iの値に応じて次のようにシミュレートする.
• j,i,i+1の場合:
– SsidA は,Send()を受け取ったら,Xsid ← {R 0,1}t を選択して,Xsid を出力する.
– SsidA は,Ysid =αsid||βsid なるSend(Ysid)を受け取ったら,
∗ βsid =OH0,A(S Kj,ID,Xsid, αsid)が成立すれば,Zsid ←OH1,A(S Kj,ID,Xsid, αsid) を計算し,Zsidを返す.
∗ βsid =OH0,A(S Kj−1,ID,Xsid, αsid)が成立すれば,Zsid← OH1,A(S Kj−1,ID,Xsid, αsid) を計算し,Zsidを返す.
∗ 成立しなければ,Zsid ←R h1 を返す.
• j=iの場合:
– SsidA は,Send()を受け取ったら,Send()をSBに送って,Xsid を受け取り,Xsidを 出力する.
– SsidA は,Ysid =αsid||βsid なるSend(αsid, βsid)を受け取ったら,
∗ βsid = H0,A(S Ki−1,ID,Xsid, αsid)が成立すれば,Zsid ←H1,A(S Ki−1,ID,Xsid, αsid) を計算し,Zsidを返す.
∗ 成立しなければ,αsid, βsidをSBに送って,Zsid を受け取り,Zsidを返す.
• j=i+1の場合:
– SsidA は,Send()を受け取ったら,Send()をSBに送って,Xsid を受け取り,Xsidを 出力する.
– Ysid =αsid||βsidなるSend(αsid, βsid)を受け取ったら,
∗ βsid = H0,A(S Ki+1,ID,Xsid, αsid)が成立すれば,Zsid ←H1,A(S Ki+1,ID,Xsid, αsid) を計算し,Zsidを返す.
∗ 成立しなければ,αsid, βsidをSBに送って,Zsid を受け取り,Zsidを返す.
■TA のシミュレート S Ki = SK1 が無ければ計算できない問い合わせに対して,TBを利用 してシミュレートを行い,それ以外の問い合わせに対しては,Bが設定した共有鍵を用いてシ ミュレートを行う.Aが攻撃対象とするインデックスiの予測が正しければ,Revealクエリは j>iなる jに対してのみ行われ,Testクエリはiに対してのみ行われる.つまり,前述の場合 以外にRevealクエリ,Testクエリが行われたとき,iの予測に失敗しているため,Bはシミュ レートを停止する.
• j,iの場合:
– TAsid は ,Send(X′sid) を 受 け 取 っ た ら ,αsid
← {R 0,1}t を 選 択 し ,βsid ← H0,A(S Kj,ID,X′sid, αsid)を計算し,(αsid, βsid)を出力する.
– TAsidは,Send(Z′sid)を受け取ったら,()を出力する.
– Reveal(sid)クエリ を受け取ったら,
∗ j<iの場合,動作を停止する.
∗ j>iの場合,S Kj を返す.
– Testクエリ を受け取ったら,動作を停止する.
• j=iの場合:
– TAsidは,Send(Xsid′ )を受け取ったら,X′sidをTBに送り,TBから(αsid, βsid)を受け 取り,Aに(αsid, βsid)を返す.
– TAsidは,Send(Z′sid)を受け取ったら,Z′sidをTBに送り,TBから()を受け取り,A に()を返す.
– Revealクエリを受け取ったら,動作を停止する.
– Test(X∗)クエリを受け取ったら,X∗ をChallengeオラクルに送り,(α∗, β∗)を受け 取り,(α∗, β∗)を返す.
以下,Bが正しくタグ識別不可能性を破る確率Pr[Bwins]を評価する.
まず,Pr[Bwins]を評価するために,Bが各オラクルのシミュレートに成功する確率を評価 する.そのために,以下の補題9を示す.
補題9 RO : D1× D2 → Rは,ランダムオラクルとする.まず,k ← DR 1 をランダムに選択 する.Aは,高々qH 回まで,任意にd1 ∈ D1,d2 ∈ D2 を選択しRO1 に問い合わせを行い,
RO(d1,d2)を得る.また,Aは,高々qp 回まで,任意にd2′ ∈ D2 を選択しRO2に問い合わせ を行い,RO(k,d2′)を得る.最終的に,Aは,k′ ∈ D1を出力する.このとき,
Pr [
k′ =k|k ← DR 1,ARO1,RO2 →k′
] = qH+1
|D1| である.ただし,κはセキュリティパラメタとする.
証明:
RO′1 : D1 × D2 → R,RO′2 : D2 → Rなる 2つのランダムオラクルを考える.そして,Aが (RO1,RO2)と対話しているか,(RO′1,RO′2)と対話しているかを識別する確率を評価する.
(RO1,RO2)は,ROに問い合わせを行い返り値を決定する.ROは,初出の問い合わせに対 して Rよりランダムに選択した値を返し,既出の問い合わせに対しては以前返したのと同じ の値を返す.つまり,RO1 とRO2 を介して,同じ問い合わせが行われたときは,同じ値を返 すため,RO1(k,d2)= RO2(d2)が成立する.上記の問い合わせ以外の場合,RO1 からROへの
問い合わせとRO2 からROへの問い合せが一致することは無いため,RO1 とRO2 は,独立の ランダムオラクルと同様に振る舞う.
一方,(RO′1,RO′2)は,それぞれ異なるランダムオラクルであるため,(RO1,RO2)とは異な り,独立に返り値を決定する.つまり,圧倒的確率で,RO1(k,d2),RO2(d2)となる.
よって,Aの視点から,(RO1,RO2)と(RO′1,RO′2)の返り値に違いが生じるのは,(k,d2)を 問い合せたときのみである.ただし,d2 ∈ D2 で,Aが任意に選択した値とする.
つまり,(k,d2)が問い合わされない限り,(RO1,RO2)と(RO′1,RO′2)は,それぞれ異なる2つ のランダムオラクルと同様に振る舞うため,それらの出力分布は完全に一致する.(RO′1,RO′2) は,kを用いずに動作するため,それらの出力値はkに関する情報を一切含まない.よって,
(RO1,RO2)は,(k,d2)が問い合わされない限り,kに関する情報を含まないことが示せた.
言い換えると,Aはkを入手しない限り,(RO1,RO2),(RO′1,RO′2)からkに関する情報を得 ることができない.kは,D1 よりランダムに選択された値であるため,Aは,ランダムに推 測する以上の確率でkを入手できない.また,Aは,(RO1,RO2)か(RO′1,RO′2)に問い合わせ ることで,高々qH 回まで,推測したk′ が正しいかを確認できる.さらに,qH 回の推測がす べて外れたとしても,最終的な出力として新たに推測したk′ を選択できる.よって,Aが正 しくkを入手できる確率は,高々(qH +1)/|D1|である.
まず,次の3つのイベントを定義し,それぞれ生じる確率を評価する.
• S:Aが j < iなる実環境の秘密鍵SKj を入手するイベントとする.提案方式の実環 境での秘密鍵SKj は,Bの挑戦者がkeyよりランダムに選択したSK0 からランダム オラクル OH2,B を用いて連鎖的に計算される値である.SKj は,TAj||ssid,SAj||ssid のシ ミュレートには用いられないため,Aは,TAj||ssid,SAj||ssid への問い合わせからSKj を推 測することはできない.つまり,Aは,k ≥ i+1なるSKk より,ランダムオラクル OH2,Bの出力であるSKj を直接推測することでしか入手できない.よって,補題9で D1 = key,D2 = IDs,R = keyとすると,ランダムオラクルOH2,B への問い合わせは 高々qH 回なので,
Pr[S]≤ qH +1
|key| (4.15)
となる.
• F:Aが j< iなるシミュレート環境の秘密鍵S Kj を入手するイベントとする.シミュ レート環境の秘密鍵S Kjは,Bがkeyより一様ランダムに選択したSK0 から,ランダ ムオラクルOH2,Bを用いて連鎖的に計算される値で,実環境の鍵とは独立に計算され る.そのため,Revealクエリにより入手できるk>iなる実環境の鍵SKkからは,S Kj
を計算できない.
一 方 ,TAj||ssid,SAj||ssid の シ ミ ュ レ ー ト に S Kj は 用 い ら れ る .SA は ,一 様 ラ ン ダ ム に選択した X を出力した後,(α, β) を受け取り,Z = OH1,B(S Kj,ID,X, α) か Z = OH1,B(S Kj−1,ID,X, α)かrnd ∈h1 を出力する.よって,TAj||ssid への問い合わせからF が生じる確率は,補題9でD1 = key,D2 = IDs× {0,1}t× {0,1}t,R =h1とすると,ラ ンダムオラクルOH1,Bへの問い合わせは高々qH 回なので,(qH +1)/|key|となる.
ま た ,TA は ,X を 受 け 取 っ た 後 ,一 様 ラ ン ダ ム に 選 択 さ れ た 値 α と β = OH0,B(S Kj,ID,X, α) を 出 力 す る .よ っ て ,SAj||ssid へ の 問 い 合 わ せ か ら F が 生 じ る確率は,補題9でD1 =key,D2 = IDs× {0,1}t× {0,1}t,R=h0 とすると,ランダム オラクルOH0,Bへの問い合わせは高々qH 回なので,(qH+1)/|key|となる.
各ランダムオラクルは独立にシミュレートされるため,OH0,BとOH1,Bは,互いに依存 せず動作する.さらに,各ランダムオラクルへの問い合わせ回数の合計の上限がqH 回 であるから,
Pr[F]≤ qH +1
|key| (4.16)
となる.
• C:SAの出力Xが衝突を起こすイベントとする.Xは,SAにより{0,1}t から一様ラン ダムに選択される要素であり,SAへの問い合わせは高々n回であるから,
Pr[C]= 2t!
2nt(2t−n)! (4.17)
となる.nはセキュリティパラメタに対して多項式であり,Pr[C]が生じる確率は無視 できるようにtを選択しているとする.
Aが上記のように構成されたオラクルと対話を行ったとき,S, F, Cが生じない限り,Aは 実環境とシミュレート環境を識別できないことを示す.
■j>iなる各オラクルへの問い合わせ: Bは,SK2 を更新して得た実際の共有鍵を用いて SAとTA をシミュレートしている.そのため,実環境とシミュレート環境の出力は完全に一 致するため,Aは実環境との違いに気付くことはない.
■j < iなる各オラクルへの問い合わせ: Bは,実際の共有鍵SK2 とは独立に決定したシ ミュレート鍵S K1, . . . ,S Ki−1 を用いてSA とTAをシミュレートする.SAの出力は,一様ラ ンダムに選択されるXとランダムオラクルOH1,Bの出力Zからなる.また,TAの出力は,一 様ランダムに選択された値αとランダムオラクルOH0,Bの出力βからなる.ランダムオラク