(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024076063
(43)【公開日】2024-06-05
(54)【発明の名称】暗号処理装置、暗号処理方法、暗号処理プログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20240529BHJP
【FI】
G09C1/00 620Z
【審査請求】有
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2022187427
(22)【出願日】2022-11-24
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
(57)【要約】
【課題】暗号文の比較演算を、少ない計算量で行う。
【解決手段】第1暗号文caに対して第1多項式F1(X)を用いて多項式を平文として有する第2暗号文r1を算出し、第2暗号文r1に対して、第1多項式F1(X)を平文として有する暗号文を準同型演算して多項式を平文として有する第3暗号文r1’を算出し、第1暗号文caと第2暗号文cbとを準同型演算して算出した暗号文ccに第3暗号文r1’を用いることにより、多項式を平文として有する第5暗号文c3を算出する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に対して第1多項式を用いることにより、多項式を平文として有する第2暗号文を算出し、
第2多項式を平文として有する暗号文を前記第2暗号文に準同型演算することにより、多項式を平文として有する第3暗号文を算出し、
第4暗号文に対して前記第3暗号文を多項式として用いることにより第5暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項2】
請求項1に記載の暗号処理装置において、
前記第1多項式における、偶数次と奇数次のうちの一方の項の係数を0とすることにより、前記第1多項式を前記第1暗号文に用いることで前記一方の項の係数を変化させず、
前記第3暗号文に含まれる、前記第1多項式の偶数次と奇数次のうちの夫々の項の係数と、前記第2多項式の夫々対応する係数と、を用いて、前記第4暗号文を用いた異なる演算を同時に実行可能である、
ことを特徴とする暗号処理装置。
【請求項3】
請求項1に記載の暗号処理装置において、
前記所定の演算として多倍長整数の演算を行うことを特徴とする暗号処理装置。
【請求項4】
請求項1に記載の暗号処理装置において、
前記第4暗号文は、前記第1暗号文と他の暗号文との準同型演算結果に対応する暗号文であり、
前記第2暗号文から抽出した暗号文と前記第5暗号文とを準同型演算した暗号文に対して第3多項式を用いることにより、前記第4暗号文における繰り上がりの有無を示す第6暗号文と、前記第4暗号文における繰り下がりの有無を示す第7暗号文と、前記準同型演算結果の正負を示す第8暗号文と、の少なくとも一つを算出する、
ことを特徴とする暗号処理装置。
【請求項5】
請求項4に記載の暗号処理装置において、
前記第6暗号文と前記第7暗号文と前記第8暗号文とに基づいて、前記第1暗号文と他の暗号文との比較結果に対応する暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項6】
請求項4に記載の暗号処理装置において、
前記第4暗号文は、前記第1暗号文と他の暗号文との準同型加減算結果に対応する暗号文であり、
第4暗号文に対して前記第3暗号文を多項式として用いることにより第9暗号文を算出し、前記第9暗号文に第4多項式を用いることにより、前記第1暗号文と前記他の暗号文との準同型加減算結果に対応する第10暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項7】
請求項1に記載の暗号処理装置において、
前記第2多項式を平文として有する暗号文は、あらゆる秘密鍵で復号可能な自明な暗号文である、
ことを特徴とする暗号処理装置。
【請求項8】
請求項1に記載の暗号処理装置において、
前記所定の演算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
ことを特徴とする暗号処理装置。
【請求項9】
請求項1に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項10】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に対して第1多項式を用いることにより、多項式を平文として有する第2暗号文を算出し、
第2多項式を平文として有する暗号文を前記第2暗号文に準同型演算することにより、多項式を平文として有する第3暗号文を算出し、
第4暗号文に対して前記第3暗号文を多項式として用いることにより第5暗号文を算出する、
ことを特徴とする暗号処理方法。
【請求項11】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に対して第1多項式を用いることにより、多項式を平文として有する第2暗号文を算出し、
第2多項式を平文として有する暗号文を前記第2暗号文に準同型演算することにより、多項式を平文として有する第3暗号文を算出し、
第4暗号文に対して前記第3暗号文を多項式として用いることにより第5暗号文を算出する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【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を区切った区間を順番に整数と対応付けることによりTFHEを拡張し、整数を平文として有するInteger-wise型の準同型暗号として応用することが出来る(非特許文献2参照)。
Integer-wise型としてTFHEを用いると、1つの暗号文に数ビットの情報を持つことができるため、1度の準同型演算でより複雑な演算ができ、システム全体での演算回数を大幅に削減することができる。
Bootstrappingのテストベクタ多項式に関数の値を代入し、LUTとして利用し、任意の一変数関数を評価することができることが知られている(非特許文献3)。
【先行技術文献】
【特許文献】
【0004】
【非特許文献1】TFHE:Fast Fully Homomorphic Encryption over the Torus. Journal of Cryptology, 33:34-91, 2020, I.Chillotti, N.Gama, M.Georgieva, and M.Izabachene
【非特許文献2】Integerwise Functional Bootstrapping on TFHE, 2020, Hiroki Okada, Shinsaku Kiyomoto, and Carlos Cid
【非特許文献3】Bootstrapping in FHEW-like Cryptosystems, 2020, Daniele Micciancio and Yuriy Polyakov
【発明の概要】
【発明が解決しようとする課題】
【0005】
さらに、Integer-wise型のTFHEで、暗号文の比較演算を行いたいという要望がある。TLWE暗号文同士の比較は応用範囲が広く、例えば1つのTLWE暗号文を1つの分割単位とする多倍長整数に対する準同型な多倍長演算などにも応用することができるからである。
多倍長演算のうち、多倍長減算では、人間がひっ算によって減算をするように、低い分割単位の方から順に分割単位1つずつ減算と繰り下がり操作を繰り返す。この繰り下がりの操作で準同型な比較演算が必要となる。
また多倍長加算では、多倍長減算とは逆に繰り上がりの処理を行う。この繰り上がりの操作でも準同型な比較演算が必要となる。
多倍長演算に限らず、1つの整数値を表す暗号文に関しても暗号文同士の平文の大小関係を知るための加減算において比較演算は必要である。
本発明は、一側面として、加減算の際に発生する繰り上がり、繰り下がりの処理に必要な暗号文の比較演算を、少ない計算量で行うことを目的とする。
【課題を解決するための手段】
【0006】
本発明は、一実施形態によれば、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、第1暗号文に対して第1多項式を用いることにより、多項式を平文として有する第2暗号文を算出し、第2多項式を平文として有する暗号文を前記第2暗号文に準同型演算することにより、多項式を平文として有する第3暗号文を算出し、第4暗号文に対して前記第3暗号文を多項式として用いることにより第5暗号文を算出する、暗号処理装置を特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、暗号文の比較演算を、少ない計算量で行うことが出来る。
【図面の簡単な説明】
【0008】
【
図1】本実施形態の暗号処理装置の機能構成を説明する図である。
【
図2】
図1の機能構成に基づく演算プロセスを詳しく説明する図である。
【
図3】
図1の機能構成に基づく演算プロセスを詳しく説明する図である。
【
図4】TLWE暗号が平文として有する円周群を説明するイメージ図である。
【
図5】2値Gate Bootstrappingの動作イメージ図である。
【
図6】Integer-wise型に適用したTFHEを説明する図である。
【
図7】本実施形態におけるInteger-wise型TFHEを説明する図である。
【
図8】暗号文の加算結果を表す暗号文を説明する図である。
【
図9】暗号文の加算結果を表す暗号文を説明する図である。
【
図10】平文を反転させた暗号文に対応する円周群を示す図である。
【
図11】暗号文の加算結果を表す暗号文を説明する図である。
【
図12】暗号文の加算結果を表す暗号文を説明する図である。
【
図13】暗号文の減算結果に応じて暗号文が取り得る値を示す図である。
【
図14】第1実施例の処理を説明するフローチャートである。
【
図15】第2実施例の処理を説明するフローチャートである。
【
図16】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
【
図17】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の演算のことを指すものとする。
【0010】
図1は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第4演算部15と、第5演算部16と、第6演算部17と、を備えている。
また、制御部10は、第1Bootstrapping部(算出部)41と、第2Bootstrapping部(算出部)42と、第3Bootstrapping部(算出部)43と、第4Bootstrapping部(算出部)44と、出力部35と、を備えている。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第1演算部12は、受付部11が受け付けた入力暗号文に対する第1準同型演算を行う。
第2演算部13は、第1Bootstrapping部41による処理の途中で出力される暗号文に対して、第2準同型演算を行う。
第3演算部14は、入力された比較対象の2つの暗号文に対して第3準同型演算を行う。
第4演算部15は、第1Bootstrapping部41から出力される暗号文と第2Bootstrapping部42から出力される暗号文とに対する第4準同型演算を行う。
第5演算部16は、第3Bootstrapping部43から出力される暗号文に対する第5準同型演算を行う。
第6演算部17は、第5演算部16から出力される暗号文同士の第6準同型演算を行う。
【0012】
第1Bootstrapping部41は、第1演算部12から出力される暗号文に対して第1Gate Bootstrappingを行う。
第2Bootstrapping部42は、第3演算部14から出力される暗号文に対して第2Gate Bootstrappingを行う。
第3Bootstrapping部43は、第4演算部15から出力される暗号文に対して第3Gate Bootstrappingを行う。
第4Bootstrapping部44は、第2Bootstrapping部42から出力される暗号文に対して第4Gate Bootstrappingを行う。
【0013】
第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部17は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部41、第2Bootstrapping部42、第3Bootstrapping部43は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部17、第1Bootstrapping部41、第2Bootstrapping部42、第3Bootstrapping部43、第4Bootstrapping部44、出力部35の少なくとも一つが、ハードウェアで実現されてもよい。
【0014】
出力部35は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、暗号文に対する演算で用いられる一時ファイルや一時データ、出力暗号文を格納することが出来る。
また、記憶部20には、暗号化された暗号化データベース60を格納することが出来る。
通信部25は、暗号処理装置1をネットワークに接続し、外部装置との通信を可能にする。
記憶部20に暗号化された暗号化データベース60を格納し、通信部25を備えることにより、暗号処理装置1は、データベースサーバとして機能することが出来る。
この場合、暗号処理装置1は、外部装置としての端末装置から、暗号化されたクエリを受け付け、暗号化された暗号化データベース60に対する検索を行い、暗号化された検索結果を端末装置に応答することが出来る。
入力部26は、暗号処理装置1に対して、演算処理対象の暗号文や、暗号化データベース60に対するクエリを入力する。
【0015】
図2は、
図1の機能構成に基づく第1実施例に基づく演算プロセスを詳しく説明する図である。
図2に示す構成では、上記論文で提示されたGate Bootstrappingを使用する。上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
暗号処理装置1は、Integer-wise型のTLWE暗号文同士の比較を行う。ここで、TLWE暗号文caは、平文整数aの暗号文であり、TLWE暗号文cbは、平文整数bの暗号文である。
【0016】
図2において、暗号処理装置1は、TLWE暗号文caを第1演算部12に入力して第1準同型演算を行い、TLWE暗号文ca’を得る。暗号処理装置1は、TLWE暗号文ca’を第1Bootstrapping部41に入力し、TLWE暗号文ca’に対して多項式F1(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r1を算出する。
暗号処理装置1は、TRLWE暗号文r1を第2演算部13に入力して第2準同型演算を行い、TRLWE暗号文r1’を得る。
暗号処理装置1は、TLWE暗号文ca、TLWE暗号文cbを第3演算部14に入力して第3準同型演算を行い、TLWE暗号文ccを得る。暗号処理装置1は、TLWE暗号文ccを第2Bootstrapping部42に入力し、TLWE暗号文ccに対して第2準同型演算の演算結果であるTRLWE暗号文r1’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2を算出する。
暗号処理装置1は、第2Bootstrapping部42によってTRLWE暗号文r2に対してSampleExtractを行い、TLWE暗号文c3を得る。
暗号処理装置1は、第1Bootstrapping部41によってTRLWE暗号文r1に対するSampleExtractを行い新たな暗号文c2を得る。
暗号処理装置1は、TLWE暗号文c2とTLWE暗号文c3を第4演算部15に入力して第4準同型演算を行い、TLWE暗号文c4を得る。
暗号処理装置1は、TLWE暗号文c4を第3Bootstrapping部43に入力し、TLWE暗号文c4に対して多項式F1’(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r3を算出する。
暗号処理装置1は、TRLWE暗号文r3に対して異なる箇所でSampleExtractを2回行い、夫々の出力結果に対して第5演算部16によって第6準同型演算を行い、TLWE暗号文c5、c6を得る。
【0017】
図3は、
図1の機能構成に基づく第2実施例に基づく演算プロセスを詳しく説明する図である。
図3において、暗号処理装置1は、TLWE暗号文caを第1演算部12に入力して第1準同型演算を行い、TLWE暗号文ca’を得る。暗号処理装置1は、新たな暗号文ca’を第1Bootstrapping部41に入力し、TLWE暗号文ca’に対して多項式F2(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r11’を算出する。
暗号処理装置1は、TRLWE暗号文r11を第2演算部13に入力して第2準同型演算を行い、TRLWE暗号文r11’を得る。
暗号処理装置1は、TLWE暗号文ca、TLWE暗号文cbを第3演算部14に入力して第3準同型演算を行い、TLWE暗号文cc’を得る。
暗号処理装置1は、TLWE暗号文cc’を第2Bootstrapping部42に入力し、TLWE暗号文cc’に対して第2準同型演算の演算結果r11’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2’を算出する。
【0018】
暗号処理装置1は、第2Bootstrapping部42によってTRLWE暗号文r2’に対してSampleExtractを行い、TLWE暗号文c3’を得る。
暗号処理装置1は、第1Bootstrapping部41によってTRLWE暗号文r11に対するSampleExtractを行い新たな暗号文c2’を得る。
暗号処理装置1は、TLWE暗号文c2’とTLWE暗号文c3’を第4演算部15に入力して第4準同型演算を行い、TLWE暗号文c4’を得る。
暗号処理装置1は、TLWE暗号文c4’を第3Bootstrapping部43に入力し、TLWE暗号文c4’に対して多項式F2’(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r3を算出する。
暗号処理装置1は、TRLWE暗号文r3に対して異なる箇所でSampleExtractを3回行い、夫々の出力結果を第5演算部16に入力して第5準同型演算を行い、TLWE暗号文c5、c6、c7を得る。
暗号処理装置1は、TLWE暗号文c5、c6、c7を第6演算部17に入力して第6準同型演算を行い、比較結果に対応するTLWE暗号文c8を得る。
【0019】
暗号処理装置1は、第2Bootstrapping部42によってTRLWE暗号文r2’に対してSampleExtractを行い、TLWE暗号文cgを得る。
暗号処理装置1は、TLWE暗号文cgを第4Bootstrapping部44に入力し、TLWE暗号文cgに対して多項式Fid(X)をテストベクタ多項式とするGate Bootstrappingを行い、ca-cbの演算結果に対応するTLWE暗号文c9を得る。
【0020】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0021】
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0022】
図4は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、
図4に示す円周群{T}の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0023】
[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暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
【0024】
この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で誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0025】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φsにかけると、φs(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0026】
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)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0027】
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](Xn+1)+T[X]のかたちに分解し、2番目の項(剰余部分)だけを取り出して集めると、これもまた「環」の性質を持つため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(Xn+1)と表す。
【0028】
多項式環の剰余環T[X]/(Xn+1)の要素(元)として、任意の係数μ(μ∈T)を用いて、
多項式F(X)=μXn-1+μXn-2+・・・+μX+μ
を取り出す。
多項式環の剰余環の要素F(X)にXを掛けると、μXn-1+μXn-2+・・・+μX-μとなって、一番上の項の係数がプラスからマイナスに反転して定数項として現れる。なぜならば、次数がn-2以下の項はXを乗じた後もXn+1で割ることができないが、最高次数の項だけはμXn=μ(Xn+1)-μと割ることができるためである。Xn+1で割った余りで考えているため、右辺で剰余となっている-μのみが残ることとなる。
さらにXを掛けると、μXn-1+μXn-2+・・・+μX2-μX-μのように、もう一度同じことが起きる(一番上の項の係数がプラスからマイナスに反転して定数項として現れる)。
これを全部でn回繰り返すと、
-μXn-1-μXn-2・・・-μX-μとなって全ての項の係数がマイナスとなる。
【0029】
さらに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)が有する性質を利用して完全準同型暗号を実現する。
Xの指数部が正負の何れであっても、多項式環の剰余環の要素F(X)にXをn回繰り返して掛けると全ての項の符号が反転し、2n回繰り返して掛けると全ての項の符号が元に戻る。
また、X-1を乗算することはXを乗算することの逆演算であるため、X-1をかけ続けるとXをかけた場合と反対の変化が起き、X-1をn回かけると全ての項が反転し、2n回かけると元に戻る。
以上より、多項式環の剰余環の要素F(X)に、XもしくはX-1をn回繰り返して掛けると全ての項の符号が反転し、2n回繰り返して掛けると全ての項の符号が元に戻る。
この巡回群においては、どちらの方向に回すこともできる、という点に着目して、便宜上、-n回繰り返してかける、-2n回繰り返してかけるという表現を用いることもある。これはあくまで理論を説明する際の便宜的な表現であり、本発明を実施する際には、例えばXaを-b回かける場合にX-aをb回かけても、X2n-aをb回かけても良く、結果的に同じことができれば他の変形を行っても良い。
【0030】
[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)とする。
【0031】
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)を定めたものが、復号関数として機能する。換言すると、(b(X)-s(X)・a(X))mod(Xn+1)が復号関数として機能する。modは除算の余りを意味する。
【0032】
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、
図4の円周群{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のべき乗の和の形に分解する。
【0033】
円周群{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)+0.252×2+0.253×0]
と分解できる。
従って、Gadget Decompositionを行うと、
Dec(d)=[-X2+2,2X,0,X2+2X+1,2,0]
というベクトルになる。
【0034】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文dが得られる。下位ビットは四捨五入をしてまるめられている。
【0035】
TRLWE暗号文dに対して、||d-[v]・H||が最小値となる[v]を得る操作が、Gadget Decompositionであるとも言える。ここで||はベクトルのノルム(長さ)である。
e(X)の係数全てが、平均値は0となり分散はαとなる乱数により生成された多項式により算出したTRLWE暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。
この暗号文kとして表せる暗号文をTRGSW暗号文と呼ぶこととする。
TRGSW暗号文は、下記に用いるBootstrapping Keyを構成する。
【0036】
Bootstrapping Keyを説明する。
Bootstrapping Keyは、Gate Bootstrappingに用いるために、秘密鍵を暗号化する方法として利用する。
TLWE暗号文に用いる秘密鍵[s](N次)とは別に、Gate Bootstrappingに使うために、秘密鍵[s]を暗号化するための秘密鍵[s’]の各要素を0か1の2値で選択する。
秘密鍵[s’]の次数は、TRLWE暗号で使用する多項式の次数nとそろえる必要がある。
秘密鍵[s]の要素ごとにTRGSW暗号文を作成する。
秘密鍵[s’]で復号するとφ
s’(Zj)=0となるTRLWE暗号文Zjを2l(エル)個作成する。
そして、上記したTRGSW暗号文の構成どおり、
とする。
このTRGSW暗号文を、秘密鍵[s]のそれぞれの要素ごとに異なるZjを用いて構成したセットを、Bootstrapping Key(BK)と呼ぶ。つまり、BKはN個のTRGSW暗号文のセットである。
【0037】
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)は、平文のそれぞれの係数の絶対値の大きさをシステムパラメータで調整することができるので、この後の演算も含めて十分小さくなるように設定する。
【0038】
そうするとφ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のTRLWE暗号文を復号することなく出力し、siが1であると平文多項式がμ1のTRLWE暗号文を復号することなく出力する。
CMux関数は、平文多項式がμ0もしくはμ1となるTRLWE暗号文を計算することができるが、その結果を見てもどちらを選択したかは復号することなしには分からない。
【0039】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)Public Key Switchingから構成される。
【0040】
図5は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、平文とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図4の円周群{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の範囲のいずれかである。
【0041】
(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
を用意する。
【0042】
平文μ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’は整数であるため、累乗が自然に定義できる。実際にはTRLWE暗号文の多項式の各項の係数を所定の個数だけ巡回させれば済む。
以降、上記に説明したBootstrapping KeyであるBKiを用いて、順番にAi=CMux(BKi,Ai-1,Xa’iAi-1)を計算する。ここでも、a’iが整数になっているため、Xの累乗が自然に定義できる。同様にXの累乗を計算する訳ではなくTRLWE暗号文Ai-1の要素である多項式の各項の係数を所定の個数だけ巡回させれば済む。
【0043】
そうすると、s
iが0の時は、平文はそのまま変わらず、s
iが1の時は、X
a’iが順番に乗算されていく。
従って、
と繰り返すと、
となる。
ここで、
は、復号関数φs(c’)の符号を反転したものに等しいので、
となる。ここでφ
s’(A
n)は、多項式T(X)にX
-1をμ1’回乗算した多項式の暗号文であり、A
nはその暗号文である。
この時点で、最初に設定したTLWE暗号文cの誤差付き平文eの誤差成分は多項式T(X)を回転する量として表れており、各項の係数の値の大小としては表れていないことを明記しておく。TFHEでは本質的にこの仕組みにより誤差を縮小している。
また、BlindRotateに係るTLWE暗号文cの平文μ1に対応して、多項式T(X)にXをかける回数μ1’(=2nμ1)に応じたユニークな値(n個の係数とその符号反転で最大2n個)が平文多項式の定数項の係数として得られるので、これは、一種のルックアップテーブル(Look Up Table)とみなすことが出来る。
【0044】
(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を得るための処理である。
前述の通り、最初の入力であるTLWE暗号文cに付加されている誤差や、四捨五入により加わった誤差は、この定数項の平文μと-μが切り替わる境界の位置にのみ影響を及ぼし、定数項の係数の大小への影響は無視できる程度に小さい。つまり、入力の誤差を排除しているものと解釈できる。また、ここで定数項の平文の値が変化する境界が移動しても問題ない幅が、正しくBootstrappingの処理を行うことができる誤差の限界であり、後述のトレードオフが発生する仕組みとなる。
【0045】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0046】
これに対して下記の演算を行い、
を得る。
「多項式環の剰余環」であるので(X
n+1)で割った余りを求めると、
が得られる。
【0047】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0048】
つまり、(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が得られた。
【0049】
(3)Public Key Switching
(2)のSampleExtractで得られたTLWE暗号文csは、秘密鍵[s]ではなく、秘密鍵[s']で暗号化されている
従って、TLWE暗号文csを復号することなく、TLWE暗号文csの鍵を秘密鍵[s]に差し替え、秘密鍵[s]で暗号化された状態に戻す必要がある。
そのためPublic Key Switchingの手法を説明する。
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ビットの固定小数に変換すると、
の形式で書くことができる。
この段階で誤差が増えるが、システムパラメータで絶対値の最大値を制約することができる。
Public Key Switching本体の処理として、以下のTLWE暗号文cxを計算する。
([0],b)の項は自明な暗号文なので、復号するとbであり、TLWE暗号文cxを復号した結果を計算すると、
である。
s’
iは、jに対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【0050】
ここで得られたTLWE暗号文cxは、Gate Bootstrappingの入力としたTLWE暗号文cと同じ秘密鍵[s]で暗号化されている。
Public Key Switchingの処理を行うことにより、秘密鍵[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演算ができるようになる。ここで、NAND演算は論理演算の分野においてそれ単体で完備性を備える演算である。すなわち、NAND演算さえ実現できれば、その組み合わせにより全ての論理演算が可能である。そのため、任意の数値を2進数で表現することにより、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0051】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の四捨五入で加わる誤差、CMuxで加わる誤差、Public Key Switchingで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0052】
上記したように、TFHEは0もしくは非0を平文として持ち、論理演算を行うBit-wise型の準同型暗号である。ただし
図4で説明したように平文は円周群{T}に対応づけられた0~1の実数である。従って、円周群{T}を区切った区間を順番に整数と対応付けることにより、整数を平文として持つInteger-wise型の準同型暗号として応用することが出来る。
【0053】
図6は、Integer-wise型に応用したTFHEを説明する図である。
図6に示すように、円周群{T}に対応づけた0~1の値域をt個に分割する。TLWE暗号文において、平文が取り得る値は、値域0~1を分割したt個の値-(t/2)から(t/2)-1であり、(t/2)-1が1つのTLWE暗号文に記録できる整数の最大値である。
図6に例示するように、t=10として0~1の値域を10個に分割する場合には、暗号文は-5、-4、-3、-2、-1、0、1、2、3、4の整数を表現することが出来る。これらの整数値は、円周群{T}の0~1の値域をt=10個に区切った、-5/t、-4/t、-3/t、-2/t、-1/t、0/t、1/t、2/t、3/t、4/tを中心とする区間に割り当てられる。このようにすることで、
図6に示すように、1/2を中心とする、整数で表現した際の最小値となる領域から反時計回りに連続して整数を割り当てることが出来る。
【0054】
図6に示すように、円周群{T}上の0(1)は、-1/(2t)~1/(2t)の領域の範囲内にある。円周群{T}上における暗号文の平文は、必要に応じて例えば1/(2t)に基づいたオフセットを、
図6の状態に加算あるいは減算して領域内の位置(円周群{T}上の位置)を調整することが出来る。
本質的に変わることはないが、下記に説明する実施形態では、
図6の説明とは円周群の分割数tの意味が異なっている。
【0055】
図7は、本実施形態におけるInteger-wise型TFHEを説明する図である。
図7に示すように、本実施形態の暗号文は、円周群{T}の値域全体(0~1)を2t個に分割している。
tの値を大きくして円周群{T}を細かく分割するとTLWE暗号文に記録可能な整数値の範囲をより大きくできるが、細かく分割しすぎると平文に付加する誤差範囲が小さくなりすぎ、暗号の強度が低下するという問題がある。この点については後に説明する。
円周群{T}を分割した1/(2t)の区間毎に、整数値が割り当てられTLWE暗号文が取り得る平文整数の値は-tからt-1である。t-1が1つのTLWE暗号文に記録できる整数の最大値であり、-tが1つのTLWE暗号文に記録できる整数の最小値である。
図6の場合と同様に平文に対してオフセットを付加していない(平文に対するオフセットが0)状態を
図7(b)に示している。
図7(a)は、
図7(b)に示す暗号文の平文に対して、例えば+1/(4t)のオフセットを付加した状態を示している。オフセットを付加することによって、円周群{T}のスライス割りを変更することが出来る。
なお、下記の説明では、円周群の右半面、左半面とは、オフセットを1/(4t)だけ付与した
図7(a)の状態に準拠するものとする。
例えば円周群を0~1と表現する場合は0~0.5が右半面、0.5~1が左半面である。同様に、円周群を-0.5~0.5として表現する場合は-0.5~0が左半面、0~0.5が右半面である。これらの表現は、円周群上での座標をどのように表現するかの違いであり、本質的な違いはない。
また、円周群上の加減算には方向があるため、本実施形態では仮に反時計回りを正(プラス)の方向とし、時計回りを負(マイナス)の方向とする。つまり、円周群上のある要素に0.25を加算した結果は、元の要素から1/4周だけ反時計回りに移動した点の要素を指す。減算した場合も同様である。この取り決めは、上記の左半面や右半面の概念とあわせて図示するためのもので、実際にはどちらを正の方向としても、まったく同じ議論が通用する。
【0056】
図7(b)に示すオフセット未付加の状態では、円周群{T}上の0(1)が-1/(4t)~1/(4t)のスライス(0の前後における平文に付加したノイズ分が1つのスライス)内にある。
オフセットを付加することによって、
図7(a)に示すように、円周群{T}上の0から始まるスライス(0/(2t))に整数0を対応付けることが出来る。他のスライスはX/(2t)(Xは平文整数)から始まる。円周群{T}上の0は、bootstrappingを用いた処理を行う際に使用するテストベクタ多項式の次数0の項を参照するよう対応しているため、このようにオフセットを付ける方が、係数の並び順が自然で見やすくなる利点がある。
図7(a)において、オフセットを付加された平文は、各スライス(例えば、3/(2t)から始まるスライス)の中央に、±1/(4t)の誤差範囲内で位置する。このとき、正規分布の平均が例えば3/(2t)+1/(4t)となり、ほとんどの場合に±1/(4t)の誤差範囲内に分布することで、3/(2t)から始まるスライスの中央に平文が分布する。
オフセットを付加した平文は、
図7(a)において、3/(2t)のスライスにのみ図示しているが、あくまで例示であり、全てのスライスに始点となる値にオフセットを付した平文が存在する。
図8についても同様である。
【0057】
図7(a)の暗号文は、円周群{T}の右半面をt個に分割し、左半面をt個に分割している。円周群{T}の右半面は0及び正の平文整数(0~t-1)に対応し、左半面は負の平文整数(-1~-t)に対応している。1ブロック(スライス)の幅は1/(2t)である。
整数値は、円周群{T}の0~1(-1/2~1/2)の値域を2t個に区切った、夫々-t/(2t)~(t-1)/(2t)から始まるスライスに割り当てられる。
非負の整数は、右半面の0/(2t)、1/(2t)、…、(t-3)/(2t)、(t-2)/(2t)、(t-1)/(2t)から始まるスライスに割り当てられる。負の整数は、左半面の-t/(2t)、-(t-1)/(2t)、-(t-2)/(2t)…、-1/(2t)から始まるスライスに割り当てられる。
これらのスライスは、夫々始点となる値に+1/(4t)のオフセットを付加した値を中心とするスライスである。1/(4t)のオフセットは、1/(2t)のスライス幅の半分に相当する。1/(4t)のオフセットを整数表現に含めて表すと、便宜上+0.5のオフセットと表現することが出来る。
【0058】
図7(a)に示すように、2t=8(t=4)として円周群の値域を8個に分割する場合には、円周群{T}の右半面で0から3(=t-1)の整数を表現し、左半面で-4(=-t)から-1の整数を表現することが出来る。すなわち、暗号文全体は-4、-3、-2、-1、0、1、2、3の整数を表現することが出来る。
これらの整数値は、円周群{T}の値域を2t=8個に区切った、-4/(2t)、-3/(2t)、-2/(2t)、-1/(2t)、0/(2t)、1/(2t)、2/(2t)、3/(2t)から始まる区間に割り当てられる。1/2から始まる領域から反時計回りに連続して整数を割り当てている。
なお、上記の0.5のオフセットを考慮すると、右半面の例えば1/(2t)から始まるスライスは、1.5/(2t)を中心とするスライスであるし、左半面の例えば-4/(2t)から始まるスライスは、-3.5/(2t)を中心としたスライスである。オフセットを含んで表現される整数は、上から反時計回りに-3.5、-2.5、-1.5、-0.5、0.5、1.5、2.5、3.5である。
【0059】
暗号処理装置1は、TFHEのシステムパラメータを設定する。このとき、暗号処理装置1は、Gate Bootstrapping後に得られる暗号文において、平文に付加される誤差の範囲が±1/(4t)未満となるようにシステムパラメータを設定する。
加算を行うTLWE暗号文caとTLWE暗号文cbとがあるとする。
TLWE暗号文ca、cbは、
図7(a)に示す構成のTLWE暗号文であり、右半面をt個に分割し、円周群{T}全体を2t個に分割している。
本実施形態では、TLWE暗号文caとTLWE暗号文cbの夫々において、円周群{T}の右半面を非負の整数である平文に対応させ、左半面を負の整数である平文に対応させる。
TLWE暗号文caは、秘密鍵がなければ知り得ない整数aに対応する実数a/(2t)+1/(4t)を平文として有する。
TLWE暗号文cbは、秘密鍵がなければ知り得ない整数bに対応する実数b/(2t)+1/(4t)を平文として有する。
これらは誤差なしの平文であり、実際には上記の範囲の誤差が付与された値が平文として格納されている。
TLWE暗号文ca、cbの平文がa/(2t)、b/(2t)であるのは、円周群全体を2t個に分割していることに基づく。上記に説明したように、平文に付加している+1/(4t)のオフセットは、円周群の0から始まるスライスを整数0と対応付けながら平文をスライスの中央に位置させる。
【0060】
図7(a)について説明したように、TLWE暗号文ca、TLWE暗号文cbにおいても、a/(2t)+1/(4t)、b/(2t)+1/(4t)と平文にオフセットを付加している。
オフセットの値1/(4t)は例でありこれに限定されるものではないが、オフセットの値に応じて、多項式やパラメータを調整する必要がある。
【0061】
図7(a)において、負の整数を扱う円周群{T}の左半面では、上から反時計回りに、-t/(2t)から始まるスライス~-1/(2t)から始まるスライスを用いて整数-t~-1を表現する。
0と正の整数(非負の整数)を扱う円周群{T}の右半面では、下から反時計回りに、0/(2t)から始まるスライス~t-1/(2t)から始まるスライスを用いて、整数0~t-1を表現する。
【0062】
本実施形態は、Integer-wise型TFHEを用いた暗号文の比較演算に関する。
暗号化されていない整数の比較演算をCPUで実装する場合、比較命令の実態としては結果を破棄する減算とすることがある。これは、減算命令を実行するとその結果に応じてフラグレジスタが変化するためである。減算結果のフラグのうち演算結果が0であることを示すフラグが立っていれば、直前の減算では2つの値が等しいことがわかる。overflowやcarryなどのフラグを見れば、比較を行ったどちらの値が大きいかがわかる。
Integer-wise型のTFHEで同様のことを行う場合、2つのTLWE暗号文を準同型減算し、演算結果のTLWE暗号文の平文が円周群{T}上のどこに位置するかにより判断する方法が考えられる。準同型減算のあとに適切なLUTを用いることで、フラグレジスタに相当する値を得られると考えられる。
【0063】
円周群{T}の右半面(例えば0~0.5)のみを使用する場合、つまり非負の整数のみを扱う場合、暗号文同士の準同型減算結果ca-cbの平文が円周群{T}の右半面の区間にあれば繰り下がりは発生せず、φ(ca)≧φ(cb)である。
反対に、準同型減算結果ca-cbの平文が円周群{T}の左半面(例えば0.5~1.0)の区間にあれば減算結果は負であり、φ(ca)<φ(cb)である。
繰り上がりに用いる比較演算の場合も同様に、多倍長整数の1分割単位を構成するTLWE暗号文同士の準同型加算を行った結果、準同型加算結果ca+cbの平文が円周群{T}の右半面の区間にあれば繰り上がりは発生していない。
反対に、準同型加算結果ca+cbの平文が円周群の左半面の区間にあれば、繰り上がりが発生している。
【0064】
ところが、円周群を無駄なく使うために円周群全体(例えば0~1.0)を用いる場合には以下のような問題がある。
円周群全体を2t個のスライスに分割して0~2t-1の整数と対応付けた場合で、暗号文同士の準同型加算ca+cbの平文が、整数表現で3だったとする。この結果だけでは、暗号文同士の準同型加算において、0+3を計算したために繰り上がりなしで3になったのか、t+1とt+2を加算して2t+3となった結果、繰り上がりが発生して3になったのか判断がつかない。
【0065】
円周群{T}全体(例えば0~1.0)を-t~t-1の整数と対応付けた場合は、負の数を含むためさらに複雑である。
暗号文同士の準同型加算ca+cbの平文が、整数表現で-2であったとする。この結果だけでは、暗号文同士の準同型加算において、0+(-2)を計算したために繰り下がりなしで-2になったのか、(t-1)+(t-1)を計算して2t-2となった結果、繰り上がりが発生して-2になったのか判断がつかない。
また、(-t)+(-t)の場合は-2tとなり、加算であるにも関わらず、繰り下がりが発生することもある。
従って、円周群{T}全体を整数と対応付けた場合は、繰り上がりが発生している、繰り下がりが発生している、繰り上がりも繰り下がりも発生していない、という3通りの可能性がある。
したがって、多倍長での加減算を行う際はすべてのパターンで適切な処理を行う必要がある。
【0066】
以下に、Integer-wise型TFHEを用いた暗号文の比較演算を説明する。
以下の説明では、平文a+bに対応する準同型加算ca+cbを行う場合について説明するが、TLWE暗号文cbの平文bの値(符号)を予め反転させることで、平文a-bに対応する準同型減算も同様に行うことができる。
平文a+bに対応する準同型加算ca+cbにおける繰り上がり、繰り下がりの情報は、平文aと平文b、すなわち暗号文caと暗号文cbの比較演算の結果として利用することが出来る。
本実施形態の暗号処理装置1は、BlindRotateの出力となるTRLWE暗号文に対して平文の多項式の自明な暗号文の加算を行ってから再度BlindRotateを行うことにより、比較演算の結果として、繰り上がりの有無、繰り下がりの有無に対応する暗号文を算出する。
【0067】
下記の[第1実施例]、[第2実施例]は、多倍長演算の1分割単位を構成するTLWE暗号文同士の比較を説明する。
[第1実施例]
図2を参照して説明する。
まず、暗号処理装置1は、入力を受け付けたTLWE暗号文caを第1演算部12に入力し、TLWE暗号文caを符号反転したTLWE暗号文-caに対して、1/(4t)を平文として有する自明な暗号文(0,1/(4t))を準同型加算する準同型演算を行い、-ca+(0,1/(4t))に対応する新たな暗号文ca’を得る。
暗号処理装置1は、TLWE暗号文ca’を第1Bootstrapping部41に入力し、暗号文ca’に対して、全係数が1/16である多項式F1(X)
をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r1を得る。
【0068】
次に、暗号処理装置1は、第2演算部13にTRLWE暗号文r1を入力し、TRLWE暗号文r1から、多項式F1(X)を平文とする自明な暗号文(0,F1(X))を準同型減算して、r1-(0,F1(X))に対応する新たなTRLWE暗号文r1’を得る。
暗号処理装置1は、TLWE暗号文caとTLWE暗号文cbとを第3演算部14に入力し、TLWE暗号文caとTLWE暗号文cbとを準同型加算し、さらに自明な暗号文(0,1/(4t))を準同型減算し、ca+cb-(0,1/(4t))に対応する新たなTLWE暗号文ccを得る。ここで自明な暗号文(0,1/(4t))を減算するのは、TLWE暗号文caとTLWE暗号文cbとには夫々整数精度で見たときに0.5に相当するオフセット(円周群{T}上では1/(4t))があり、それを消去する定数項が必要であるからである。
暗号処理装置1は、TLWE暗号文ccを第2Bootstrapping部42に入力し、TLWE暗号文ccに対して、TRLWE暗号文r1’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2を得る。さらに、暗号処理装置1は、TRLWE暗号文r2に対して0の位置でSampleExtractを行い、0次の項(定数項)の係数を取り出して暗号文c3を得る。
なお、第3演算部14によるTLWE暗号文caとTLWE暗号文cbとの準同型演算を行う必要がなく、TLWE暗号文caと同じ平文を有するTLWE暗号文ccを用いれば良いこともある。その場合、TLWE暗号文ccに対する第2Bootstrapping部42によるBlindRotateは、TLWE暗号文caに対するBlindRotateと見なすことが出来る。
【0069】
図8乃至
図12は、暗号文の加算結果を表す暗号文を説明する図である。
なお本実施形態では、円周群{T}の値域を0~1とし、0.5(1/2)を境界とした右半面に非負の整数を割り当て、左半面に負の整数を割り当てている。以下の説明では、円周群{T}の右半面の区間は0~0.5の範囲であり、左半面の区間は0.5~1の範囲である。
なお、円周群{T}の値域は0~1ではなく、-0.25~0.75や-0.5~0.5などであってもよい。
【0070】
図8は、TLWE暗号文caの平文aが整数として非負(a≧0)のとき、平文a+bがどの値の時に、上記TLWE暗号文c3の平文として何が得られるかを示している。
TLWE暗号文caの平文a(円周群{T}上の値がa/(2t))が整数として非負の場合、
図8に示すように平文aは円周群{T}の右半面の区間に存在する。
そのようなTLWE暗号文caに対して暗号文cbを円周群{T}上で準同型加算した暗号文ca+cbの平文a+bが、反時計回りで、円周群{T}上の0.5を超えて左半面に至る大きな値になる場合に、繰り上がりが発生する。その場合、
図8に示すように、TLWE暗号文c3の平文φ(c3)は1/8となる。
平文aが円周群{T}の右半面にあれば、φ(ca+cb)、すなわち平文a+bが時計回りにも反時計回りにも0.5+a/(2t)の境界を超えることはない。平文a+bは、a/(2t)を基準としてみたときに±0.5の範囲に必ず収まるためである。そのため、繰り上がりがある場合でどれだけ平文bの値が大きくても、TLWE暗号文c3の平文φ(c3)が0になることはない。
【0071】
図9は、TLWE暗号文caの平文aが整数として負(a<0)のとき、平文a+bがどの値の時に、上記TLWE暗号文c3の平文として何が得られるかを示す図である。
TLWE暗号文caの平文a(円周群{T}上の値がa/(2t))が整数として負の場合、
図9に示すように平文aは円周群{T}の左半面の区間に存在する。
そのようなTLWE暗号文caに対してTLWE暗号文cbを円周群{T}上で準同型加算した暗号文ca+cbの平文a+bが、時計回りで、円周群{T}上の0.5を超えて右半面に至る小さい値になる場合に繰り下がりが発生する。その場合、
図9に示すように、TLWE暗号文c3の平文φ(c3)は-1/8となる。
平文aが円周群{T}の左半面の区間にあれば、φ(ca+cb)、すなわち平文a+bが時計回りにも反時計回りにも0.5+a/(2t)の境界を超えることはない。平文a+bは、a/(2t)を基準としてみたときに±0.5の範囲に必ず収まるためである。そのため、繰り下がりがある場合にどれだけ平文bの値が小さくても、TLWE暗号文c3の平文φ(c3)が0になることはない。
【0072】
図8、
図9を総合すると、TLWE暗号文c3の平文φ(c3)は、0又は±1/8のいずれかの値となる。
平文aが円周群{T}の右半面の区間に存在し、a+bが繰り上がる場合には、TLWE暗号文c3の平文φ(c3)は1/8となり、繰り上がらない場合は、TLWE暗号文c3の平文φ(c3)は0もしくは-1/8となる。
一方、平文aが円周群{T}の左半面の区間に存在し、a+bが繰り下がる場合には、TLWE暗号文c3の平文φ(c3)は-1/8となり、繰り下がらない場合は、TLWE暗号文c3の平文φ(c3)は0もしくは1/8となる。
つまり、TLWE暗号文c3の平文φ(c3)が0である場合は、a+bに繰り上がり、繰り下がりが発生しない。しかし、-1/8もしくは1/8の場合には平文aが負であるか否かによって繰り上がりおよび繰り下がりの有無が替わる。
ただしTLWE暗号文caを復号しない限り平文aの値を知り得ない。従って、TLWE暗号文c3だけでは、平文aが円周群{T}上の右半面の区間にあるか、円周群{T}上の左半面の区間にあるか、つまりa+bが繰り上がるのか繰り下がるのかを特定することが出来ない。
従って、平文aが円周群{T}上の右半面の区間にあるか、円周群{T}上の左半面の区間にあるかを表す暗号文が必要である。
【0073】
再び
図2を参照し、暗号処理装置1は、TRLWE暗号文r1を第1Bootstrapping部41に入力し、TRLWE暗号文r1に対して、円周群{T}上のn-1の位置(n-1次の項、すなわち最上位の項)でSampleExtractを行い、TLWE暗号文c2を得る。
TLWE暗号文c2は、-caを用いてすべての項の係数が1/16である上記F1(X)をBlindRotateしたTRLWE暗号文r1から抽出された暗号文であるため、上記多項式F1(X)を次数の低い方向に-aだけ回転させた暗号文である。換言すると、TLWE暗号文c2は、上記多項式F1(X)を次数の高い方向にaだけ回転させている。
平文整数a≧0つまりTLWE暗号文caの平文φ(ca)が円周群の右半面の区間に位置する場合には、TLWE暗号文c2は、F1(X)の係数である1/16がそのまま平文となる。
平文整数a<0つまりφ(ca)が円周群の左半面の区間に位置する場合、TLWE暗号文c2は、F1(X)の係数である1/16の符号を反転させた-1/16が平文となる。
このようなTLWE暗号文c2は、TLWE暗号文caの平文aが円周群{T}上の右半面の区間にあるか、円周群{T}上の左半面の区間にあるかの情報を平文として有する暗号文である。
【0074】
暗号処理装置1は、第4演算部15にTLWE暗号文c2、c3を入力し、c3+2×c2を計算してTLWE暗号文c4を算出する。これは通常の準同型スカラ倍と準同型加算とによって実行可能である。
TLWE暗号文caの平文aが円周群{T}の左半面の区間にある場合は、TLWE暗号文c2の平文が-1/16、TLWE暗号c3の平文が-1/8、0、1/8のいずれかであるので、TLWE暗号文c4の平文はc3の平文にそれぞれ(-1/16)×2=-1/8を加えた0、-1/8、-1/4のいずれかである。TLWE暗号文c4において、TLWE暗号文c3の平文の値が円周群{T}のマイナスの方向に1/8ずれる。従って、平文aが円周群{T}の左半面の区間にありかつ繰り下がりがある場合にのみ、TLWE暗号文c4の平文φ(c4)は-1/4となる。
平文aが円周群{T}の右半面の区間にある場合は、TLWE暗号文c2の平文が1/16、TLWE暗号c3の平文が-1/8、0、1/8のいずれかであるので、TLWE暗号文c4の平文はc3の平文にそれぞれ(1/16)×2=1/8を加えた0、1/8、1/4のいずれかである。TLWE暗号文c4において、TLWE暗号文c3の平文の値が円周群{T}のプラスの方向に1/8ずれる。従って、平文aが円周群{T}の右半面の区間にありかつ繰り上がりがある場合にのみ、φ(c4)は1/4となる。
平文aが円周群{T}の右半面の区間にあり整数として0である場合は、繰り上がりも繰り下がりも発生せず、また平文aが円周群{T}の左半面の区間にある場合に繰り上がりが発生したり、平文aが円周群{T}の右半面の区間にある場合に繰り下がりが発生したりすることもない。
【0075】
従って、TLWE暗号文c4の平文φ(c4)が1/4である場合には繰り上がりがあり、TLWE暗号文c4の平文φ(c4)が-1/4である場合には繰り下がりがある、ということになる。
TLWE暗号文c4は、その平文φ(c4)の値で、繰り上がりの有無、繰り下がりの有無が判別可能な暗号文である。
すなわち、TLWE暗号文c4のみで、準同型加算ca+cbにより繰り上がりが発生したか、繰り下がりが発生したか、どちらも発生していないか、を判別可能であると言える。
【0076】
暗号処理装置1は、TLWE暗号文c4を第3Bootstrapping部43に入力し、TLWE暗号文c4に対して下記の多項式F1’(X)
をテストベクタ多項式としたBlindRotateを行い、TRLWE暗号文r3を得る。
暗号処理装置1は、TRLWE暗号文r3に対して、円周群{T}上の複数個所(2n×5/16、2n×3/16の2箇所)でSampleExtractを行い、TLWE暗号文cd、ceを取り出す。そして、暗号処理装置1は、暗号文cd、ceに対して、1/(2t)を平文とする自明な暗号文(0,1/(2t))を準同型加算する。
2n×5/16でのSampleExtractで取り出したTLWE暗号文cdに(0,1/(2t))を加算したのがTLWE暗号文c5である。
2n×3/16でのSampleExtractで取り出したTLWE暗号文ceに(0,1/(2t))を加算したのがTLWE暗号文c6である。
【0077】
暗号処理装置1は、1/4との比較(繰り上がりの有無)と、-1/4との比較(繰り下がりの有無)とを同時に行い、TLWE暗号文c5、TLWE暗号文c6を算出する。
TLWE暗号文c5は、繰り上がりがある(TLWE暗号文c4の平文が1/4である)場合に平文φ(c5)が1/(4t)(整数としては0)となり、繰り上がりがないTLWE暗号文c4の平文が-1/4である)場合に1/(2t)+1/(4t)(整数として1)となる暗号文である。
TLWE暗号文c6は、繰り下がりがある場合に平文φ(c6)が1/(4t)となり(整数としては0)、繰り下がりがない場合に1/(2t)+1/(4t)となる(整数としては1)暗号文である。
以上の処理により、繰り上がりの有無を2値で表すTLWE暗号文c5、繰り下がりの有無を2値で表すTLWE暗号文c6が得られた。
【0078】
BlindRotateに用いる多項式F1’(X)の係数を変更したり、SampleExtract後の暗号文に対するオフセットとしての自明な暗号文の平文を調整したり、TLWE暗号文c5やTLWE暗号文c6に対して追加の演算を行うことにより、応用先に適した任意の2値の暗号文に変換することが出来る。
TLWE暗号文caとTLWE暗号文cbの2つの暗号文を単純に比較する場合、TLWE暗号文caと、平文bの符号を反転して-bとしたTLWE暗号文cbとに対して上記の演算を行うことで、TLWE暗号文caとTLWE暗号文cbのどちらが大きいかを判断することが出来る。
【0079】
[実施例2]
次に、
図3を参照して、[実施例2]として繰り上がり、繰り下がりのフラグとしての情報を持つ暗号文と同時に、平文a+b自体に対応する暗号文(加減算の結果)を得る場合を考える。これは、特に多倍長演算への応用が考えられる。
[実施例2]は、[実施例1]とは使っている定数が異なるだけである。
[実施例1]でca+cbの準同型加算を行っており、これをそのまま用いることも出来るが、複数の演算を行うためには、階段状多項式によりBootstrappingを行うなどにより途中で誤差の削減を行う必要がある。
しかし、円周群全体を利用している場合、単純に階段状多項式でBootstrappingを行うと負の値の場合に元の値に戻らない。従って、多項式F
idによりBootstrappingを2回行う必要がある。
2回のBootstrappingとは、下記に説明する負の数を扱う円周群{T}の左半面の値を上下反転するBootstrapping(1回目)と、反転させた左半面を基に戻すBootstrapping(2回目)である。
【0080】
多項式F
idによるBootstrappingを説明する。
暗号処理装置1は、係数を次数の順に見たときに階段状となる1変数多項式の関数(一変数関数)F
id(X)
を用いて、TLWE暗号文caに対するBootstrapping(1回目)を行い、負の数を扱う円周群{T}の左半面の値(対応する整数値)を上下反転させた、
図10に示すTLWE暗号文ca1を算出する。
Gate Bootstrappingは、BlindRotate、SampleExtract、Public Key Switchingを含む。
暗号化された整数値に対する一変数関数を演算するには、上記論文(非特許文献1)のGate Bootstrappingを拡張した手法を用いることが出来る。この手法は、論文「Bootstrapping in FHEW-like Cryptosystems, Daniele Micciancio and Yuriy Polyakov Duality Technologies February 23,2020」に記載されている。開示されている手法では、テストベクタの係数を一定の定数μにするのではなく、関数の結果を設定することで、TLWE暗号文の値によって異なる結果を得る。
【0081】
図10は、TLWE暗号文ca1の平文に対応する円周群{T}上の値が元のTLWE暗号文caではどの整数値と対応していたのか、もしくはTLWE暗号文caの平文として円周群{T}上のどこにあるものがTLWE暗号文ca1としてどの整数値に対応させられるかを示している。
図10に示すように、多項式F
idを用いたBootstrappingの結果、暗号文ca1では、負の数として使う領域である左半面の並びが、TLWE暗号文caから上下反転している。
多項式F
idは、非負の整数0~t-1の暗号文の入力に対しては、同じ非負の整数0~t-1の暗号文を出力するとともに、平文に対して0.5のオフセットを付与する。多項式F
idは、負の整数-t~-1の暗号文の入力に対しては、整数-1~-tの暗号文を出力するとともに、平文整数に対して0.5のオフセットを付与する。
図7に示したように、TLWE暗号文caにおいて1つの整数が対応するスライスの幅は1/(2t)であり、TLWE暗号文ca1において平文整数aに0.5のオフセットを付与することは、平文の実数a/(2t)等に1/(4t)のオフセットを追加することである。平文に対する+1/(4t)のオフセット部分に整数表現に含めて表したものを+0.5と表現している。
【0082】
図7(a)において円周群{T}の右半面の区間に平文がある(平文が非負の数である)場合、多項式F
idを用いた上記処理の結果、TLWE暗号文ca1の平文整数は、
図10に示すように円周群{T}の同じスライス(領域)内に留まる。一方、平文が負の数-t~-1であって円周群{T}の左半面の区間に平文がある場合は、上記処理の結果、TLWE暗号文ca1の平文整数は、
図10に示すように円周群{T}における「上下」が反転する。
例えば、
図7に示すようにTLWE暗号文caにおける平文整数aが-1の場合、円周群{T}上の値としては-1/(2t)~0の区間にある。そのため、多項式F
idの最上位のブロックの項が符号反転して最下位に現れる。従って、第1Bootstrapping後のTLWE暗号文ca1の平文は、円周群{T}上の値として-1/2+1/(4t)、整数としては-tとなる。
【0083】
TLWE暗号文ca1における平文整数aが-tの場合は、円周群{T}上の値としては、-t/(2t)+1/(4t)=-1/2+1/(4t)となり、最も-1/2に近いブロックにある。多項式Fidの最下位のブロックの項の符号反転したものがBootstrapping(1回目)後のTLWE暗号文ca1として得られるため、TLWE暗号文ca1の平文は、円周群{T}上の値として-1/(4t)つまり整数として-1となる。
【0084】
図7における右半面は、下から反時計周りに0/(2t)から4/(2t)のスライスに0からt-1の整数が割り当てられ、
図7(a)の場合と平文整数の並びが変わっていない。
一方、左半面は、上から半時計回りに、-t/(2t)から-1/(2t)のスライスに-1~-tの整数が割り当てられ、
図7(a)の場合から並びが逆転している。
図10に示す暗号文ca1において、整数としては、円周群{T}の上から、-1、-2、-3、-4、0、1、2、3である。円周群{T}で正負の値が連続して並んでいる。
【0085】
図7(a)において、例えばTLWE暗号文caが-1の暗号文であった場合、平文は円周群{T}上の-1/(2t)~0の区間にあった。
上記処理の結果、TLWE暗号文ca1では、多項式F
idの最上位のブロックの項が符号反転して最下位に現れる。従って、
図7において、TLWE暗号文caの平文は、円周群{T}上の値として-1/2+1/(4t)である。この平文は
図7(a)では整数-t(=-4)に対応していたが、
図10に示す暗号文ca1では平文整数として元の-1を割り当てている。
図7(a)において、例えばTLWE暗号文caが-tの暗号文である場合、平文は円周群{T}上の-t/(2t)+1/(4t)前後に分布している(-1/2より少し大きい値である)ことから、平文は円周群{T}上の最も-1/2に近い区間にある。
上記処理の結果、TLWE暗号文ca1では、多項式F
idの最下位のブロックの項が符号反転して現れる。従って、
図10において、TLWE暗号文caの平文は、円周群{T}上の値として、-1/(2t)+1/(4t)である。この平文は
図7(a)では整数-1に対応していたが、
図10に示す暗号文ca1では元の暗号文caの平文整数として-t(=-4)を割り当てている。
このように、テストベクタ多項式F
id(X)によるbootstrappingの前後で割り当てる整数値を同じにした場合、TLWE暗号文ca1の場合には左半面の整数値の並び順が反転すると解釈することができる。
【0086】
一般化すると、平文が非負の数であるTLWE暗号文caの平文は、TLWE暗号文ca1ではa/(2t)+1/(4t)となり、平文整数としてはaのままである。
それに対して、平文が負の数であるTLWE暗号文caの平文は、TLWE暗号文ca1では-(t+1+a)/(2t)+1/(4t)である。
平文の分子だけを見た場合、平文整数aが-1の場合、-(t+1+a)=-{t+1+(-1)}=-tとなり、平文整数aが-tの場合、-(t+1+a)=-{t+1+(-t)}=-1となることからも分かる。TLWE暗号文cbの平文を整数としてみた時と合致していることが確認できる。
【0087】
この処理の結果、多項式の項に加えた1/(4t)の項によってオフセットが平文に付加されるため、
図7のTLWE暗号文caと同様に、
図10のTLWE暗号文ca1においても、円周群の0の位置がスライスの境界となっている。
このように、平文が負の数である場合、整数が割り当てられる平文が変化する。言い換えると、TLWE暗号文ca1の平文を整数シンボルで見る際は暗号文caの整数と同じ値であるとしたとき、TLWE暗号文ca1の平文のスライスと整数の対応は、TLWE暗号文caの時と異なっている。この対応関係を見たときに、円周群における平文の並び自体は、TLWE暗号文caとTLWE暗号文ca1との間で変わらないが、負の数が割り当てられる左半面では、平文に割り当てられる平文整数の並びが逆転するのである。
単純に並びが反転しているだけであるため、テストベクタ多項式F
id(X)によるbootstrappingを2回行うことにより、元の並び順での表現に戻る。つまり平文を円周群{T}上の値で見たときに同じスライス内に戻ってくることとなる。ただし、平文に加えられている誤差はbootstrappingの性質により十分に軽減された状態となっているため、この処理は円周群の全面を用いる際のbootstrappingとして利用できる。
【0088】
t=4(2t=8)である
図10では、暗号文の平文に上記0.5のオフセットが加わっているため、スライスの中央に位置する平文は、円周群{T}の上(1/2)から左回り(反時計回り)に、-3.5/(2t)、-2.5/(2t)、-1.5/(2t)、-0.5/(2t)、0.5/(2t)、1.5/(2t)、2.5/(2t)、3.5/(2t)である。
これらのスライスに、TLWE暗号文ca1を生成する入力となった暗号文caの平文整数として反時計回りに-1、-2、-3、-4、0、1、2、3が割り当てられている。0.5のオフセットを含んで表現する整数は、円周群{T}の上から、-0.5、-1.5、-2.5、-3.5、0.5、1.5、2.5、3.5となる。
【0089】
[実施例2]では、manyLUTと呼ばれる手法を導入することで、上記したF
idによる1回目のBootstrappingを比較演算に組み込み、BlindRotateの回数を削減する。
manyLUTは、共通のTLWE暗号文を用いて、異なるテストベクタ多項式に対するBlindRotateを行う(異なるルックアップテーブルを参照する)処理である。
[実施例1]と同様に、暗号処理装置1は、第1演算部12にTLWE暗号文caを入力し、TLWE暗号文caを反転した-caに対して、1/(4t)を平文として有する自明な暗号文を準同型加算し、-ca+(0,1/(4t))に対応するTLWE暗号文ca’を得る。
暗号処理装置1は、TLWE暗号文ca’を第1Bootstrapping41に入力し、暗号文ca’に対して、以下の多項式F2(X)
をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r11を得る。ただし、通常はTLWE暗号文ca’の各要素を2n倍して四捨五入するところを、2n倍してから最下位ビットが0になるように、その上のビットで四捨五入を行う。これはmanyLUTで行う通常の処理であり、BlindRotateの前後で平文多項式の各々の項が巡回する際に、少なくとも次数の偶奇は変化しないようにするための処理である。
多項式F2(X)は、[実施例1]の多項式F1(X)とは異なり奇数次数の係数が0であり、奇数次数の項がない多項式となっている。これは、manyLUTを行うために、指数部の偶奇によって持たせる値を変えているからである。
【0090】
暗号処理装置1は、第2演算部13にTRLWE暗号文r11を入力し、TRLWE暗号文r11を2倍して、さらに下記の多項式F3(X)
を平文として有する自明な暗号文(0,F3(X))を準同型加算し、r11×2+(0,F3(X))に対応するTRLWE暗号文r11’を得る。
暗号処理装置1は、第3演算部14にTLWE暗号文caとTLWE暗号文cbを入力し、TLWE暗号文caにTLWE暗号文cbを準同型加算し、自明な暗号文(0,1/(4t))を準同型減算しTLWE暗号文cc’を得る。
暗号処理装置1は、第2Bootstrapping部42に暗号文cc’を入力し、暗号文cc’に対してTRLWE暗号文r11’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2’を得る。ここで、通常は各係数を2n倍して四捨五入するところ、さらに最下位のビットが0になるように調整をする。つまり、要約すると2n倍して最下位ビットとなる位置で四捨五入を行う。例えばn倍して四捨五入してから、追加で2倍すればよい。これはmanyLUTで行う通常の処理である。
そして、暗号処理装置1は、TRLWE暗号文r2’に対して0の位置でSampleExtractを行うことにより、TRLWE暗号文r2’の0次の項(定数項)の係数を取り出し、TLWE暗号文c3’を得る。
なお、第3演算部14によるTLWE暗号文caとTLWE暗号文cbとの準同型演算を行う必要がなく、TLWE暗号文caと同じ平文を有するTLWE暗号文cc’を用いることもある。その場合、TLWE暗号文cc’に対する第2Bootstrapping部42によるBlindRotateは、TLWE暗号文caに対するBlindRotateと見なすことが出来る。
【0091】
[実施例1]と同様に、暗号処理装置1は、第1Bootstrapping部41によるBlindRotateの出力となるTRLWE暗号文r11に対して定数多項式F3(X)の加算を行ってから、再度第2Bootstrapping部42によるBlindRotateを行っている。定数多項式F3(X)を加算したTRLWE暗号文r11’は、manyLUTを行うために、偶数次と奇数次で性質が異なっている。
多項式F2(X)は、奇数次数の係数がすべて0であるため、第1Bootstrapping部41よるBlindRotateでどれだけ係数を巡回させても、TRLWE暗号文r11の段階では、奇数次数すべての係数は0である。TRLWE暗号文r11’において、TRLWE暗号文r11に定数多項式F3(X)を加算するとき、TRLWE暗号文r11の奇数次数項の係数の値に、多項式F3(X)の奇数次数の項の係数の値を加算する。
0に対する加算であり、TRLWE暗号文r11’の奇数次数の項では、多項式F3(X)の奇数次数の係数の値が設定される。この奇数次に加えている係数は、上記した多項式Fidと同じである。すなわち、TRLWE暗号文r11’の奇数次数の項の係数は、多項式Fidの奇数次数の項の係数である。
【0092】
暗号処理装置1は、第2Bootstrapping部42によって、ca+cbに基づく共通のTLWE暗号文cc’に対して、TRLWE暗号文r11’の奇数次数に対するBlindRotateと、偶数次数に対するBlindRotateと、を同時に行う。奇数次側は多項式Fidによる処理となり、偶数次数側は、多項式F2(X)の偶数次による処理となる。
多項式F2(X)において、0とするのは、偶数次の係数であってもよく、その場合は、上記と異なり、Fidの係数をF2(X)の偶数次側に加算するように多項式F3(X)を構成することになる。
本実施形態では、manyLUTを行うテストベクタ多項式の偶数次数、奇数次数の項のどちらかを係数0としていることで、係数の0とした方の次数について前半のBlindRotate(第1Bootstrapping41によるBlindRotate)による影響を無視することが出来る。0の列をどれだけ巡回させても変化がないからである。そして、後から階段状など特徴を持つテストベクタ多項式を加算することで、後半のBlindRotate(第2Bootstrapping42によるBlindRotate)によってca+cbによるBlindRotateの影響のみを受けた結果を得ることができる。これは、manyLUTでは偶数次数、奇数次数の項を用いて別の演算を同時に行うことができるためである。
【0093】
図11は、偶数次に関して、TLWE暗号文caの平文aが整数として非負(a≧0)のとき、ca+cbによって得られるTLWE暗号文c3’の平文がどのように選択されるかを示している。
TLWE暗号文caの平文a(円周群{T}上の値がa/(2t))が整数として非負の場合、
図11に示すように平文aは円周群{T}の右半面の区間に存在する。
そのようなTLWE暗号文caに対して円周群{T}上でTLWE暗号文cbを準同型加算した暗号文ca+cbの平文a+bが、反時計回りで、円周群{T}上の0.5を超えて左半面に至る場合、繰り上がりが発生する。その場合、
図11に示すように、TLWE暗号文c3’の平文φ(c3’)は-1/32-1/8となる。
平文aが円周群{T}の右半面にあれば、φ(ca+cb)、すなわち平文a+bが時計回りにも反時計回りにも0.5+a/(2t)の境界を超えることはないため、繰り上がる量が多すぎてTLWE暗号文c3’の平文φ(c3’)が0となることはない。平文a+bは、a/(2t)を基準としてみたときに±0.5の範囲に必ず収まるためである。
【0094】
図12は、偶数次に関して、TLWE暗号文caの平文aが整数として負(a<0)のとき、ca+cbによって得られるTLWE暗号文c3’の平文がどのように選択されるかを示している。
TLWE暗号文caの平文a(円周群{T}上の値がa/(2t))が整数として負の場合、
図12に示すように平文aは円周群{T}の左半面の区間に存在する。
そのようなTLWE暗号文caに対して円周群{T}上でTLWE暗号文cbを準同型加算した暗号文ca+cbの平文a+bが、時計回りで、円周群{T}上の0.5を超えて右半面に至る場合、繰り下がりが発生する。その場合、
図12に示すように、暗号文c3’の平文φ(c3’)は1/32+1/8となる。
平文aが円周群{T}の左半面の区間にあれば、φ(ca+cb)すなわち平文a+bが時計回りにも反時計回りにも0.5+a/(2t)を超えることはないため、繰り下がる量が多すぎてTLWE暗号文c3’の平文φ(c3’)が0となることはない。平文a+bは、a/(2t)を基準としてみたときに±0.5の範囲に必ず収まるためである。
【0095】
TLWE暗号文c3’の平文φ(c3’)として得られる可能性がある値は、多項式F1(X)と多項式F3(X)で用いた1/32と1/8の加算減算で得られるすべての組み合わせの値(夫々が正・負の場合で4通り)が得られる。
TLWE暗号文c3’の平文φ(c3’)は、±1/8と±1/32の和から得られるすべての組み合わせの中から何れか1つが選ばれる。得られる値の種類が多いことは、TLWE暗号文c3’から多くの情報が得られることを意味しており、効率的に計算を行う上で重要である。
【0096】
[実施例2]において、第1Bootstrapping部41による多項式F2(X)をテストベクタとした1回目のBlindRotateで得られたTRLWE暗号文r11に対して多項式F3を(X)準同型加算(r11×2+(0,F3(X))し、これを、第2Bootstrapping部42による2回目のBlindRotateにおけるテストベクタ多項式からなる自明な暗号文の代わり(回転される側)として用いる。
途中の第2演算部13による準同型加減算がなければ、BlindRotateの回転する量としてのTLWE暗号文を加減算するのみで済ませても同一の結果が得られる上、より高速である。しかし、その場合、多項式F2(X)が全係数の値が同じ「フラットな多項式」である場合は、2種類の値しか得ることが出来ない。
それに対して、本実施形態では、途中で多項式F3(X)を加算することで、テストベクタとしての多項式F2(X)、F3(X)が何れもフラットな多項式であっても、
図11、
図12に夫々示すような4種類の平文を取得しうる。
すなわち、BlindRotate→準同型加減算→BlindRotateと処理を行ったときは、2
2=4種類の平文を取得しうる。
さらに、BlindRotate→準同型加減算→BlindRotate→準同型加減算→BlindRotateと処理を行ったときは、多項式がフラットであっても、2
3=8種類などより多くの平文を取得しうる。
BlindRotate→準同型加減算→BlindRotate→準同型加減算→BlindRotate→準同型加減算→BlindRotateなどと準同型加減算を介してBlindRotateを繰り返すことでより多くの平文を取得可能な暗号文を算出することが出来る。
【0097】
TLWE暗号文c3’は、繰り上がり、繰り下がりの有無に応じた平文を有し、繰り上がり、繰り下がりのフラグとなり得る暗号文である。
ただしTLWE暗号文caを復号しない限り平文aの値を知り得ないので、ここまでの情報だけではTLWE暗号文c3’からは、平文aが円周群{T}の右半面の区間にあるか円周群{T}の左半面の区間にあるかを特定することが出来ない。平文aが円周群{T}の右半面の区間にあるか円周群{T}の左半面の区間にあるかを表す暗号文が必要である。
図3に戻り、暗号処理装置1は、第1Bootstrapping41により、n-2の位置でTRLWE暗号文r11に対してSampleExtractを行い、偶数次のうち最上位の項であるn-2次の項の係数を取り出し、TLWE暗号文c2’を得る。
TLWE暗号文c2’は、-caを用いてすべての項の係数が-1/32である上記F2(X)をBlindRotateしたTRLWE暗号文r11から抽出された暗号文であるため、上記多項式F2(X)を次数の低い方向に-aだけ回転させた暗号文である。換言すると、TLWE暗号文c2’は、上記多項式F2(X)を次数の高い方向にaだけ回転させている。
平文整数a≧0つまりTLWE暗号文caの平文φ(ca)が円周群の右半面の区間に位置する場合には、TLWE暗号文c2’は、F2(X)の係数である-1/32がそのまま平文となる。
平文整数a<0つまりφ(ca)が円周群の左半面の区間に位置する場合、TLWE暗号文c2’は、F2(X)の係数である-1/32の符号を反転させた1/32が平文となる。
このようなTLWE暗号文c2’は、TLWE暗号文caの平文aが円周群{T}上の右半面の区間にあるか、円周群{T}上の左半面の区間にあるかの情報を平文として有する暗号文である。
【0098】
暗号処理装置1は、第3演算部15にTLWE暗号文c2’、TLWE暗号文c3’を入力してc3’+2×c2’を計算し、TLWE暗号文c4’を得る。これは通常の準同型スカラ倍と準同型加算によって可能である。
TLWE暗号文caの平文aが円周群{T}の左半面の区間にある場合、TLWE暗号文c2’の平文は1/32、またa+bに繰り下がりがある場合、TLWE暗号文c3’の平文は1/32+1/8であるので、TLWE暗号文c4’の平文は、(1/32+1/8)+(1/32)×2から7/32である。TLWE暗号文c4’において、TLWE暗号文c3’の平文の値が円周群{T}のプラスの方向に1/16ずれる。従って、平文aが円周群{T}の左半面の区間にありかつ繰り下がりがある場合にのみ、TLWE暗号文c4’の平文φ(c4’)は7/32となる。
TLWE暗号文caの平文aが円周群{T}の右半面の区間にある場合、TLWE暗号文c2’の平文は-1/32、またa+bに繰り上がりがある場合、TLWE暗号文c3’の平文は-1/32-1/8であるので、TLWE暗号文c4’の平文は、(-1/32-1/8)+(1/32)×2から-7/32である。TLWE暗号文c4’において、暗号文c3’の平文の値が円周群{T}のマイナスの方向に1/16ずれる。従って、平文aが円周群{T}の右半面の区間にありかつ繰り上がりがある場合にのみ、TLWE暗号文c4’の平文φ(c4’)は-7/32となる。
平文aが円周群{T}の右半面の区間にあり整数として0である場合には繰り上がりも繰り下がりも発生せず、また平文aが円周群{T}の左半面の区間にある場合に繰り上がりが発生したり、平文aが円周群{T}の右半面の区間にある場合に繰り下がりが発生したりすることもない。
また、上述の通り、TLWE暗号文caの平文aが円周群の左半面の区間にあるか右半面の区間にあるかによって、暗号文c3’の平文の値がそれぞれ逆の方向に1/16ずれる。
以上より、平文a+bに繰り下がりがある場合は、例えば、TLWE暗号文c4’の平文φ(c4’)が7/32となり、繰り上がりがある場合は、TLWE暗号文c4’の平文φ(c4’)が-7/32となる。それ以外では、-5/32、-3/32、-1/32、1/32、3/32、5/32のいずれかとなり、-7/32や7/32になることはない。
すなわち、TLWE暗号文c4’は、その平文φ(c4’)の値で、ca+cbによる繰り上がりの有無、繰り下がりの有無が判別可能な暗号文である。
【0099】
また、
図11および
図12を総合すると、TLWE暗号文caの平文aが円周群{T}の左半面の区間にある場合と平文aが右半面の区間にある場合のいずれの場合であっても、TLWE暗号文c3’の平文は、a+bの結果が円周群{T}上の右半面であれば±1/32+1/8の2値のどちらかであり、左半面であれば±1/32-1/8の2値のどちらかである。
さらに、平文aの値によって±1/16が加わるため、TLWE暗号文c4’の平文φ(c4’)は、a+bが円周群{T}の右半面の区間にあれば±1/32±1/16+1/8のいずれかの値であり、a+bが円周群{T}の左半面の区間にあれば±1/32±1/16-1/8のいずれかの値である。
ここで、±1/32±1/16+1/8は全て0より大きく、±1/32±1/16-1/8は全て0より小さい。
以上より、φ(c4’)>0である場合はa+bが円周群{T}の右半面の区間にある。反対にφ(c4’)<0である場合はa+bが円周群{T}の左半面の区間にある。
すなわち、TLWE暗号文c4’は、その平文φ(c4’)の値で、a+bの結果が円周群上円周群{T}上の右半面側と左側の半面のどちら側の区間に存在するのかを判別可能な暗号文でもある。
【0100】
暗号処理装置1は、TLWE暗号文c4’を第3Bootstrapping43に入力し、TLWE暗号文c4’に対して、下記の多項式F2’(X)
をテストベクタ多項式としてBlindRotateを行い、TRLWE暗号文r3’を算出する。
【0101】
次に、暗号処理装置1は、TRLWE暗号文r3’に対するSampleExtractを、円周群{T}の複数個所(2n×3/16、2n×13/16、0)で行い、暗号文cd’、ce’、cfを取り出す。
そして暗号処理装置1は、暗号文cd’、ce’、cfを第5演算部16に入力してcd’、ce’、cfに自明な暗号文(0,1/(2t))を準同型加算し、TLWE暗号文c5、TLWE暗号文c6、TLWE暗号文c7を夫々算出する。
2n×3/16の位置でのSampleExtractで取り出したTLWE暗号文cd’に(0,1/(2t))を加算した暗号文がTLWE暗号文c5である。
2n×13/16の位置でのSampleExtractで取り出したTLWE暗号文ce’に(0,1/(2t))を加算した暗号文がTLWE暗号文c6である。
0の位置でのSampleExtractで取り出したTLWE暗号文cfに(0,1/(2t))を加算した暗号文がTLWE暗号文c7である。
【0102】
暗号文c5は、繰り上がりがある場合にφ(c5)が1/(4t)(整数としては0)となり、繰り上がりがない場合に1/(2t)+1/(4t)(整数としては1)となる暗号文である。
暗号文c6は、繰り下がりがある場合にφ(c6)が1/(4t)(整数としては0)、繰り下がりがない場合に1/(2t)+1/(4t)(整数としては1)となる暗号文である。
暗号文c7は、a+bが円周群{T}の左半面の区間にある場合にφ(c7)が1/(4t)(整数としては0)となり、a+bが円周群{T}上の右半面の区間にある場合に1/(2t)+1/(4t)(整数としては1)となる暗号文である。
暗号処理装置1は、暗号文c5、暗号文c6、暗号文c7を算出することにより、-7/32との比較(繰り上がりがあるか否か)、7/32との比較(繰り下がりがあるか否か)、a+bが円周群{T}の右半面と左半面のどちらの区間にあるかの判定、を1回のBlindRotateで同時に行う。
【0103】
以上の処理により、繰り上がりの有無を2値で表すTLWE暗号文c5、繰り下がりの有無を2値で表すTLWE暗号文c6、a+bが円周群{T}の右半面と左半面のどちらの区間にあるか2値で表す暗号文c7が得られた。
BlindRotateに用いるF2’(X)の係数を変更したり、SampleExtract後の暗号文に対するオフセットとしての自明な暗号文の平文を調整したり、TLWE暗号文c5やTLWE暗号文c6、TLWE暗号文c7に対して追加の演算を行うことにより、応用先に適した任意の2値の暗号文に変換することが出来る。
さらに、暗号処理装置1は、TRLWE暗号文r2’に対してSampleExtractを行って1次の項の係数を取り出し、そのTLWE暗号文を第4Bootstrapping部42に入力し、多項式Fid(X)をテストベクタ多項式としてBootstrapping(2回目のBlindRotate)することにより、TLWE暗号文c9が得られる。これにより、負の数についての平文φ(c9)=a+bに正しく対応するTLWE暗号文c9を、追加の計算量をあまり増やさずに得られる。
【0104】
[実施例3]
[実施例1]、[実施例2]では、a+bを多倍長整数の加算に応用することを前提としてきた。
[実施例1]の変形としての[実施例3]では、多倍長整数の減算で必要となる、分割要素単位での減算に応用する場合を考える。
TLWE暗号文cbの平文の符号を反転させることは準同型な演算として可能であるため、暗号文cbは符号を反転させた暗号文-cbとする。
本実施形態では、円周群を分割した各スライスと整数との対応付けの都合上0.5のオフセットを付けている。従って、0.5のオフセットに対応する自明な暗号文(0,1/(4t))を準同型演算する調整が必要となる。
【0105】
暗号処理装置1は、暗号文caを反転した暗号文-caに対して、自明な暗号文(0,1/(4t))を準同型減算し、-ca-(0,1/(4t))に対応する暗号文暗号文ca’を得る。
そして、暗号処理装置1は、暗号文ca’に対して、[実施例1]と同じ多項式F1(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r1を得る。
【0106】
次に、暗号処理装置1は、TRLWE暗号文r1から多項式F1(X)を平文とする自明な暗号文(0,F1(X))を準同型減算して、(r1-(0,F1(X))に対応する新たなTRLWE暗号文r1’を得る。
暗号処理装置1は、暗号文caから暗号文cbを準同型減算し、自明な暗号文(0,1/(4t))を準同型加算し、ca-cb+(0,1/(4t))に対応する暗号文ccを得る。
暗号処理装置1は、ca-cb+(0,1/(4t))に対応する暗号文を用いて、TRLWE暗号文r1’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2を得る。
暗号処理装置1は、0の位置でSampleExtractを行い、TRLWE暗号文r2の0次の項(定数項)の係数を取り出してTLWE暗号文c3を得る。これ以降は、上記[実施例1]と同じである。
[実施例3]によれば、1暗号文同士でのaとbの比較において、TLWE暗号文c5、c6によって、a-bによる繰り上がりの有無、繰り下がりの有無が分かる。
従って、a-bが繰り上がる場合(例えば(t-1)-(-t)=2t-1)と、繰り下がる場合(例えば(-t)-(t-1)=-2t+1)と、を検知することが出来る。
【0107】
[実施例4]
[実施例2]の変形としての[実施例4]では、1つの暗号文で整数を表す暗号文同士で平文整数aと平文整数bの比較を行う。
この場合、a-bが負であればa<bであり、非負であればa≧bである。ca-cbの符号を見れば比較結果が分かるが、ここでも繰り上がり、繰り下がりが影響する。
[実施例4]では、暗号処理装置1は、暗号文caを反転した-caから、自明な暗号文(0,1/(4t))を準同型減算し、-ca-(0,1/(4t))に対応する暗号文ca’を得る。
暗号処理装置1は、暗号文ca’に対して、上記多項式F2(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r11を得る。
この際、[実施例2]の場合と同様に、暗号文ca’の各要素を2n倍した上で最下位ビットを0にするよう四捨五入する処理を行う。
【0108】
暗号処理装置1は、TRLWE暗号文r11を2倍して、さらに上記多項式F3(X)を平文として有する自明な暗号文(0,F3(X))を準同型加算し、r11×2+(0,F3(X))に対応するTRLWE暗号文を得る。
暗号処理装置1は、暗号文caから暗号文cbを準同型減算し、自明な暗号文(0,1/(4t))を準同型加算して、ca-cb+(0,1/(4t))に対応する暗号文を算出する。
【0109】
暗号処理装置1は、暗号文ca-cb+(0,1/(4t))の各係数を2n倍して最下位ビットで四捨五入した結果によって、TRLWE暗号文r11’に対するBlindRotateを行い、TRLWE暗号文r2’を得る。
そして、TRLWE暗号文r2’に対して0の位置でSampleExtractを行うことにより、TRLWE暗号文r2’の0次の項(定数項)の係数を取り出し、TLWE暗号文c3’を得る。これ以降は、上記[実施例2]と同じである。
これにより、1暗号文同士でのaとbの比較において、TLWE暗号文c5、c6によって、a-bによる繰り上がりの有無、繰り下がりの有無が分かる。従って、a-bが繰り上がる場合(例えば(t-1)-(-t)=2t-1)と、繰り下がる場合(例えば(-t)-(t-1)=-2t+1)と、を検知することが出来る。
また、[実施例4]によれば、TLWE暗号文c7によって、a-bが、円周群{T}の右半面と左半面のどちらの区間にあるかもわかる。
【0110】
図13は、暗号文の減算結果に応じて暗号文が取り得る値を示す図であり、特に[実施例2]に関して、ca-cbの関係によりTLWE暗号文c5~c8が取り得るパターンを示している。c8についてはc8=c7+c6-c5を準同型加減算で計算したものである。
前提より-t≦a、b≦t-1であるため、-2t+1≦a-b≦2t-1が常に成立する。従って、a-bは、
図13に示す、a-b>t-1、t-1≧a-b≧0、0>a-b≧-t、―t>a-bの4パターンのいずれかに当てはまる。
【0111】
図13に示すように、a-b>t-1の場合には繰り上がりが発生し、繰り上がり有無に対応するTLWE暗号文c5の平文φ(c5)は整数として0である。
繰り上がりと同時に繰り下がりは発生せず、繰り下がり有無に対応するTLWE暗号文c6は整数として1である。
a-bは円周群{T}の左半面の区間にあり、その情報に対応するTLWE暗号文c7の平文φ(c7)は整数として0である。
TLWE暗号文c8の平文φ(c8)は、整数として1である。
【0112】
t-1≧a-b≧0の場合には繰り上がりが発生せず、TLWE暗号文c5の平文φ(c5)は整数として1である。
繰り下がりも発生せず、TLWE暗号文c6の平文φ(c6)は整数として1である。
a-bは円周群{T}の右半面の区間にあり、TLWE暗号文c7の平文φ(c7)は整数として1である。
TLWE暗号文c8の平文φ(c8)は整数として1である。
【0113】
0>a-b≧-tの場合には繰り上がりが発生せず、TLWE暗号文c5の平文φ(c5)は整数として1である。
繰り下がりも発生せず、TLWE暗号文c6の平文φ(c6)は整数として1である。
a-bは円周群{T}の左半面の区間にあり、TLWE暗号文c7の平文φ(c7)は整数として0である。
TLWE暗号文c8の平文φ(c8)は、整数として0である。
【0114】
-t≧a-bの場合には繰り上がりが発生せず、TLWE暗号文c5の平文φ(c5)は整数として1である。
繰り下がりが発生し、TLWE暗号文c6の平文φ(c6)は整数として0である。
a-bは円周群{T}の右半面の区間にあり、TLWE暗号文c7の平文φ(c7)は整数として1である。
TLWE暗号文c8の平文φ(c8)は整数として0である。
【0115】
図13から分かるように、ca-cbの結果、繰り上がりが発生する場合には、繰り下がりが発生することはなく、ca-cbの計算結果の平文は必ず円周群{T}の左半面の区間に位置する。
ca-cbの結果、繰り下がりが発生する場合には、繰り上がりが発生することはなく、ca-cbの計算結果の平文は必ず円周群{T}の右半面(0~0.5)の区間に位置する。
aとbの大小関係を見るためには、繰り上がり、繰り下がりまで含めて結果が負であるか非負であるかを確認する必要があるため、繰り上がり、繰り下がりの発生有無が、a-bが右半面の区間にあるか左半面の区間にあるかよりも優先される。
ca-cbの結果、繰り上がりも繰り下がりも発生しない場合であって、ca-cbの計算結果の平文が非負である場合は、平文は円周群{T}の右半面の区間に位置する。
ca-cbの結果、繰り上がりも繰り下がりも発生しない場合であって、ca-cbの計算結果の平文が負である場合は、平文は円周群{T}の左半面の区間に位置する。
以上より、c8の平文は、a-b≧0の場合に、整数としてφ(c8)=1となる。a-b<0の場合にφ(c8)=0となる。式を並び替えると、a≧bの場合φ(c8)=1で、a<bの場合φ(c8)=0である。
暗号処理装置1は、TLWE暗号文c5、c6、c7から、Bootstrappingのように複雑で処理負荷の高い計算処理をすることなく、比較結果を表すTLWE暗号文c8が得られる。最初の暗号文caおよびcbから始めても、BlindRotateを2回しか使用していない。
【0116】
図14は、第1実施例の処理を説明するフローチャートである。
ステップS101において、暗号処理装置1(第1演算部12)は、入力されたTLWE暗号文caに対して-ca+(0,1/(4t))の準同型演算を行う。
ステップS102において、暗号処理装置1(第1Bootstrapping部41)は、TLWE暗号文ca’に対して多項式F1(X)をテストベクタ多項式としたBlindRotateを行い、TRLWE暗号文r1を算出する。
ステップS103において、暗号処理装置1(第2演算部13)は、TRLWE暗号文r1に対して、r1×2-(0,F1(X))の準同型演算を行い、TRLWE暗号文r1’を算出する。
ステップS104において、暗号処理装置1(第3演算部14)は、TLWE暗号文caとTLWE暗号文caに対して、ca+cb-(0,1/(4t))の準同型演算を行い、TLWE暗号文ccを得る。
ステップS105において、暗号処理装置1(第2Bootstrapping部42)は、TLWE暗号文ccに対して、TRLWE暗号文r1’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2を算出する。
【0117】
ステップS106において、暗号処理装置1(第2Bootstrapping部42)は、TRLWE暗号文r2に対してSampleExtractを行い、TLWE暗号文c3を得る。
ステップS107において、暗号処理装置1(第1Bootstrapping部41)は、TRLWE暗号文r1に対するSampleExtractを行い、TLWE暗号文c2を得る。
ステップS108において、暗号処理装置1(第4演算部15)は、TLWE暗号文c3、TLWE暗号文c2に対して、c3+2×2cの準同型演算を行い、TLWE暗号文c4を得る。
【0118】
ステップS109において、暗号処理装置1(第3Bootstrapping部43)は、TLWE暗号文c4に対して多項式F1’(X)をテストベクタ多項式としたBlindRotateを行い、TRLWE暗号文r3を算出する。
ステップS110、ステップS111において、暗号処理装置1(第3Bootstrapping部43)は、TRLWE暗号文r3に対して異なる箇所でSampleExtractを2回行い、TLWE暗号文cd、ceを得る。
ステップS112、ステップS113において、暗号処理装置1(第5演算部16)は、TLWE暗号文cd、ceに対して、(0,1/(2t))を夫々加算する準同型加算を行い、TLWE暗号文c5、c6を得る。準同型加算は、SampleExtractを実行する毎に実行してもよい。ステップS104の準同型加算は、ステップS101~ステップS103の処理の前、またはその間に実行されてもよい。
【0119】
図15は、第2実施例の処理を説明するフローチャートである。
ステップS201において、暗号処理装置1(第1演算部12)は、TLWE暗号文caに対して-ca+(0,1/(4t))の準同型演算を行ってTLWE暗号文ca’を得る。
ステップS202において、暗号処理装置1(第1Bootstrapping部41)は、ステップS201で算出したTLWE暗号文ca’に対して多項式F2(X)をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r11を算出する。
ステップS203において、暗号処理装置1(第2演算部13)は、TRLWE暗号文r11に対して、r11×2-(0,F3(X))の準同型演算を行い、TRLWE暗号文r11’を算出する。
【0120】
ステップS204において、暗号処理装置1(第3演算部14)は、TLWE暗号文caとTLWE暗号文cbに対して、2n×(ca+cb-(0,1/(4t)))の準同型演算を行い、四捨五入をしてTLWE暗号文cc’を得る。
ステップS205において、暗号処理装置1(第2Bootstrapping部42)は、TLWE暗号文cc’に対して、TRLWE暗号文r11’をテストベクタ多項式とするBlindRotateを行い、TRLWE暗号文r2’を算出する。
ステップS206において、暗号処理装置1(第2Bootstrapping部42)は、TRLWE暗号文r2’に対してSampleExtractを行い、TLWE暗号文c3’を得る。
ステップS207において、暗号処理装置1(第1Bootstrapping部41)は、TRLWE暗号文r11に対するSampleExtractを行い、TLWE暗号文c2’を得る。
ステップS208において、暗号処理装置1(第4演算部15)は、TLWE暗号文c3’、TLWE暗号文c2’に対して、c3’+2×c2’の準同型演算を行い、TLWE暗号文c4’を得る。
【0121】
ステップS209において、暗号処理装置1(第3Bootstrapping部43)は、TLWE暗号文c4’に対して多項式F2’(X)をテストベクタ多項式として用いたBlindRotateを行い、TRLWE暗号文r3を算出する。
ステップS210、ステップS211、ステップS212において、暗号処理装置1(第3Bootstrapping部43)は、TRLWE暗号文r3に対して異なる箇所でSampleExtractを3回行い、TLWE暗号文cd’、ce’cfを得る。
ステップS213、ステップS214、ステップS215において、暗号処理装置1(第5演算部16)は、TLWE暗号文cd’、ce’cfに対して、自明な暗号文(0,1/(2t))を夫々加算する準同型加算を行い、TLWE暗号文c5、c6、c7を得る。準同型加算は、SampleExtractを実行する毎に実行してもよい。ステップS204の準同型加算は、ステップS201~ステップS203の処理の前、またはその間に実行されてもよい。
ステップS216において、暗号処理装置1(第6演算部17)は、TLWE暗号文c7+c6-c5の準同型演算を行い、比較結果に対応するTLWE暗号文c8を得る。
【0122】
図16は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、
図16(a)に示すように、第4算出部41の場合など、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行う場合を説明していた。
それに限らず、
図16(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
【0123】
図16(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、Public Key Switchingの結果、LEVEL0のTLWE暗号文が出力される。
それに対して
図16(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にPublic Key Switchingを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0124】
LEVEL0の暗号文は、N次の秘密鍵[s]で暗号化された円周群{T}上の要素のN次のベクトル[a]よりなっている。一方、SampleExtractの結果得られるLEVEL1の暗号文は、n次の秘密鍵[s’]で暗号化された円周群{T}上の要素のn次のベクトル[a']よりなっている。
LEVEL0の暗号文は、LWE問題の難易度となる係数の数(ベクトルの次数)がLEVEL1の暗号文よりも少ないので、LEVEL1と比較して準同型加算の計算量が少ない。
一方でLEVEL0の暗号文は、平文に付加する許容誤差を小さくすると、セキュリティ強度が下がりやすい問題がある。LWE系暗号は、平文に付加する誤差によって安全性が担保されるからである。
【0125】
TLWE暗号は、平文に付加する誤差が大きいほど、係数の数(ベクトルの次数)が多いほど計算(解読)が難しい。
裏を返すと、TLWE暗号は、平文に付加する誤差が小さいほど、係数の数(ベクトルの次数)が少ないほど、計算(解読)が容易となるのである。
特に、Integer-wise型に適用したTFHEの場合、TLWE暗号文に格納する平文(整数)の値が大きくなるほど、円周群{T}における0~1の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0126】
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、Public Key SwitchingをGate Bootstrappingの先頭に移動し、係数の数(ベクトルの次数)が多く誤差の範囲を小さくしやすいLEVEL1の暗号文をGate Bootstrappingの入出力とすることが望ましい。そして、Gate Bootstrappingの先頭でLEVEL0に変換してから、最後にLEVEL0に戻さないようにする。LEVEL0に戻さないことで、次段でも同様にTLWE暗号文の計算を安全に行うことが出来る。
BlindRotateの所要時間は、CMuxの回数が次数と同じ回数であるため、入力となるTLWE暗号文の係数の数(ベクトルの次数)に比例する。よって、LEVEL1の暗号文を入力とした場合は、LEVEL0の暗号文を入力とした場合よりも、係数の数(ベクトルの次数)に比例してBlindRotateの所要時間が長くなる。
暗号文のセキュリティを確保するためにLEVEL1の暗号文をGate Bootstrappingの入力としても、Public Key Switchingで変換したLEVEL0のTLWE暗号文を入力としてBlindRotateを行うことで、所要時間の増加を避けることが出来る。
【0127】
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域を2t個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできる。円周群を分割した個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0128】
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
【0129】
[応用例]
暗号処理装置10は、第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部17、第1Bootstrapping部41、第2Bootstrapping部42、第3Bootstrapping部43、第4Bootstrapping部44の機能によって、暗号文の比較演算を行う。
比較演算を行うことで、多倍長整数の演算に必要な繰り上がりや繰り下がりの有無を算出することが出来る。
なお、多倍長整数を用いて暗号処理装置1が行う処理は、以下のように応用することが出来る。
具体的な応用例として、生体認証(生涯不変のデータなので秘匿するのは絶対条件。閾値付きで一致するか否かを判定する)のようなファジー認証や、曖昧な、近しいデータをデータベースから検索するファジー検索や、暗号化されたデータベースからのクエリ集計などが挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、生体情報は正確に測定しても厳密に同じ値を取得できるわけではないため、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、暗号化されたデータベースに対するクエリを実行する際に、準同型暗号により暗号化されたデータで様々な演算が必要になる。例えば、ファジー認証で登録されているフィンガープリントとの一致度を計算するために、ユークリッド距離を利用する場合、x2を計算する必要がある。また、ベクトルの正規化などでスケールを変換する場合は、スケールの乗算つまり1次多項式を計算する必要がある。文章の類似性を評価するためには、2つのベクトルの内積を夫々のノルムで割ることでコサイン類似度の算出する必要がある。
これらの演算によりどの程度対象に近いかという指標を値の大小で表現した後、その結果を採用するか否か、もしくは認証するか否かを判断するために、比較演算が必要となる。これは、本実施形態の暗号処理装置1が行う比較演算とそれを応用した多倍長整数の演算を用いて行うことが出来る。
【0130】
図17は、コンピュータ装置の一実施例を示すブロック図である。
図17を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0131】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、
図1における制御部10として機能する。
【0132】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、
図1における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、
図1における記憶部20として機能する。
【0133】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第5演算処理、第6演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、第4Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
なお、プログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0134】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0135】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、
図1において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、
図1において、入力部26として機能する。
【0136】
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0137】
1 暗号処理装置、10 制御部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク