本稿では、この論文を扱います。
https://link.springer.com/content/pdf/10.1007%2F3-540-48405-1_8.pdf
この記事で紹介する内容
公開鍵暗号アルゴリズムであるRSAのプロトコルの一つであるBoneh-Franckrinプロトコルの改良として二つの素数の積Nを共有することなく送信者、受信者の2人が共同で公開鍵と秘密鍵を生成するプロトコルを示す
Boneh-Franckrinプロトコルの流れ
1.候補の選択
AliceがP_a
, Q_a
、BobがP_b,Q_b
を独立して選びP=P_a+P_b ,Q=Q_a+Q_b
を候補とする
2.N
を計算
AliceとBobの両者がN=PQ
を計算する
3.初期の素数判定
k
個(k
番目の素数までをかけると2^σ
を初めて超える)の小さな素数のそれぞれについてN
がそれらで割り切れるかを調べる。
4.全ての素数判定
5.d
の計算と共有
両当事者間で既知であるe
を用いて解読指数dを計算する
Nを共有することのないプログラムへの改良
ここでは
・Nの計算
・初期の素数判定
の部分を改良する
Nの計算
AliceはP_a,Q_b
をBobはP_b,Q_b
を持っている。このときAliceのみが秘密裏にN=(P_a+P_b)(Q_a+Q_b) = P_aQ_a + P_aQ_b + P_bQ_a + P_bQ_b
を計算する
一つ目の方法
a,b∈R
である公に知られている環R
を導入し、Aliceがa
をBobがb
を持っているとする。このときx+y=ab
となるxをAliceが、yをBobがoblivious transferによって得ることでN
を求めることができる ( https://tech.fressets.com/1624/ )
二つ目の方法
素数p>2^σ
としGF(p
)を設定することでN
を求める
三つ目の方法
Homomorphic encryptionを用いてN
を求める
初期の素数判定
候補Nが最初のk
個の素数p_1,p_2,…,p_k
のうちの一つで割り切れるかどうかを判定し、P,Q
が素数であるかを判定する
ここではある候補が初期の素数判定に失敗した場合に、新たな候補を見つけだす際のより効率的な方法が2つ示されている
一つ目の方法
ある候補N
が捨てられた後、Aliceは前のP_a,Q_a
を持ったままBobが新たなP_b,Q_b
を選択することで新たな候補N
を見つけ出す。
二つ目の方法
homomorphic encryption protocolを用いてP_a,P_b,Q_a,Q_b
mod p_i
を選びN
mod p_i
を再計算する
この確率はP_a,P_b,Q_a,Q_b
を選ぶ時よりも少なくなる
このプロトコルの性能
このNを共有することのないプロトコルの性能はσ
=1024の時 実行時間はBoneh-Franklinプロトコルの約10倍以下、通信の複雑さは約42MB(改良した場合29MB)