(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2022-12-02
(45)【発行日】2022-12-12
(54)【発明の名称】暗号処理装置、暗号処理方法、及び暗号処理プログラム
(51)【国際特許分類】
H04L 9/30 20060101AFI20221205BHJP
G09C 1/00 20060101ALI20221205BHJP
G06F 21/60 20130101ALI20221205BHJP
G06F 7/535 20060101ALI20221205BHJP
【FI】
H04L9/30 Z
G09C1/00 620Z
G06F21/60 320
G06F7/535
(21)【出願番号】P 2021192046
(22)【出願日】2021-11-26
【審査請求日】2022-07-27
(73)【特許権者】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
【審査官】中里 裕正
(56)【参考文献】
【文献】特開2017-223822(JP,A)
【文献】特表2019-517684(JP,A)
【文献】特開2020-53860(JP,A)
【文献】CHATTERJEE, A. and SENGUPTA, I.,Translating Algorithms to Handle Fully Homomorphic Encrypted Data on Cloud,IEEE Transactions on Cloud Computing,2018年,Vol.6 No.1,pp.287-300
【文献】BABENKO, M. and GOLIMBLEVSKAIA, E.,Euclidean Division Method for the Homomorphic Scheme CKKS,Proceedings of the 2021 IEEE Conference of Russian Young Researchers in Electrical and Electronic Engineering (ElConRus),2021年01月,pp.217-220
【文献】OKADA, H., KIYOMOTO, S. and CID, C.,Integer-Wise Functional Bootstrapping on TFHE: Applications in Secure Integer Arithmetics,Information [online],MDPI,2021年07月26日,2021,12,297,pp.1-18,<URL:https://doi.org/10.3390/info12080297>
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/30
G09C 1/00
G06F 21/60
G06F 7/535
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、前記減算結果の正負を判定する二値の第3暗号文を算出し、
前記第1暗号文から、前記第3暗号文と前記第2暗号文の準同型乗算結果を準同型減算して、新たな暗号文を算出する演算処理を行い、
前記演算処理の演算結果を新たな前記第1暗号文として新たな前記第3暗号文を算出し、新たな前記第1暗号文と、前記第2暗号文と新たな前記第3暗号文とを用いた前記演算処理を繰り返し実行し、
前記演算処理を全体で所定回繰り返し実行したときに算出した新たな暗号文を、前記第1暗号文に対する前記第2暗号文の剰余算の結果として出力する、
ことを特徴とする暗号処理装置。
【請求項2】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、前記減算結果の正負を判定する二値の第3暗号文を算出し、
前記第1暗号文から、前記第3暗号文と前記第2暗号文の準同型乗算結果を準同型減算して、新たな暗号文を算出する演算処理を行い、
前記演算処理の演算結果を新たな前記第1暗号文として新たな前記第3暗号文を算出し、新たな前記第1暗号文と、前記第2暗号文と新たな前記第3暗号文とを用いた前記演算処理を繰り返し実行し、
前記第3暗号文を算出するごとに、所定の初期値に対して前記第3暗号文を累加して新たな暗号文を算出し、
前記演算処理を全体で前記所定回繰り返した時点で前記第3暗号文を累加した新たな暗号文を、前記第1暗号文に対する前記第2暗号文の除算の結果として出力する、
ことを特徴とする暗号処理装置。
【請求項3】
請求項2に記載の暗号処理装置において、
前記演算処理を全体で繰り返す回数は、ログオーダーの回数であることを特徴とする暗号処理装置。
【請求項4】
請求項1又は2に記載の暗号処理装置において、
前記演算処理を全体で繰り返す回数は、前記暗号文が取り得る整数の最大値であることを特徴とする暗号処理装置。
【請求項5】
請求項1乃至4の何れか一項に記載の暗号処理装置において、
暗号文に対して所定の演算に係る準同型演算を行う演算部と、
暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部と、を備え、
前記演算部による準同型演算の結果に対して、所定の多項式を用いて新たな暗号文を算出するまえに暗号文の係数の数を削減する処理を行う、
ことを特徴とする暗号処理装置。
【請求項6】
請求項1乃至5の何れか一項に記載の暗号処理装置において、
前記第1の暗号文は、前記第1の整数を区間毎に所定数に分割した結果を夫々暗号化した暗号文を有し、
前記第2の暗号文は、前記第2の整数を区間毎に前記所定数に分割した結果を夫々暗号化した暗号文を有し、
前記所定の演算を実行するときに、前記第1の暗号文と前記第2の暗号文との対応する暗号文同士を準同型演算して多倍長演算を実行する、
ことを特徴とする暗号処理装置。
【請求項7】
請求項1乃至6の何れか一項に記載の暗号処理装置において、
前記所定の演算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
ことを特徴とする暗号処理装置。
【請求項8】
請求項1乃至7の何れか一項に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項9】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、前記減算結果の正負を判定する二値の第3暗号文を算出し、
前記第1暗号文から、前記第3暗号文と前記第2暗号文の準同型乗算結果を準同型減算して新たな暗号文を算出する演算処理を行い、
前記演算処理の演算結果を新たな前記第1暗号文として、新たな前記第3暗号文を算出し、新たな新たな前記第1暗号文と、前記第2暗号文と、新たな前記第3暗号文と、を用いた前記演算処理を繰り返し実行し、
前記演算処理を全体で所定回繰り返し実行したときに出力した新たな暗号文を、前記第1暗号文に対する前記第2暗号文の除算又は剰余算の結果として出力する、
ことを特徴とする暗号処理方法。
【請求項10】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、前記減算結果の正負を判定する二値の第3暗号文を算出し、
前記第1暗号文から、前記第3暗号文と前記第2暗号文の準同型乗算結果を準同型減算して新たな暗号文を算出する演算処理を行い、
前記演算処理の演算結果を新たな前記第1暗号文として、新たな前記第3暗号文を算出し、新たな新たな前記第1暗号文と、前記第2暗号文と、新たな前記第3暗号文と、を用いた前記演算処理を繰り返し実行し、
前記演算処理を全体で所定回繰り返し実行したときに出力した新たな暗号文を、前記第1暗号文に対する前記第2暗号文の除算又は剰余算の結果として出力する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【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)である。
準同型暗号には、平文として二値を有し論理演算をベースとするBit-wise型の準同型暗号と、平文として整数を丸ごと一暗号文とするInteger-wise型の準同型暗号と、があり、非特許文献1に示されるTFHEはBit-wise型である。
なおTFHEの平文は円周群に対応づけられた0~1の実数である。よって、円周群の値域0~1を区切った区間を順番に整数と対応付けることにより、整数を平文として有するInteger-wise型の準同型暗号として応用することが出来る(非特許文献2参照)。
【先行技術文献】
【特許文献】
【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
【文献】Integerwise Functional Bootstrapping on TFHE, 2020, Hiroki Okada, Shinsaku Kiyomoto, and Carlos Cid
【発明の概要】
【発明が解決しようとする課題】
【0005】
Integer-wiseでの四則演算が可能な準同型暗号としてTFHEを利用することができれば、1ビットずつ計算するよりも効率的に処理を行うことができる。
なおTFHEで用いるTLWE暗号文は、円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。
一方、乗算に関しては、円周群に乗法演算が定義されていないため自明とは言えない。円周群はZ加群であるため、円周群上での整数倍のみが定義される。従って、区間で区切った数を法とする逆元を乗算することで平文に対する逆元を求めうる。しかしながら、元の値が割りきれる値である保証がない限り逆元と除算は一致しない。すなわち、余りを有する除算を行うことが出来ない。また、暗号文同士の除算も剰余算も提案されていない。
本発明は、一側面としてInteger-wise型TFHEの四則演算をより完全に実現することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、前記減算結果の正負を判定する二値の第3暗号文を算出し、前記第1暗号文から、前記第3暗号文と前記第2暗号文の準同型乗算結果を準同型減算して、新たな暗号文を算出する演算処理を行い、前記演算処理の演算結果を新たな前記第1暗号文として新たな前記第3暗号文を算出し、新たな前記第1暗号文と、前記第2暗号文と新たな前記第3暗号文とを用いた前記演算処理を、繰り返し実行し、前記演算処理を全体で所定回繰り返し実行したときに算出した新たな暗号文を、前記第1暗号文に対する前記第2暗号文の除算又は剰余算の結果として出力する、暗号処理装置を特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、Integer-wise型TFHEの四則演算をより完全に実現することが出来る。
【図面の簡単な説明】
【0008】
【
図1】本実施形態の暗号処理装置の機能構成を説明する図である。
【
図2】
図1の機能構成に基づく演算プロセスを詳しく説明する図である。
【
図3】TLWE暗号が平文として有する円周群を説明するイメージ図である。
【
図4】2値Gate Bootstrappingの動作イメージ図である。
【
図5】Integer-wise型に適用したTFHEを説明する図である。
【
図6】除算・剰余算処理を説明するフローチャートである。
【
図7】変形例に係る除算処理を説明するフローチャートである。
【
図8】多倍長整数の除算・剰余算を行う暗号処理装置の機能構成を説明する図である。
【
図9】
図8の機能構成に基づく演算プロセスを詳しく説明する図である。
【
図10】暗号処理装置が実行するスカラ除算処理の流れを示すフローチャートである。
【
図11】暗号処理装置が実行するスカラ剰余算処理の流れを示すフローチャートである。
【
図12】暗号処理装置が実行する多倍長演算処理の流れを示すフローチャートである。
【
図13】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
【
図14】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の論理演算のことを指すものとする。
【0010】
図1は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、Bootstrapping部(算出部)15と、出力部18と、を備えている。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第1演算部12は、受付部11が受け付けた入力暗号文に対して、第1準同型演算を行う。
第2演算部13は、第1Bootstrapping部15から出力される暗号文と、入力暗号文に対して、第2準同型演算を行う。
第3演算部14は、第1Bootstrapping部15から出力される暗号文に対して、第3準同型演算を行う。
第1演算部12、第2演算部13と、第3演算部14とは下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部15は、第1演算部12、第2演算部13、及び第3演算部14から出力される、演算結果の少なくとも一方に対して、下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
第1演算部12、第2演算部13、第3演算部14、第1Bootstrapping部15の少なくとも一つが、ハードウェアで実現されてもよい。
【0012】
出力部18は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、暗号文に対する演算で用いられる一時ファイルや一時データ、出力暗号文を格納することが出来る。
また、記憶部20には、暗号化された暗号化データベース60を格納することが出来る。
通信部25は、暗号処理装置1をネットワークに接続し、外部装置との通信を可能にする。
記憶部20に暗号化された暗号化データベース60を格納し、通信部25を備えることにより、暗号処理装置1は、データベースサーバとして機能することが出来る。
この場合、暗号処理装置1は、外部装置としての端末装置から、暗号化されたクエリを受け付け、暗号化された暗号化データベース60に対する検索を行い、暗号化された検索結果を端末装置に応答することが出来る。
入力部26は、暗号処理装置1に対して、演算処理対象の暗号文や、暗号化データベース60に対するクエリを入力する。
【0013】
図2は、
図1の機能構成に基づく演算プロセスを詳しく説明する図である。
図2に示す構成では、上記論文で提示されたGate Bootstrappingを使用する。上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
暗号処理装置1は、TLWE暗号文cx(被除数)、TLWE暗号文cy(除数)を第1演算部12に入力してcx-cyの準同型演算(減算)を行い、TLWE暗号文cdを得る。暗号処理装置1は、TLWE暗号文cdを第1Bootstrapping部15に入力して第1Gate Bootstrappingを行い、cx-cyの正負を判定する二進数のTLWE暗号文ccを出力する。
暗号処理装置1は、第2演算部13において、暗号文cc、暗号文cx、暗号文cyを入力してcx-cc×cyを演算し、剰余のTLWE暗号文ctを出力する。cc×cyの乗算は、後述するようにGate Bootstrappingを伴う二進数×整数の乗算であり、バイナリ演算部が別途行ってもよい。
【0014】
暗号処理装置1は、剰余の暗号文ctを新たな暗号文cx(被除数)として、暗号文ccの算出、cx-cc×cyの演算を繰り返す。暗号文が取り得る最大の整数値である(t/2)-1回分繰り返した時の暗号文ctを、最終的な剰余(剰余算の結果)として出力する。
暗号処理装置1は、第3演算部14において、暗号文ccを用いてcm(初期値)+ccを演算して暗号文cm’を得る。
暗号処理装置1は、暗号文ccを繰り返し算出する度に、暗号cm’を新たな暗号文cmとしてcm+ccを演算する。
暗号文が取り得る最大の整数値である(t/2)-1回分繰り返した時の暗号文cm’を最終的な商(除算の結果)として出力する。
【0015】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0016】
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0017】
図3は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、
図3に示す円周群{T}の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0018】
[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暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
【0019】
この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で誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0020】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φsにかけると、φs(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0021】
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)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0022】
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](Xn+1)+T[X]のかたちに分解し、剰余部分だけを取り出して集めると、これもまた「環」であるため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(Xn+1)と表す。
【0023】
多項式環の剰余環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-μとなって全ての項の係数がマイナスとなる。
【0024】
さらに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)が有する性質を利用して完全準同型暗号を実現する。
【0025】
[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)とする。
【0026】
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)を定めたものが、復号関数として機能する。
【0027】
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、
図3の円周群{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のべき乗の和の形に分解する。
【0028】
円周群{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]
というベクトルになる。
【0029】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文d’が得られる。下位ビットは四捨五入をしてまるめられている。
【0030】
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を構成する。
【0031】
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と呼ぶ。
【0032】
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)は、平文の絶対値の大きさをシステムパラメータで制約することができるので、この後の演算も含めて十分小さくなるように設定する。
【0033】
そうするとφ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の暗号文を計算することができるが、どちらを選択したかは分からない。
【0034】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)キースイッチングから構成される。
【0035】
図4は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、平文とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図3の円周群{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の範囲のいずれかである。
【0036】
(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
を用意する。
【0037】
平文μ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の累乗が自然に定義できる。
【0038】
そうすると、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)とみなすことが出来る。
【0039】
(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を得るための処理である。
【0040】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0041】
これに対して下記の演算を行い、
を得る。
「多項式環の剰余環」であるので(X
n+1)で割った余りを求めると、
が得られる。
【0042】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0043】
つまり、(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が得られた。
【0044】
(3)キースイッチング
(2)のSampleExtractで得られたTLWE暗号文csは、秘密鍵[s]ではなく、秘密鍵[s']で暗号化されている
従って、TLWE暗号文csを復号することなく、TLWE暗号文csの鍵を秘密鍵[s]に差し替え、秘密鍵[s]で暗号化された状態に戻す必要がある。
そのためキースイッチングの手法を説明する。
TFHEで用いる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に対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【0045】
ここで得られた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演算ができるようになり、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0046】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の整数化で加わる誤差、CMuxで加わる誤差、キースイッチングで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0047】
上記したように、TFHEは0もしくは非0を平文として持ち、論理演算を行うBit-wise型の準同型暗号である。ただし
図3で説明したように平文は円周群{T}に対応づけられた0~1の実数である。従って、円周群{T}を区切った区間を順番に整数と対応付けることにより、整数を平文として持つInteger-wise型の準同型暗号として応用することが出来る。
TFHEで用いるTLWE暗号文は円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。
以下に説明する方法で、さらに除算と剰余算が可能となる。除算と剰余算が可能となることで、すでに公知である加算と一部の乗算と併せてTFHEをInteger-wise型での四則演算が可能な準同型暗号として利用することができる。Bit-wise型のTFHEによって1ビットずつ計算するよりも効率的に処理を行うことができる。
【0048】
図5は、Integer-wise型に適用したTFHEを説明する図である。
図5に示すように、円周群{T}に対応づけた0~1の値域をt個に分割する。TLWE暗号文において、平文が取り得る値は、値域0~1を分割したt個の値-(t/2)から(t/2)-1であり、(t/2)-1が1つのTLWE暗号文に記録できる整数の最大値である。
図5に例示するように、t=10として0~1の値域を10個に分割する場合には、暗号文は-5、-4、-3、-2、-1、0、1、2、3、4の整数を表現することが出来る。
この場合、これらの整数値は、円周群{T}の0~1の値域をt=10個に区切った-4/t、-3/t、-2/t、-1/t、-0/t、4/t、3/t、2/t、1/t、0/tの区間に割り当てられている。
図5に示すように、円周群{T}上の0(1)は、-1/2t~1/2tの領域の範囲内にある。円周群{T}上における暗号文の平文は、必要に応じて例えば1/2tに基づいたオフセットを加算あるいは減算して領域内の位置(円周群{T}上の位置)を調整することが出来る。
tの値を大きくして円周群{T}を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできるが、細かく分割しすぎると平文に付加する誤差範囲が小さくなりすぎ、暗号の強度が低下するという問題がある。この点については後に説明する。
【0049】
本実施形態の暗号処理装置1は、以下に示す方法によって、Integer-wise型TFHEの除算、剰余算を実現する。
暗号処理装置1は、上記論文で提示されるGate Bootstrappingを用いて、被除数(割られる数)から除数(割る数)を減算した結果の正負を判定する暗号文を生成する。
暗号処理装置1は、生成した正負を判定する暗号文(後述する暗号文cc)を用いて三項演算子Muxを構成し、除算及び剰余算を実現する。
【0050】
上記のように、暗号処理装置1は、円周群{T}の値域0~1を分割する個数tを設定する。(t/2)-1が、1つのTLWE暗号文に記録できる整数の最大値となる。
次に、暗号処理装置1は、TFHEのシステムパラメータを設定する。
手順は上記論文と変わらないが、TRLWE暗号の多項式(テストベクタとしての多項式F(X))の次数nはtの倍数が好ましい。また、Gate Bootstrapping後に得られる暗号文において、平文に付加される誤差の範囲が±1/2t未満となるようにシステムパラメータを設定する。
被除数(割られる数)のTLWE暗号文cxと、除数(割る数)のTLWE暗号文cyがあるとする。
TLWE暗号文cxは、秘密鍵がなければ知ることのできない整数xに対応する実数x/tを平文として有する。
TLWE暗号文cyは、秘密鍵がなければ知ることのできない整数yに対応する実数y/tを平文として有する。
【0051】
(1)暗号処理装置1は、除算の演算結果である商に対応する暗号文cmに、整数0に対応する自明な暗号文(0,1/(2t))を代入する。なお、ここで1/(2t)は円周群を分割したスライスの中央を設定するためのオフセットであり、実装によって異なる値でもよい。
暗号処理装置1(第1演算部12)は、準同型演算cx-cyを行い、TLWE暗号文cdを得る。
x/t-y/tからTLWE暗号文cdは、平文として、(x-y)/tを有する。
【0052】
(2)暗号処理装置1(第1Bootstrapping部15)は、このTLWE暗号文cdを入力としてGate Bootstrappingを行う。
上記論文では、テストベクタF(X)=μXn-1+μXn-2+…μX+μにXn/2を乗じてテストベクタ多項式を算出しているが、本実施形態では、テストベクタF(X)をそのままテストベクタ多項式としてBlindRotateを行う。係数μ=1/(2t)とする。
上記論文通りにSampleExtract及びキースイッチングを行うと、x≧y(x-yが0又は正)の場合は1/(2t)が得られ、x<y(x-yが負)の場合は-1/(2t)が得られる。
これに自明な暗号文(0,1/(2t))を加算して、暗号処理装置1は、x-yの正負に対応するTLWE暗号文ccを得る。
TLWE暗号文ccは、平文として0又は1/tの2値を有し、x≧y(x-yが0又は正)の場合、平文として1/t(シンボル1)を有し、x<y(x-yが負)の場合、平文として0(シンボル0)を有する。
【0053】
(3)暗号処理装置1(第2演算部13)は、ct=cx-cc×cyを計算する。整数の暗号文cyと二進数の暗号文ccの乗算(cc×cy)は、下記に説明するバイナリ乗算部による別途の処理によって行うことが出来る。
TLWE暗号文ctは、TLWE暗号文cxからTLWE暗号文cyを準同型減算した余りである。
整数の暗号文cyと二進数の暗号文ccとの乗算結果は、ccがシンボル1の場合には暗号文cyがそのまま得られ、ccがシンボル0の場合は0である。
よって、暗号文ctを計算した結果、
x≧yの場合(ccがシンボル1)には、
ct=cx-cc×cy=cx-cy
となり、
x<yの場合(ccがシンボル0)には、
ct=cx-cc×cy=cx-0=cxとなる。
(4)暗号処理装置1は、cm’=cm+ccを計算することで、ccの値を累加する。
暗号文ccは、平文が1/tのとき二進数のシンボル1であり、平文が0のとき二進数でシンボル0である。x≧yの計算結果に応じてccの値を累加していくことで、商としてcm’の値を計算することが出来る。
【0054】
暗号処理装置1は、TLWE暗号文cxにTLWE暗号文ctを代入し、TLWE暗号文cmにTLWE暗号文cm’を代入する。
TLWE暗号文cxにTLWE暗号文ctを代入することにより、一度TLWE暗号文cyを減算したあとの値が新たなTLWE暗号文cxの値となる。TLWE暗号文cmにTLWE暗号文cm’を代入することで、TLWE暗号文cm’が新たなTLWE暗号文cmの値になる。
そして、暗号処理装置1は、上記した
(1)cx-cyによるTLWE暗号文cdの算出
(2)TLWE暗号文cdを入力としたGate BootstrappingによるTLWE暗号文ccの算出
(3)cx-cc×cyによるTLWE暗号文ctの算出
(4)cm+ccによるTLWE暗号文cm’の算出
を全体で(t/2)-1回繰り返す。
μ=-1/(2t)として、ct=cd+cc×cyとしても同様の結果が得られる。
【0055】
通常の平文に関しては、被除数から除数を可能な限り減算をし続けた回数と、減算の結果の端数と、を夫々除算の結果(商)、剰余算の結果(余り)として求め得ることが出来る。しかし暗号文に関しては、減算の結果も暗号化されているため、被除数から除数を減算し続けて減算が出来なくなったか否か判定をすることができず、減算が出来なくなったときに減算をやめるという分岐処理も出来ない。
本実施形態では、上記したように、cx-cyの演算結果に基づいてcx-cyの正負を判定する二進数のTLWE暗号文ccを出力する。
cx≧cyである間は、暗号文ccはシンボル1であり、減算の繰り返し毎にcx(あるいは代入されたct)からcyが減算されていく。
減算を続けていくことでcx(ct)<cyとなると暗号文cyはシンボル0となり、繰り返し毎にcx(あるいは代入されたct)からccが減算されなくなる。暗号文ccの値は復号しない限りは分からないため、cx≧cyであるか、cx(ct)<cyであるか判別が出来ない。
よって暗号処理装置1は、暗号文が取り得る最大の整数値である(t/2)-1回分繰り返す。
また暗号処理装置1は、暗号文ccを算出する度に加算する。上記のように、cx≧cyである間は、暗号文ccはシンボル1であり、cx(ct)<cのときにはシンボル0である。
cx≧cyである間でのシンボル1だけが加算され、シンボル0は実質的に加算されないので、ccを(t/2)-1回分加算することで、cx≧cyである間にcxからcyを引いた回数(除算結果)が得られる。
この方法によれば、暗号化したままでは知ることが出来ないcx-cyの減算が出来るか否かの判定や分岐をすることなく、(t/2)-1回分、規定の処理を繰り返すことのみで、暗号文同士の除算、剰余算を行うことが出来る。
以上のように、本実施形態の暗号処理装置1は、上記論文で提示されたGate Bootstrappingによって減算結果の正負を判定する暗号文を生成する。それを用いて、暗号文同士を乗算する方法を適用することにより、三項演算子Muxを構成し、除算を実現する。
【0056】
図6は、除算・剰余算処理を説明するフローチャートである。
暗号処理装置1は、ステップS101において、cm=(0,1/(2t))、すなわち整数0に対応する自明な暗号文を代入する。また、i=1とする。
暗号処理装置1(第1演算部12)は、ステップS102において、cx-cyを演算して、TLWE暗号文cdを得る。
暗号処理装置1(第1演算部15)は、ステップS103において、TLWE暗号文cdを入力としたGate Bootstrappingを行い、TLWE暗号文ccを得る。
暗号処理装置1(第2演算部13)は、ステップS104において、cx-cc×cyを計算し、TLWE暗号文ctを得る。cc×cyは、別途バイナリ演算部が演算することが出来る。
暗号処理装置1(第3演算部14)は、ステップS105において、cm+ccを演算し、TLWE暗号文cm’を得る。
暗号処理装置1は、ステップS106において、変数iに1を加算してインクリメントする。
暗号処理装置1は、ステップS107において、ステップS102~S105の処理を(t/2)-1回繰り返したか(変数iの値が(t/2)-1回となったか)否かを判定する。
(t/2)-1回繰り返していないと判定した場合(ステップS107でNo)、暗号処理装置1は、ステップS108において、cmにcm’を代入し、cxにcx’を代入し、ステップS102~S106の処理を繰り返す。
(t/2)-1回繰り返したと判定した場合(ステップS107でYes)、暗号処理装置1は、ステップS109において、そのときのcm’の値(第3演算部14の出力値)を(商)に対応する暗号文して出力する。また、暗号処理装置1は、そのときの暗号文ct(第2演算部13の出力値)を剰余の値(余り)に対応する暗号文として出力する。
以上の処理によって、Integer-wise型のTLWE暗号文同士の除算、剰余算を実行することが出来た。
【0057】
暗号文同士の除算を実現する他の例を説明する。この例によれば、商が比として算出され、除算と剰余算を行う
図6の例に比べて高速に除算を行うことが出来る。
図6の場合と同様に、被除数xの暗号文を暗号文cx、除数yの暗号文を暗号文cyとする。x/yに対応する準同型演算結果の暗号文を暗号文cfとする。
暗号処理装置1は、暗号文cfを初期化し、cf=(0,1/(2t))とする。(0,1/(2t))は、1/(2t)を平文として有する自明な暗号文である。1/(2t)は円周群を分割したスライスの中央を設定するためのオフセットであり、実装によって異なる値でもよい。
【0058】
(1)暗号処理装置1は、暗号文cx、暗号文cyについて準同型演算cx-cyを計算し、暗号文cdを得る。
(2)暗号処理装置1は、暗号文cdに対してGate Bootstrappingを行い、cx-cyの正負に応じて1/t又は0となる新たな暗号文ccを算出する。Gate Bootstrappingでは、上記論文通りにSampleExtract及びキースイッチングを行うと、x≧y(x-yが0又は正)の場合は1/(2t)が得られ、x<y(x-yが負)の場合は-1/(2t)が得られる。
これに自明な暗号文(0,1/(2t))を加算して、暗号処理装置1は、x-yの正負に対応するTLWE暗号文ccを得る。
TLWE暗号文ccは、平文として0又は1/tの2値を有し、x≧y(x-yが0又は正)の場合、平文として1/t(シンボル1)を有し、x<y(x-yが負)の場合、平文として0(シンボル0)を有する。
ここまでは、除算と剰余算を行う
図5の処理と同じである。
(3)暗号処理装置1は、cx=cx-cc×cyを演算する。
整数の暗号文cyと二進数の暗号文ccの乗算(cy×cc)は、下記に説明するバイナリ乗算部による別途の処理によって行うことが出来る。
(4)暗号処理装置1は、cf=cf×2+ccを演算する。
(5)暗号処理装置1は、暗号文cxを整数のスカラ倍で2倍する
(6)暗号処理装置1は、i=i+1を演算する。
(1)~(6)の処理をm=log_2(t)回繰り返すと、暗号文cfには上位ビットから順に値が格納され、xとyの比fに対応するTLWE暗号文cfが得られる。
【0059】
より詳しく説明する。TLWE暗号文ccは、平文として0又は1/tの2値を有し、cx≧cy(cx-cyが0又は正)の場合、平文として1/t(シンボル1)を有し、cy<cx(cx-cyが負)の場合、平文として0(シンボル0)を有する。
整数の暗号文cyと二進数の暗号文ccとの乗算は、下記に説明する方法によってバイナリ演算部によって行うことができ、暗号文ccがシンボル1の場合には、cc×cyの結果、暗号文cyがそのまま得られ、暗号文ccがシンボル0の場合は、cc×cyの結果0が得られる。
よって、上記(1)のcx-cyに基づいて(2)で暗号文ccを計算し、(3)でcx=cx-cc×cyを計算した結果、cx≧cyである(ccがシンボル1である)場合は、cx=cx-cc×cy(cxからcc×cyが減算され続ける)、それとともにcf=cf×2+ccとなって暗号文cfが倍になりながら、適宜下位ビットを立てていく。
このような新たな暗号文cc、新たな暗号文cx、新たな暗号文cfの算出を、m=log_2(t)回繰り返した結果得られるTLWE暗号文cfは、平文として、x/yに対応する
を有する。
【0060】
平文に関しては、被除数から除数を可能な限り減算をし続けた回数を除算の結果として求め得ることが出来る。しかし暗号文に関しては、減算の結果も暗号化されているため、被除数から除数を減算し続けて減算が出来なくなったか否か判定をすることができず、減算が出来なくなったときに減算をやめるという分岐処理も出来ない。
本実施形態では、上記したように、cx-cyの演算結果に基づいてcx-cyの正負を判定する二進数のTLWE暗号文ccを出力する。
上記したが、cx≧cyである間は、暗号文ccはシンボル1であり、減算の繰り返し毎にcxからcyが減算されていく。減算を続けていくことでcx<cyとなると暗号文ccはシンボル0となり、繰り返し毎にcxからcyが減算されなくなる。暗号文ccの値は復号しない限りは分からないため、cx≧cyであるか、cy<cxであるか判別が出来ない。
それに対して、暗号処理装置1は、(1)~(6)をm=log_2(t)だけ繰り返す。1つのTLWE暗号文に記録できる整数の最大値は√t-1であったが、暗号文が取り得る整数値の個数はm=log_2(t)であり、mは2をm乗するとtになる値である。
【0061】
暗号処理装置1は、暗号文ccを算出する度に暗号文cfに加算する。上記のように、cx≧cyである間は、暗号文ccはシンボル1であり、cx<cyのときにはシンボル0である。
cx≧cyである間でのシンボル1だけが加算され、シンボル0は実質的に加算されず、かつ毎周倍になっていくので、ccをlog_2(t)回分加算することで、cx≧cyである間にcxからcyを引いた回数(除算結果)が得られる。
この方法によれば、暗号化したままでは知ることが出来ないcx-cyの減算が出来るか否かの判定や分岐をすることなく、log_2(t)回分、規定の処理を繰り返すことで、暗号分同士の除算を行うことが出来る。
【0062】
図7は、変形例に係る除算処理を説明するフローチャートである。
暗号処理装置1は、ステップS151において、cf=(0,1/(2t))、すなわち整数0に対応する自明な暗号文を代入する。また、i=1とする。
暗号処理装置1は、ステップS152において、cx-cyを演算して、TLWE暗号文cdを得る。
暗号処理装置1は、ステップS153において、TLWE暗号文cdを入力としたGate Bootstrappingを行い、TLWE暗号文ccを得る。
暗号処理装置1は、ステップS154において、cx=cx-cc×cyを計算する。cc×cyは、別途バイナリ演算部が演算することが出来る。
暗号処理装置1は、ステップS155において、cf=cf×2+ccを演算する。
暗号処理装置1は、ステップS156において、cx=cx×2を演算する。
暗号処理装置1は、ステップS157において、変数iに1を加算してインクリメントする。
暗号処理装置1は、ステップS158において、ステップS152~S157の処理をlog_2(t)回繰り返したか(変数iの値がlog_2(t)回となったか)否かを判定する。
log_2(t)回繰り返していないと判定した場合(ステップS158でNo)、暗号処理装置1は、ステップS152~S157の処理を繰り返す。
log_2(t)回繰り返したと判定した場合(ステップS158でYes)、暗号処理装置1は、ステップS159において、そのときのcfの値を商に対応する暗号文して出力する。
以上の処理によって、Integer-wise型のTLWE暗号文同士の除算を実行することが出来た。
【0063】
[整数と二進数の暗号文の乗算(バイナリ乗算)]
バイナリ乗算部による整数の暗号文cyと二進数の暗号文ccとの乗算は、例えば以下のように行うことが出来る。
図5に示したように本実施形態では、円周群{T}に対応づけた0~1の値域をt個に分割しており、暗号文cyは0~(t/2)-1の暗号文である。
上記では、暗号文ccは、平文が1/tのとき二進数のシンボル1であり、平文が0のとき二進数でシンボル0であると説明した。
暗号文ccをt/2倍して自明な暗号文(0,1/2)を加算することで、シンボルを反転した暗号文cc’を得ることが出来る。説明のために特に記載するが、暗号文cc’の算出は必ずしも必要な処理ではなく、暗号文ccのままバイナリ乗算を行うことも出来る。シンボル0、1に対応する二値を取り得るという点で暗号文cc’と暗号文ccは同義の暗号文である。
暗号文ccは、平文が1/tのとき、t/2倍をした上で(0,1/2)を加算すると、(1/t)×(t/2)+1/2=1/2+1/2=1(0)となる。
暗号文ccは、平文が0のとき、t/2倍をした上で(0,1/2)を加算すると、0×(t/2)+1/2=0+1/2=1/2となる。
このようにして得た暗号文cc’は、平文が0のときにシンボル1となり、平文が1/2のときにシンボル0となる。
下記では、平文として整数0又は整数t/2を有する暗号文に暗号文cc’を対応付けて説明する。tは偶数である。
上記に算出した暗号文cc’の平文0を整数0に対応づけ、暗号文cc’の平文1/2を下記の整数t/2に対応づける。
平文が整数0のとき二進数のシンボル1であり、平文が整数t/2のとき二進数のシンボル0である暗号文cc’として暗号文ccを説明する。
整数の暗号文cyと二進数の暗号文cc’の乗算を行うために、Gate Bootstrappingの要素として、2つの一変数関数F
idとF
halfを用いる。
暗号化された整数値に対する一変数関数を演算するには、上記論文(非特許文献1)のGate Bootstrappingを拡張した手法を用いることが出来る。この手法は、論文「Bootstrapping in FHEW-like Cryptosystems, Daniele Micciancio and Yuriy Polyakov Duality Technologies February 23,2020」に記載されている。開示されている手法では、テストベクタの係数を一定の定数μにせず関数の結果を設定することで、TLWE暗号文の値によって異なる結果を得る。
一変数関数F
idは、整数0~(t/2)-1の暗号文cyの入力に対して、同じ整数0~(t/2)-1の暗号文を出力する。
BlindRotateと同時に一変数関数f
idを実行するためのテストベクタT
id(X)は、0次からn-1次の各次数の係数として、
を設定する。
一変数関数f
halfは、整数0~(t/2)-1の暗号文cyの入力に対して、平文整数の値が偶数であれば、cy/2を算出し、それ以外では-(cy+1)/2-((t/2)-1)/2を算出する関数である。
BlindRotateと同時に一変数関数f
halfを実行するためのテストベクタT
half(X)は、0次からn-1次の各次数の係数として、
を設定する。
まず暗号処理装置1は、二値の暗号文であるTLWE暗号文cc’と、整数の暗号文であるTLWE暗号文cyと、の準同型演算を行う。
暗号処理装置1は、準同型演算の結果を入力として、上記テストベクタ多項式T
id(X)を用いてGate Bootstrappingを行い、一時暗号文c
tmpを得る。
TLWE暗号文cc’がt/2(シンボル0、暗号文ccの平文0に対応)の暗号文である場合、cc’+cyの結果はy/t+1/2の暗号文であり、TLWE暗号文cyの平文は、原点に対して対称な位置に回転する(1/2は円周群の半周分)。テストベクタ多項式T
id(X)を用いたGate Bootstrappingのあとの暗号文c
tmpの平文は、左右対称の位置に移動する。暗号文c
tmpは暗号文cyの符号を反転させた暗号文である。
TLWE暗号文cc’が0(シンボル1、暗号文ccの平文1/tに対応)の暗号文である場合、cc’+cyの結果はy/tの暗号文であり、Bootstrappingのあとの暗号文c
tmpは暗号文cyの平文と同じ平文のままである。
そこで暗号処理装置1は暗号文cy+暗号文c
tmpの準同型演算を行う。
TLWE暗号文cc’が0(シンボル1)の暗号文である場合、暗号文cy+暗号文c
tmpの準同型演算結果は、暗号文cy+暗号文cyである。
TLWE暗号文cc’がt/2(シンボル0)の暗号文である場合、暗号文cy+暗号文c
tmpの準同型演算結果は、平文が0となる暗号文c
0である。
暗号処理装置1は、準同型加算の結果を入力として、上記テストベクタ多項式T
half(X)を用いてGate Bootstrappingを行う。Gate Bootstrappingの結果、暗号文cy+暗号文cyは暗号文cyに変換され、暗号文c
0は暗号文c
0のままである。
整数の暗号文cyに乗算するTLWE暗号文cc’が0の暗号文である場合に、Gate Bootstrappingにおいて暗号文cyが得られ、TLWE暗号文cc’がt/2の暗号文である場合に暗号文c
0が得られる。
以上のようにすることで、暗号処理装置1は、整数の暗号文cyと二進数の暗号文cc’との乗算を行うことが出来る。
なお、上記したように暗号文ccで利用する円周群上の値が異なるため、Gate Bootstrappingで得られた値を2t倍することにより調整を行う必要がある。ここで2tは整数であるため、円周群上で乗算が定義されている。
【0064】
図6で説明した除算・剰余算、
図7で説明した変形例の除算の対象となるInteger-wise型のTLWE暗号文は、多倍長整数(BIG INTEGER)の暗号文であってもよい。暗号文同士の除算、剰余算の演算方法は
図6、
図7を使用した上記の説明と同じである。
ただし、夫々多倍長整数であるTLWE暗号文cx(被除数)、TLWE暗号文cy(除数)の除算、剰余算を行う場合、cx-cyの準同型減算を行ってTLWE暗号文cdを得るときに、暗号処理装置1は下記に説明する多倍長演算を行う必要がある。
ただし、下記に示す多倍長演算の方法は一例でありこれに限定されることはなく、他の公知の方法を用いることも出来る。
【0065】
一例において、暗号処理装置1は、準同型暗号に対するスカラ除算・剰余算を実現し、さらに、スカラ除算・スカラ剰余算の結果を用いて準同型暗号の多倍長演算を実現する。
多倍長演算は、1つの数を1つ以上の演算単位に分割して計算を行う。多倍長演算によって、暗号の強度を損なうことなく大きな数値を扱うことができるようになる。
スカラ除算・スカラ剰余算を実現するために、暗号処理装置1は、上記論文で提示されるGate Bootstrappingに改良を行う。
暗号処理装置1は、BlindRotateに入力するTRLWE暗号文(テストベクタとしての多項式F(X))を、夫々階段関数、ノコギリ波関数の結果を係数とする多項式とする。
暗号処理装置1は、このようなTRLWE暗号文を除数から算出し、このようなTRLWE暗号文を用いてBlindRotateを行うことで、スカラ除算・スカラ剰余算を実現する。多倍長演算の中身や、それを用いて行う暗号などの処理は一般的に知られているものがそのまま使える。
以下に説明する方法で、スカラ除算又はスカラ剰余算が可能である。スカラ除算、スカラ剰余算は、Integer-wise型の暗号文を暗号文ではない実数で割ったときの商、剰余を求める演算である。スカラ除算又はスカラ剰余算が可能となることで、TFHEをInteger-wise型での四則演算が可能な準同型暗号として利用することができる。Bit-wise型のTFHEによって1ビットずつ計算するよりも効率的に処理を行うことができる。
さらにスカラ除算又はスカラ剰余算の結果を用いて、準同型暗号の多倍長演算を実現することができる。
【0066】
図8は、多倍長整数の除算、剰余算を行う暗号処理装置の機能構成を説明する図である。
図8の構成は、
図1の構成の変形例であり、
図1と同じ構成については、同じ符号を付して説明は省略する。
制御部10は、
図1の構成に加えて、第4演算部32と、第5演算部33と、第2Bootstrapping部(算出部)35と、第3Bootstrapping部(算出部)36と、備えている。
第4演算部32、第5演算部33は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第2Bootstrapping部35と、第3Bootstrapping部36は、第4演算部32、第5演算部33から出力される、演算結果の少なくとも一方に対して、下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
第4演算部32、第5演算部33、第2Bootstrapping部35、第3Bootstrapping部36の少なくとも一つが、ハードウェアで実現されてもよい。
【0067】
図9は、
図8の機能構成に基づく演算プロセスを詳しく説明する図である。
図9(a)は、スカラ演算(スカラ除算、スカラ剰余算)を行うための機能構成、
図9(b)は、スカラ演算を含み多倍長演算を行うための機能構成を示している。
図9(a)において、第4演算部32、第2Bootstrapping部35は
図9(b)のスカラ除算部を構成し、第4準同型演算の演算結果に対してスカラ除算を実行する。例えば、整数xを平文として有する暗号文cxが入力されると、第4演算部32は暗号文cxの2n倍する第4準同型演算を行い、新たな暗号文cx’を得る。
なお、ここでいう整数x及びその暗号文cxは、スカラ除算、スカラ剰余算を説明するため便宜上用いられるものであり、除算・剰余算(
図6)及び変形例の除算(
図7)の対象となる、多倍長ではない整数やその暗号文とは区別される。
【0068】
暗号文cxの2n倍は暗号文の整数倍であり、上記に説明したように暗号文の整数倍は円周群上に定義されている。従って、暗号文cx’は従来知られる方法から得られる。
暗号文cx’を入力された第2Bootstrapping部35はGate Bootstrappingを行うと同時に、暗号文cx’を所定の平文で割るスカラ除算を行う。
また暗号文cx’を入力された第3Bootstrapping部36はGate Bootstrappingを行うと同時に、暗号文cx’を所定の平文で割った余りを求めるスカラ剰余算を行う。
図9(a)において、第4演算部32、第2Bootstrapping部35は
図9(b)のスカラ除算部を構成し、第2準同型演算の演算結果に対してスカラ除算を実行する。
また
図9(a)において、第4演算部32、第3Bootstrapping部36は
図9(b)のスカラ剰余算部を構成し、第2準同型演算の演算結果に対してスカラ剰余算を実行する。
【0069】
図9(b)は、
図9(a)のスカラ除算部、スカラ剰余算部を用いて暗号文同士の多倍長演算(加算)を行う場合の構成を示している。
図9(b)において、第5演算部33は、演算対象の入力暗号文ca、cbを夫々分割したi番目の部分と、i-1番目にスカラ除算部から出力された商の暗号文ce
i-1(後に詳述する繰り上がり)とに対して第5準同型演算(ca
i+cb
i+ce
i-1)を行う。ただし初回(i=1)の第2準同型演算を行う場合は、下記に説明するようにce
i-1は0を平文とする暗号文であり、単にca
i+cb
i(i=1)を行うのみである。
第5準同型演算の出力である暗号文czは、スカラ除算部、スカラ剰余算部に入力されて、暗号文czを平文で割ったときの除算結果である商の暗号文ce、剰余算結果である剰余の暗号文cm
iが出力される。
商の暗号文ceは第5演算部33に戻され、第5演算部33は、入力暗号文ca、cbのi+1番目の部分と商の暗号文ceの第5準同型演算を行う。次のスカラ除算、スカラ剰余算を行われる。
第5準同型演算、スカラ除算、スカラ剰余算を繰り返し行い、全体で所定回数繰り返したときのスカラ剰余算の結果である暗号文cmの列が、多倍長演算(加算)の演算結果となる。
第5準同型演算として、ca
i+cb
i+ce
i-1に代えて準同型減算ca
i-cb
i-ce
i-1、を行うことで暗号文同士の多倍長演算(減算)を行うことが出来る。暗号文cmの列が、多倍長減算の演算結果である。
【0070】
[スカラ除算・スカラ剰余算]
図9(a)に対応して、多倍長演算に用いるスカラ除算、スカラ剰余算の方法を詳しく説明する。
図5で説明したように、暗号処理装置1は円周群{T}の値域0~1を分割する個数tを設定する。(t/2)-1が、1つのTLWE暗号文に記録できる整数の最大値となる。
暗号処理装置1は、TFHE暗号のシステムパラメータを設定する。手順は上記論文と変わらないが、TRLWE暗号の多項式(テストベクタとしての多項式F(X))の次数nはtの倍数が好ましい。またGate Bootstrapping後に得られる暗号文において、平文に付加される誤差の範囲が±1/(2t)未満となるように、システムパラメータを設定する。
【0071】
被除数(割られる数)のTLWE暗号文cxがあるとする。
TLWE暗号文cxは、秘密鍵がなければ知ることができない、整数x(割る数)に対応する実数x/2tを平文として有する。
TLWE暗号文cxを実数yで除算あるいは剰余算する。ここでいう整数x、実数y、暗号文cxは、スカラ除算、スカラ剰余算を説明するため用いられるものであり、除算・剰余算(
図6)及び変形例の除算(
図7)の対象となる多倍長ではない整数やその暗号文とは区別される。
【0072】
暗号化された2変数に対する一変数関数を演算するには、上記論文(非特許文献1)のGate Bootstrappingを拡張した手法を用いることが出来る。この手法は、論文「Bootstrapping in FHEW-like Cryptosystems, Daniele Micziancio and Yuriy Polyakov Duality Technologies February 23,2020」に記載されている。開示されている手法では、テストベクタの係数を一定の定数μにせず関数の結果を設定することで、TLWE暗号文の値によって異なる結果を得る。同論文では、テストベクタ多項式として、
を用いることを提案している。
【0073】
暗号処理装置1は、以下のテストベクタ多項T1(X)、T2(X)を用いる。
テストベクタ多項式T1は、除算用のテストベクタ多項式である。
テストベクタ多項式T2は、剰余算用のテストベクタ多項式である。
2つのテストベクタ多項式に共通する
は、円周群をtで分割した1区間に対応する。
テストベクタ多項式T1(X)は、上記で説明した一変数関数を演算する方法を適用し、割られる数(被除数)の暗号文を平文y(除数)で割った除算を得る関数(t/y)の結果を係数として設定している。
暗号処理装置1は、TLWE暗号文cx、平文yを夫々Gate Bootstrappingの入力とし、テストベクタ多項式T1を用いてBlindRotateを行い、さらにSampleExtract、キースイッチングを行うことで、除算結果(商)に対応するx/yを平文とするTLWE暗号文を得ることが出来る。
テストベクタ多項式T2(X)は、上記で説明した一変数関数を演算する方法を適用し、割られる数(被除数)の暗号文を平文y(除数)で割った余り(剰余)を得る関数(t mod y)の結果を係数として設定している。
暗号処理装置1は、TLWE暗号文cx、平文yを夫々Gate Bootstrappingの入力とし、テストベクタ多項式T2を用いてBlindRotateを行い、さらにSampleExtract、キースイッチングを行うことで、剰余算の結果(剰余)に対応するt mod yを平文とするTLWE暗号文を得ることが出来る。
【0074】
まず、暗号処理装置1は、上記テストベクタ多項式T1(X)、T2(X)を夫々平文として有する自明な暗号文(0,T1(X))及び(0,T2(X))を作成する。
暗号処理装置1(第4演算部32)は、TLWE暗号文cxの各係数を2n倍して四捨五入し、TLWE暗号文cx’を得る。TLWE暗号文cx’は、平文として、
を有する。
暗号処理装置1(第2Gate Bootstrapping部35)は、TLWE暗号文cx’を入力として、テストベクタ多項式T1(X)を用いたBlindRotateを行う。BlindRotateの結果得られる平文多項式の定数項の係数は
である。εは、BlindRotateによって発生する誤差である。
また暗号処理装置1(第3Gate Bootstrapping部36)は、TLWE暗号文cx’を入力として、テストベクタ多項式T2(X)を用いたBlindRotateを行う。
BlindRotateの結果得られる平文多項式の定数項の係数は、
である。ここでεは、BlindRotateによって発生する誤差である。
【0075】
暗号処理装置1は、夫々のBlindRotateの結果得られるTRLWE暗号文に対して、通常のGate Bootstrappingと同様に、SampleExtractとキースイッチングを行う。その結果、暗号処理装置1は、除算の演算結果(商)に対応するTLWE暗号文cqと、剰余算の演算結果(剰余)に対応するTLWE暗号文crを得る。
TLWE暗号文cqは、平文として、テストベクタ多項式T1(X)を用いたBlindRotateの結果得られた平文多項式の定数項の係数に対応する
を有する。
TLWE暗号文crは、平文として、テストベクタ多項式T2(X)を用いたBlindRotateの結果得られた平文多項式の定数項の係数に対応する
を有する。
【0076】
[多倍長演算]
暗号処理装置1は、上記に説明したスカラ除算、スカラ剰余算を用いて大きな平文の数(多倍長整数BIG INTEGER)について多倍長演算を行う。
下記では、多倍長の平文Xの暗号文を暗号文cx、多倍長の平文Yの暗号文を暗号文cyとして説明する場合がある。
図6、
図7では、除算、剰余算の対象となる多倍長ではない整数の暗号文をcx、cyとして説明した。以下では、
図6の除算・剰余算、
図7の除算を多倍長整数に適用するため、多倍長整数X、Yの暗号文を
図6、
図7と同じ暗号文cx、暗号文cyとして説明する。
図9(b)に対応して、暗号処理装置1が行う多倍長演算を説明する。
暗号処理装置1は、暗号としての強度を十分に維持できる程度に小さいt(
図5で説明した円周群の分割数)を、適当な自然数t’を用いて(t/2)-1≧2t’-1とする。
t’は、2のべき乗であると平文との換算をコンピュータで計算しやすいが他の数でも構わない。
また暗号処理装置1は、多倍長のフィールド数(多倍長整数を分割するビット単位、区間)として適当な自然数uを定める。uは1つの平文(多倍長整数)を分割するTLWE暗号文の数である。
u個のフィールド又はフィールドt’
0、t’
1、t’
2、・・・t’
u-1毎に多倍長整数を分割する。
【0077】
暗号処理装置1は、平文Xを、
の形でu個のX
iに分割する。
暗号処理装置1は、X
iを夫々暗号化し、u個のTLWE暗号文ca
i(0≦i≦u-1)を作成する。
暗号文ca
0が多倍長整数を分割したフィールドt’
0の暗号文であり、暗号文ca
1が多倍長整数を分割したフィールドt’
1の暗号文であり、暗号文ca
2が多倍長整数を分割したフィールドt’
2の暗号文であり、暗号文ca
u-1が多倍長整数を分割したフィールドt’
u-1の暗号文である。
なお、ca
iを復号して得たX
iを上記の式で計算すれば、元の平文Xを得ることが出来る。
暗号処理装置1は、もう1つの平文Yを、平文Xと同様に、
の形でu個のY
iに分割する。暗号処理装置1は、Y
iを夫々暗号化し、u個のTLWE暗号文cb
i(0≦i≦u-1)を作成する。
上記と同様に、暗号文cb
0が多倍長整数を分割したフィールドt’
0の暗号文であり、暗号文cb
1が多倍長整数を分割したフィールドt’
1の暗号文であり、暗号文cb
2が多倍長整数を分割したフィールドt’
2の暗号文であり、暗号文cb
u-1が多倍長整数を分割したフィールドt’
u-1の暗号文である。
多倍長整数X、Yを分割して暗号化することで、TLWE暗号文ca
i、TLWE暗号文cb
iがとる平文の値を小さくし、円周群の分割数を小さくすることが出来る。これにより、暗号処理装置1は、暗号文のセキュリティを保ったまま多倍長の四則演算を行うことが出来る。
【0078】
本実施形態の除算、剰余算において特に関わりがあるのはcx-cyに係る暗号文同士の多倍長減算であるが、ここでは、多倍長整数X、Yの和の演算(X+Y)に対応する暗号文同士の多倍長演算加算を説明する。
暗号処理装置1は、平文X+平文Yに対応する暗号文cx、cy同士の多倍長演算は、以下の手順で実行する。
初期化として、i=0とする。
(1)ce
i-1を、0を平文とするTLWE暗号文とする。
(2)ca
iとcb
iとce
i-1を暗号化したまま加算(準同型加算)して、cz
iを得る。
図9(a)でいえば、暗号文cz
iが暗号文cxに相当する。
(3)cz
iを、スカラ除算・スカラ剰余算によりt’で割った商の暗号文ce
i及び剰余の暗号文cm
iを得る(スカラ除算部、スカラ剰余算部)。
図9(a)でいえば、暗号文ce
iが暗号文cq、暗号文cm
iが暗号文crに夫々相当する。
t’
iにおける準同型加算に対してスカラ除算して得られた商の暗号文ce
iは、t’
iの演算によるt’
i+1に対する繰り上がりである。t’
i+1のためのca
i+1とcb
i+1の準同型演算において暗号文ce
iも加算されている。
暗号処理装置1は、iを1増やし、(1)~(3)の処理をu回繰り返す。u回繰り返したあとのcm
iの列が、平文X+平文Yに対応する多倍長暗号文cmとなる。
【0079】
これをふまえ、平文Xと平文Yの暗号文同士の加算を具体的に説明する。
平文Xをフィールドt’i毎にu個のXiに分割して暗号化しu個のTLWE暗号文caiを作成すること、平文Yをフィールドt’i毎にu個のYiに分割して暗号化しu個のTLWE暗号文cbiを作成することは上記と同じである。
説明の簡単化のため、平文Xを分割したフィールドt’0の暗号文をa、フィールドt’1の暗号文をbとし、平文Yを分割したフィールドt’0の暗号文をc、フィールドt’1の暗号文をdとする。
【0080】
暗号処理装置1は、平文Xと平文Yのフィールドt’0の暗号文同士でb+dの演算を行う。
暗号処理装置1は、まず、b+dの演算結果に対してスカラ除算部によるスカラ除算とスカラ剰余算部によるスカラ剰余算を行う。
スカラ剰余算の結果得られる剰余は、加算結果である暗号文の、区間(あるいはケタ)t’0の値である。
一方、スカラ除算の結果得られる商はt’1に繰り上げられる。
暗号処理装置1は、a+c+繰り上げの演算結果に対してスカラ除算とスカラ剰余算を行う。
スカラ剰余算の結果得られる剰余は、加算結果である暗号文の区間(あるいはケタ)t’1の値である。
一方、スカラ除算の結果得られる商はt’2に繰り上げられる。
t’iがより多い場合には、さらにフィールドt’2の暗号文の和に繰り上げを加算した結果に対してスカラ除算とスカラ剰余算を行うことを繰り返していく。
繰り上げを含めて、t’0、t’1・・・に夫々該当する値を全て加算することにより各区間の値を得ることができ、暗号処理装置1は多倍長演算を行うことが出来る。
【0081】
平文X-Yに対応する暗号文同士の多倍長演算も、(2)の準同型加算に代えて準同型減算(ca
i-cb
i-ce
i-1)を行うことで計算できる。
この場合、t’
iにおける準同型減算に対してスカラ除算して得られた商の暗号文ce
iは、t’
iの演算によるt’
i+1からの繰り下がりである。t’
i+1のためのca
i+1とcb
i+1の準同型演算において暗号文ce
iも減算されている。
多倍長演算結果である暗号文cm
iの列が、
図6及び
図7で説明した暗号文同士の準同型減算cx-cyの結果である暗号文cdに対応する。暗号文cdもまた多倍長整数の暗号文である。
減算結果cdを得る過程で、ce
iは繰り下がりであるため、最後に算出されるce
u-1が、多倍長整数全体で減算を行った場合の繰り下がりと等しい。すなわち、cx-cyを行った際に結果が負になる、つまりcx<cyの場合にce
u-1は1の暗号文となる。反対にcx≧cyの場合に0の暗号文となる。これにより、暗号文ccを得る。
また
図2(
図6)と同様に、cy×ccのバイナリ乗算を行うことが出来る。cyは多倍長の平文Yを分解した夫々の暗号文である。多倍長整数の暗号文であるcyの各フィールド夫々に対して二値の暗号文ccを使ったバイナリ演算を行うことで、cy×ccのバイナリ乗算を行うことが出来る。
準同型暗号の多倍長整数は通常の整数と同様の扱いが可能である。またTLWE暗号文の個数uを増やすことで、一つのTLWE暗号文が有する平文の数値を小さくして円周群の分割数tを小さくしつつ、演算全体としては扱える平文の数値を小さくせずともよい。従って、本実施形態は、暗号の強度を犠牲することもなく大きな数を扱うことが出来る。
【0082】
図10は、暗号処理装置が実行するスカラ除算処理の流れを示すフローチャートである。
暗号処理装置1(第4演算部32)は、ステップS201において、割られる数xの暗号文cxの各係数を2n倍して、暗号文cx’を得る。
暗号処理装置1(第2Bootstrapping部35)は、暗号文cx’を入力とするGate Bootstrappingを行うことによって除算を行う。
暗号処理装置1は、ステップS202において、暗号文cx’とテストベクタ多項式T1(X)を用いてBlindRotateを行う。
暗号処理装置1は、ステップS203において、SampleExtractを行う。
暗号処理装置1は、ステップS204において、キースイッチングを行い、得られた暗号文を除算結果として出力する。
【0083】
図11は、暗号処理装置が実行するスカラ剰余算処理の流れを示すフローチャートである。
暗号処理装置1(第4演算部32)は、ステップS211において、割られる数xの暗号文cxの各係数を2n倍して、暗号文cx’を得る。
暗号処理装置1(第3Bootstrapping部36)は、暗号文cx’を入力とするGate Bootstrappingを行うことによって剰余算を行う。
暗号処理装置1は、ステップS212において、暗号文cx’とテストベクタ多項式T(X)を用いてBlindRotateを行う。
暗号処理装置1は、ステップS213において、SampleExtractを行う。
暗号処理装置1は、ステップS214において、キースイッチングを行い、得られた暗号文を剰余算結果として出力する。
【0084】
図12は、暗号処理装置が実行する多倍長演算処理の流れを示すフローチャートである。
暗号処理装置1(第4演算部32)は、ステップS301において、初期化として、変数iに0を代入する。
暗号処理装置1(第4演算部32)は、ステップS302において、ca
iとcb
iとce
i-1を準同型加算して、cz
iを得る。
暗号処理装置1(第4演算部32、第2Bootstrapping部35)は、ステップS303において、
図8で説明した方法を用いてcz
iを入力としたスカラ除算を行い、暗号文ce
iを得る。
暗号処理装置1(第4演算部32、第3Bootstrapping部36)は、ステップS304において、
図9で説明した方法を用いてcz
iを入力としたスカラ剰余算を行い、暗号文cm
iを得る。
暗号処理装置1は、ステップS305において、iがuに達したか否かを判定する。
iがuに達していないと判定した場合(ステップS305でNo)、暗号処理装置1は、ステップS306において、iの値を1増やし、ステップS302~ステップS304の処理を繰り返す。
iがuに達したと判定した場合(ステップS305でYes)、暗号処理装置1は、このときまで得られたcmの列を多倍長演算結果として出力する。以上の処理によって、Integer-wise型のTLWE暗号文同士の多倍長演算(加算)を実行することが出来た。
平文X-Yに対応する暗号文同士の多倍長演算も、ステップS302において準同型減算(ca
i-cb
i-ce
i-1)を行うことで計算できる。
【0085】
図13は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、
図13(a)に示すように、BlindRotate、SampleExtract、キースイッチングの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、
図13(b)に示すように、Gate Bootstrappingにおいてキースイッチングを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図13(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、キースイッチングの結果、LEVEL0のTLWE暗号文が出力される。
それに対して
図13(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にキースイッチングを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0086】
LEVEL0の暗号文は、N次の秘密鍵[s]で暗号化された円周群{T}上の要素のN次のベクトル[a]よりなっている。一方、SampleExtractの結果得られるLEVEL1の暗号文は、n次の秘密鍵[s’]で暗号化された円周群{T}上の要素のn次のベクトル[a']よりなっている。
LEVEL0の暗号文は、LWE問題の難易度となる係数の数(ベクトルの次数)がLEVEL1の暗号文よりも少ないので、LEVEL1と比較して準同型加算の計算量が少ない。
一方でLEVEL0の暗号文は、平文に付加する許容誤差を小さくすると、セキュリティ強度が下がりやすい問題がある。LWE系暗号は、平文に付加する誤差によって安全性が担保されるからである。
TLWE暗号は、平文に付加する誤差が大きいほど、係数の数(ベクトルの次数)が多いほど計算(解読)が難しい。
裏を返すと、TLWE暗号は、平文に付加する誤差が小さいほど、係数の数(ベクトルの次数)が少ないほど、計算(解読)が容易となるのである。
特に、Integer-wise型に適用したTFHEの場合、TLWE暗号文に格納する平文(整数)の値が大きくなるほど、円周群{T}における0~1の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0087】
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、キースイッチングをGate Bootstrappingの先頭に移動し、係数の数(ベクトルの次数)が多く誤差の範囲を小さくしやすいLEVEL1の暗号文をGate Bootstrappingの入出力とすることが望ましい。そして、Gate Bootstrappingの先頭でLEVEL0に変換してから、最後にLEVEL0に戻さないようにする。LEVEL0に戻さないことで、次段でも同様にTLWE暗号文の計算を安全に行うことが出来る。
BlindRotateの所要時間は、CMuxの回数が次数と同じ回数であるため、入力となるTLWE暗号文の係数の数(ベクトルの次数)に比例する。よって、LEVEL1の暗号文を入力とした場合は、LEVEL0の暗号文を入力とした場合よりも、係数の数(ベクトルの次数)に比例してBlindRotateの所要時間が長くなる。
暗号文のセキュリティを確保するためにLEVEL1の暗号文をGate Bootstrappingの入力としても、キースイッチングで変換したLEVEL0のTLWE暗号文を入力としてBlindRotateを行うことで、所要時間の増加を避けることが出来る。
【0088】
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域をt個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできる。円周群を分割した個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0089】
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
[応用例]
暗号処理装置1が行う処理は、以下のように応用することが出来る。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベースから、特定のフィールドが一定の範囲内のものを集約したい場合(例えば、30~39歳の平均年収を求めたい場合など)を考える。
このとき、暗号処理装置1は暗号化されたデータベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
暗号化されたデータベースではインデックスを作成することができないため、データベース全体に対する比較と集約が必要である。
【0090】
暗号処理装置10は、第1演算部12、第2演算部13、第3演算部14及び第1Bootstrapping部15、多倍長整数の場合はさらに第4演算部32、第5演算部33、第2Bootstrapping部35、第3Bootstrapping部36の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
比較演算は、レコードとクエリの暗号文同士で減算を行うことであり、減算結果の正負が比較演算の等価となる。
暗号処理装置1はさらに、比較演算でクエリと一致したレコードに対する集約演算を行うことが出来る。
集約演算において、暗号処理装置1は、比較演算でクエリと一致したレコードを加算して合計を演算し、さらに除算を用いて平均値を求める。
このように、暗号化されたデータベースに対するクエリの処理には、暗号文を構成する整数同士の加算、減算、乗算、除算などの四則演算、や比較(比較は減算結果の正負と等価である)を行う必要がある。そして、Bit-wise型の暗号文を用いる場合、処理には全加算器演算が多用されることが考えられる。そして、扱う整数のビット長が大きくなれば必要となる全加算器の数も増加する。四則演算とは、入力された暗号文を用いた順列を二進数で表記した際の各ビットの暗号文とみなした暗号化された数値同士に対して準同型な四則演算である。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、クエリの実行時間を著しく低減することが可能となる。
【0091】
このようなデータベースの集約に限らず、整数同士の四則演算や比較は、暗号文を用いた様々なデータ処理で多用される。
他の例として、ファジー認証やファジー検索が挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、上記の暗号化されたデータベースにおける比較演算・集約演算と同様に、暗号化されたデータベースとクエリとの比較を行い、その際には、準同型暗号により暗号化されたデータで比較演算を行う必要がある。
【0092】
またファジー認証やファジー検索において比較を行う際、ユークリッド距離が用いられることが多い。ユークリッド距離を演算する際には2乗の演算が必要となる。従って、Bit-wise型の準同型暗号では、乗算を行う際にデータのビット長に対して、O(N2)の全加算器を演算しなければならない。また単純な減算による比較演算でも、O(N)の全加算器を演算する必要がある。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、ファジー認証やファジー検索に要する処理時間を大幅に低減することが出来る。
【0093】
図14は、コンピュータ装置の一実施例を示すブロック図である。
図14を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0094】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、
図2における制御部10として機能する。
【0095】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、
図2における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、
図2における記憶部20として機能する。
【0096】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第5演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
なお、プログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0097】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0098】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、
図2において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、
図2において、入力部26として機能する。
【0099】
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0100】
1 暗号処理装置、10 制御部、11 受付部、12 第1演算部、13 第2演算部、14 第3演算部、15 Bootstrapping部(算出部)、18 出力部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク
【要約】
【課題】Integer-wise型TFHEの四則演算を実現する。
【解決手段】暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、被除数としての第1暗号文から除数としての第2暗号文を準同型減算した減算結果に基づいて、減算結果の正負を判定する二値の第3暗号文を算出し、第1暗号文から、第3暗号文と第2暗号文の準同型乗算結果を準同型減算して、新たな暗号文を算出する演算処理を行い、演算処理の演算結果を新たな第1暗号文として新たな第3暗号文を算出し、新たな第1暗号文と、第2暗号文と新たな第3暗号文とを用いた演算処理を、繰り返し実行可能であり、演算処理を全体で所定回繰り返し実行したときに算出した新たな暗号文を、第1暗号文に対する第2暗号文の除算又は剰余算の結果として出力する。
【選択図】
図2