(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-02
(45)【発行日】2024-12-10
(54)【発明の名称】暗号処理装置、暗号処理方法、及び暗号処理プログラム
(51)【国際特許分類】
H04L 9/30 20060101AFI20241203BHJP
G09C 1/00 20060101ALI20241203BHJP
【FI】
H04L9/30 Z
G09C1/00 620Z
(21)【出願番号】P 2023036925
(22)【出願日】2023-03-09
(62)【分割の表示】P 2021131702の分割
【原出願日】2021-08-12
【審査請求日】2023-03-28
(31)【優先権主張番号】P 2021104977
(32)【優先日】2021-06-24
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
【審査官】中里 裕正
(56)【参考文献】
【文献】CHILLOTTI, I. et al.,TFHE: Fast Fully Homomorphic Encryption over the Torus,Cryptology ePrint Archive,Paper 2018/421 20190402:093245,2019年,pp.1-62,URL:https://eprint.iacr.org/2018/421/20190402:093245
【文献】完全準同型暗号の論文を読む - TFHE 編 (4),VIPPOOL開発者ブログ,[online],2020年06月29日,t<URL:https://blog.vippool.net/entry/2020/06/29/203932>
【文献】DUCAS, L. and MICCIANCIO, D.,FHEW: Bootstrapping Homomorphic Encryption in Less Than a Second,Lecture Notes in Computer Science,Vol.9056,2015年,pp.617-640
【文献】BIASSE, J.-F. and RUIZ, L.,FHEW with Efficient Multibit Bootstrapping,Lecture Notes in Computer Science,Vol.9230,2015年,pp.119-135
【文献】LEI, X.,Optimizing FHEW With Heterogeneous High-Performance Computing,IEEE Transactions on Industrial Informatics,Vol.16 No.8,2020年, pp.5335-5344
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/30
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号処理装置は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま処理する完全準同型暗号の演算をする暗号処理装置であり、3つ以上の暗号文に対して所定の演算に係る準同型演算を行う演算部と、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出する算出部と、を備え、
前記3つ以上の暗号文は、0または前記所定値の1/4に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第3暗号文とであり、
前記演算部は、前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/8の第4暗号文を暗号化したまま減算した第5暗号文を求め、
前記算出部は、前記第5暗号文に応じて第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記演算部は、前記第5暗号文と、前記第5暗号文と、前記所定値の1/4の第8暗号文とを暗号化したまま加算した第9暗号文を求め、
前記算出部は、前記第9暗号文に応じて前記第1多項式の係数を巡回した第3多項式の第10暗号文を求め、前記第10暗号文から前記第9暗号文に対応する平文が得られる、前記第3多項式の係数の第11暗号文を抽出する、
ことを特徴とする暗号処理装置。
【請求項2】
前記第7暗号文は、桁上げの出力に対応する暗号文であり、
前記第11暗号文は、和の出力に対応する暗号文であり、
前記算出部は、
前記第5暗号文の平文が0から前記所定値の1/4及び前記所定値の3/4から前記所定値のとき、0に誤差を付与した平文に対応する前記第7暗号文を抽出し、前記第5暗号文の平文が前記所定値の1/4から前記所定値の3/4のとき、前記所定値の1/4に誤差を付与した平文に対応する前記第7暗号文を抽出し、
前記第9暗号文の平文が0から前記所定値の1/4及び前記所定値の3/4から前記所定値のとき、0に誤差を付与した平文に対応する前記第11暗号文を抽出し、前記第9暗号文の平文が前記所定値の1/4から前記所定値の3/4のとき、前記所定値の1/2に誤差を付与した平文に対応する前記第11暗号文を抽出する、
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項3】
前記誤差は、
前記所定値の1/24未満の値である
ことを特徴とする請求項1または2に記載の暗号処理装置。
【請求項4】
前記誤差は、
前記暗号処理装置を応用するアプリケーションにおいて許容される、異なる計算結果が得られる確率に応じた、前記所定値の1/24以上の値である
ことを特徴とする請求項1または2に記載の暗号処理装置。
【請求項5】
暗号文を処理する暗号処理装置であって、
前記暗号処理装置は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま処理する完全準同型暗号の演算をする暗号処理装置であり、3つ以上の暗号文に対して所定の演算に係る準同型演算を行う演算部と、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出する算出部と、を備え、
前記3つ以上の暗号文は、0または前記所定値の1/8に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第3暗号文とであり、
前記演算部は、前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/16の第4暗号文を暗号化したまま加算した第5暗号文を求め、
前記算出部は、前記第5暗号文に応じて前記第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する桁上げの出力の平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記算出部は、前記第5暗号文に応じて第3多項式の係数を巡回した第4多項式の第8暗号文を求め、前記第8暗号文から前記第5暗号文に対応する和の出力の平文が得られる、前記第4多項式の係数の第9暗号文を抽出する、
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項6】
前記誤差は、
前記所定値の1/48未満の値である
ことを特徴とする請求項5に記載の暗号処理装置。
【請求項7】
前記誤差は、
前記暗号処理装置を応用するアプリケーションにおいて許容される、異なる計算結果が得られる確率に応じた、前記所定値の1/48以上の値である
ことを特徴とする請求項5に記載の暗号処理装置。
【請求項8】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま演算が可能な完全準同型暗号文であり、
前記プロセッサは、
3つ以上の暗号文に対して所定の演算に係る準同型演算を行い、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出し、
前記3つ以上の暗号文は、0または前記所定値の1/4に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第3暗号文とであり、
前記プロセッサは、
前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/8の第4暗号文を暗号化したまま減算した第5暗号文を求め、
前記第5暗号文に応じて第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記第5暗号文と、前記第5暗号文と、前記所定値の1/4の第8暗号文とを暗号化したまま加算した第9暗号文を求め、
前記第9暗号文に応じて前記第1多項式の係数を巡回した第3多項式の第10暗号文を求め、前記第10暗号文から前記第9暗号文に対応する平文が得られる、前記第3多項式の係数の第11暗号文を抽出する、
ことを特徴とする暗号処理方法。
【請求項9】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま演算が可能な完全準同型暗号文であり、
前記プロセッサは、
3つ以上の暗号文に対して所定の演算に係る準同型演算を行い、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出し、
前記3つ以上の暗号文は、0または前記所定値の1/8に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第3暗号文とであり、
前記プロセッサは、
前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/16の第4暗号文を暗号化したまま加算した第5暗号文を求め、
前記第5暗号文に応じて前記第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する桁上げの出力の平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記第5暗号文に応じて第3多項式の係数を巡回した第4多項式の第8暗号文を求め、前記第8暗号文から前記第5暗号文に対応する和の出力の平文が得られる、前記第4多項式の係数の第9暗号文を抽出する、
ことを特徴とする暗号処理方法。
【請求項10】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま演算が可能な完全準同型暗号文であり、
前記プロセッサは、
3つ以上の暗号文に対して所定の演算に係る準同型演算を行い、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出し、
前記3つ以上の暗号文は、0または前記所定値の1/4に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第3暗号文とであり、
前記プロセッサは、
前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/8の第4暗号文を暗号化したまま減算した第5暗号文を求め、
前記第5暗号文に応じて第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記第5暗号文と、前記第5暗号文と、前記所定値の1/4の第8暗号文とを暗号化したまま加算した第9暗号文を求め、
前記第9暗号文に応じて前記第1多項式の係数を巡回した第3多項式の第10暗号文を求め、前記第10暗号文から前記第9暗号文に対応する平文が得られる、前記第3多項式の係数の第11暗号文を抽出する、
ことを特徴とする暗号処理プログラム。
【請求項11】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま演算が可能な完全準同型暗号文であり、
前記プロセッサは、
3つ以上の暗号文に対して所定の演算に係る準同型演算を行い、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出し、
前記3つ以上の暗号文は、0または前記所定値の1/8に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第3暗号文とであり、
前記プロセッサは、
前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/16の第4暗号文を暗号化したまま加算した第5暗号文を求め、
前記第5暗号文に応じて前記第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する桁上げの出力の平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、
前記第5暗号文に応じて第3多項式の係数を巡回した第4多項式の第8暗号文を求め、前記第8暗号文から前記第5暗号文に対応する和の出力の平文が得られる、前記第4多項式の係数の第9暗号文を抽出する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号文を処理する暗号処理装置、暗号処理方法、及び暗号処理プログラムに関する。
【背景技術】
【0002】
準同型暗号(Homomorphic Encryption)は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことが出来る暗号方式である。
平文同士での加算に対応する暗号文同士の演算が存在する暗号が加法準同型暗号であり、平文同士での乗算に対応する暗号文同士の演算が存在する暗号が乗法準同型暗号である。
有限巡回群を整数に見立てて、加法演算(加算、減算)のみを行う加法準同型暗号と、乗法演算(乗算)のみを行う乗法準同型暗号とが以前から知られていた。
有限巡回群は、加算を繰り返せば整数倍が出来るので、平文の整数倍ができ、乗算を繰り返せば平文のべき乗計算をすることも出来る。
また、加法演算と乗法演算の両方を暗号化したまま処理する完全準同型暗号(Fully Homomorphic Encryption,FHE)がある。
完全準同型暗号の一つとして、暗号化時に復号には問題のない程度の小さな誤差を平文に加えることで構成される、LWE(Learning with Errors)問題に基づく完全準同型暗号が知られている。
【0003】
LWE問題に基づく完全準同型暗号では、演算を行うとともに誤差が蓄積していくので、誤差が大きくなりすぎて復号ができなくなる前に、暗号化したまま誤差成分を縮小するbootstrappingが実行される。
bootstrappingの計算時間は、完全準同型暗号に含まれる計算時間の大部分を占める。また、bootstrappingでは膨大なデータを扱うため、その計算量は膨大である。したがって、完全準同型暗号の演算においては、実用的な時間内で演算結果を得ることができないことがある。
この問題を劇的に改善した手法が、非特許文献1(以下の説明において、上記論文として参照される)に示されるTFHE(Fast Fully Homomorphic Encryption over the Torus)である。
【先行技術文献】
【特許文献】
【0004】
【文献】TFHE:Fast Fully Homomorphic Encryption over the Torus. Journal of Cryptology, 33:34-91, 2020, I.Chillotti, N.Gama, M.Georgieva, and M.Izabachene
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、準同型暗号には、平文として2値を持ち論理演算をベースとするBit-wise型の準同型暗号と、平文として整数を丸ごと1暗号文とするInteger-wise型の準同型暗号と、があり非特許文献1に示されるTFHEはBit-wise型である。
Bit-wise型の準同型暗号において、1つの暗号文は1bitの情報しか持ち得ないため、例えば32bitの整数を扱おうとすると32個の暗号文を処理する必要がある。
整数同士の加算や減算、乗算や比較は様々なデータ処理で多用される。1bitの情報を持つ暗号文を用いる場合、論理回路を設計するイメージで演算を行うが、32bitの整数の加算・減算の場合は1個の半加算器と、31個の全加算器を用いる。乗算の場合は、約32の2乗(1024)個近くの全加算器を用いる。
従って、完全準同型暗号の処理時間を低減し、さらに効率化を図るためには、bootstrappingを含む全加算器の演算を高速化する必要がある。
本発明はこのような事情を鑑みてなされたものであり、一側面として、完全準同型暗号に必要な全加算器の演算を高速化し、完全準同型暗号の処理時間を低減することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、暗号文を処理する暗号処理装置であって、前記暗号処理装置は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま処理する完全準同型暗号の演算をする暗号処理装置であり、3つ以上の暗号文に対して所定の演算に係る準同型演算を行う演算部と、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出する算出部と、を備え、前記3つ以上の暗号文は、0または前記所定値の1/4に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/4に誤差を付与した平文に対応する第3暗号文とであり、前記演算部は、前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/8の第4暗号文を暗号化したまま減算した第5暗号文を求め、前記算出部は、前記第5暗号文に応じて第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、前記演算部は、前記第5暗号文と、前記第5暗号文と、前記所定値の1/4の第8暗号文とを暗号化したまま加算した第9暗号文を求め、前記算出部は、前記第9暗号文に応じて前記第1多項式の係数を巡回した第3多項式の第10暗号文を求め、前記第10暗号文から前記第9暗号文に対応する平文が得られる、前記第3多項式の係数の第11暗号文を抽出する、暗号処理装置を特徴とする。
また本発明は、暗号文を処理する暗号処理装置であって、前記暗号処理装置は、0から所定値までの値を巡回する巡回群上の値を暗号化したまま処理する完全準同型暗号の演算をする暗号処理装置であり、3つ以上の暗号文に対して所定の演算に係る準同型演算を行う演算部と、前記準同型演算の結果となる暗号文に対して第1多項式を用いることにより、新たな暗号文を算出する算出部と、を備え、前記3つ以上の暗号文は、0または前記所定値の1/8に誤差を付与した平文に対応する第1暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第2暗号文と、0または前記所定値の1/8に誤差を付与した平文に対応する第3暗号文とであり、前記演算部は、前記第1暗号文と前記第2暗号文と前記第3暗号文とを暗号化したまま加算して、前記所定値の1/16の第4暗号文を暗号化したまま加算した第5暗号文を求め、前記算出部は、前記第5暗号文に応じて前記第1多項式の係数を巡回した第2多項式の第6暗号文を求め、前記第6暗号文から前記第5暗号文に対応する桁上げの出力の平文が得られる、前記第2多項式の係数の第7暗号文を抽出し、前記算出部は、前記第5暗号文に応じて第3多項式の係数を巡回した第4多項式の第8暗号文を求め、前記第8暗号文から前記第5暗号文に対応する和の出力の平文が得られる、前記第4多項式の係数の第9暗号文を抽出する、暗号処理装置を特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、全加算器の演算を高速化して完全準同型暗号の処理時間を低減することが出来る。
【図面の簡単な説明】
【0008】
【
図1】最小の論理演算素子数による全加算器回路の構成を説明する図である。
【
図2】本実施形態の暗号処理装置の機能構成を説明する図である。
【
図3】
図2の機能構成に基づく全加算器の演算プロセスを詳しく説明する図(その1)である。
【
図4】
図2の機能構成に基づく全加算器の演算プロセスを詳しく説明する図(その2)である。
【
図5】TLWE暗号が平文として有する円周群を説明するイメージ図である。
【
図6】2値Gate Bootstrappingの動作イメージ図である。
【
図7】暗号処理装置が実行する全加算器の演算処理の流れを説明するフローチャート(その1)である。
【
図8】暗号処理装置が実行する全加算器の演算処理の流れを説明するフローチャート(その2)である。
【
図11】AOIゲート、OAIゲートを実現する暗号処理装置の機能構成を説明する図である。
【
図12】
図11の機能構成に基づくAOIゲート、OAIゲートの演算プロセスを詳しく説明する図である。
【
図13】暗号処理装置が実行するAOIゲート、OAIゲートの演算処理の流れを説明するフローチャートである。
【
図14】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
【
図15】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の論理演算のことを指すものとする。
【0010】
本実施形態の暗号処理装置は、完全準同型暗号を用いて全加算器の演算を行う。
暗号処理装置に含まれる、全加算器を構成するAND回路部、XOR回路部の夫々において、Bit-wise型の準同型暗号に対するANDを得るための演算、XORを得るための演算を行うことが知られている。
しかし、完全準同型暗号とするためには、ANDを得るための演算、XORを得るための演算のあとで、下記に説明するGate Bootstrappingと呼ばれる誤差を削減する処理が必要である。
このGate Bootstrappingの処理に時間を要していたが、本実施形態の暗号処理装置は、平文に付加する誤差範囲を小さくして2値多入力の論理演算(準同型演算)を可能とすることで、全加算器を構成する準同型演算の回数を削減する。
これにより、本実施形態の暗号処理装置は、各準同型演算の後段で行われるGate Bootstrappingの回数を減らし、全加算器の演算を高速化することが出来る。
【0011】
図1は、最小の論理演算素子数による全加算器回路を例示する図である。
図1は、論理演算素子によるハードウェア回路で全加算器を説明しているが、全加算器をソフトウェアで実装したCPUが実行する全加算器プログラムであると考えてもよい。
Bit-wise型の準同型暗号の処理をソフトウェアで実装するとき、暗号文に対して論理回路(論理ゲート)を設計するイメージで演算を行う。
それは、
図2以降で説明する本実施形態の暗号処理装置についても同様である。
全加算器回路50は、2つの半加算器51、52と1つのOR回路部(ORを得るための演算処理部)53から構成される。
第1半加算器51は、AND回路部(ANDを得るための演算処理部)51AとXOR回路部(XORを得るための演算処理部)51Bを備える。
第2半加算器52は、AND回路部(ANDを得るための演算処理部)52AとXOR回路部(XORを得るための演算処理部)52Bを備える。
加算される入力Aと入力Bが第1半加算器51のAND回路部51AとXOR回路部51Bに入力される。
第1半加算器51のAND回路部51Aの出力と、第2半加算器52のAND回路部52Aの出力と、が後段のOR回路部53に入力され、OR回路部53からは桁上げ出力C
0(Carry out)が出力される。
第1半加算器51のXOR回路部51Bからの出力と、桁上げ入力C
i(Carry in)が第2半加算器52のAND回路部52AとXOR回路部52Bに入力される。
第2半加算器52のXOR回路部52Bからは、全加算器回路50の出力S(Sum)が出力される。
【0012】
図1に示すように、全加算器50は、2つのAND回路部と2つのXOR回路部とOR回路部を備えており、全部で5つの論理演算素子(論理演算素子に対応する処理部)を備えている。
従って、1つの全加算器の演算につき、論理演算素子5つ分の演算時間が必要である。上記論文に示されるTFHEの場合、1つの論理演算素子の演算には約16msの演算時間を要し、論理演算素子を5つ備える全加算器50全体では、約80msの演算時間を要する。TFHEによる完全準同型暗号の演算に用いる場合、5つの論理演算素子の前段部の演算(準同型演算)の後段で、夫々Gate Bootstrappingを行う必要がある。なお、準同型論理演算の処理時間のほぼ全てをGate Bootstrappingが占めている。
従って、
図1の全加算器回路50による完全準同型暗号の演算にはGate Bootstrapping5回分の演算時間を要するとみなしても構わない。
なお、半加算器51、半加算器52を構成するAND回路部とXOR回路部の演算には依存関係がないため、全加算器をソフトウェアで構成する場合には、マルチスレッドなどの手法で並列演算を行うことが出来る。
並列演算によって、半加算器の演算を1つの論理演算素子分の演算時間で行うことが出来る。
従って、
図1に示す1つの全加算器の演算を3つの論理演算素子分の演算時間で演算を実行することが出来る。ただし、この場合でも1つの全加算器の演算に48msの演算時間を要する。これは、Gate Bootstrapping 3回分の演算時間とほぼ同じである。
【0013】
TFHEは、AND回路部とXOR回路部などの論理ゲートをベースとするBit-wise型暗号である。
全加算器を使用することで、整数の加減乗除(四則演算)の全てと比較演算に対応することが出来る。
しかしながら、Bit-wise型暗号は、1つの暗号文は1bitの情報しか持ち得ない。
整数同士の加算、減算、乗算、除算や比較(比較は減算結果の正負と等価である)は様々なデータ処理で多用されるが、扱われるデータは、ビット長が大きいものが通常である。
例えば、32bitの整数を扱おうとすると、32個の暗号文を処理する必要がある。
【0014】
Bit-wise型の完全準同型暗号について32bitの整数の加算・減算を行う場合は、1個の半加算器と、31個の全加算器を用いる。また、乗算を行う場合は、約32の2乗(1024)個近くの全加算器を用いる。
完全準同型暗号の演算(四則演算と比較)をさらに実用的なものにするためには、完全準同型暗号の演算に多用される全加算器の演算をより高速化することが重要となる。
下記に説明するように、本実施形態の暗号処理装置は、特に、完全準同型暗号の演算に用いる全加算器において、平文に付加する誤差範囲を小さくして2値多入力の論理演算(準同型演算)を可能とすることで準同型演算の回数を減らす。
その結果、本実施形態の暗号処理装置は、準同型演算の後段の、長い演算時間を要するGate Bootstrappingの回数を減らし、完全準同型暗号の処理時間を大幅に低減することが出来る。
【0015】
図2は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第1Bootstrapping部(第1算出部)15と、第2Bootstrapping部(第2算出部)16と、第3Bootstrapping部(第3算出部)17と、出力部18と、を備えている。
なお、第1演算部12、第2演算部13、第1算出部15、第2算出部16は後述する[実施例1]、[実施例2]に関連し、第3演算部14、第3算出部17は、後述する[実施例3]、[実施例4]に関連する。
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。
後述の実施例1、2に関して、第1演算部12は、受付部11が受け付けた2値3入力の暗号文に対して、第1準同型演算を行う。
第2演算部13は、第1演算部12から出力された暗号文同士に対して第2準同型演算を行う。
後述の[実施例3]に関して第3演算部14は、受付部11が受け付けた2値3入力の暗号文に対して、第3準同型演算を行う。
第1演算部12、第2演算部13、及び第3演算部14は、
図1で説明した論理ゲート(AND回路部、XOR回路部)による全加算器の演算(準同型演算)をソフトウェアで実現する演算処理部である。なお、第1演算部12、第2演算部13、及び第3演算部14の少なくとも一つが、ハードウェアで実現されてもよい。
【0016】
実施例1、2に関して、第1Bootstrapping部15は、第1演算部12の演算結果に対して下記に説明する2値Gate Bootstrapping処理を行い、桁上げ出力COとして2値を取り得る新たな暗号文を出力する。
第2Bootstrapping部16は、第2演算部13の演算結果に対して下記に説明する2値Gate Bootstrapping処理を行い、出力Sとして2値を取り得る新たな暗号文を出力する。
[実施例3]に関して、第3Bootstrapping部17は、第3演算部14の演算結果に対して下記に説明する2値Gate Bootstrapping処理を行い、出力S、桁上げ出力COを夫々示す新たな暗号文を出力する。
【0017】
出力部18は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、全加算器の演算で用いられる一時ファイルや一時データ、出力暗号文を格納することが出来る。
また、記憶部20には、暗号化された暗号化データベース60を格納することが出来る。
通信部25は、暗号処理装置1をネットワークに接続し、外部装置との通信を可能にする。
記憶部20に暗号化された暗号化データベース60を格納し、通信部25を備えることにより、暗号処理装置1は、データベースサーバとして機能することが出来る。この場合、暗号処理装置1は、外部装置としての端末装置から、暗号化されたクエリを受け付け、暗号化された暗号化データベース60に対する検索を行い、暗号化された検索結果を端末装置に応答することが出来る。
入力部26は暗号処理装置1に対して演算処理対象の暗号文を入力する。
【0018】
図3は、実施例1、2に関して、
図2の機能構成に基づく全加算器の演算プロセスを詳しく説明する図である。
図3の説明において、暗号処理装置1に入力される暗号文ca、cb、ccは、いずれも上記論文に示されるTLWE暗号文である。
下記に詳しく説明するが、TLWE暗号は、0又はμ(非0)の値を平文として有するBit-wise型の完全準同型暗号である。
論理ゲートを用いた論理演算によって様々な演算を行うことができる。
また後述するように、TLWE暗号文は、二進数のシンボル0又は1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能である。
【0019】
図3に示す構成では、非特許文献1の論文(上記論文)で提示された(2値)Gate Bootstrappingを使用する。
上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
実施例1、2において、入力された暗号文ca、cb、ccを第1演算部12に入力して準同型演算を行い、その演算結果(暗号文ct=暗号文ca+cb+cc)を2値Gate Bootstrappingを行う第1Bootstrapping部15に入力する。
第1Bootstrapping部15の出力は、平文として2値(0,μ)の何れかを取り得る桁上げ出力C
Oの暗号文cyである。
暗号文ct=暗号文ca+cb+ccを第2演算部13に入力し、ct同士で準同型演算を行い、その出力を第2算出部16に入力し、2値Gate Bootstrappingが行われて出力Sの暗号文czが出力される。
第1演算部12による準同型演算、第2演算部13による準同型演算に要する時間は微々たるものである。
Gate Bootstrappingは、準同型演算を用いて全加算器を処理するとき、ほとんど全ての処理時間を消費している。
【0020】
図1に示す全加算器回路50のように、2値Gate Bootstrappingを用いて全加算器の演算を行う場合、AND回路部51A、52A、XOR回路部51B、52B、OR回路部53の後段で夫々1回、全体で5回Gate Bootstrappingを実行する必要がある。
それに対して、実施例1、2の暗号処理装置1では、全加算器の演算において、第1演算部12に2値の暗号文を3つ入力し、Gate Bootstrappingを改良することにより、準同型演算処理の回数を全体で2回に減らしている。
その結果、暗号処理装置1では、準同型演算処理のほぼ全てを占めるGate Bootstrappingの回数を全体で2回に減らすることが出来る。したがって、
図1に示す全加算器回路50と比較して、暗号処理装置1は、計算処理時間を約60%削減することが出来る。
【0021】
さらに、暗号処理装置1は、第1Bootstrapping部15の処理と、第2Bootstrapping部16の処理とを、夫々マルチスレッド処理によって並列に実行してもよい。この場合には、暗号処理装置1は、全加算器の演算で処理時間の大半を占めるBootstrappingの段数を1段階にすることができる。これに対して、
図1に示す全加算器回路50は、AND回路部51A及びXOR回路部51Bと、AND回路部52A及びXOR回路部52Bとを夫々並列に実行することができるが、全体としてのBootstrappingの段数は3段階である。したがって、並列処理を用いた場合でも、
図1に示す全加算器回路50と比較して、暗号処理装置1は、計算処理時間を約66%削減することが出来る。
以上のように、完全準同型暗号に関する全加算器の演算時間のほぼ全てをGate Bootstrappingが占めるので、暗号処理装置1は、Gate Bootstrappingの回数を削減することによって、全加算器の演算を著しく高速化することが出来る。
【0022】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0023】
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0024】
図5は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、
図5に示す円周群{T}の点0、又は円周群{T}上の0以外(非0)の任意の点に対応する実数μを平文として有する。TLWE暗号自体は円周群上の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0025】
[TLWE暗号]
TLWE暗号を説明する。
円周群{T}上の要素として、一様分布な乱数をN個集めたベクトル[a]を用意する。また、0,1の2値をN個集めた秘密鍵[s]を用意する。
平均値が平文μであり、分散が事前に定めたαとなるようなガウス分布(正規分布)の乱数をeとしたときに、([a],[s]・[a]+e)の組がTLWE暗号文の一例となる。
同一の平文μに対して無限個のTLWE暗号文を生成した時のeの平均値が平文μであり、μは誤差なしの平文、eは誤差付きの平文である。
なお、「・」は、ベクトルの内積を表す。以降についても同様である。
上記[s]・[a]+eをbとおくと、TLWE暗号文は([a],b)と表すことができる。
φs(([a],b))=b-[s]・[a]=eは、TLWE暗号文を復号する関数である。TLWE暗号は平文に秘密鍵ベクトルと乱数ベクトルの内積と誤差を付加して暗号化するため、秘密鍵ベクトルと乱数ベクトルの内積を算出することで、TLWE暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
【0026】
このTLWE暗号は加法準同型であり、TLWE暗号文の平文同士の加法演算を、暗号文を復号することなく行うことができる。
2つのTLWE暗号文([a],b)、([a’],b’)をそのまま足して、([a]+[a’],b+b’)としたものを、上記の復号関数φsに入力すると、
φs(([a]+[a’],b+b’))=(b+b’)-[s]・([a]+[a’])=(b-[s]・[a])+(b’-[s]・[a’])=φs([a],b)+φs([a’],b’)
となり、2つの平文の和が得られる。これにより、TLWE暗号文が「加法準同型暗号」であることがわかる。
上記論文のTFHEでは「平文に誤差を付加したTLWE暗号文に対して加法演算を行い、Gate Bootstrappingで誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0027】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φsにかけると、φs(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0028】
TFHEのGate Bootstrappingで用いる有限巡回群を説明する。
Gate Bootstrappingでは、多項式環の剰余環を、有限巡回群として用いる。
多項式環の剰余環が有限巡回群であることを説明する。
n次の多項式は、一般にanxn+an-1xn-1+…+a0と表される。
これらの全ての集合は、多項式同士の和f(x)+g(x)に対して可換群をなす。
また、多項式同士の積f(x)g(x)は、逆元が存在するとは限らないことを除き、可換群と同様の性質を持つ。そのようなものをモノイドと呼ぶ。
多項式同士の和と積に対しては、下記のように分配法則が成り立つ
f(x){g(x)+g’(x)}=f(x)g(x)+f(x)g’(x)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0029】
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](Xn+1)+T[X]のかたちに分解し、剰余部分だけを取り出して集めると、これもまた「環」であるため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(Xn+1)と表す。
【0030】
多項式環の剰余環T[X]/(Xn+1)の要素(元)として、任意の係数μ(μ∈T)を用いて、多項式F(X)=μXn-1+μXn-2+・・・+μX+μ
を取り出す。
多項式環の剰余環の要素F(X)にXを掛けると、μXn-1+μXn-2+・・・+μX-μとなって、一番上の項の係数がプラスからマイナスに反転して定数項として現れる。
さらにXを掛けると、μXn-1+μXn-2+・・・+μX2-μX-μのように、もう一度同じことが起きる(一番上の項の係数がプラスからマイナスに反転して定数項として現れる)。
これを全部でn回繰り返すと、
-μXn-1-μXn-2・・・-μX-μとなって全ての項の係数がマイナスとなる。
【0031】
さらにXを掛け続けると、
-μXn-1-μXn-2・・・-μX+μ
-μXn-1-μXn-2・・・+μX+μ
と一番上の項の係数がマイナスからプラスに反転して定数項として現れていき、全部で2n回繰り返すと、元の多項式環の剰余環の要素F(X)=μXn-1+μXn-2+・・・+μX+μに戻る。このように、最上位の係数(μ)が最下位の定数項に符号反転して(-μ)現れて、全体的に項が1つ、ずれている。
すなわち、多項式F(X)=μXn-1+μXn-2+・・・+μX+μは、多項式環の剰余環T[X]/(Xn+1)という環のなかで位数2nの有限巡回群になっている。
TFHEにおいて、暗号処理装置は、このような多項式環の剰余環に基づく多項式F(X)が有する性質を利用して完全準同型暗号を実現する。
【0032】
[TRLWE暗号]
Gate Bootstrappingでは、TLWE暗号の他にTRLWE暗号と呼ばれる暗号を利用する。
TRLWE暗号について説明する。
TRLWE暗号のRは環を意味し、TRLWE暗号は環で構成したLWE暗号である。TLWE暗号がそうであるように、TRLWEもまた加法準同型暗号である。
TRLWE暗号における環は、上記した多項式環の剰余環T[X]/(Xn+1)である。
TRLWE暗号を得るに当たり、多項式環の剰余環T[X]/(Xn+1)の要素(元)をランダムに選択する。
実際には、n-1次多項式の係数n個を、円周群{T}から一様分布な乱数で選出する。
多項式の次数がn-1であれば、Xn+1で割れることがなく、剰余を考える必要がないため、次数がn-1の多項式を多項式a(X)とする。
【0033】
0,1の2値からランダムにn個を集めて、下記の秘密鍵となる多項式s(X)を組み立てる。
s(X)=sn-1Xn-1+sn-2Xn-2+・・・s1X+s0
n個の乱数eiを、平均値が平文μiになり分散がαとなるガウス分布(正規分布)の乱数とし、これらから下記の多項式e(X)を組み立てる。
e(X)=en-1Xn-1+en-2Xn-2+・・・e1X+e0
s(X)・a(X)+e(X)を、f(X)(Xn+1)+b(X)と分解して、b(X)を得る。
その結果、TRLWE暗号文として、(a(X),b(X))が得られる。
TRLWE暗号は、TLWE暗号と同様に乱数を用いて暗号化を行うため、同一の秘密鍵、平文に対して、無数の暗号文が対応しうる。
また、TRLWE暗号は、TLWE暗号と同様に、φs((a(X),b(X))=b(X)-s(X)・a(X)+g(X)(Xn+1)として、φsがT[X]/(Xn+1)の元となるようにg(X)を定めたものが、復号関数として機能する。
【0034】
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、
図5の円周群{T}の要素である0以上1未満の実数であり小数部分のみを有する。
これを二進数表記で何ビットずつかに分解する操作を、上記論文のTFHEではGadget Decomposition(Dec)と定義している。
例えば、TRLWE暗号文の多項式F(X)の次数nがn=2として、分割の1単位をBg=2
2で、l=3要素に分解する。このとき、各要素は-Bg/2からBg/2の間に入るようにする。
TRLWE暗号文は、上記の(a(X),b(X))のように、2つの多項式の組み合わせである。従って、TRLWE暗号文dを、多項式環の剰余環の元となる多項式を要素とする2次元のベクトルと見なして、例えば、
d=[0.75X
2+0.125X+0.5,0.25X
2+0.5X+0.375]
と書くことができる。そのため、以下では各要素をBg
-1=0.25のべき乗の和の形に分解する。
【0035】
円周群{T}上では、0.75=-0.25であるので、
d=[0.75X2+0.125X+0.5,0.25X2+0.5X+0.375]
=[-0.25X2+0.125X+0.5,0.25X2+0.5X+0.25+0.125]
=[0.25×(-X2+2)+0.252×2X+0.253×0,0.25×(X2+2X+1)9+0.25X2×2+0.253×0]
と分解できる。
従って、Gadget Decompositionを行うと、
Dec(d)=[-X2+2,2X,0,X2+2X+1,2,0]
というベクトルになる。
【0036】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文d’が得られる。下位ビットは四捨五入をしてまるめられている。
【0037】
TRLWE暗号文dに対して、||d-[v]・H||が最小値となる[v]を得る操作が、Gadget Decompositionであるとも言える。ここで||はベクトルのノルム(長さ)である。
e(X)の係数全てが平均値0となり、分散はαとなる多項式でできた暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。
この暗号文kをTRGSW暗号文BKとして定義する。
TRGSW暗号文BKは、下記に用いるBootstrapping Keyを構成する。
【0038】
Bootstrapping Keyを説明する。
Bootstrapping Keyは、Gate Bootstrappingに用いるために、秘密鍵を暗号化しておくために利用する。
TLWE暗号文に用いる秘密鍵[s](N次)とは別に、Gate Bootstrappingに使うために、秘密鍵[s]を暗号化するための秘密鍵[s’]の各要素を0か1の2値で選択する。
秘密鍵[s’]の次数は、TRLWE暗号で使用する多項式の次数nとそろえる必要がある。
秘密鍵[s]の要素ごとにTRGSW暗号文BKを作成する。
秘密鍵[s’]で復号するとφ
s’(Zj)=0となるTRLWE暗号文Zjを2l(エル)個作成する。
そして、上記したTRGSW暗号文の構成どおり、
とする。
このTRGSW暗号文を、秘密鍵[s]の次数と同じN個用意したセットを、Bootstrapping Keyと呼ぶ。
【0039】
TRGSW暗号文BKiとTRLWE暗号文dの外積を、
BKi×d=Dec(d)・BKi
と定義する。
Gadget Decompositionは、TRLWE暗号文dに対して||d-[v]・H||が最小値となる[v]を得る操作であった。
従って、[v]=Dec(d)と誤差(ε
a(X),ε
b(X))を用いて、
[v]・H=d+(ε
a(X),ε
b(X))と書ける。
その結果、BKi×d=Dec(d)・BKi
となる。
左半分は内積を計算し、右半分には[v]・H=d+(ε
a(X),ε
b(X))を代入すると、
となり、下記の3つの暗号文c1、c2、c3の和の計算と同じとなる。
TRLWE暗号は加法準同型暗号であるため、暗号文同士の和をとると平文同士の和をとったことと同じである。
C
1は、Z
jを何倍かして足したものなので、平文φ
s’(c
1)の期待値は0となる。
また復号したφ
s’(c
3)は、平文の絶対値の大きさをシステムパラメータで制約することができるので、この後の演算も含めて十分小さくなるように設定する。
【0040】
そうするとφs’(BKi×d)=φs’(si×d)となるが、siが0であっても1であっても計算結果は上記3つの暗号文c1、c2、c3の和になる。単純な比較でsiが0と1の何れであるかを判別することができない。
2つの平文μ0、μ1に対応するTRLWE暗号文d0、d1があるとして、d=d1-d0と代入して、最後にd0を加算すると、下記のようなCMux関数が完成する。
CMux(BKi,d0,d1)=BKi×(d1-d0)+d0=Dec(d1-d0)・BKi+d0
CMux関数は、siが0であると平文μ0の暗号文を復号することなく出力し、siが1であると平文μ1の暗号文を復号することなく出力する。
CMux関数は、平文μ0もしくは平文μ1の暗号文を計算することができるが、どちらを選択したかは分からない。
【0041】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)キースイッチングから構成される。
【0042】
図6は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、平文とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図5の円周群{T}における0~0.25(1/4)、0.75(3/4)~1の区間の平文を0のTLWE暗号文に変換し、0.25(1/4)~0.75(3/4)の区間の平文を0.25(1/4)の暗号文に変換する。
この変換の際、平文に付加される誤差は±1/16の範囲のいずれかである。
【0043】
(1)BlindRotate
Gate Bootstrappingの最初のステップとしてBlindRotateが行われる。
BlindRotateは、TRLWE暗号文を作成する工程である。
BlindRotateでは、多項式T(X)を平文とする自明なTRLWE暗号文(0,T(X))から、X-φs(c’)を乗算したTRLWE暗号文を復号することなく得る。0は、0次の多項式0を示す。
ここでφs(c’)は、下記のLWE暗号文c’を復号関数にかけた平文である。
BlindRotateでは、上記した有限巡回群をなす、テストベクタとしての下記の多項式F(X)
F(X)=μXn-1+μXn-2+…μX+μ
ただし、μ=1/8
にXn/2を掛けて得た下記の多項式T(X)
T(X)=F(X)・Xn/2
を用意する。
【0044】
平文μ1を秘密鍵[s]で暗号化したTLWE暗号文cがあるとする。
このTLWE暗号文c=([a],b)の各要素を2n倍して四捨五入したLWE暗号文c’=([a’],b’)を得る。
LWE暗号文c’=([a’],b’)を復号すると、μ1’=φs(c’)≒2n×φs(c)=2nμ1となる。nが大きくなるほど相対的に誤差は小さくなる。
多項式T(X)を平文とする自明なTRLWE暗号文(0,T(X))を用意して、
A0=X-b’×(0,T(X))=(0,X-b’×T(X))とする。0は、0次の多項式0を示す。この時、b’は整数であるため、累乗が自然に定義できる。
以降、上記に説明したBootstrapping KeyであるBKiを用いて、順番にAi=CMux(BKi,Ai-1,Xa’iAi-1)を計算する。ここでも、a’iが整数になっているため、Xの累乗が自然に定義できる。
【0045】
そうすると、s
iが0の時は、平文はそのまま変わらず、s
iが1の時は、X
a’iが順番に乗算されていく。
従って、
と繰り返すと、
となる。
ここで、
は、復号関数φs(c’)の符号を反転したものに等しいので、
となる。ここでφ
s’(A
n)は、多項式T(X)にX
-1をμ1’回乗算した多項式の暗号文である。
BlindRotateに係るTLWE暗号文cの平文μ1に対応して、多項式T(X)にXをかける回数μ1’(=2nμ1)に応じたユニークな値(n個の係数とその符号反転で最大2n個)が得られるので、一種のルックアップテーブル(Look UP Table)とみなすことが出来る。
【0046】
(2)SampleExtract
(1)のBlindRotateで得たTRLWE暗号文Anを復号して得られる平文多項式φs’(An)を見ると、下位の項から数えてn/2-φs(c’)個分の項は係数が-μとなり、負になった場合、逆に上の項から順に係数が-μとなる。
TRLWE暗号文Anを復号して得られる平文多項式φs’(An)の定数項だけを見ると、φs(c’)がn/2以上3n/2未満、すなわちφs(c)が1/2±1/4の場合、定数項はμとなる。それ以外、すなわちφs(c)が±1/4の場合、定数項は-μとなる。
SampleExtractは、(1)のBlindRotateで得たTRLWE暗号文Anから、これを復号することなく平文多項式φs’(An)の定数項の係数だけを取り出して、その結果、TLWE暗号文csを得るための処理である。
【0047】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0048】
これに対して下記の演算を行い、
を得る。
「多項式環の剰余環」であるので(X
n+1)で割った余りを求めると、
が得られる。
【0049】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0050】
つまり、(1)のBlindRotateで得たTRLWE暗号文A
n=(A(X),B(X))から、係数を
として取り出すと、元のTRLWE暗号文A
nに対応する平文多項式の定数項と同じ値を平文とする、新しいTLWE暗号([a”],b
1)が得られた。この新しいTLWE暗号文がSampleExtractの出力であり、平文として-μ又はμの2種類を有する。
得られたTLWE暗号文に対して、平文がμとなる自明な暗号文([0],μ)を加えたTLWE暗号文cs=([a”],b1)+([0],μ)を得る。
具体的には、テストベクタとしての多項式F(X)ではμ=1/8であるので、この段階では、-1/8、1/8の暗号文が得られている。
これに、平文がμ=1/8となる自明なTLWE暗号文([0],1/8)を加えると、
-1/8+1/8=0
1/8+1/8=1/4
から、0、1/4の2値のうちいずれかの値を平文として持つ新たなTLWE暗号文csが得られた。
【0051】
(3)キースイッチング
(2)のSampleExtractで得られたTLWE暗号文csは、秘密鍵[s]ではなく、秘密鍵[s']で暗号化されている
従って、TLWE暗号文csを復号することなく、TLWE暗号文csの鍵を秘密鍵[s]に差し替え、秘密鍵[s]で暗号化された状態に戻す必要がある。
そのためキースイッチングの手法を説明する。
NAND演算に用いるTLWE暗号文の秘密鍵[s]はN次のベクトルであった。
これを用い、Bootstrapping Keyを作成したときのn次のベクトルの秘密鍵[s’]を暗号化する。
すなわち、
と、円周群{T}の要素、0から1の実数を二進数で表現したときの各桁にずらした値として暗号化する。秘密鍵は[s]である。「桁数」tはシステムパラメータである。
秘密鍵[s]で復号すると、
となる。これが「キースイッチングキー」である。
上記したように(2)で得られたTLWE暗号文cs=([a],b)は秘密鍵[s’]で暗号化された0又は1/4の値である。[a]の要素数は、秘密鍵[s’]と同じくn個である。
これを一つずつ、夫々tビットの固定小数に変換すると、
の形式で書くことができる。
この段階で誤差が増えるが、システムパラメータで絶対値の最大値を制約することができる。
キースイッチング本体の処理として、以下のTLWE暗号文cxを計算する。
([0],b)の項は自明な暗号文なので、復号するとbであり、TLWE暗号文cxを復号した結果を計算すると、
である。
s’
iは、jに対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【0052】
ここで得られたTLWE暗号文cxは、Gate Bootstrappingの入力としたTLWE暗号文cと同じ秘密鍵[s]で暗号化されている。
キースイッチングの処理を行うことにより、秘密鍵[s]で暗号化されたTLWE暗号文に戻っており、φs(c)が±1/4の範囲なら平文φs(cx)は0に、φs(c)が1/2±1/4の範囲なら、平文φs(cx)は1/4になっている。
以上の処理により、Gate Bootstrappingの結果として、0、1/4の2値のうちのいずれかであって誤差が±1/16以内のいずれかになるTLWE暗号文が得られた。
誤差の最大値は、入力となるTLWE暗号文cに依存せず、システムパラメータによって固定された値となる。
従って、誤差の最大値が入力となるTLWE暗号文と同じ±1/16以内のいずれかの値となるように、システムパラメータを設定する。
これにより、何度でもNAND演算ができるようになり、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0053】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の整数化で加わる誤差、CMuxで加わる誤差、キースイッチングで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0054】
本実施形態では、誤差の分散範囲を±1/16から±1/24へと縮小するように、上記論文で提示されたTFHEのシステムパラメータを改良する。
本実施形態によれば、2値の3入力を1つの準同型加算で処理することができる。つまり、平文として2値を取り得る暗号文を3つ入力して準同型演算を行うことができる。準同型加算結果に対してGate Bootstrappingを行うことで、準同型演算とともに3入力の論理素子を構成することができる。
和の下位ビットと、上位ビット(桁上げ)と、を夫々得る2つの論理素子を作成できる。全加算器の演算時間のほぼ全てを占めるGate Bootstrappingの回数を5回から2回に削減することが出来る。2つの3入力論理素子は互いに依存関係がないため2つの演算を並列に処理することができる。
【0055】
[実施例1]
図3に基づいて説明する。
全加算器の入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。
これらの暗号文は、夫々特別に設定したシステムパラメータによるTLWE暗号文であり、Gate Bootstrappingにより生成された又は新規に暗号化されたものである。
TLWE暗号文ca、cb、ccは、何れも平文として0又は1/4を有し、平文に付加される誤差は±1/24の範囲に含まれる。
2値3入力とすることで誤差範囲が重なる可能性があり、平文に付加される誤差を上記論文の±1/16よりも小さく±1/24以内としている。
ただし後述するように、誤差が重なることによる問題が許容できる場合はその限りではなく、誤差として実施例の±1/24や上記論文の±1/16を採用してもよい。
暗号処理装置1は、ca+cb+cc-(0,1/8)を計算し、演算結果としてTLWE暗号文ctを得る。(0,1/8)は平文が1/8となる自明な暗号文である。
【0056】
ca+cb+cc-(0,1/8)の演算結果は、以下のとおりである。
caが0、cbが0、ccが0(ca+cb+ccは二進数のシンボルで0+0+0=0)
⇒0+0+0-1/8=-1/8(7/8)
caが0、cbが0、ccが1/4(ca+cb+ccは二進数のシンボルで0+0+1=1)
⇒0+0+1/4-1/8=1/8
caが0、cbが1/4、ccが0(ca+cb+ccは二進数のシンボルで0+1+0=1)
⇒0+1/4+0-1/8=1/8
caが0、cbが1/4、ccが1/4(ca+cb+ccは二進数のシンボルで0+1+1=2)
⇒0+1/4+1/4-1/8=3/8
caが1/4、cbが0、ccが0(ca+cb+ccは二進数のシンボルで1+0+0=1)
⇒1/4+0+0-1/8=1/8
caが1/4、cbが0、ccが1/4(ca+cb+ccは二進数のシンボルで1+0+1=2)
⇒1/4+0+1/4-1/8=3/8
caが1/4、cbが1/4、ccが0(ca+cb+ccは二進数のシンボルで1+1+0=2)
⇒1/4+1/4+0-1/8=3/8
caが1/4、cbが1/4、ccが1/4(ca+cb+ccは二進数のシンボルで1+1+1=3)
⇒1/4+1/4+1/4-1/8=5/8
【0057】
TLWE暗号文ctは、平文として1/8、3/8、5/8、7/8の4つのいずれかを有し、平文に付加される誤差は±1/8の範囲に含まれる。
これはTLWE暗号文ca、cb、ccの誤差±1/24を3つ足しているためである。
【0058】
次に暗号処理装置1は、TLWE暗号文ctに対して上記論文どおりのGate Bootstrappingを行う。
その結果、ca+cb+ccが二進数のシンボル0又は1の場合に平文が0となり、ca+cb+ccが二進数のシンボルで2又は3の場合に平文が1/4となるTLWE暗号文cyが得られる。TLWE暗号文cyにおいて、平文に付加される誤差は±1/24の範囲に含まれる。これを全加算器の和の上位ビット(桁上げ出力)とする。
【0059】
次に暗号処理装置1は、暗号文ct同士の準同型加算を行う。暗号処理装置1は、ct+ct+(0,1/4)の演算を行い、上記論文どおりのGate Bootstrappingを行う。ct+ctの演算結果は、平文として0又は1/2を取り、平文に付加される誤差は±1/4の範囲に含まれる暗号文czである。
演算結果は、以下の通りである。
caが0、cbが0、ccが0
⇒-1/8+(-1/8)+1/4=0
caが0、cbが0、ccが1/4
⇒1/8+1/8+1/4=4/8=1/2
caが0、cbが1/4、ccが0
⇒1/8+1/8+1/4=4/8=1/2
caが0、cbが1/4、ccが1/4
⇒3/8+3/8+1/4=8/8=1(0)
caが1/4、cbが0、ccが0
⇒1/8+1/8+1/4=4/8=1/2
caが1/4、cbが0、ccが1/4
⇒3/8+3/8+1/4=8/8=1(0)
caが1/4、cbが1/4、ccが0
⇒3/8+3/8+1/4=8/8=1(0)
caが1/4、cbが1/4、ccが1/4
⇒5/8+5/8+1/4=12/8=3/2(1/2)
【0060】
Gate Bootstrappingの結果は、ca+cb+ccが二進数のシンボルで0又は2の時に平文が0となり、ca+cb+ccがシンボル1又は3の時に平文が1/2となるTLWE暗号文czが得られる。暗号文czにおいて平文に付加される誤差は±1/24の範囲に含まれる。これを全加算器における和の下位ビットとする。
このように構成したことにより、暗号処理装置1は、論理素子の演算でほぼ全ての計算時間を消費しているGate Bootstrappingの回数を2回に減らすことができる。実験の結果、計算時間は22.4msであった。
Gate Bootstrappingを5回行った場合の55.5msと比べて60%の計算時間を短縮できたことが確認できた。また2つのGate Bootstrapping処理には依存関係がない。従って、マルチスレッドなどの手法で並列化することで1段階分の処理時間で2つのGate Bootstrapping処理を行うことができる。
【0061】
[実施例2]
平文に付加する誤差範囲を縮小することで、3入力2値論理演算(平文として2値を有する暗号文を3つ入力として演算を行う)を行う点で上記と同様である。
上記の例(実施例1)では、下位ビットの算出に円周群{T}の全体(0~1)を用いていたためテストベクタは上記論文に記載のとおりであった。
[実施例2]では、下位ビットの算出に円周群{T}の下半分(0~0.5)のみを用いて、テストベクタを特殊なものとしている。
円周群{T}の下半分(0~0.5)しか使わないのは、円周群{T}に対応するテストベクタの中で正負の反転した値が出てこないからである。テストベクタの0次からn次までが暗号文一対一対応する利点がある。
なお、円周群{T}の下半分(0~0.5)しか使わない場合には誤差が重ならないようにするためには下記のように平文の誤差の分散範囲を小さく(±1/48)する必要がある。ただし後述するように、誤差が重なることによる問題が許容できる場合はその限りではなく、誤差の分散範囲として実施例の±1/24や、上記論文の±1/16を採用してもよい。
【0062】
全加算器の入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。
これらの暗号文は、夫々特別に設定したシステムパラメータによるTLWE暗号文であり、Gate Bootstrappingにより生成された又は新規に暗号化されたものである。
TLWE暗号文ca、cb、ccは何れも平文として0又は1/8を有し、平文に付加される誤差は±1/48の範囲に含まれる。TLWE暗号文ca、cb、ccは、夫々0が二進数のシンボル0に対応し、1/8がシンボル1に対応する。
暗号処理装置1は、ca+cb+cc+(0,1/16)を計算し、演算結果としてTLWE暗号文ctを得る(0,1/16)は平文が1/16となる自明な暗号文である。
【0063】
なお、ca+cb+ccは、二進数のシンボルで以下のように表される。
caが0、cbが0、ccが0⇒0+0+0=0
caが0、cbが0、ccが1/8⇒0+0+1=1
caが0、cbが1/8、ccが0⇒0+1+0=1
caが0、cbが1/8、ccが1/8⇒0+1+1=2
caが1/8、cbが0、ccが0⇒1+0+0=1
caが1/8、cbが0、ccが1/8⇒1+0+1=2
caが1/8、cbが1/8、ccが0⇒1+1+0=2
caが1/8、cbが1/8、ccが1/8⇒1+1+1=3
これは以下の説明でも同じである。
【0064】
ca+cb+cc+(0,1/16)の演算結果は以下のとおりである。
caが0、cbが0、ccが0
⇒0+0+0+1/16=1/16
caが0、cbが0、ccが1/8
⇒0+0+1/8+1/16=3/16
caが0、cbが1/8、ccが0
⇒0+1/8+0+1/16=3/16
caが0、cbが1/8、ccが1/8
⇒0+1/8+1/8+1/16=5/16
caが1/8、cbが0、ccが0
⇒1/8+0+0+1/16=3/16
caが1/8、cbが0、ccが1/8
⇒1/8+0+1/8+1/16=5/16
caが1/8、cbが1/8、ccが0
⇒1/8+0+1/8+1/16=5/16
caが1/8、cbが1/8、ccが1/8
⇒1/8+1/8+1/8+1/16=7/16
TLWE暗号文ctは、平文として1/16、3/16、5/16、7/16の4つのうちいずれかを有し、平文に付加される誤差は±1/16の範囲に含まれる。
これはTLWE暗号文ca、cb、ccの誤差±1/48を3つ足しているためである。
【0065】
次に暗号処理装置1は、TLWE暗号文ctに対して上記論文どおりのGate Bootstrappingを行う。ただし、上記論文ではBlindRotateで用いるテストベクタの係数がμ=1/8であったのに対し、μ=1/16とする。
その結果、ca+cb+ccがシンボル0又は1の場合に平文が0であり、ca+cb+ccがシンボル2又は3の場合に平文が1/8であるTLWE暗号文cyが得られる。平文に付加される誤差は±1/48の範囲内に含まれる。これを全加算器の桁上げ出力とする。
【0066】
次に暗号処理装置1はTLWE暗号文ctに対してGate Bootstrappingを行う。
上記論文では、BlindRotateのテストベクタとして、
ただし、μ=1/8
にX
n/2を乗じたものを用いている。
これに替えて、暗号処理装置1は、テストベクタとして、
ただし、μ
1=μ
3=1/16、μ
2=μ
4=-1/16
を用いる。
【0067】
SampleExtract直後の段階で、平文として-1/16、1/16の2種類を取り得るTLWE暗号文が得られる。
これ以降は上記論文同様に(0,1/16)を足し、キースイッチングを行うことで、ca+cb+ccがシンボル0又は2の時に平文が0となり、ca+cb+ccがシンボル1又は3の時に1/8が平文となるTLWE暗号文czが得られる。平文に付加される誤差は±1/48の範囲内に含まれる。これを和の下位ビット出力とする。
このように構成したことにより、暗号処理装置1は、論理素子の演算でほとんど全ての計算時間を消費しているGate Bootstrappingの回数を2回に減らすことができる。実験の結果、計算時間は22.4msであった。
Gate Bootstrappingを5回行った場合の55.5msと比べて60%の計算時間を短縮できたことが確認できた。
また、2つのGate Bootstrapping処理には依存関係がない。従って、マルチスレッドなどの手法で並列化することで1段階分の処理時間で2つのGate Bootstrapping処理を行うことができる。
【0068】
[実施例3]
図4は、[実施例3]に関して、
図2の機能構成に基づく全加算器の演算プロセスを詳しく説明する図である。
[実施例3]は、実施例1、2で説明した2値3入力の準同型演算を基本とし、さらにGate Bootstrappingの回数を1回にまで削減する。
図4に示すように、[実施例3]の暗号処理装置1は入力された暗号文ca、cb、ccを第3演算部12に入力して準同型演算を行い、その演算結果(暗号部ct=暗号文ca+cb+cc)を2値Gate Bootstrappingを行う第3Bootstrapping部17に入力する。
第3Bootstrapping部17の出力は、平文として2値(0,μ)の何れかを取り得る桁上げ出力C
Oの暗号文cy、出力Sの暗号文czである。
第3演算部14による準同型演算に要する時間は微々たるものである。
Gate Bootstrappingは、準同型演算を用いて全加算器を処理するとき、ほとんど全ての処理時間を消費している。
【0069】
[実施例3]の暗号処理装置1は、[実施例1]、[実施例2]の場合と同様に第3演算部12に2値の暗号文を3つ入力し、Gate Bootstrappingを改良することにより、準同型演算処理の回数を全体で1回に減らしている。
その結果、暗号処理装置1では、準同型演算処理のほぼ全てを占めるGate Bootstrappingの回数を全体で1回に減らすることが出来る。
完全準同型暗号に関する全加算器の演算時間のほぼ全てをGate Bootstrappingが占めるので、暗号処理装置1は、Gate Bootstrappingの回数を削減することによって、全加算器の演算を著しく高速化することが出来る。
【0070】
暗号処理装置1は、上記論文のシステムパラメータを改良することにより、誤差の分散範囲を±1/16から、±1/36又は±1/48へと縮小する。
BlindRotateのテストベクタの上位係数を0とし、準同型演算の結果に対して2種類の多項式を乗算することで、一度のBlindRotateの結果に対して、夫々和の下位ビットと上位ビット(桁上げ)を得る論理素子を作成できる。これにより、全加算器の演算時間のほぼ全てを占めるGate Bootstrapping、さらにその大半を占めるBlindRotateの回数を5回から1回に削減することが出来る。
【0071】
なお、2値の平文を円周群{T}上にどのように配置するかによって構成方法が異なる。本明細書では、円周群{T}上の0と1/6を用いる方法を[6分割版]、0と1/8を用いる方法を[8分割版]と記載する。
[6分割版]は上記[実施例1]に対応し、平文に付加する誤差が±1/36の範囲内となるようにシステムパラメータが設定されている。
[8分割版]は上記[実施例2]に対応し、平文に付加する誤差が±1/48の範囲内となるようにシステムパラメータが設定されている。
[6分割版]は、円周群{T}の0~1、なかでも0~0.5+1/6の範囲を使い、[8分割版]は円周群{T}の右半分(0~0.5)を使っている。
【0072】
全加算器の入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。また、以降[6分割版]ではp=1/6、[8分割版]ではp=1/8とする。
TLWE暗号文ca、cb、ccは、何れも平文として0又はpを有し、[6分割版]では平文に付加される誤差は±1/36の範囲に含まれ、[8分割版]では±1/48の範囲に含まれる。
【0073】
まず暗号処理装置1(第3演算部12)は、ca+cb+cc+(0,p/2)を計算する。(0,p/2)は、平文がp/2となる自明なTLWE暗号文である。
ca+cb+cc+(0,p/2)の演算結果は以下のとおりである。
caが0、cbが0、ccが0
⇒0+0+0+p/2=p/2
caが0、cbが0、ccがp
⇒0+0+p+p/2=3p/2
caが0、cbがp、ccが0
⇒0+p+0+p/2=3p/2
caが0、cbがp、ccがp
⇒0+p+p+p/2=5p/2
caがp、cbが0、ccが0
⇒p+0+0+p/2=3p/2
caがp、cbが0、ccがp
⇒p+0+p+p/2=5p/2
caがp、cbがp、ccが0
⇒p+p+0+p/2=5p/2
caがp、cbがp、ccがp
⇒p+p+p+p/2=7p/2
平文として、p/2、3p/2、5p/2、7p/2の4つのいずれかを有し、平文に付加される誤差が±1/12又は±1/16の範囲内に含まれるTLWE暗号文ctが得られる。
【0074】
暗号処理装置1(第3Bootstrapping部17)は、TLWE暗号文ctに対して、上記論文に沿ったGate Bootstrapping処理を行う。
Gate Bootstrappingにおいて、暗号処理装置1は、以下の多項式をテストベクタとしたBlindRotateを行う。
ただし、μ=p/2
このテストベクタは、円周群{T}を分割した一区間だけ値をもつ多項式である。
BlindRotateの結果、暗号処理装置1(第3Bootstrapping部17)は、TRLWE暗号文cr=(a(X),b(X))を得る。
次に暗号処理装置1は、TRLWE暗号文crに対して、上記論文には存在しない多項式fc(X)、fs(X)の乗算を行う。
fc(X)、fx(X)は、
[6分割版]では
とし、
[8分割版]では
とする。
【0075】
暗号処理装置1はTRLWE暗号文crに多項式fc(X)、fs(X)を夫々乗算した結果、TRLWE暗号文cco、TRLWE暗号文csを得る。
TRLWE暗号文ccoは全加算器の桁上げに対応するTRLWE暗号文、TRLWE暗号文csは全加算器の和の出力に対応するTRLWE暗号文である。
TRLWE暗号文cr=(a(X),b(X))に多項式fc(X)、fs(X)を夫々乗算して得られるcco、csは、
cco=(a(X)・fc(X),b(X)・fc(X))
cs=(a(X)・fs(X),b(X)・fs(X))
として計算される。
【0076】
TRLWE暗号文crを復号した平文多項式は、
である。
従って、TRLWE暗号文ccoを復号すると、
となり、TRLWE暗号文crを復号した平文多項式は多項式fc(X)を乗じたものとなる。
和の出力に対応するTRLWE暗号文csについても同様で、これを復号すると、
となり、TRLWE暗号文crを復号した平文多項式は多項式fs(X)を乗じたものとなる。
【0077】
そして、BlindRotateは、テストベクタ多項式T(X)に、2n×ctのTLWE暗号文の平文pt=φ
s(2n×ct)を計算することなく、T(X)・X
-ptを平文多項式とするTRLWE暗号文を得る操作であった。
よって、TRLWE暗号文ccoを復号した平文多項式は、
であり、テストベクタ多項式をT(X)・fc(X)としたものと同じである。
同様に、csを復号した平文多項式は、
であり、テストベクタ多項式をT(X)・fs(X)としたものと同じである。
[6分割版]の多項式fc(X)、fs(X)は、テストベクタに乗算することで円周群{T}の0~0.5+1/6の範囲を使うテストベクタ多項式を得ることが出来る式である。
[8分割版]の多項式fc(X)、fs(X)は、テストベクタに乗算することで円周群{T}の右半分(0~0.5)を使うためのテストベクタ多項式を得ることが出来る式である。
【0078】
暗号処理装置1は、桁上げ出力を得るためのテストベクタ多項式(T(X)・fc(X))と、和を得るためのテストベクタ多項式(T(X)・fs(X))と、を夫々因数分解して、その結果得られる共通の多項式T(X)に対してBlindRotateする。
そして暗号処理装置1は、BlindRotateの結果に対して、夫々残りを両テストベクタ多項式の残りの部分、fc(X)、fs(X)をかける。
これにより、桁上げ出力を得るためのテストベクタ多項式と、和の出力を得るためのテストベクタ多項式に対して夫々BlindRotateを行うことなく、一度に両方の計算結果が得られる。
BlindRotate1回で二種類の多項式に対して、BlindRotateした結果が得られる。
Gate Bootstrappingの処理時間の大半はBlindRotateで占められているため、実質的にGate Bootstrapping2回を1回の時間で行っていることと同等となる。
【0079】
次に暗号処理装置1は、上記論文のGate Bootstrappingと同様に、SampleExtractとキースイッチングを、ccoおよびcsに対して夫々行う。これらの処理は、Gate Bootstrappingの処理時間のうちごくわずかしか消費しないため、計算時間への影響は軽微である。
上記のように構成したので、論理素子の演算でほとんど全ての計算時間を消費しているBlindRotateの回数を5回から1回に減らすことができる。
実験によれば、[実施例3]の構成の計算時間は11.4msであり、Gate Bootstrappingを5回実行する場合の55.5msと比べて、約5倍の早さとなっていることが確認できた。
【0080】
[実施例4]
[実施例3]の変形例として、TLWE暗号文ctに対するGate Bootstrapping処理においてBlindRotateを1回で済ませる処理を以下のように行ってもよい。
暗号処理装置1は、テストベクタ多項式における偶数次数、奇数次数に異なる係数を配置し且つTLWE暗号文の係数を偶数に揃える。これにより、暗号処理装置1は、下記に説明するように、1回のBlindRotateによって複数のルックアップテーブルの参照を行う。その結果、暗号処理装置1は、その後のSampleExtractによって全加算器の和(出力S)を平文として有する暗号文czと、全加算器の桁上げ出力Coを平文として有する暗号文cyを得るための複数種類の演算結果を得ることが出来る。
暗号処理装置1は、準同型演算結果のTLWE暗号文を構成する要素(複数の値)を整数とする計算を行う。この整数は2で割った余り(mod 2の値)が全て同じであり、テストベクタ多項式は2つ毎(偶数毎、奇数毎に)に同じ係数を有することで、複数種類の演算結果を得ることが出来る。
【0081】
全加算器の入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。
[実施例3]と同様に、TLWE暗号文ca、cb、ccは、何れも平文として0又はpを有し、[6分割版]ではp=1/6、[8分割版]ではp=1/8とする。平文に付加される誤差は、[6分割版]では±1/36の範囲に含まれ、[8分割版]では±1/48の範囲に含まれる。
2値の平文として、円周群{T}上の0と1/6を用いる方法が[6分割版]であり、0と1/8を用いる方法が[8分割版]である。
【0082】
暗号処理装置1(第3演算部12)が、ca+cb+cc+(0,p/2)を計算し、平文として、p/2、3p/2、5p/2、7p/2の4つのいずれかを有し、平文に付加される誤差が±1/12又は±1/16の範囲内に含まれるTLWE暗号文ctを得るまでは[実施例3]と同じである。
[実施例4]の最初のステップとして、暗号処理装置1(第3演算部12)は、TLWE暗号文ctをn倍して四捨五入し、その結果をさらに2倍してLWE暗号文ct1を算出する。上記論文ではTLWE暗号文を2n倍してから四捨五入していたが、本実施形態はこの点で異なる。
2倍をしたLWE暗号文ct1の全係数は偶数であり、LWE暗号文ct1を復号した対応する平文p’=φs(ct1)=[s]・[a]-b(b-[s]・[a])が偶数となることが保証される。上記論文について説明したように平文p’=φs(ct1)こそがテストベクタ多項式T(X)にXをかける回数であるので、BlindRotateにおける回転数(Xをかける回数)は偶数回である。
【0083】
次に、暗号処理装置1(第3Bootstrapping部17)は、以下の多項式
ft(X)=μX
2np-2+μX
2np-4+…+μX
2+μ
ただし、μ=p/2
を用いてテストベクタを構成し、LWE暗号文ct1に対して、上記論文に沿ったGate Bootstrapping処理を行う。テストベクタの構成方法を以下に述べる。
平文の円周群{T}の0~1がテストベクタの0次~2n次の項に対応しているため、テストベクタft(X)をBlindRotateとしたTRLWE暗号文の平文多項式の定数項は、TLWE暗号文ctが0~pの区間の場合にのみp/2となり、それ以外の場合は0となる。また、テストベクタft(X)をBlindRotateとTRLWE暗号文の平文多項式には偶数次数のみが存在する。
[実施例4]では、このテストベクタft(X)に、
[6分割版]では
[8分割版]では
の多項式を用いたft(X){fc(X)X+fs(X)}をBlindRotateのテストベクタ多項式T(X)とする。
[実施例3]でも説明したように、[6分割版]の多項式fc(X)、fs(X)は、テストベクタft(X)に乗算することで円周群{T}の0~0.5+1/6の範囲を使うテストベクタ多項式を得ることが出来る式である。また[8分割版]の多項式fc(X)、fs(X)は、テストベクタft(X)に乗算することで円周群{T}の右半分(0~0.5)を使うためのテストベクタ多項式を得ることが出来る式である。
【0084】
例えば[6分割版]の場合、
fc(X)X+fs(X)
=(X4np-X2np-1)X+(-X4np+X2np-1)
=(X4np+1-X2np+1-X)+(-X4np+X2np-1)
=X4np+1-X4np-X2np+1+X2np-X-1
である。
テストベクタ多項式T(X)は、
T(X)=ft(X){fc(X)X+fs(X)}
=(μX2np-2+μX2np-4+…+μX2+μ)×(X4np+1-X4np-X2np+1+X2np-X-1)
=μX6np-1-μX6np-2-μX4np-1+μX4np-2-μX2np-1-μX2np-2
+μX6np-3-μX6np-4-μX4np-3+μX4np-4-μX2np-3-μX2np-4
…+μX4np+3-μX4np+2-μX2np+3+μX2np+2-μX3-μX2
+μX4np+1-μX4np-μX2np+1+μX2np-μX-μ
=μX6np-1-μX6np-2+μX6np-3-μX6np-4…+μX4np+3-μX4np+2+μX4np+1-μX4np-μX4np-1+μX4np-2-μX4np-3+μX4np-4-μX2np+3+μX2np+2-μX2np+1+μX2np-μX2np-1-μX2np-2-μX2np-3-μX2np-4-μX3-μX2-μX-μ
【0085】
暗号処理装置1は、このようなテストベクタ多項式T(X)を用いてBlindRotateを行った結果に0と1の次数でSampleExtractを行う。
上記の処理によってTLWE暗号文ctの係数を偶数に揃えた結果、BlindRotateで回転させる(テストベクタ多項式にXをかける)回数は偶数回である。
従って、BlindRotate前後で、テストベクタ多項式T(X)における係数と次数の偶奇との関係は保存される。BlindRotate後の次数0にはBlindRotate前のテストベクタ多項式T(X)における偶数次数の項の係数が現れ、BlindRotate後の次数1にはBlindRotate前のテストベクタ多項式T(X)における奇数次数の項の係数が現れる。このとき、係数の符号は反転している。
BlindRotate後のテストベクタ多項式T(X)において、次数0でSampleExtractを行った結果得られる暗号文czは、全加算器の和(出力S)を平文として有し、次数1でSampleExtractを行った結果得られる暗号文cyは、全加算器の桁上げ出力Coを平文として有する。
【0086】
なお上記のテストベクタ多項式T(X)の次数4np(偶数)と次数4np-1(奇数)は係数が両方ともマイナスとなっているが、テストベクタ多項式T(X)の最も大きな次数は奇数であり、BlindRotateで偶数回回転させたときに、次数0と次数1に、偶数次数の項と奇数次数の項の同じ係数が現れる、ということはない。すなわちBlindRotateの結果、次数0、次数1がともに、符号が反転したプラスの値となることはない。
以上の処理によれば、桁上げ出力Coを得るテストベクタ多項式と、和の出力Sとなるテストベクタを得るテストベクタ多項式に対して夫々BlindRotateを行う必要はない。一のテストベクタ多項式に対する1回のBlindRotateの結果に対して、0と1の次数で2回のSampleExtractを行うことより全加算器の2つの値に対応する暗号文を得ることが出来る。
Gate Bootstrappingの処理時間の大半はBlindRotateで占められているため、実質的にGate Bootstrapping2回を1回の時間で行っていることと同等となる。
【0087】
次に暗号処理装置1は、上記論文のGate Bootstrappingと同様にキースイッチングを行う。これらの処理は、Gate Bootstrappingの処理時間のうちごくわずかしか消費しないため、計算時間への影響は軽微である。
上記のように構成したので、論理素子の演算でほとんど全ての計算時間を消費しているBlindRotateの回数を5回から1回に減らすことができる。
【0088】
図7は、暗号処理装置が実行する全加算器の演算処理の流れを説明するフローチャート(その1)である。
上記したように、2値の暗号文を論文通りにGate Bootstrappingする場合、円周群{T}における0~1/4、3/4~1の区間の平文を0のTLWE暗号文に変換する。また、円周群{T}における1/4~3/4の区間の平文を1/4のTLWE暗号文に変換する。実施例1、2では、この変換の際、平文に付加される誤差は、本実施形態の場合、±1/24や±1/48の範囲のいずれかの値である。
上記した円周群{T}の範囲を、0、1などの(多値)論理演算で用いるシンボルを対応づける。
【0089】
円周群{T}上の範囲(誤差を含む)が暗号文における平文のシンボルに対応している。
暗号文は、([a],b)の形式を有するベクトルであり、ベクトルの要素は円周群上の点である。平文もまた、円周群{T}上の点である。
論理演算で用いるシンボルは、円周群{T}上の範囲と対応付いており、ある暗号文に対する平文は、その範囲内の何れか1点を指している。平文が、その範囲内のどの点を指しているかは、秘密鍵なしでは、特定することが難しい。これによってTLWE暗号文の強度が担保されている。範囲を0として円周群上の点とシンボルを対応づけると、複数の暗号文を集めて連立方程式として平文を導出可能でありTLWE暗号文は暗号として機能しなくなる。
【0090】
実施例1、2に対応して、暗号処理装置1(受付部11)は、ステップS101において、演算対象の暗号文が入力されたか否かを受け付けたかを判定する。
暗号文が入力されたと判定した場合(ステップS101でYes)、暗号処理装置1(受付部11)は、ステップS102において、暗号文を受けつけ、記憶部20に格納する。
次に、暗号処理装置1(第1演算部12)は、ステップS103において、暗号文を用いて準同型演算を行い、演算結果を記憶部20に格納する。
暗号処理装置1(第1算出部15)は、ステップS104において、演算結果に対してGate Bootstrappingを行い、平文として2値を有する全加算器の桁上げ出力の暗号文を算出し、記憶部20に格納する。
第1演算部12、第1算出部15による処理では以下の演算が行われる。
この演算は、平文として2値を有する3つの暗号文ca、cb、ccの入力を受け付け、ca+cb+cc-1/8からTLWE暗号文ctを算出し、これをGate Bootstrappingして桁上げ出力Coの暗号文cyを得る。
【0091】
例えば、入力される3つの暗号文が二進数のシンボル0又は1、つまり区間0±1/24又は1/4±1/24で、第1演算部12がステップS103の演算を行うとき、以下の演算によって暗号文ctを得る。
caが0、cbが0、ccが0
⇒0±1/24+0±1/24+0±1/24-1/8=-1/8±1/8
caが0、cbが0、ccが1
⇒0±1/24+0±1/24+1/4±1/24-1/8=1/8±1/8
caが0、cbが1、ccが0
⇒0±1/24+1/4±1/24+0±1/24-1/8=1/8±1/8
caが0、cbが1、ccが1/4
⇒0±1/24+1/4±1/24+1/4±1/24-1/8=3/8±1/8
caが1、cbが0、ccが0
⇒1/4±1/24+0±1/24+0±1/24-1/8=1/8±1/8
caが1/4、cbが0、ccが1
⇒1/4±1/24+0±1/24+1/4±1/24-1/8=3/8±1/8
caが1、cbが1、ccが0
⇒1/4±1/24+0±1/24+1/4±1/24-1/8=3/8±1/8
caが1、cbが1、ccが1
⇒1/4±1/24+1/4±1/24+1/4±1/24-1/8=5/8±1/8
得られた暗号文ctは、平文として1/8、3/8、5/8、7/8の4つのいずれかを有し、平文に付加される誤差は±1/8の範囲に含まれる。
ステップS104の処理として第1算出部15がTLWE暗号文ctに対してGate Bootstrappingを行うと、平文として0又は1/4を有し、平文に付加される誤差は±1/24の範囲内に含まれる暗号文cyの出力が得られる。これを全加算器の和の上位ビット(桁上げ出力Co)とする。
【0092】
暗号処理装置1(第2演算部13)は、ステップS105において、ステップS103で得た一時暗号文ct同士の準同型演算を行い、演算結果を記憶部20に格納する。
暗号処理装置1(第2算出部16)は、ステップS106において、ステップS105の演算結果に対して2値Gate Bootstrappingを行って出力暗号文czを算出し、記憶部20に格納する。
第2演算部13、第2算出部16による処理の結果、以下の演算が行われる。
この演算は、平文として2値を有する暗号文ctの入力を受け付け、暗号文ct同士を加算して平文として2値を有する出力暗号文czを得るものである。
第2演算部13がステップS105の演算を行うとき以下の演算を行う。
caが0、cbが0、ccが0
⇒-1/8±1/8+(-1/8±1/8)+1/4=0±1/4
caが0、cbが0、ccが1/4
⇒1/8±1/8+1/8±1/8+1/4=4/8=1/2±1/4
caが0、cbが1/4、ccが0
⇒1/8±1/8+1/8±1/8+1/4=4/8=1/2±1/4
caが0、cbが1/4、ccが1/4
⇒3/8±1/8+3/8±1/8+1/4=8/8=1(0)±1/4
caが1/4、cbが0、ccが0
⇒1/8±1/8+1/8±1/8+1/4=4/8=1/2±1/4
caが1/4、cbが0、ccが1/4
⇒3/8±1/8+3/8±1/8+1/4=8/8=1(0)±1/4
caが1/4、cbが1/4、ccが0
⇒3/8±1/8+3/8±1/8+1/4==8/8=1(0)±1/4
caが1/4、cbが1/4、ccが1/4
⇒5/8±1/8+5/8±1/8+1/4=12/8=3/2(1/2)±1/4
ステップS106の処理として第2算出部16がGate Bootstrappingを行うと、平文として0又は1/4を有し、平文に付加される誤差は±1/24の範囲内に含まれる暗号文czが得られる。これを全加算器の和の下位ビット(出力S)とする。
ステップS104の2値Gate Bootstrappingと、ステップS106の2値Gate Bootstrappingと、はマルチスレッド処理によって、並列で実行することが出来る。
【0093】
図8は、暗号処理装置が実行する全加算器の演算処理の流れを説明するフローチャート(その2)である。
以下の説明は、[8分割版]の[実施例3]、[実施例4]に対応する。
暗号処理装置1(受付部11)は、ステップS101において、演算対象の暗号文が入力されたか否かを受け付けたかを判定する。
暗号文が入力されたと判定した場合(ステップS201でYes)、暗号処理装置1(受付部11)は、ステップS202において、暗号文を受けつけ記憶部20に格納する。
次に、暗号処理装置1(第3演算部14)は、ステップS203において、暗号文を用いて準同型演算を行い、演算結果を記憶部20に格納する。
暗号処理装置1(第3算出部17)は、ステップS204において、演算結果に対してGate Bootstrappingを行い、平文として2値を有する全加算器の桁上げ出力Coの暗号文を算出し、記憶部20に格納する。
第3演算部14、第3算出部17による処理では以下の演算が行われる。
この演算は、平文として2値を有する3つの暗号文ca、cb、ccの入力を受け付け、ca+cb+cc+1/16からTLWE暗号文ctを算出し、これをGate Bootstrappingして、全加算器の桁上げ出力Coの暗号文(上位ビット)cyと全加算器の出力Sの暗号文czを得るものである。
【0094】
例えば、入力される3つの暗号文が二進数のシンボル0又は1、つまり区間0±1/48または1/8±1/48で、第3演算部14がステップS103の演算を行うとき以下の演算を行う。
caが0、cbが0、ccが0
⇒0±1/48+0±1/48+0±1/48+1/16=1/16±1/16
caが0、cbが0、ccが1
⇒0±1/48+0±1/48+1/8±1/48+1/16=3/16±1/16
caが0、cbが1、ccが0
⇒0±1/48+1/8±1/48+0±1/48+1/16=3/16±1/16
caが0、cbが1、ccが1/4
⇒0±1/48+1/8±1/48+1/8±1/48+1/16=3/16±1/16
caが1、cbが0、ccが0
⇒1/8±1/48+0±1/48+0±1/48+1/16=3/16±1/16
caが1/4、cbが0、ccが1
⇒1/8±1/48+0±1/48+1/8±1/48+1/16=5/16±1/16
caが1、cbが1、ccが0
⇒1/8±1/48+0±1/48+1/8±1/48+1/16=5/16±1/16
caが1、cbが1、ccが1
⇒1/8±1/48+1/8±1/48+1/8±1/48+1/16=7/16±1/16
得られた暗号文ctは、平文として1/16、3/16、5/16、7/16の4つのいずれかを有し、平文に付加される誤差は±1/16の範囲に含まれる。
ステップS204の処理として第3算出部17がGate Bootstrappingを行うと、平文として0又は1/8を有し、平文に付加される誤差が±1/48の範囲内に含まれる暗号文cy、czの出力が得られる。これらを夫々全加算器の和の下位ビット(出力S)、全加算器の和の上位ビット(桁上げ出力Co)とする。
【0095】
[変形例]
上記の[実施例3]の[6分割版]では、[実施例1]に対応して、平文の値を0、1/6とし、平文に付加される誤差が±1/36の範囲内となるようにパラメータを変更してGate Bootstrappingの回数をさらに1回に削減した。
[実施例3]の[6分割版]と同じパラメータを用い平文に付加される誤差を±1/36の範囲内とし、平文として0又は1/6の2値を有し、2つの異なるテストベクタ多項式で2回のGate Bootstrappingを行うことによっても、全加算器の和の暗号文czと、桁上げ出力の暗号文cyを得ることが出来る。
この[変形例]では、暗号処理装置1は、ca+cb+cc+1/12を計算し、計算結果としてTLWE暗号文ct’を得る。
上記のように、[実施例1]では、TLWE暗号文ctに対して、上記論文通りのGate Bootstrappingを行って繰り上げ出力Coの暗号文cyを計算し、TLWE暗号文ct同士の準同型演算(ct+ct)に対して上記論文通りのGate Bootstrappingを行って出力Sの暗号文czを演算していた。
【0096】
それに対して[変形例]では、TLWE暗号文ct’に対して2つの異なるテストベクタ多項式TA、TBを用いてGate Bootstrappingを行って、暗号文cy、暗号文czを得る。
繰り上げ出力Coの暗号文cyを得るためテストベクタ多項式TAは、
μ1Xn-1+…+μ1X2n/3+μ2X2n/3-1+…+μ2X0
ただし、μ1=1/12、μ2=-1/12
とする。
出力Sの暗号文czを得るためのテストベクタ多項式TBは、
μ1Xn-1+…+μ1X2n/3+μ2X2n/3-1+…+μ2Xn/3+μ1Xn/3-1+…+μ1X0
ただし、μ1=-1/12、μ2=1/12
とする。
なおTLWE暗号文ct’同士の準同型演算(ct’+ct’)を行わず、TLWE暗号文ct’に対してテストベクタ多項式TBを用いたGate Bootstrappingを行って暗号文czを得ることが出来る。
【0097】
入力される3つの暗号文が二進数のシンボル0又は1、つまり区間0±1/36又は1/6±1/36であるとき、第1演算部12によるca+cb+cc+1/12の演算結果は、以下のとおりである。
caが0、cbが0、ccが0(ca+cb+ccは二進数のシンボルで0+0+0=0)
⇒0+0+0+1/12=1/12
caが0、cbが0、ccが1/6(ca+cb+ccは二進数のシンボルで0+0+1=1)
⇒0+0+1/6+1/12=1/4(3/12)
caが0、cbが1/6、ccが0(ca+cb+ccは二進数のシンボルで0+1+0=1)
⇒0+1/6+0+1/12=1/4(3/12)
caが0、cbが1/6、ccが1/6(ca+cb+ccは二進数のシンボルで0+1+1=2)
⇒0+1/6+1/6+1/12=5/12
caが1/6、cbが0、ccが0(ca+cb+ccは二進数のシンボルで1+0+0=1)
⇒1/6+0+0+1/12=1/4(3/12)
caが1/6、cbが0、ccが1/6(ca+cb+ccは二進数のシンボルで1+0+1=2)
⇒1/6+0+1/6+1/12=5/12
caが1/6、cbが1/6、ccが0(ca+cb+ccは二進数のシンボルで1+1+0=2)
⇒1/6+1/6+0+1/12=5/12
caが1/6、cbが1/6、ccが1/6(ca+cb+ccは二進数のシンボルで1+1+1=3)
⇒1/6+1/6+1/6+1/12=7/12
演算結果となる暗号文は平文として1/12、1/4、5/12、7/12を有する。
【0098】
第1Bootstrapping部15によるGate Bootstrappingでは、ca、cb、ccが全て二進数のシンボルで1の場合にのみ、ca+cb+cc=3から二進数のシンボルで3になり、このときca+cb+ccの計算結果は左半面(円周群{T}の上半分)に対応する。
円周群{T}の上半分(0.5~1)では、テストベクタ多項式における下位の項Xn/3-1~…X0は係数の符号がマイナスに転じている。
従って、テストベクタ多項式TAのμ2X2n/3-1~μ2X0における下位のμ2Xn/3-1~μ2X0はμ2=-1/12に-1を乗算した1/12となっている。このときの係数の値にさらに(0,1/12)を加算して、繰り上げ出力Coの暗号文cyの平文として1/6を得る。(0,1/12)は平文が1/12となる自明な暗号文である。
またテストベクタ多項式TBにおける下位の項μ1Xn/3-1~μ1X0における係数は、μ1=-1/12に-1を乗算した1/12となっている。このときの係数の値にさらに(0,1/12)を加算して、全加算器の和(出力S)の暗号文czの平文として1/6を得る。
得られた暗号文cy、暗号文czは何れも平文として0又は1/6を有しており、正しく桁上げ出力Coと全加算器の和(出力S)が計算されたことが分かる。
【0099】
[AOI21、OAI21ゲートへの適用]
上記に説明した全加算器に関する[変形例]と同様の手法をAOI21ゲート、OAI21に適用して高速化することもできる。
AOI21ゲートは、AND-OR-INVERT2-1ゲートの略であり、入力A、B、Cに対して、D1=NOT(OR(A,AND(B,C)))を出力する。以下の説明では、AOI21ゲートを単にAOIゲートと記載する。
【0100】
図9は、AOIゲートの構成を例示する図である。
図9は、論理演算素子によるハードウェア回路でAOIゲートを説明しているが、AOIゲートをソフトウェアで実装したCPUが実行するAOIゲートプログラムであると考えてもよい。
Bit-wise型の準同型暗号の処理をソフトウェアで実装するとき、暗号文に対して論理回路(論理ゲート)を設計するイメージで演算を行う。
AOIゲート60は、1つのAND回路部(ANDを得るための演算処理部)61と、1つのOR回路部(ORを得るための演算処理部)62と、を備える。
AND回路部61とOR回路部62は夫々暗号文同士の準同型演算を行う演算部と、演算結果の誤差を減少させるGate Bootstrappingを行う算出部と、を備えている。
入力Bと入力CがAND回路部61に入力され、AND回路部61の出力と入力Aと、が後段のOR回路部62に入力され、OR回路部62からはAOI出力D1が出力される。
AOIゲートは、以下の真偽値を有する。
【0101】
一方、OAI21ゲートは、OR-AND-INVERT2-1ゲートの略であり、入力A、B、Cに対してD2=NOT(OR(A,AND(B,C)))を出力する。以下の説明では、OAI21ゲートを単にOAIゲートと記載する。
図10は、OAIゲートの構成を例示する図である。
図10は、論理演算素子によるハードウェア回路でOAIゲートを説明しているが、OAIゲートをソフトウェアで実装したCPUが実行するOAIゲートプログラムであると考えてもよい。
Bit-wise型の準同型暗号の処理をソフトウェアで実装するとき、暗号文に対して論理回路(論理ゲート)を設計するイメージで演算を行う。
OAIゲート70は、1つのOR回路部(ORを得るための演算処理部)71と、1つのAND回路部(ANDを得るための演算処理部)72と、を備える。
OR回路部71とAND回路部72は夫々暗号文同士の準同型演算を行う演算部と、演算結果の誤差を減少させるGate Bootstrappingを行う算出部と、を備えている。
入力Bと入力CがOR回路部71に入力され、OR回路部71の出力と入力Aと、が後段のAND回路部72に入力され、AND回路部72からはOAI出力D2が出力される。
OAIゲートは、以下の真偽値を有する。
【0102】
図11は、AOIゲート、OAIゲートを実現する暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第4演算部31と、第4Bootstrapping部(第4算出部)32と、出力部18と、を備えている。
第4演算部31と、第4Bootstrapping部(第4算出部)32以外の構成は、
図2と同じであるため説明を省略する。
第4演算部31は、受付部11が受け付けた2値3入力の暗号文に対して、第4準同型演算を行う。
第4演算部31は、
図9、
図10で説明した論理ゲート(AND回路部、XOR回路部、NOT回路部)によるAOIゲート、OAIゲートの演算(準同型演算)をソフトウェアで実現する演算処理部である。第4演算部31は、ハードウェアで実現されてもよい。
【0103】
第4Bootstrapping部32は、第4演算部31の演算結果に対して下記に説明する2値Gate Bootstrapping処理を行い、AOIゲート、OAIゲートの出力D1、D2として2値を取り得る新たな暗号文を出力する。
【0104】
図12は、
図11の機能構成に基づくAOIゲート、OAIゲートの演算プロセスを詳しく説明する図である。
図12の説明において、暗号処理装置1に入力される暗号文ca、cb、ccは、いずれも上記論文に示されるTLWE暗号文である。
下記に詳しく説明するが、TLWE暗号は、0又はμ(非0)の値を平文として有するBit-wise型の完全準同型暗号である。
論理ゲートを用いた論理演算によって様々な演算を行うことができる。
また後述するように、TLWE暗号文は、二進数のシンボル0又は1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能である。
【0105】
図12に示す構成では、非特許文献1の論文(上記論文)で提示された(2値)Gate Bootstrappingを使用する。
上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
入力された暗号文ca、cb、ccを第4演算部31に入力して準同型演算を行い、その演算結果(暗号文ct=暗号文ca×2+cb+cc)を2値Gate Bootstrappingを行う第1Bootstrapping部15に入力する。
第1Bootstrapping部15の出力は、平文として2値(0,μ)の何れかを取り得る、
AOIゲートの出力D1の暗号文dc1、又はOAIゲートの出力D2の暗号文dc2である。
【0106】
<AOI21ゲートの演算処理>
AOI21ゲートの入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。
これらの暗号文は、夫々特別に設定したシステムパラメータによるTLWE暗号文であり、Gate Bootstrappingにより生成された又は新規に暗号化されたものである。
TLWE暗号文ca、cb、ccは、何れも平文として0又は1/6を有し、平文に付加される誤差は±1/48の範囲に含まれる。
TLWE暗号文ca、cb、ccは、夫々0が二進数のシンボル0に対応し、1/6がシンボル1に対応する。
【0107】
まず暗号処理装置1(第4演算部31)は、2×ca+cb+cc+(0,1/12)を計算する。(0,1/12)は、平文が1/12となる自明なTLWE暗号文である。
2×ca+cb+cc+(0,1/12)の演算結果は以下のとおりである。
caが0、cbが0、ccが0(2×ca+cb+ccは二進数のシンボルで0+0+0=0)
⇒2×0+0+0+1/12=1/12
caが0、cbが0、ccが1/6(2×ca+cb+ccは二進数のシンボルで0+0+1=1)
⇒2×0+0+1/6+1/12=3/12
caが0、cbが1/6、ccが0(2×ca+cb+ccは二進数のシンボルで0+1+0=1)
⇒2×0+1/6+0+1/12=3/12
caが0、cbが1/6、ccが1/6(2×ca+cb+ccは二進数のシンボルで0+1+1=2)
⇒2×0+1/6+1/6+1/12=5/12
caが1/6、cbが0、ccが0(2×ca+cb+ccは二進数のシンボルで2+0+0=2)
⇒2×1/6+0+0+1/12=5/12
caが1/6、cbが0、ccが1/6(2×ca+cb+ccは二進数のシンボルで2+0+1=3)
⇒2×1/6+0+1/6+1/12=7/12
caが1/6、cbが1/6、ccが0(2×ca+cb+ccは二進数のシンボルで2+1+0=3)
⇒2×1/6+1/6+0+1/12=7/12
caが1/6、cbが1/6、ccが1/6(2×ca+cb+ccは二進数のシンボルで2+1+1=4)
⇒2×1/6+1/6+1/6+1/12=9/12
平文として、1/12、3/12、5/12、7/12、9/12の5つのいずれかを有し、平文に付加される誤差が±1/16の範囲内に含まれるTLWE暗号文ctが得られる。
【0108】
暗号処理装置1(第3Bootstrapping部17)は、TLWE暗号文ctに対して、上記論文に沿ったGate Bootstrapping処理を行う。
ただし、Gate Bootstrappingにおいて、暗号処理装置1は、以下の多項式をテストベクタとしたBlindRotateを行う。
Tx=μ1X
(n-1)+μ1X
(n-2)+…+μ1X
(2/3n)+μ2X
(2/3n-1)+…μ2
ただし、μ1=-1/12、μ2=1/12
SampleExtract直後の段階で得られるTLWE暗号文は、
caが0、cbが0、ccが0⇒1/12
caが0、cbが0、ccが1/6⇒1/12
caが0、cbが1/6、ccが0⇒1/12
caが0、cbが1/6、ccが1/6⇒-1/12
caが1/6、cbが0、ccが0⇒-1/12
caが1/6、cbが0、ccが1/6⇒-1/12
caが1/6、cbが1/6、ccが0⇒-1/12
caが1/6、cbが1/6、ccが1/6⇒-1/12
から平文として1/12又は-1/12を有する。
これに(0,1/12)を加えてキースイッチングを行うと、平文として0又は1/6を有するTLWE暗号文cyが得られる。夫々0が二進数のシンボル0に対応し、1/6がシンボル1に対応する。
以下は、入力された暗号文に応じたTLWE暗号文cyが取り得るシンボルを示す真理値表である。
上記したAOI21ゲートと同じ演算結果となっており、正しくAOI21ゲートの演算が出来たことが分かる。
【0109】
<OAI21ゲートの演算処理>
OAI21ゲートの入力A、B、Cに夫々対応するTLWE暗号文ca、cb、ccがあるとする。
これらの暗号文は、夫々特別に設定したシステムパラメータによるTLWE暗号文であり、Gate Bootstrappingにより生成された又は新規に暗号化されたものである。
TLWE暗号文ca、cb、ccは、何れも平文として0又は1/6を有し、平文に付加される誤差は±1/48の範囲に含まれる。
TLWE暗号文ca、cb、ccは、夫々0が二進数のシンボル0に対応し、1/6がシンボル1に対応する。
【0110】
まず暗号処理装置1(第4演算部31)は、2×ca+cb+cc+(0,1/12)を計算する。(0,1/12)は、平文が1/12となる自明なTLWE暗号文である。
2×ca+cb+cc+(0,1/12)の演算結果は以下のとおりである。
caが0、cbが0、ccが0(2×ca+cb+ccは二進数のシンボルで0+0+0=0)
⇒2×0+0+0+1/12=1/12
caが0、cbが0、ccが1/6(2×ca+cb+ccは二進数のシンボルで0+0+1=1)
⇒2×0+0+1/6+1/12=3/12
caが0、cbが1/6、ccが0(2×ca+cb+ccは二進数のシンボルで0+1+0=1)
⇒2×0+1/6+0+1/12=3/12
caが0、cbが1/6、ccが1/6(2×ca+cb+ccは二進数のシンボルで0+1+1=2)
⇒2×0+1/6+1/6+1/12=5/12
caが1/6、cbが0、ccが0(2×ca+cb+ccは二進数のシンボルで2+0+0=2)
⇒2×1/6+0+0+1/12=5/12
caが1/6、cbが0、ccが1/6(2×ca+cb+ccは二進数のシンボルで2+0+1=3)
⇒2×1/6+0+1/6+1/12=7/12
caが1/6、cbが1/6、ccが0(2×ca+cb+ccは二進数のシンボルで2+1+0=3)
⇒2×1/6+1/6+0+1/12=7/12
caが1/6、cbが1/6、ccが1/6(2×ca+cb+ccは二進数のシンボルで2+1+1=4)
⇒2×1/6+1/6+1/6+1/12=9/12
平文として、1/12、3/12、5/12、7/12、9/12の5つのいずれかを有し、平文に付加される誤差が±1/16の範囲内に含まれるTLWE暗号文ctが得られる。
【0111】
暗号処理装置1(第3Bootstrapping部17)は、TLWE暗号文ctに対して、上記論文に沿ったGate Bootstrapping処理を行う。
ただし、Gate Bootstrappingにおいて、暗号処理装置1は、以下の多項式をテストベクタとしたBlindRotateを行う。
Tx=μX
(n-1)+…+μ
ただし、μ=1/12
SampleExtract直後の段階で得られるTLWE暗号文は、
caが0、cbが0、ccが0⇒1/12
caが0、cbが0、ccが1/6⇒1/12
caが0、cbが1/6、ccが0⇒1/12
caが0、cbが1/6、ccが1/6⇒1/12
caが1/6、cbが0、ccが0⇒1/12
caが1/6、cbが0、ccが1/6⇒-1/12
caが1/6、cbが1/6、ccが0⇒-1/12
caが1/6、cbが1/6、ccが1/6⇒-1/12
から平文として1/12又は-1/12を有する。
これに(0,1/12)を加えてキースイッチングを行うと、平文として0又は1/6を有するTLWE暗号文cyが得られる。夫々0が二進数のシンボル0に対応し、1/6がシンボル1に対応する。
以下は、入力された暗号文に応じたTLWE暗号文cyが取り得るシンボルを示す真理値表である。
上記したOAI21ゲートと同じ演算結果となっており、正しくOAI21ゲートの演算が出来たことが分かる。
【0112】
図9に示すAOIゲートのように、2値Gate Bootstrappingを用いてAOIゲートの演算を行う場合、AND回路部61、OR回路部62の後段で夫々1回、全体で2回Gate Bootstrappingを実行する必要がある。
図10に示すOAIゲートのように、2値Gate Bootstrappingを用いてOAIゲートの演算を行う場合、AND回路部71、OR回路部72の後段で夫々1回、全体で2回Gate Bootstrappingを実行する必要がある。
それに対して、本実施形態の暗号処理装置1では、AOIゲート、OAIゲートの演算において、第4演算部31に2値の暗号文を3つ入力し、Gate Bootstrappingを改良することにより、準同型演算処理の回数を全体で1回に減らしている。
その結果、暗号処理装置1では、準同型演算処理のほぼ全てを占めるGate Bootstrappingの回数を全体で1回に減らすることが出来る。したがって、
図9、
図10に示すAOIゲート、OAIゲートと比較して、暗号処理装置1は、計算処理時間を約50%削減することが出来る。
以上のように、完全準同型暗号に関するAOIゲート、OAIゲートの演算時間のほぼ全てをGate Bootstrappingが占めるので、暗号処理装置1は、Gate Bootstrappingの回数を削減することによって、AOIゲート、OAIゲートの演算を著しく高速化することが出来る。
【0113】
図13は、暗号処理装置が実行するAOIゲート、OAIゲートの演算処理の流れを説明するフローチャートである。
暗号処理装置1(受付部11)は、ステップS301において、演算対象の暗号文が入力されたか否かを受け付けたかを判定する。
暗号文が入力されたと判定した場合(ステップS301でYes)、暗号処理装置1(受付部11)は、ステップS302において、暗号文を受けつけ記憶部20に格納する。
次に、暗号処理装置1(第4演算部31)は、ステップS303において、暗号文を用いて準同型演算を行い、演算結果を記憶部20に格納する。
暗号処理装置1(第4算出部32)は、ステップS304において、演算結果に対してGate Bootstrappingを行い、平文として2値を有するAOIゲート、OAIゲートの出力D1、D2の暗号文dc1、dc2を算出し、記憶部20に格納する。
第4演算部31、第4算出部32による処理では以下の演算が行われる。
この演算は、平文として2値を有する3つの暗号文ca、cb、ccの入力を受け付け、2×ca+cb+cc+1/16からTLWE暗号文ctを算出し、これをGate Bootstrappingして、AOIゲート、OAIゲートの出力D1、D2の暗号文dc1、dc2を得るものである。
【0114】
例えば、入力される3つの暗号文が二進数のシンボル0又は1、つまり区間0±1/48または1/6±1/48で、第4演算部31がステップS103の演算を行うとき以下の演算を行う。
caが0、cbが0、ccが0
⇒2×0±1/48+0±1/48+0±1/48+1/16=1/16±1/16
caが0、cbが0、ccが1
⇒2×0±1/48+0±1/48+1/8±1/48+1/16=3/16±1/16
caが0、cbが1、ccが0
⇒2×0±1/48+1/8±1/48+0±1/48+1/16=3/16±1/16
caが0、cbが1、ccが1/4
⇒2×0±1/48+1/8±1/48+1/8±1/48+1/16=5/16±1/16
caが1、cbが0、ccが0
⇒2×1/8±1/48+0±1/48+0±1/48+1/16=5/16±1/16
caが1/4、cbが0、ccが1
⇒2×1/8±1/48+0±1/48+1/8±1/48+1/16=7/16±1/16
caが1、cbが1、ccが0
⇒2×1/8±1/48+0±1/48+1/8±1/48+1/16=7/16±1/16
caが1、cbが1、ccが1
⇒2×1/8±1/48+1/8±1/48+1/8±1/48+1/16=9/16±1/16
得られた暗号文ctは、平文として1/16、3/16、5/16、7/16、9/16の5つのいずれかを有し、平文に付加される誤差は±1/16の範囲に含まれる。
ステップS204の処理として第4算出部32がGate Bootstrappingを行うと、平文として0又は1/8を有し、平文に付加される誤差が±1/48の範囲内に含まれる暗号文dc1又はdc2の出力が得られる。これらを夫々AOIゲートの出力D1又はOAIゲートの出力D2とする。
【0115】
以上説明をしたように、TLWE暗号文の平文に付加する誤差範囲を小さくすることによって、準同型演算の回数を削減することができ、準同型演算後のGate Bootstrappingの回数も1回にまで削減することが出来る。
本明細書において主に説明している全加算器の高速化のみならず、平文に付加する誤差範囲を小さくすること適用することで上記のAOIゲートやOAIゲートの演算も著しく高速化することができ、これらを用いたCMOS回路のシミュレーションも高速化することが出来る。
【0116】
図14は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、
図19(a)に示すように、BlindRotate、SampleExtract、キースイッチングの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、
図14(b)に示すように、Gate Bootstrappingにおいてキースイッチングを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図14(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、キースイッチングの結果、LEVEL0のTLWE暗号文が出力される。
それに対して
図14(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にキースイッチングを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0117】
LEVEL0の暗号文は、N次の秘密鍵[s]で暗号化された円周群{T}上の要素のN次のベクトル[a]よりなっている。一方、SampleExtractの結果得られるLEVEL1の暗号文は、n次の秘密鍵[s’]で暗号化された円周群{T}上の要素のn次のベクトル[a']よりなっている。
LEVEL0の暗号文は、LWE問題の難易度となる係数の数(ベクトルの次数)がLEVEL1の暗号文よりも少ないので、LEVEL1と比較して準同型加算の計算量が少ない。
一方でLEVEL0の暗号文は、上記の実施例のように2値3入力の準同型演算を可能とするために平文に付加する許容誤差を小さくすると、セキュリティ強度が下がりやすい問題がある。LWE系暗号は、平文に付加する誤差によって安全性が担保されるからである。
TLWE暗号は、平文に付加する誤差が大きいほど、係数の数(ベクトルの次数)が多いほど計算(解読)が難しい。
裏を返すと、TLWE暗号は、平文に付加する誤差が小さいほど、係数の数(ベクトルの次数)が少ないほど、計算(解読)が容易となるのである。
誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0118】
実施例では、平文に付加する誤差を±1/24などと小さくすることによって2値3入力の準同型演算によってBlindRotateの回数を減らし、MUX演算を高速化する。平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、キースイッチングをGate Bootstrappingの先頭に移動し、係数の数(ベクトルの次数)が多く誤差の範囲を小さくしやすいLEVEL1の暗号文をGate Bootstrappingの入出力とすることが望ましい。そして、Gate Bootstrappingの先頭でLEVEL0に変換してから、最後にLEVEL0に戻さないようにする。
BlindRotateの所要時間は、入力となるTLWE暗号文の係数の数(ベクトルの次数)に比例する。よって、LEVEL1の暗号文を入力とした場合は、LEVEL0の暗号文を入力とした場合よりも、係数の数(ベクトルの次数)に比例してBlindRotateの所要時間が長くなる。
暗号文のセキュリティを確保するためにLEVEL1の暗号文をGate Bootstrappingの入力としても、キースイッチングで変換したLEVEL0のTLWE暗号文を入力としてBlindRotateを行うことで、所要時間の増加を避けることが出来る。
Gate Bootstrappingの入出力をLEVEL1のTLWE暗号文とする方法は、実施例のような2値3入力の準同型演算を行う場合に限らず、2値2入力の準同型演算の場合にも適用可能である。LEVEL0に戻さないことで、次段でのTLWE暗号文の計算でも同様に、安全に多値入力を行って高速に処理を行うことが出来る。
【0119】
また、平文に付加する誤差を±1/24などにすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
本実施形態の構成では、Gate Bootstrappingの処理時間の大半を占めるBlindRotateを1回で済ますことができるが、誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
例えば、平文に付加する誤差を±1/24以内と設定しても、その範囲外の誤差が付加される可能性が数パーセント存在する。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0120】
本実施形態では、平文に付加する誤差を±1/24と設定するようにシステムパラメータを変更することで、計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスよく解決することが出来る。
これらのバランスが最もとれるように、誤差範囲の重なりが一定値内に収まるように誤差となるようにシステムパラメータを設定することが必要である。
【0121】
なお、本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
演算の高速化を重視する場合には、平文に付加する誤差を±1/32の範囲内に設定することで2値4入力などの準同型演算も可能となる。
異なる計算結果が得られる可能性をある程度許容できるアプリケーションであれば、誤差範囲が重なる可能性はある程度許容しつつ、2値3入力として計算を高速化しながら、誤差を±1/16以内と大きくとってセキュリティを保つことも出来る。
例えば、平文に付加する誤差を±1/16以内と設定してある上記論文のパラメータを用いても、原理上、2値3入力の準同型演算で全加算器を高速化する本実施形態の構成は可能である。設定範囲から誤差がはみ出し、異なる計算結果が得られる確率が上がるのみである。
【0122】
[応用例]
暗号処理装置1が行う全加算器の高速化は、以下のように応用することが出来る。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベースから、特定のフィールドが一定の範囲内のものを集約したい場合(例えば、30~39歳の平均年収を求めたい場合など)を考える。
このとき、暗号処理装置1は暗号化されたデータベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
暗号化されたデータベースではインデックスを作成することができないため、データベース全体に対する比較と集約が必要である。
【0123】
暗号処理装置10は、全加算器を実現する第1演算部12、第2演算部13、第3演算部14、第1Bootstrapping部15、第2Bootstrapping部16、第3Bootstrapping部17の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
比較演算は、レコードとクエリの暗号文同士で減算を行うことであり、減算結果の正負が比較演算の等価となる。
暗号処理装置1はさらに、比較演算でクエリと一致したレコードに対する集約演算を行うことが出来る。
集約演算において、暗号処理装置1は、比較演算でクエリと一致したレコードを加算して合計を演算し、さらに除算を用いて平均値を求める。
このように、暗号化されたデータベースに対するクエリの処理には、暗号文を構成する整数同士の加算、減算、乗算、除算などの四則演算、や比較(比較は減算結果の正負と等価である)を行う必要がある。そして、処理には全加算器演算が多用されることが考えられる。そして、扱う整数のビット長が大きくなれば必要となる全加算器の数も増加する。
全加算器の演算を、上記に説明した論理演算の回数ひいてはGate Bootstrappingの回数を減らして高速化すことによって、クエリの実行時間を著しく低減することが可能となる。
四則演算とは、入力された暗号文を用いた順列を二進数で表記した際の各ビットの暗号文とみなした暗号化された数値同士に対して準同型な四則演算である。
【0124】
このようなデータベースの集約に限らず、整数同士の四則演算や比較は、暗号文を用いた様々なデータ処理で多用される。
他の例として、ファジー認証やファジー検索が挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、上記の暗号化されたデータベースにおける比較演算・集約演算と同様に、暗号化されたデータベースとクエリとの比較を行い、その際には、準同型暗号により暗号化されたデータで比較演算を行う必要がある。
特にファジー認証やファジー検索では、整数同士の加算、減算、乗算、除算や比較は処理時間の大半を占めるため、それらに用いられる全加算器の演算を高速化することによって処理時間の短縮に大きな効果を奏し得る。
【0125】
またファジー認証やファジー検索において比較を行う際、ユークリッド距離が用いられることが多い。ユークリッド距離を演算する際には2乗の演算が必要となる。従って、Bit-wise型の準同型暗号では、乗算を行う際にデータのビット長に対して、O(N2)の全加算器を演算しなければならない。また単純な減算による比較演算でも、O(N)の全加算器を演算する必要がある。そのため、全加算器の演算を高速化することによって、ファジー認証やファジー検索に要する処理時間を大幅に低減することが出来る。
【0126】
図15は、コンピュータ装置の一実施例を示すブロック図である。
図15を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0127】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、
図2、
図11における制御部10として機能する。
【0128】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HDD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、
図2における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、
図2、
図11における記憶部20として機能する。
【0129】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、第4Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
なおプログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0130】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0131】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、
図2において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、
図2において、入力部26として機能する。
【0132】
表示装置108は、各種情報を表示する。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0133】
1 暗号処理装置、10 制御部、11 受付部、12 第1演算部、13 第2演算部、14 第3演算部、15 第1Bootstrap部(算出部)、16 第2Bootstrap部(算出部)、17 第3Bootstrap部(算出部)、18 出力部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク