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が必要な一例を紹介する。
ボブとアリスがある情報、を同時に交換したいとする。
はボブの暗号化されたファイルを読むためのパスワードで、はその逆である。
暗号化ファイルに間違ったパスワードを使うとファイルが破損するようになっている。
これはナイーブにやろうとすると難しい。アリスがボブにを渡した後にボブがアリスに送り返さずに逃げるかもしれないし、アリスがボブに誤った情報(例えば別データをだと取り繕って)を送るかもしれない。 EOS問題のモチベーションとしては、ボブもアリスもどちらも通信において優位に立てないようにしたい。これは第三者の存在、または同時に情報をやりとりできるようなプロトコルなしには実現できなかった。
EOSプロトコルの構成
そこでOblivious Transferが活躍する。EOS問題を解決するようなEOSプロトコルが論文では登場する。まず、大前提として大きな素数p,qの積nは素因数分解の困難性を持つ。(素因数分解は出来ないという仮定)このプロトコルではパスワードを入手したことが確実なときだけアリスとボブはファイルを読もうとすることを前提にする。(理由は後述)
1 アリスは大きな素数、を選んで以下を計算して、それをボブに送る。
同様にボブは以下を計算しアリスに送る。
2 ボブは以下のをランダムに選び、以下を計算してをアリスに送る。
アリスは以下を計算してを入手し、ボブに送る。
3 ボブはアリスから来た,と自分で作ったをもとに以下をを計算する。
このとき、ボブは2分の1の確率でまたはを入手し、xを素因数分解できる。アリスはボブのxを知らないし、ボブが素因数分解できたのかも分からない。 ここで今度は、を定義する。この値はボブがアリスの送ってきたを素因数分解できた時0になり、そうでない場合1になるような値である。も同様に作る。ボブは以下を計算してこれをアリスに送る。
アリスからはが0か1か分からない(=素因数分解できたか分からない)ので、からの情報は洩れない。
4 ここまでの処理を(Oblivious Transferと呼ぶ)をアリスとボブを逆にして行う。
5 アリスはボブに対し、[tex:E{n_A}(m_A)=C=d_A]を送る。このを復号するには、因数を知らないといけない。これをボブも[tex:E{n_B}(m_B)=d_B]を計算しに繰り返す。
EOSプロトコルの5について
5ではを送り合っている。もしボブが、つまり素因数分解できていたならボブはからとが読めたことになるが、 同時にアリス側ではであることになるので
となりがアリスもを入手した状態になる。 もし、ボブが素因数分解できていなかったなら
となり、アリスもを持っていない。 つまり、ボブが読めたら、アリスも読める状態になる。どちらもファイルを同時に読めるようになり、有利不利がない。
なお、アリスに送られたは3/4の確率でである(じゃないのはのときだけ)。 しかし、前提条件より確実にではないのでアリスはファイルを読もうとしない。万全を期したいのである。ボブがファイルを読んだという事実を知るか(ボブが通信中に逃げた場合)、からを読むまで(ボブが通信中に逃げなかった場合)ファイルを読まない。
このプロトコルはどちらも素因数分解成功、どちらかが失敗、どちらも失敗のパターンがあるが、どちらも失敗すると秘密が交換できない。この確率は1/4である。
1/2で素因数分解できてしまうのはなぜか
そのためにはまず、この論文の参考文献にあるRabin暗号について知る必要がある。
Rabin暗号
- 鍵生成
大きな素数(このとをブラム数という4で割って3余る素数にすると復号を簡略化できる)を計算し、を計算し、を公開鍵、を秘密鍵とする。
- 暗号化
公開鍵を入手して、であるような平文を選択する。c=m2 mod nを計算する。
- 復号
秘密鍵を使って以下の方程式を計算する。
方程式の解は4つあり、はのどれかである。求まった解に中国人剰余定理を使うことで、4種類ある平文候補のうちどれかが求まる。これが一意復号できない(単射ではない)というRabin暗号の特徴である。
手順1のの計算は公開鍵と秘密鍵を生成している。
手順2のより小さいようなを選んでいるのは平文の選択で、はRabin暗号の暗号化である。をアリスに送っているが、これは暗号文を通信しているのと同じである。アリスがであるようなを選択し、ボブに送っているがこれは復号した平文を送信しているのに等しい。
素因数分解できる理由
例えばで割るとあまり、で割るとあまる数をとしよう。プロトコルではからを計算した後、を計算することでを計算しているが、はのどれかになる。このうちのどちらかが求まるとする。この時、を計算すると1番目を、2番目をとして
のどちらかが計算できることになる。この式から分かるように、はpかqのどちらかで割ったときに0になる(つまり割り切れる)数であるのでからpかqのどちらかが求まることになる。よってを素因数分解できる。この確率は4つの解のうち2つで起こりうる事象なので、である。
まとめ
このようにOblivious TransferによってEOS問題が解決できる。詳しいところは論文を読んだ方がいいかも(あまり長くないし)。 素因数分解のところのトリックが非常に面白いなと思った。あいまいなところ、間違いがあったら、教えてください! 次こそNIMPCをまとめたい!
参考
- Oblivious Transfer
Michael O. Rabin-How to Exchange Secrets with Oblivious Transfer May 20, 1981
- 有田先生の公開している参考になるpdf