2
応用数学解説
文献あり

完全準同型暗号入門

1726
2

はじめに

この資料では, イデアル格子暗号入門 で紹介されている完全準同型暗号について説明する.完全準同型暗号とは,2つの暗号文に対する足し算と掛け算ができる暗号方式である.

イデアル格子暗号入門 と同時に読むと良い思います。)

完全準同型暗号

完全準同型暗号とは,2つの暗号文に対する足し算と掛け算ができる暗号方式である.

数学的準備

本資料を読むにおいて,必要最低限の円分整数の知識について,以下に述べる.
本資料では,円分整数ついて詳しくは説明しない.

本資料を読む分には,円分整数とは 円分整数の性質 で説明する性質を持った,不思議な多項式みたいなものと思ってもらえれば構わない.

円分整数

ζ=e2πimとしたとき,以下のような虚数 g を,円分整数または円の m 分整数と呼ぶ.(ϕ()はオイラーのϕ関数)

g=a0+a1ζ+a2ζ2++an1ζn1n=ϕ(m),a0,,an1Z

円分整数全体

円分整数全体の集合を Z[ζ]と表記する.

Z[ζ]={a0+a1ζ+a2ζ2++an1ζn1|n=ϕ(m),a0,,an1Z}

円分整数の性質

円分整数同士の演算では以下の性質が成り立つ.
(円分整数は可換環である.)

円分整数の性質1. 演算可能

円分整数同士は加法,減法,乗法ができる.

加法

円分整数同士は足し算ができ,その和は各係数を足した円分整数になる.

  • a+b=a0+b0+(a1+b1)ζ++(an1+bn1)ζn1(a,bZ[ζ],i,j,ai,bjZ)
減法

円分整数同士は引き算ができ,その差は各係数を引いた円分整数になる.

  • ab=a0b0+(a1b1)ζ++(an1bn1)ζn1(a,bZ[ζ],i,j,ai,bjZ)
乗法

円分整数同士は掛け算ができる.

  • 多項式の掛け算と同じように計算できる.
  • 具体的な乗法の方法について,本資料では紹介しない.

円分整数の性質2. 演算の閉性

円分整数は加法,減法,乗法について閉じる

加法の閉性

円の m 分整数同士は足し算ができ,結果は必ず円のm 分整数になる.

  • a+bZ[ζ](a,bZ[ζ])
減法の閉性

円の m 分整数同士は引き算ができ,差は必ず円のm 分整数になる.

  • abZ[ζ](a,bZ[ζ])
乗法の閉性

円の m 分整数同士は掛け算ができ,積は必ず円の m 分整数になる.

  • abZ[ζ](a,bZ[ζ])

円分整数の性質3. 演算の可換性

円分整数の加法と乗法は可換である.

加法の可換性

円分整数同士の加法は可換である.

  • a+b=b+a(a,bZ[ζ])
乗法の可換性

円分整数同士の乗法は可換である.

  • ab=ba(a,bZ[ζ])

円分整数の性質4. 整数との演算

スカラー倍

整数と円分整数はかけることができ,その積は円分整数の各項が整数倍されたものになる.なおこの演算は可換である.

  • ab=ba=a0b+a1bζ+a2bζ2+an1bζn1(aZ[ζ],bZ)
整数との剰余

円分整数を整数で割ってあまりをとることができる.その剰余は円分整数の各項を整数でわってあまりを,各項の係数とした円分整数とする.

  • amodn=(a0modn)+(a1modn)ζ++(an1modn)ζn1
  • [a]n=[a0]n+[a1]nζ++[an1]nζn1
整数との除算

円分整数を整数namodn=0,nZ)で割ることができる.その商は円分整数の各項を整数でわったものを,各項の係数とした円分整数とする.amodn0のとき,a/nは円分整数に閉じない.

  • a/n=(a0/n)+(a1/n)ζ++(an1/n)ζn1

その他表記

Zq={0,1,,q1}

0q1 までの整数の集合

Z(q)={q/2+1,,0,,q/2}=(q/2,q/2]Z

q/2+1q/2までの整数の集合(実数がでた場合は,0に近づけて切り捨てる)

※ 一般的な表記と異なる.

Zq[ζ]

Zqの要素を各係数にもつ円分整数全体.

Z(q)[ζ]

Z(q)の要素を各係数にもつ円分整数全体.

amodn

anで割ったあまりを表す.あまりは{0,1,,n1}にとる.aが円分整数の場合,aの各係数をnで割った係数を持つ円分整数を表す.

[a]n

anで割ったあまりを表す.あまりはn/2より大きくn/2以下にとる.円分整数の場合,aの各係数をnで割った係数を持つ円分整数を表す.

ab(modn)

abnで割ったあまりが等しい(合同)

aZq[ζ]

Zq[ζ]からランダム(※一様乱数的)に要素を取り出してaとする.

aZ(q)[ζ]

Z(q)[ζ]からランダム(※一様乱数的)に要素を取り出してaとする.

aχ(0,σ2)

各係数に平均が0かつ分布がσ2のガウス乱数を持つ,円分整数を取り出してaとする.

  • a=Round(N(0,σ2))+Round(N(0,σ2))ζ++Round(N(0,σ2))ζn1χ(0,σ2)
  • N(0,σ2)0かつ分布がσ2のガウス乱数

※ 一般的な表記と異なる.

暗号化と復号

本節では,方式の暗号化/復号の仕組みについて述べる.

具体的に,本節は公開鍵の暗号の設計に必要な暗号学的仮定について説明した後,暗号化と復号の手順についてそれぞれ説明する.

RLWE 問題

RLWE(Ring Learning With Errors)問題とは,以下のような次元の大きいa,b,e,sが存在する時,a,bからe,sを求めるのが難しいという問題である.qは大きな自然数,nは円分整数の次元である.

秘密鍵

s=s0+s1ζ++sn1ζn1Z(2)[ζ]

Z(2)の一様乱数から選んだn個の係数s0,,sn1を持つ円分整数.

ノイズ

e=Round(N(0,σ2))++Round(N(0,σ2))ζn1χ(0,σ2)

平均が0かつ分布がσ2のガウス乱数から選んだ,n個の要素e0,,en1を持つ円分整数. σの大きさは大きすぎても,小さすぎてもいけない.

公開鍵1

a=a0+a1ζ++an1ζn1Z(q)[ζ]
Z(q)の一様乱数から選んだn個の係数a0,,an1を持つ円分整数.

公開鍵2 b=[as+e]qZ(q)[ζ]

asの積に,eを足して,qのあまりをとった円分整数.

σが大きすぎると復号できなくなり,小さすぎると安全でなくなるため,丁度良いサイズが求められている.
一般にσqにくらべて,かなり小さくとれることが知られている.

手順

以下の鍵生成,暗号化,復号の手順にそれぞれ示す.

鍵生成

以下の手順で公開鍵pk,秘密鍵skを生成する.以下のqは大きな自然数,n円分整数の次元である.

  1. 以下を生成する.
    • ノイズ eχ(0,σ2)
    • 秘密鍵 sZ(2)[ζ]
    • 公開鍵 aZ(q)[ζ]
  2. 公開鍵 b=[as+2e]qZ(q)[ζ] を計算する.
    - eではなく,2e を足していることに注意
  3. 公開鍵をpk=(a,b),秘密鍵sk=sとする.

暗号化

以下の手順で,平文mZ(2)[ζ]pk=(a,b)で暗号化した,暗号文cを計算する.

  1. 小さな一様乱数を集めた整数 vZ(2)[ζ] を生成する.
  2. ノイズ e1,e2χ(0,σ2) を生成する.
  3. c0=[bv+2e0+m]q を計算する.
  4. c1=[av+2e1]q を計算する.
  5. 暗号文をc=(c0,c1) とする.

復号

暗号文c=(c0,c1)と秘密鍵sk=s用いて,平文mを以下のように求める.

m=[[c0sc1]q]2

健全性の証明

この節では暗号文が正しく復号されることを説明する.
m=[[c0sc1]q]2が成り立つことを,以下の1.と2.で証明する.)

大まかには,1.でc0sc1=m+2(ev+e0se1)であることを証明した後,2.で m=[[m+2(ev+e0se1)]q]2であることを証明する.

1. 平文とノイズの和であることの証明

まず以下の通り, c0sc1=m+2(ev+e0se1)であることがわかる.

c0sc1bv+2e0+ms(av+2e1)bv+2e0+msav2se1m+(bas)v+2e02se1m+2ev+2e02se1m+2(ev+e0se1)(modq)

※実際には等式はなりたたず,qを法として合同である

et=ev+e0se1とおくと,これは平文mとノイズ2et=2(ev+e0se1)の和になっている.

(まとめると,c0sc1=m+2(ev+e0se1)=m+2etとなる)

2. ノイズの消去

以下の理由で,m=[[m+2et]q]2が成り立つ.

  1. 2etの各係数がqより小さい場合, [[2et]q]2=[2et]2となる.

    • et を構成するee0,e1, vsどれをとっても,qにくらべてかなり小さい為,etqより小さくなる.
  2. 2etの各係数は,必ず偶数である.[2et]2の各係数は0になる.

  3. mの各係数には,01が入っていた為,2のあまりをとっても値が変わらない.

足し算と掛け算

この暗号方式は,暗号化した円分整数同士の,足し算と掛け算ができる.

足し算

平文m,m,秘密鍵sによる平分の暗号文c0,c1と復号処理decryptがある時,以下を満たすような足し算sumを考える.

m+m=decrypt(sum(c0,c1),s)

以下に足し算の手順と健全性の証明を以下に述べる.

手順

同じ秘密鍵でそれぞれ暗号化された,mの暗号文c=(c0,c1), mの暗号文c=(c0,c1)があるとする.

m+mを暗号化した暗号文c=(c0,c1)は,次のように計算できる.

c0=[c0+c0]qc1=[c1+c1]qc=(c0,c1)=([c0+c0]q,[c1+c1]q)

健全性の証明

暗号文が正しく復号されることを以下に証明する.
基本的な流れは, 通常の暗号化に対する健全性の証明 と同じである.

1. 平文とノイズの和であることの証明

c0sc1=m+2etと置く.

m+mを暗号化した暗号文c=(c0,c1)を復号したものは,以下の通り,平文m+mとノイズ2(et+et) の和になっていることがわかる.

c0+c0s(c1+c1)c0sc1+c0sc1m+2et+m+2etm+m+2(et+et)(modq)

2. ノイズの消去

以下の理由で,m+m=[[m+m+2(et+et)]q]2が成り立つ.

  1. 2(et+et)qより小さい場合, [[2(et+et)]q]2=[2(et+et)]2となる.

    • 2(et+et)の各係数は以下の理由でqより小さい
      • et を構成するee0,e1, vsどれをとっても,qにくらべてかなり小さい
      • etと同じ理由でetqよりかなり小さい.
  2. 2(et+et)の各係数は,必ず偶数である.[2(et+et)]2の各係数は0になる.

  3. m+mの各係数はZ(2)なので,2で割ったあまりをとることで,正しい計算結果を得ることができる.

掛け算

平文m,m,秘密鍵sによる平分の暗号文c,cと復号処理decryptがある時,以下を満たすような掛け算mulを考える.

mm=decrypt(mul(c,c),s)

まず簡単な掛け算の方法について述べる.その掛け算の方法では,積の暗号文がもつ成文の数が増えてしまう問題がある.

最後に成文の数が増えない掛け算の方法について述べる.

シンプルな方法

以下にシンプルな方式の手順,健全性,この方式の問題点についてそれぞれ述べる.

手順

以下にシンプルな方式の掛け算の手順について述べる.

この方式では,復号の仕方が通常の復号と変わるため,
その手順についても述べる.

掛け算

同じ秘密鍵でそれぞれ暗号化された,mの暗号文c=(c0,c1), mの暗号文c=(c0,c1)があるとする.

mmを暗号化した暗号文c=(c0,c1,c2)は,次のように計算できる.

c0[c0c0]qc1[c0c1+c0c1]qc2[c1c1]qc(c0,c1,c2)([c0c0]q,[c0c1+c0c1]q,[c1c1]q)(modq)

復号

暗号文c=(c0,c1,c2)と秘密鍵sk=s用いて,平文mを以下のように求める.

mm=[[c0sc1s2c2]q]2

健全性の証明

暗号文が正しく復号されることを以下に証明する.
基本的な流れは, 通常の暗号化に対する健全性の証明 と同じである.

1. 平文とノイズの和であることの証明

c0sc1=m+etと置く.

m+mを暗号化した暗号文c=(c0,c1,c2)を復号したものは,以下の通り,平文mmとノイズ2etet の和になっていることがわかる.

c0sc1s2c2c0c0s(c0c1+c0c1)s2(c1c1)c0c0sc0c1sc0c1+s2c1c1c0(c0sc1)sc1(c0sc1)c0(m+2et)sc1(m+2et)(c0sc1)(m+2et)(m+2et)(m+2et)mm+2etm+2etm+2etetmm+2(etm+etm+etet)(modq)

et=etm+etm+etetとおくと,これは平文mmとノイズ2et=2(etm+etm+etet)の和になっている.

(まとめると,c0sc1s2c2=mm+2(etm+etm+etet)=mm+2etとなる)

2. ノイズの消去

以下の理由で,mm=[[mm+2(etm+etm+etet)]q]2が成り立つ.

  1. 2etqより小さい場合, [[2et]q]2=[2et]2となる.

    • 2etは以下の理由でqより小さい
      • mmは,qにくらべてかなり小さい
      • et を構成するee0,e1,vsどれをとっても,qにくらべてかなり小さい
      • etと同じ理由でetqよりかなり小さい.
  2. 2etの各係数は,必ず偶数である.[2et]2の各係数は0になる.

  3. mmの各係数はZ(2)なので,2で割ったあまりをとることで,正しい計算結果を得ることができる.

問題点

この方式には,入力に対して出力の成分の数が大きくなるという問題がある.

例えば,以下のように2成分同士の掛け算では,3成分になる.

  • 2成分の掛け算(i.e. (c0,c1)(c0,c1)の掛け算)をすると,積が3成分(i.e. (c0,c1,c2))になる.

このように,掛け算を繰り返せば繰り返すほど,出力する成分の数が大きくなることが知られている.

成文の数が増えない掛け算の方法

以下に出力が必ず2成分になる掛け算の手順,健全性についてそれぞれ述べる.

手順

以下に出力が必ず2成分になる掛け算の手順について述べる.

大まかに以下の流れで説明する.

  1. 掛け算に使う値の生成
  2. 掛け算の仕方
    • シンプルな掛け算
    • 成分を2成文にする
      • モジュラスが変わる.
    • ノイズを消しながら,モジュラスをqに戻す
1. 掛け算に使う値の生成
  1. qの同程度の大きさを持つ奇数 Pを選ぶ.
  2. s2Pの暗号文(A,B)を生成する.
    • AZ(qP)
    • B=[Ass2P+2e]qP
2. シンプルな掛け算

同じ秘密鍵でそれぞれ暗号化された,mの暗号文c=(c0,c1), mの暗号文c=(c0,c1)があるとする.

シンプルな掛け算 に沿って,mmを暗号化した暗号文c=(c0,c1,c2) を計算する.

3. 成分を2成文にする処理

c0,c1を次のように計算する.

c0=[Pc0+Bc2]qPc1=[Pc1+Ac2]qP

4. ノイズを消しながら,モジュラスをqに戻す

mmを暗号化した暗号文c(4)=(c0(4),c1(4))を次のように計算する.ただしδ0,δ1は以下に沿ってなるべく小さく選ぶ.

δiZ(p),[δi]P=[ci]P,[δi]2=0c0(4)=[(c0δ0)/P]qc1(4)=[(c1δ1)/P]qc(4)=(c0(4),c1(4))=([(c0δ0)/P]q,[(c1δ1)/P]q)

c0, c1がそれぞれPで割り切れるとは限らない.
そこでc0, c1δ0,δ1でそれぞれ引くことで,必ずPで割り切れるようにしている.

健全性の証明

暗号文が正しく復号されることを以下に証明する.

1. 掛け算に使う値の生成

暗号文c=(c0,c1)に対する復号を考えてみる.

c0sc1c0P+Bc2s(Pc1+Ac2)c0P+(Ass2P+2e)c2s(Pc1+Ac2)c0P+(Asc2s2c2P+2ec2)(sc1P+Asc2)c0P+(Asc2s2c2P+2ec2)(sc1P+Asc2)c0Psc1P+(Asc2Asc2+ssc2P+2ec2)c0Psc1P+s2c2P+2ec2P(c0sc1+s2c2)+2ec2Pmm+2Pet+2ec2(modq)

これは,暗号文に Pをかけたものになっている.

2. ノイズを消しながら,モジュラスをqに戻す

c0/P, c1/Pに対する復号を考えてみる.

c0/Psc1/Pc0sc1PPmm+2Pet+2ec2Pmm+2et+2ec2/P(modq)

しかし,2ec2/Pの各係数は整数にならないため,c0/P, c1/Pの各係数も整数にならない.

3. 分数が出ないように調整

c0/P,c1/P で分数がでないようにするため.
各項を δ0,δ1をつかって以下のように調整する.

c0δ0c0δ0c0c00(modP)c1δ1c1δ1c1c00(modP)

それらをPで割ると, 以下のようになる.

c0(4)=(c0δ0)/Pmodqc1(4)=(c1δ1)/Pmodq

4. 復号

δ0=2δ0,δ1=2δ1とおく.
δ0,δ1 の各係数は偶数なので,このような置き方をしても構わない)

暗号文c(4)=(c0(4)c1(4)) を復号したものは,

c0(4)sc1(4)(c0δ0)/Ps(c1δ1)/P(c0sc1)/P+(sδ1δ0)/Pmm+2et+2ec2/P+(2sδ12δ0)/Pmm+2et+2(ec2+sδ1δ0)/P(modq)

ノイズは整数

2(ec2+sδ1δ0)/P=2(ec2+sδ1δ0)/Pは円分整数であり,各係数は整数であることを以下に証明する.

  1. 2ec2+sδ1δ0Pで割り切れるためには,2ec2+sδ1δ0(modP)がゼロであれば良い.
  2. これは2ecδ0sδ1modPと式変形でき,満たすことを以下に示す.

αγの理由より,2ec2c0sc1Pmm+2Petc0sc1δ0sδ1(modP)

  • α. c0sc1Pmm+2Pet+2ec2(modPq)
  • β.δ0c0(modP)
  • γ.δ1c1(modP)
5. ノイズの消去

以下の理由で,mm=[[mm+2et+2(ec2+sδ1δ0)/P]q]2が成り立つ.

  1. 2et+2(ec2+sδ1δ0)/Pqより小さい場合, [[2et+2(ec2+sδ1δ0)/P]2となる.

    • 2et+2(ec2+sδ1δ0)/Pの各係数は以下の理由でqより小さい
      • etqにくらべてかなり小さい
      • 2(ec2+sδ1δ0)/Pは大きな奇数Pで割っているのでqに比べてかなり小さい.
  2. 2et+2(ec2+sδ1δ0)/Pの各係数は,必ず偶数である.[2et+2(ec2+sδ1δ0)/P]2の各係数は0になる.

  3. mmの各係数はZ(2)なので,2で割ったあまりをとることで,正しい計算結果を得ることができる.

まとめ

完全準同型暗号についてまとめた.
完全準同型暗号はRLWE仮定に基づいており,
暗号文同士の足し算と引き算ができた.

参考文献

投稿日:2021122
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

akakou
akakou
16
17311
数学が…わかりません……ダレカタスケテー

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 完全準同型暗号
  3. 数学的準備
  4. 円分整数
  5. 円分整数全体
  6. 円分整数の性質
  7. その他表記
  8. 暗号化と復号
  9. RLWE 問題
  10. 手順
  11. 健全性の証明
  12. 足し算と掛け算
  13. 足し算
  14. 掛け算
  15. 成文の数が増えない掛け算の方法
  16. まとめ
  17. 参考文献