#説明中に僕が作った記号が示されます。
[$a.apn]
a=素数
[$b@c.Lpn]
cよりも大きい素数のb
[$d&@e.Lpn]
dとeは2つの素数であり、dはeより大きい。
#説明_FPQ暗号基本(FPQCB)
1.アリスは$x.apn+1であるFを作る。
2.$Q+F.apnとなる$Q.apnを選ぶ。
3.$PQ+F.apnとなる$P@Q.Lpnを選ぶ。
4.使うバージョンに対応するeとdを求める式:
[@A] e(d+F) mod (P-1){(Q+F)-1}=1
[@B] e(d+F) mod {(F-1)-1}{(PQ+F)-1}=1
でeとdを求める。
[鍵共有Ver.]@A
公開鍵(PK)=(e,P) 秘密鍵(SK)=(d,F,Q)
[ノーマルワンVer.]@B
PK=(e,PQ+F) SK=(d,F,P,Q)
[ノーマルツーVer.]@A
PK=(e,Q+F) SK=(d,F,P,Q)
[ノーマルスリーVer.]@A
PK=(d+F,P) SK=(e,Q)
5.アリスは使うバージョンのPKを公開する。
6.ボブは$P'&@Q'.Lpnを作り、次の方法でA'~F'を求める。
A'={(P'^2)-(Q'^2)} mod P'
B'={(P'^2)-(Q'^2)-A'} / P'
C'=P'-B'={A+(Q'^2} / P'
D'=B'C'
E'=(P'^2) mod Q'
F'=A'+(Q'^2*E')
7.アリスに伝えたいメッセージMをA'とD'、F'で暗号化:
{A'M+(Q'^2*E')} / D'=[C]あまり[D]
する。ただし、鍵共有Ver.の場合、MはボブのF(→手順1)である。
(鍵共有Ver.については後で詳しく説明する。)
8.A'をアリスのPKで暗号化:
{A'^(PKの左側)} mod (PKの右側)=[C']
する。
そして、D'とF'、[C]、[D]、[C']をアリスに送る。
9.アリスは[C']を暗号化に用いたPKに対応するSK(e又はd+F)で復号化:
{[C']^(SK)} mod (PKの右側)=A'
してA'を得る。
10.A'とD'、F'で[C]、[D]を復号化:
M={D'[C]+[D]-(Q'^2*E')} / A'
してMを得る。
#鍵共有Ver.詳細
1.2人はFPQCB手順7まで(手順4は「鍵共有Ver.」)を行う。
2.2人は彼ら自身のFとQ+Fの積を[E]、Qとd+Fの積を[F]とする。
3.2人はFPQCB手順8と[E]と[F]の相互送信を行う。
4.2人はFPQCB手順9と10を行う。
5.2人は次の計算から相手のQとdを得る。
ただし、使用されるものは相手が作成したものである。
([E]/F)-F=Q
([F]/Q)-F=d
6.共有完了。
理解したいけど理解しにくいという人は、コメントしてください。
では。
