暗号勉強会

あまりコードが出てこない話

RabinのOblivious Transfer(紛失通信)

Oblivious Transfer

Oblivious Transfer(紛失通信)とは送信者が受信者の受け取った情報について何も得られないようなプロトコルのことを指す。ちなみにOblivious Transferには二種類の定義があって、もう一つは送信者が提示したn個のデータのうち受信者は1個の情報しか得られず、送信者は受信者がどのデータを選んだのかわからないプロトコルのことを指している。これを1-out-of-n Oblivious Transferという。なお、このプロトコルは相互変換できることが知られている。Claude Crépeauさんがそれを証明しているらしい。

Exchange Of Secret(EOS)問題

How to Exchange Secrets with Oblivious Transfer https://www.iacr.org/museum/rabin-obt/obtrans-eprint187.pdf

からの引用でOblivious Transferが必要な一例を紹介する。

ボブとアリスがある情報S _ AS _ Bを同時に交換したいとする。

  • S_Aはボブの暗号化されたファイルを読むためのパスワードで、S_Bはその逆である。

  • 暗号化ファイルに間違ったパスワードを使うとファイルが破損するようになっている。

これはナイーブにやろうとすると難しい。アリスがボブにS_Aを渡した後にボブがアリスに送り返さずに逃げるかもしれないし、アリスがボブに誤った情報(例えば別データSS_Aだと取り繕って)を送るかもしれない。 EOS問題のモチベーションとしては、ボブもアリスもどちらも通信において優位に立てないようにしたい。これは第三者の存在、または同時に情報をやりとりできるようなプロトコルなしには実現できなかった。

EOSプロトコルの構成

そこでOblivious Transferが活躍する。EOS問題を解決するようなEOSプロトコルが論文では登場する。まず、大前提として大きな素数p,qの積nは素因数分解の困難性を持つ。(素因数分解は出来ないという仮定)このプロトコルではパスワードを入手したことが確実なときだけアリスとボブはファイルを読もうとすることを前提にする。(理由は後述)

1 アリスは大きな素数p_Aq_Aを選んで以下を計算して、それをボブに送る。  


 n_A=p_A q_A\
 

 同様にボブは以下を計算しアリスに送る。  


 n_B=p_B q_B\
 

2 ボブはn_A以下のxをランダムに選び、以下を計算してcをアリスに送る。  


 c=x^{2}\ mod n _ {A}\
 

 アリスは以下を計算してx_1を入手し、ボブに送る。  


 x^{2} _ {1} =c\ mod n_A\
 

3 ボブはアリスから来たn_A,x1と自分で作ったxをもとに以下をを計算する。  


 gcd(x- x_1 ,n_A)=d\
 

 このとき、ボブは2分の1の確率でd=p_Aまたはd=q_Aを入手し、xを素因数分解できる。アリスはボブのxを知らないし、ボブが素因数分解できたのかも分からない。  ここで今度は、v_Bを定義する。この値はボブがアリスの送ってきたn_A素因数分解できた時0になり、そうでない場合1になるような値である。v_Aも同様に作る。ボブは以下を計算してこれをアリスに送る。  


 \epsilon_B=S_B \oplus v_B\
 

 アリスからはv_Bが0か1か分からない(=素因数分解できたか分からない)ので、\epsilon_BからS_Bの情報は洩れない。

4 ここまでの処理を(Oblivious Transferと呼ぶ)をアリスとボブを逆にして行う。

5 アリスはボブに対し、[tex:E{n_A}(m_A)=C=d_A]を送る。このd_Aを復号するには、因数p_A,q_Aを知らないといけない。これをボブも[tex:E{n_B}(m_B)=d_B]を計算しに繰り返す。

EOSプロトコルの5について

5ではd_Ad_B送り合っている。もしボブがv_B=0、つまり素因数分解できていたならボブはd_AからS_Am_Aが読めたことになるが、 同時にアリス側ではv_B=0であることになるので


\epsilon_B=S_B \oplus 0 = S_B\\

となりS_BがアリスもS_Bを入手した状態になる。 もし、ボブが素因数分解できていなかったなら


\epsilon_B=S_B \oplus 1 \ne S_B\\

となり、アリスもS_Bを持っていない。 つまり、ボブが読めたら、アリスも読める状態になる。どちらもファイルを同時に読めるようになり、有利不利がない。

なお、アリスに送られた\epsilon_Bは3/4の確率で\epsilon_B=S_Bである(ε _ B=S _ Bじゃないのは\epsilon _ B=0 \oplus 1 = 1のときだけ)。 しかし、前提条件より確実にε_B=S_Bではないのでアリスはファイルを読もうとしない。万全を期したいのである。ボブがファイルを読んだという事実を知るか(ボブが通信中に逃げた場合)、d_BからS_Bを読むまで(ボブが通信中に逃げなかった場合)ファイルを読まない。

このプロトコルはどちらも素因数分解成功、どちらかが失敗、どちらも失敗のパターンがあるが、どちらも失敗すると秘密が交換できない。この確率は1/4である。

1/2で素因数分解できてしまうのはなぜか

そのためにはまず、この論文の参考文献にあるRabin暗号について知る必要がある。

Rabin暗号

  • 鍵生成

大きな素数p,q(このpqをブラム数という4で割って3余る素数にすると復号を簡略化できる)を計算し、n=pqを計算し、nを公開鍵、(p,q)秘密鍵とする。

  • 暗号化

公開鍵nを入手して、m\in \mathbb{Z_n^\times}であるような平文mを選択する。c=m2 mod nを計算する。

  • 復号

秘密鍵p.qを使って以下の方程式を計算する。


\begin{eqnarray}
\hat{m_p}=\sqrt{c}\ mod\ p\\
\hat{m_q}=\sqrt{c}\ mod\ q\\
\end{eqnarray}
\\

方程式の解は4つあり、(\hat{m_p},\hat{m_q})(m_p,m_q),(m_p,-m_q),(-m_p,m_q),(-m_p,-m_q)のどれかである。求まった解に中国人剰余定理を使うことで、4種類ある平文候補のうちどれかが求まる。これが一意復号できない(単射ではない)というRabin暗号の特徴である。

このRabin暗号を上記のプロトコルに読み替えると

  • 手順1のn_A=p_A q_Aの計算は公開鍵と秘密鍵を生成している。

  • 手順2のn_Aより小さいようなxを選んでいるのは平文の選択で、c=x^{2}\ mod n _ {A}Rabin暗号の暗号化である。cをアリスに送っているが、これは暗号文を通信しているのと同じである。アリスがx^{2} _ {1} =c\ mod n_Aであるようなx_1を選択し、ボブに送っているがこれは復号した平文を送信しているのに等しい。

素因数分解できる理由

例えばpで割るとx_pあまり、qで割るとx_qあまる数xx=(x_p,x_q)としよう。プロトコルではc=x^{2}\ mod n _ {A}からcを計算した後、x^{2} _ {1} =c\ mod n_Aを計算することでx_1を計算しているが、x_1(x_p,x_q),(x_p,-x_q),(-x_p,x_q),(-x_p,-x_q)のどれかになる。このうち(x_p,-x_q),(-x_p,x_q)のどちらかが求まるとする。この時、x-x_1を計算すると1番目をx_1=(x_p,-x_q)、2番目をx_1=(-x_p,x_q)として


\begin{eqnarray}
x-x_1&=&(x_p-x_p\ \equiv\ 0\ mod\ n,x_q+x_q\ \equiv\ 2x_q\ mod\ q)\\
x-x_1&=&(x_p+x_p\ \equiv\ 2x_p\ mod\ n,x_q+x_q\ \equiv\ 0\ mod\ q)\\
\end{eqnarray}
\\

のどちらかが計算できることになる。この式から分かるように、x-x_1はpかqのどちらかで割ったときに0になる(つまり割り切れる)数であるのでgcd(x-x_1,n)からpかqのどちらかが求まることになる。よってn_A素因数分解できる。この確率は4つの解のうち2つで起こりうる事象なので、\frac{2}{4}=\frac{1}{2}である。

まとめ

このようにOblivious TransferによってEOS問題が解決できる。詳しいところは論文を読んだ方がいいかも(あまり長くないし)。 素因数分解のところのトリックが非常に面白いなと思った。あいまいなところ、間違いがあったら、教えてください! 次こそNIMPCをまとめたい!

参考

  • Oblivious Transfer

Michael O. Rabin-How to Exchange Secrets with Oblivious Transfer May 20, 1981

Michael O. Rabin-Digital Signatures And Public-Key Functions As Intractable as Factorization May 21, 1979

  • 有田先生の公開している参考になるpdf

http://lab.iisec.ac.jp/~arita/pdf/lecture1.pdf