IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社アクセルの特許一覧

特開2024-53392暗号処理装置、暗号処理方法、暗号処理プログラム
<>
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図1
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図2
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図3
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図4
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図5
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図6
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図7
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図8
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図9
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図10
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図11
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図12
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図13
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図14
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図15
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図16
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024053392
(43)【公開日】2024-04-15
(54)【発明の名称】暗号処理装置、暗号処理方法、暗号処理プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240408BHJP
【FI】
G09C1/00 620Z
【審査請求】有
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2022159634
(22)【出願日】2022-10-03
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
(57)【要約】
【課題】TFHEをInteger-wise型として利用する際に円周群全体を無駄なく利用しつつ、任意の一変数関数の結果を従来よりも高速に計算する。
【解決手段】計算対象の第1関数における変数xが負の値となる領域をx軸方向に反転させた第2関数に基づく奇関数を含む第1多項式と、第2関数に基づく偶関数を含む第2多項式と、所定の係数を有する第3多項式と、を用いた暗号文の算出を行い、第1暗号文に第1多項式を用いることにより第2暗号文を算出する第5Bootstrapping部45と、第1暗号文に第3多項式を用いることにより算出した暗号文に第2多項式を用いることにより第3暗号文を算出する第6Bootstrapping部46と、第2暗号文と第3暗号文とを用いた準同型演算を行うことにより、第1暗号文を入力とした第1関数の計算結果に対応する第4暗号文を算出する演算部15と、を備える。
【選択図】図14
【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
計算対象の第1関数を分解して生成した第2関数及び第3関数のうち、前記第2関数を含む第1多項式と前記第3関数を含む第2多項式とを用いて暗号文の算出を行い、
第1暗号文に前記第1多項式を用いることにより第2暗号文を算出し、
前記第1暗号文に所定の多項式を用いることに基づいて算出した暗号文に前記第2多項式を用いることにより第3暗号文を算出し、
前記第2暗号文と前記第3暗号文とを用いた準同型演算を行うことにより、前記第1暗号文を入力とした前記第1関数の計算結果に対応する第4暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項2】
請求項1に記載の暗号処理装置において、
前記第1多項式に含まれる前記第2関数は、前記第1関数を分解した関数において、入力xの値が正の領域における出力yの値をx軸方向に1/2スライドさせ且つ正負を反転させた値を、入力xの値が負の領域における出力yの値とした関数であり、
前記第1暗号文に前記第1多項式を用いることにより、前記第1暗号文の平文が正負の何れであっても前記第2関数の演算結果に基づく前記第2暗号文を算出できる、
ことを特徴とする暗号処理装置。
【請求項3】
請求項2に記載の暗号処理装置において、
前記第1関数を分解した関数は奇関数である、
ことを特徴とする暗号処理装置。
【請求項4】
前記第2多項式に含まれる前記第3関数は、前記第1関数を分解した関数において、入力xの値が正の領域における出力yの値をx軸方向に1/2スライドさせた値を、入力xの値が負の領域の出力における出力yの値とした関数であり、
前記第1暗号文に前記第2多項式を用いることにより、前記第1暗号文の平文が正負の何れであっても前記第3関数の演算結果に基づく前記第2暗号文を算出できる、
ことを特徴とする暗号処理装置。
【請求項5】
請求項4に記載の暗号処理装置において、
前記第1関数を分解した関数は偶関数である、
ことを特徴とする暗号処理装置。
【請求項6】
請求項1に記載の暗号処理装置において、
前記第1多項式は、

ただし、Fは前記第1関数、Fo’は前記第2関数、
を満たすFfoとして表され、
前記第2多項式は、
ただし、Fは前記第1関数、Fe’は前記第3関数、
を満たすFfeとして表される、
ことを特徴とする暗号処理装置。
【請求項7】
請求項1に記載の暗号処理装置において、
暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部を備え、前記算出部は、入力となる暗号文に対して、所定の多項式を用いて新たな暗号文を算出するまえに係数の数を削減する処理を行う、
ことを特徴とする暗号処理装置。
【請求項8】
請求項1に記載の暗号処理装置において、
前記第1関数の計算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
ことを特徴とする暗号処理装置。
【請求項9】
請求項1に記載の暗号処理装置において、
前記第1関数の計算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項10】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
計算対象の第1関数を分解して生成した第2関数及び第3関数のうち、前記第2関数を含む第1多項式と前記第3関数を含む第2多項式とを用いて暗号文の算出を行い、
第1暗号文に前記第1多項式を用いることにより第2暗号文を算出し、
前記第1暗号文に所定の多項式を用いることに基づいて算出した暗号文に前記第2多項式を用いることにより第3暗号文を算出し、
前記第2暗号文と前記第3暗号文とを用いた準同型演算を行うことにより、前記第1暗号文を入力とした前記第1関数の計算結果に対応する第4暗号文を算出する、
ことを特徴とする暗号処理方法。
【請求項11】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
計算対象の第1関数を分解して生成した第2関数及び第3関数のうち、前記第2関数を含む第1多項式と前記第3関数を含む第2多項式とを用いて暗号文の算出を行い、
第1暗号文に前記第1多項式を用いることにより第2暗号文を算出し、
前記第1暗号文に所定の多項式を用いることに基づいて算出した暗号文に前記第2多項式を用いることにより第3暗号文を算出し、
前記第2暗号文と前記第3暗号文とを用いた準同型演算を行うことにより、前記第1暗号文を入力とした前記第1関数の計算結果に対応する第4暗号文を算出する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【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】
しかし、テストベクタ多項式に代入する関数はf(v+1/2)=-f(v)の性質を満たす必要がある。この制約を満たす関数には三角関数などあるが、一般的な制約とは言えず応用が難しかった。
この制約を回避するために、平文としては円周群の0~0.5の区間のみを利用するというアイデアがある。この制約を追加すると、上記制約に関係なく、任意の一変数関数を評価できる。しかし、その場合は暗号文1つに持てる情報が実質半分つまりlbit分減ってしまい、Integer-wiseにした効果が薄れてしまう。
本発明は、一側面として、TFHEをInteger-wise型として利用する際に円周群全体を無駄なく利用しつつ、任意の一変数関数の結果を従来よりも高速に計算する。
【課題を解決するための手段】
【0006】
本発明は、一実施形態によれば、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、計算対象の第1関数を分解して生成した第2関数及び第3関数のうち、前記第2関数を含む第1多項式と前記第3関数を含む第2多項式とを用いて暗号文の算出を行い、第1暗号文に前記第1多項式を用いることにより第2暗号文を算出し、前記第1暗号文に所定の多項式を用いることに基づいて算出した暗号文に前記第2多項式を用いることにより第3暗号文を算出し、前記第2暗号文と前記第3暗号文とを用いた準同型演算を行うことにより、前記第1暗号文を入力とした前記第1関数の計算結果に対応する第4暗号文を算出する、暗号処理装置を特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、TFHEをInteger-wise型として利用する際に円周群全体を無駄なく利用しつつ、任意の一変数関数の結果を従来よりも高速に計算することが出来る。
【図面の簡単な説明】
【0008】
図1】本実施形態の暗号処理装置の機能構成を説明する図である。
図2図1の機能構成に基づく演算プロセスを説明する図である。
図3】TLWE暗号が平文として有する円周群を説明するイメージ図である。
図4】2値Gate Bootstrappingの動作イメージ図である。
図5】Integer-wise型に適用したTFHEを説明する図である。
図6】本実施形態におけるInteger-wise型TFHEを説明する図である。
図7】本実施形態におけるInteger-wise型TFHEを説明する図である。
図8】本実施形態におけるInteger-wise型TFHEを説明する図である。
図9】本実施形態におけるInteger-wise型TFHEを説明する図である。
図10】本実施形態(偶関数)における暗号文の値の遷移を説明する図である。
図11】本実施形態(偶関数)における暗号文の値の遷移を説明する図である。
図12】本実施形態の暗号処理装置が奇関数と偶関数を計算する処理を説明するフローチャートである。
図13】本実施形態の暗号処理装置が任意の一変数関数の計算を実行するための方法を説明する図である。
図14】本実施形態の暗号処理装置が任意の一変数関数の計算を実行するための構成を説明する図である。
図15】本実施形態の暗号処理装置が一変数関数を計算するための処理を説明するフローチャートである。
図16】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
図17】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の演算のことを指すものとする。
【0010】
図1は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第4演算部15と、を備えている。
また制御部10は、第1Bootstrapping部(算出部)41と、第2Bootstrapping部(算出部)42と、第3Bootstrapping部(算出部)43と、第4Bootstrapping部(算出部)44と、第5Bootstrapping部(算出部)45、第6Bootstrapping部(算出部)46、第7Bootstrapping部(算出部)47と、出力部35と、を備えている。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
一変数関数としての奇関数の計算において、第1Bootstrapping部41は、入力された暗号文に対して第1Gate Bootstrappingを行う。
第2Bootstrapping部42は、第1Bootstrapping部41から出力された暗号文に対して第2Gate Bootstrappingを行う。
第1演算部12は、後述の第2Bootstrapping部42から出力される暗号文に対して第1準同型演算を行う。
一変数関数としての偶関数の計算において、第3Bootstrapping部43は、入力された暗号文に対して第3Gate Bootstrappingを行う。
第2演算部13は、第3Bootstrapping部43から出力される暗号文に対して第2準同型演算を行う。
第4Bootstrapping部44は、第2演算部13から出力された暗号文に対して第4Gate Bootstrappingを行う。
【0012】
第3演算部14、第4演算部15、第5Bootstrapping部45、第6Bootstrapping部46、第7Bootstrapping部47は、後に図14を用いて詳述する任意の一変数関数を計算する手法に係る。
第5Bootstrapping部45は、入力暗号文に対して第5Bootstrappingを行う。
第6Bootstrapping部46は、入力暗号文に対して第6Bootstrappingを行う。
第3演算部14は、第6Bootstrapping46から出力される暗号文と入力暗号文との準同型演算を行う。
第7Bootstrapping部47は、第3演算部14による演算結果に対して第7Bootstrappingを行う。
第4演算部15は、第5Bootstrapping部45と第7Bootstrapping47から夫々出力される暗号文との準同型演算を行う。
【0013】
第1演算部12、第2演算部13、第3演算部14、第4演算部15は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部41、第2Bootstrapping部42、第3Bootstrapping部43、第4Bootstrapping部44は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
第1演算部12、第2演算部13、第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の機能構成に基づく演算プロセスを説明する図である。
図2に示す構成では、上記論文で提示されたGate Bootstrappingを使用する。上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
上記したように、暗号処理装置1は、Integer-wise型のTLWE暗号文について、奇関数と偶関数の計算を行う。
TLWE暗号文caは、奇関数と偶関数の計算を行いたい平文整数aの暗号文である。
図2(a)において、暗号処理装置1は、一変数関数として奇関数の計算を行う。
(a-1)において、TLWE暗号文caを第1Bootstrapping部41に入力して、一変数関数Fid(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
次に、暗号処理装置1は、暗号文cbを第2Bootstrapping部42に入力して、一変数関数F(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応する暗号文ccを算出する。
(a-2)において、暗号処理装置1は、TLWE暗号文caを第1Bootstrapping部41に入力して、一変数関数Fid(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、暗号文cbを第2Bootstrapping部42に入力して、一変数関数F(X)をテストベクタとして用いた第2Bootstrappingを行い、暗号文ccを算出する。次に、暗号処理装置1は、暗号文ccを第1演算部12に入力して第1準同型演算を行い、奇関数の計算結果に対応する新たな暗号文cdを算出する。
(a-3)において、暗号処理装置1は、TLWE暗号文caを第1Bootstrapping部41に入力して、一変数関数F’id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、暗号文cbを第2Bootstrapping部42に入力して、一変数関数F’(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応する暗号文ccを算出する。
【0016】
図2(b)において、暗号処理装置1は、一変数関数として偶関数の計算を行う。
(b-1)において、暗号処理装置1は、TLWE暗号文caを第3Bootstrapping部43に入力して、一変数関数Fabs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、暗号文cbを第2演算部13に入力して第2準同型演算を行い、TLWE暗号文ccを算出する。
暗号処理装置1は、暗号文ccを第4Bootstrapping部44に入力して、一変数関数F’(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応する暗号文cdを算出する。
(b-2)において、暗号処理装置1は、TLWE暗号文caを第3Bootstrapping部43に入力して、一変数関数F’abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。暗号処理装置1は、暗号文cbを第2演算部13に入力して第2準同型演算を行い、TLWE暗号文ccを算出する。
暗号処理装置1は、暗号文ccを第4Bootstrapping部44に入力して、一変数関数F(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応する暗号文cdを算出する。
【0017】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0018】
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0019】
図3は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、図3に示す円周群{T}の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0020】
[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)と表すことができる。
φ(([a],b))=b-[s]・[a]=eは、TLWE暗号文を復号する関数である。TLWE暗号は平文に秘密鍵ベクトルと乱数ベクトルの内積と誤差を付加して暗号化するため、秘密鍵ベクトルと乱数ベクトルの内積を算出することで、TLWE暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
【0021】
このTLWE暗号は加法準同型であり、TLWE暗号文の平文同士の加法演算を、暗号文を復号することなく行うことができる。
2つのTLWE暗号文([a],b)、([a’],b’)をそのまま足して、([a]+[a’],b+b’)としたものを、上記の復号関数φに入力すると、
φ(([a]+[a’],b+b’))=(b+b’)-[s]・([a]+[a’])=(b-[s]・[a])+(b’-[s]・[a’])=φ([a],b)+φ([a’],b’)
となり、2つの平文の和が得られる。これにより、TLWE暗号文が「加法準同型暗号」であることがわかる。
上記論文のTFHEでは「平文に誤差を付加したTLWE暗号文に対して加法演算を行い、Gate Bootstrappingで誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0022】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φにかけると、φ(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0023】
TFHEのGate Bootstrappingで用いる有限巡回群を説明する。
Gate Bootstrappingでは、多項式環の剰余環を、有限巡回群として用いる。
多項式環の剰余環が有限巡回群であることを説明する。
n次の多項式は、一般にa+an-1n-1+…+aと表される。
これらの全ての集合は、多項式同士の和f(x)+g(x)に対して可換群をなす。
また、多項式同士の積f(x)g(x)は、逆元が存在するとは限らないことを除き、可換群と同様の性質を持つ。そのようなものをモノイドと呼ぶ。
多項式同士の和と積に対しては、下記のように分配法則が成り立つ
f(x){g(x)+g’(x)}=f(x)g(x)+f(x)g’(x)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0024】
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](X+1)+T[X]のかたちに分解し、剰余部分だけを取り出して集めると、これもまた「環」であるため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(X+1)と表す。
【0025】
多項式環の剰余環T[X]/(X+1)の要素(元)として、任意の係数μ(μ∈T)を用いて、
多項式F(X)=μXn-1+μXn-2+・・・+μX+μ
を取り出す。
多項式環の剰余環の要素F(X)にXを掛けると、μXn-1+μXn-2+・・・+μX-μとなって、一番上の項の係数がプラスからマイナスに反転して定数項として現れる。
さらにXを掛けると、μXn-1+μXn-2+・・・+μX-μX-μのように、もう一度同じことが起きる(一番上の項の係数がプラスからマイナスに反転して定数項として現れる)。
これを全部でn回繰り返すと、
-μXn-1-μXn-2・・・-μX-μとなって全ての項の係数がマイナスとなる。
【0026】
さらに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]/(X+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回繰り返してかけるという表現を用いることもある。
【0027】
[TRLWE暗号]
Gate Bootstrappingでは、TLWE暗号の他にTRLWE暗号と呼ばれる暗号を利用する。
TRLWE暗号について説明する。
TRLWE暗号のRは環を意味し、TRLWE暗号は環で構成したLWE暗号である。TLWE暗号がそうであるように、TRLWEもまた加法準同型暗号である。
TRLWE暗号における環は、上記した多項式環の剰余環T[X]/(X+1)である。
TRLWE暗号を得るに当たり、多項式環の剰余環T[X]/(X+1)の要素(元)をランダムに選択する。
実際には、n-1次多項式の係数n個を、円周群{T}から一様分布な乱数で選出する。
多項式の次数がn-1であれば、X+1で割れることがなく、剰余を考える必要がないため、次数がn-1の多項式を多項式a(X)とする。
【0028】
0,1の2値からランダムにn個を集めて、下記の秘密鍵となる多項式s(X)を組み立てる。
s(X)=sn-1n-1+sn-2n-2+・・・sX+s
n個の乱数eを、平均値が平文μになり分散がαとなるガウス分布(正規分布)の乱数とし、これらから下記の多項式e(X)を組み立てる。
e(X)=en-1n-1+en-2n-2+・・・eX+e
s(X)・a(X)+e(X)を、f(X)(X+1)+b(X)と分解して、b(X)を得る。
その結果、TRLWE暗号文として、(a(X),b(X))が得られる。
TRLWE暗号は、TLWE暗号と同様に乱数を用いて暗号化を行うため、同一の秘密鍵、平文に対して、無数の暗号文が対応しうる。
また、TRLWE暗号は、TLWE暗号と同様に、φ((a(X),b(X))=b(X)-s(X)・a(X)+g(X)(X+1)として、φがT[X]/(X+1)の元となるようにg(X)を定めたものが、復号関数として機能する。換言すると、(b(X)-s(X)・a(X))mod(X+1)が復号関数として機能する。modは除算の余りを意味する。
【0029】
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、図3の円周群{T}の要素である0以上1未満の実数であり小数部分のみを有する。
これを二進数表記で何ビットずつかに分解する操作を、上記論文のTFHEではGadget Decomposition(Dec)と定義している。
例えば、TRLWE暗号文の多項式F(X)の次数nがn=2として、分割の1単位をBg=2で、l=3要素に分解する。このとき、各要素は-Bg/2からBg/2の間に入るようにする。
TRLWE暗号文は、上記の(a(X),b(X))のように、2つの多項式の組み合わせである。従って、TRLWE暗号文dを、多項式環の剰余環の元となる多項式を要素とする2次元のベクトルと見なして、例えば、
d=[0.75X+0.125X+0.5,0.25X+0.5X+0.375]
と書くことができる。そのため、以下では各要素をBg-1=0.25のべき乗の和の形に分解する。
【0030】
円周群{T}上では、0.75=-0.25であるので、
d=[0.75X+0.125X+0.5,0.25X+0.5X+0.375]
=[-0.25X+0.125X+0.5,0.25X+0.5X+0.25+0.125]
=[0.25×(-X+2)+0.25×2X+0.25×0,0.25×(X+2X+1)+0.25×2+0.25×0]
と分解できる。
従って、Gadget Decompositionを行うと、
Dec(d)=[-X+2,2X,0,X+2X+1,2,0]
というベクトルになる。
【0031】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文dが得られる。下位ビットは四捨五入をしてまるめられている。
【0032】
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を構成する。
【0033】
Bootstrapping Keyを説明する。
Bootstrapping Keyは、Gate Bootstrappingに用いるために、秘密鍵をTRGSW暗号により暗号化したものである。
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と呼ぶ。
【0034】
TRGSW暗号文BKiとTRLWE暗号文dの外積を、
BKi×d=Dec(d)・BKi
と定義する。
Gadget Decompositionは、TRLWE暗号文dに対して||d-[v]・H||が最小値となる[v]を得る操作であった。
従って、[v]=Dec(d)と誤差(ε(X),ε(X))を用いて、
[v]・H=d+(ε(X),ε(X))と書ける。
その結果、BKi×d=Dec(d)・BKi
となる。
左半分は内積を計算し、右半分には[v]・H=d+(ε(X),ε(X))を代入すると、

となり、下記の3つの暗号文c1、c2、c3の和の計算と同じとなる。
TRLWE暗号は加法準同型暗号であるため、暗号文同士の和をとると平文同士の和をとったことと同じである。
は、Zを何倍かして足したものなので、平文φs’(c)の期待値は0となる。
また復号したφs’(c)は、平文の絶対値の大きさをシステムパラメータで制約することができるので、この後の演算も含めて十分小さくなるように設定する。
【0035】
そうするとφs’(BKi×d)=φs’(s×d)となるが、sが0であっても1であっても計算結果は上記3つの暗号文c1、c2、c3の和になる。つまり単純な比較でsが0と1の何れであるかを判別することができない。
2つの平文μ、μに対応するTRLWE暗号文d、dがあるとして、d=d-dと代入して、最後にdを加算すると、下記のようなCMux関数が完成する。
CMux(BK,d,d)=BKi×(d-d)+d=Dec(d-d)・BK+d
CMux関数は、sが0であると平文μの暗号文を復号することなく出力し、sが1であると平文μの暗号文を復号することなく出力する。
CMux関数は、平文μもしくは平文μに対応する暗号文を計算することができるが、その結果を見てもどちらを選択したかは復号することなしには分からない。
【0036】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)Public Key Switchingから構成される。
【0037】
図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の範囲のいずれかである。
【0038】
(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
を用意する。
【0039】
平文μ1を秘密鍵[s]で暗号化したTLWE暗号文cがあるとする。
このTLWE暗号文c=([a],b)の各要素を2n倍して四捨五入したLWE暗号文c’=([a’],b’)を得る。
LWE暗号文c’=([a’],b’)を復号すると、μ1’=φ(c’)≒2n×φ(c)=2nμ1となる。四捨五入の誤差が発生しうるため、完全に一致するとは限らないが、nが大きくなるほど相対的に誤差は小さくなる。
多項式T(X)を平文とする自明なTRLWE暗号文(0,T(X))を用意して、
=X-b’×(0,T(X))=(0,X-b’×T(X))とする。0は、0次の多項式0を示す。この時、b’は整数であるため、累乗が自然に定義できる。実際にはTRLWE暗号文の多項式の各項の係数を所定の個数だけ巡回させれば済む。
以降、上記に説明したBootstrapping KeyであるBKを用いて、順番にA=CMux(BK,Ai-1,Xa’ii-1)を計算する。ここでも、a’iが整数になっているため、Xの累乗が自然に定義できる。同様にXの累乗を計算する訳ではなくTRLWE暗号文Ai-1の要素である多項式の各項の係数を所定の個数だけ巡回させれば済む。
【0040】
そうすると、sが0の時は、平文はそのまま変わらず、sが1の時は、Xa’iが順番に乗算されていく。
従って、
と繰り返すと、
となる。
ここで、
は、復号関数φs(c’)の符号を反転したものに等しいので、
となる。ここでφs’(A)は、多項式T(X)にX-1をμ1’回乗算した多項式であり、Aはその暗号文である。
この時点で、最初に設定したTLWE暗号文cの誤差付き平文eの誤差成分は多項式T(X)を回転する量として表れており、各項の係数の値の大小としては表れていないことを明記しておく。TFHEでは本質的にこの仕組みにより誤差を縮小している。
また、BlindRotateに係るTLWE暗号文cの平文μ1に対応して、多項式T(X)にX-1をかける回数μ1’(=2nμ1)に応じたユニークな値(n個の係数とその符号反転で最大2n個)が平文多項式の定数項の係数として得られるので、これは、一種のルックアップテーブル(Look Up Table)とみなすことも出来る。
【0041】
(2)SampleExtract
(1)のBlindRotateで得たTRLWE暗号文Aを復号して得られる平文多項式φs’(A)を見ると、下位の項から数えてn/2-φ(c’)個分の項は係数が-μとなり、負になった場合、逆に上の項から順に係数が-μとなる。
TRLWE暗号文Aを復号して得られる平文多項式φs’(A)の定数項だけを見ると、φ(c’)がn/2以上3n/2未満、すなわちφ(c)が1/2±1/4の場合、定数項はμとなる。それ以外、すなわちφs(c)が±1/4の場合、定数項は-μとなる。SampleExtractは、(1)のBlindRotateで得たTRLWE暗号文Aから、これを復号することなく平文多項式φs’(A)の定数項の係数だけを取り出して、その結果、TLWE暗号文csを得るための処理である。
前述の通り、最初の入力であるTLWE暗号文cに付加されている誤差や、四捨五入により加わった誤差は、この定数項の平文μと-μが切り替わる境界の位置にのみ影響を及ぼし、定数項の係数の大小への影響は無視できる程度に小さい。つまり、入力の誤差を排除しているものと解釈できる。また、ここで定数項の平文の値が変化する境界が移動しても問題ない幅が、正しくBootstrappingの処理を行うことができる誤差の限界であり、後述のトレードオフが発生する仕組みとなる。
【0042】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0043】
これに対して下記の演算を行い、
を得る。
「多項式環の剰余環」であるので(X+1)で割った余りを求めると、
が得られる。
【0044】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0045】
つまり、(1)のBlindRotateで得たTRLWE暗号文A=(A(X),B(X))から、係数を
として取り出すと、元のTRLWE暗号文Aに対応する平文多項式の定数項と同じ値を平文とする、新しいTLWE暗号([a”],b)が得られた。この新しい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が得られた。
【0046】
(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’は、jに対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【0047】
ここで得られたTLWE暗号文cxは、Gate Bootstrappingの入力としたTLWE暗号文cと同じ秘密鍵[s]で暗号化されている。
Public Key Switchingの処理を行うことにより、秘密鍵[s]で暗号化されたTLWE暗号文に戻っており、φ(c)が±1/4の範囲なら平文φ(cx)は0に、φ(c)が1/2±1/4の範囲なら、平文φ(cx)は1/4になっている。
以上の処理により、Gate Bootstrappingの結果として、0、1/4の2値のうちのいずれかであって誤差が±1/16以内のいずれかになるTLWE暗号文が得られた。
誤差の最大値は、入力となるTLWE暗号文cに依存せず、システムパラメータによって固定された値となる。
従って、誤差の最大値が入力となるTLWE暗号文と同じ±1/16以内のいずれかの値となるように、システムパラメータを設定する。
これにより、何度でもNAND演算ができるようになり、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0048】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の整数化で加わる誤差、CMuxで加わる誤差、Public Key Switchingで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0049】
上記したように、TFHEは0もしくは非0を平文として持ち、論理演算を行うBit-wise型の準同型暗号である。ただし図3で説明したように平文は円周群{T}に対応づけられた0~1の実数である。従って、円周群{T}を区切った区間を順番に整数と対応付けることにより、整数を平文として持つInteger-wise型の準同型暗号として応用することが出来る。
【0050】
図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個に区切った、-5/t、-4/t、-3/t、-2/t、-1/t、0/t、1/t、2/t、3/t、4/tを中心とする区間に割り当てられる。このようにすることで、図5に示すように、1/2を中心とする、整数で表現した際の最小値となる領域から反時計回りに連続して整数を割り当てることが出来る。
【0051】
図5に示すように、円周群{T}上の0(1)は、-1/(2t)~1/(2t)の領域の範囲内にある。
円周群{T}上における暗号文の平文は、必要に応じて例えば1/(2t)に基づいたオフセットを、図5の状態に加算あるいは減算して領域内の位置(円周群{T}上の位置)を調整することが出来る。
本質的に変わることはないが、下記に説明する実施形態では、図5の説明とは円周群の分割数tの意味が異なっている。
【0052】
奇関数及び偶関数の計算を以下に説明する。
図6乃至図8は、本実施形態におけるInteger-wise型TFHEを説明する図である。
図5と同様に平文に対してオフセットを付加していない(平文に対するオフセットが0である)状態を図6(b)に示している。
図6(a)は、図6(b)に示す暗号文の平文に対して、例えば+1/(4t)のオフセットを付加した状態を示している。オフセットを付加することによって、円周群{T}のスライス割りを変更することが出来る。
下記の説明では、円周群の右半面、左半面とは、オフセットを1/(4t)だけ付与した図6(a)の状態に準拠するものとする。
【0053】
計算したい関数fの引数とするTLWE暗号文caがあるとする。
TLWE暗号文caは、図6(a)に示す構成のTLWE暗号文であり、右半面をt個に分割し、左半面をt個に分割し、円周群{T}全体を2t個に分割している。
なお、以下では、円周群{T}の値域0~1を-0.5~0.5(-1/2~1/2)とする場合がある。
図6(a)に示すように、TLWE暗号文caは秘密鍵がなければ知り得ない整数aに対応する実数a/(2t)+1/(4t)を平文として有する。
なお、a/(2t)+1/(4t)は誤差なしの平文であり、実際には誤差が付与された値が平文として格納されている。ここで、暗号処理装置1は、平文に付加される誤差の範囲が±1/{4(t+1)}未満となるようにシステムパラメータを設定する。
本実施形態では、TLWE暗号文caにおいて、円周群{T}の右半面を非負の整数である平文に対応させ、左半面を負の整数である平文に対応させる。
TLWE暗号文caの平文がa/(2t)であるのは、円周群全体を2t個に分割していることに基づく。
【0054】
図6(a)において、負の数を扱う円周群{T}の左半面では、上から反時計回りに、-t/(2t)から始まるスライス~-1/(2t)から始まるスライスを用いて整数-t~-1を表現する。
0と正の数(非負の数)を扱う円周群{T}の右半面では、下から反時計回りに、0/(2t)から始まるスライス~t-1/(2t)から始まるスライスを用いて、整数0~t-1を表現する。
【0055】
TLWE暗号文caにおいて、円周群{T}を分割した1/(2t)の区間毎に整数値が割り当てられる。
TLWE暗号文が取り得る平文整数の値は値域0~1を分割した2t個の値-tからt-1である。t-1が1つのTLWE暗号文に記録できる整数の最大値であり、-tが1つのTLWE暗号文に記録できる整数の最小値である。
【0056】
上記のようにTLWE暗号文caは、平文に1/(4t)のオフセットを追加しており、例えば整数0に対応する平文は円周群{T}の0+1/4tの前後に誤差が付加されて分布している。これにより、円周群{T}の0の位置を、整数0と整数-1の境界とすることが出来る。0の区間は円周群{T}上の0から1/2tまでの範囲とし、そのブロックに各ブロックが順に隣接するようにスライスを分割する。
図6(b)に示すオフセット未付加の状態では、円周群{T}上の0(1)が-1/(4t)~1/(4t)のスライス(0の前後における平文に付加したノイズ分が1つのスライス)内にある。この場合、0.5付近を利用することが出来ないため、円周群の全面を活用出来ていない。
図6(a)に示すように、オフセットを付加することによって、円周群{T}上の0から始まるスライス(0/2t)に整数0を対応付けながら平文をスライスの中央に位置させることが出来る。他のスライスはX/2t(Xは平文整数)から始まる。
【0057】
図6(a)において、オフセットを付加された平文は、各スライス(例えば、1/(2t)から始まるスライス)の中央に、±1/4tの誤差範囲内で位置する。このとき、正規分布の平均が例えば1/(2t)+1/4tとなり、ほとんどの場合に±1/4tの誤差範囲内に分布することで、1/(2t)から始まるスライスの中央に平文が分布する。
オフセットを付加した平文は、図6(a)において、1/(2t)のスライスにのみ図示しているが、あくまで例示であり、全てのスライスに始点となる値にオフセットを付した平文が存在する。後述の図7についても同様である。
【0058】
上記のように、図6(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のオフセットと表現することが出来る。
【0059】
図6(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である。
【0060】
tの値を大きくして円周群{T}を細かく分割するとTLWE暗号文に記録可能な整数値の範囲より大きくできるが、細かく分割しすぎると平文に付加する誤差範囲が小さくなりすぎ、暗号の強度が低下するという問題がある。この点については後に説明する。
オフセットの値1/(4t)は例でありこれに限定されるものではないが、オフセットの値に応じて、多項式やパラメータを調整する必要がある。
【0061】
図6の円周群を用いて奇関数、偶関数を計算する方法を説明する。
以下では、奇関数を計算する<手法1>及びその応用、<手法2>、偶関数を計算する<手法3>、<手法4>を説明する。
[奇関数]
奇関数の定義として、実数xの関数f(x)が、f(-x)=-f(x)を満たすとき、その関数を奇関数という。
暗号処理装置1は、計算したい奇関数をf(x)とし、TLWE暗号文caの平文整数の値aから、f(a+0.5)の平文を持つ新たな暗号文を算出する。
【0062】
<手法1>
これは、図2の(a-1)に対応する手法である。
暗号処理装置1は、階段状となる一変数多項式の関数(一変数関数)Fid(X)
を用いて、TLWE暗号文caに対する第1Bootstrappingを行い、負の数を扱う円周群{T}の左半面の値(対応する整数値)を上下反転させた、図7に示すTLWE暗号文cbを算出する。
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暗号文の値によって異なる結果を得る。
【0063】
図7は、TLWE暗号文cbに対応する円周群を示している。図7に示すように、一変数関数Fidを用いた第1Bootstrappingの結果、暗号文cbでは、負の数として使う領域である左半面の並びが、TLWE暗号文caから上下反転している。
一変数関数Fidは、非負の整数0~t-1の暗号文の入力に対しては、同じ非負の整数0~t-1の暗号文を出力するとともに、平文に対して0.5のオフセットを付与する。一変数関数Fidは、負の整数-t~-1の暗号文の入力に対しては、整数-1~-tの暗号文を出力するとともに、平文整数に対して0.5のオフセットを付与する。
図6に示したように、TLWE暗号文caにおいて1つの整数が対応するスライスの幅は1/(2t)であり、TLWE暗号文cbにおいて平文整数aに0.5のオフセットを付与することは、平文の実数a/(2t)等に1/(4t)のオフセットを追加することである。平文に対する+1/(4t)のオフセット部分に整数表現に含めて表したものを+0.5と表現している。
【0064】
図6(a)において円周群{T}の右半面に平文があった場合(平文が非負の数である)、一変数関数Fidを用いた上記処理の結果、TLWE暗号文cbの平文整数は、図7に示すように円周群{T}の同じスライス(領域)内に留まる。一方、平文が負の数-t~-1であって円周群{T}の左半面に平文がある場合は、上記処理の結果、TLWE暗号文cbの平文整数は、図7に示すように円周群{T}における「上下」が反転する。
例えば、図6に示すようにTLWE暗号文caにおける平文整数aが-1の場合、円周群{T}上の値としては-1/2t~0の区間にある。そのため、多項式Fidの最上位のブロックの項が符号反転して最下位に現れる。従って、第1Bootstrapping後のTLWE暗号文cbの平文は、円周群上の値として-1/2+1/4t、整数としては-tとなる。
TLWE暗号文caにおける平文整数aが-tの場合は、円周群{T}上の値としては、-t/2t+1/4t=-1/2+1/4tとなり、左半面の最も-1/2に近いブロックにある。一変数関数Fidの最下位のブロックの項の符号反転したものが第1Bootstrapping後のTLWE暗号文cbとして得られるため、TLWE暗号文cbの平文は、円周群上の値として-1/4tつまり整数として-1となる。
【0065】
図7における右半面は、下から反時計周りに0/(2t)から3/(2t)のスライスに0からt-1の整数が割り当てられ、図6(a)の場合と平文整数の並びが変わっていない。
一方、左半面は、上から半時計回りに、-t/(2t)から-1/(2t)のスライスに-1~-tの整数が割り当てられ、図6(a)の場合から並びが逆転している。
図7に示す暗号文cbにおいて、整数としては、円周群{T}の上から、-1、-2、-3、-4、0、1、2、3である。円周群{T}で正負の値が連続して並んでいる。
【0066】
図6(a)において、例えばTLWE暗号文caが-1の暗号文であった場合、平文は円周群{T}上の-1/(2t)~0の区間にあった。
上記処理の結果、TLWE暗号文cbでは、一変数関数Fidの最上位のブロックの項が符号反転して最下位に現れる。従って、図7において、TLWE暗号文caの平文は、円周群{T}上の値として-1/2+1/(4t)である。この平文は図6(a)では整数-t(=-4)に対応していたが、図7に示す暗号文cbでは平文整数として-1が割り当てられる。
図6(a)において、例えばTLWE暗号文caが-tの暗号文である場合、平文は円周群{T}上の-t/(2t)+1/(4t)前後に分布している(-1/2より少し大きい値である)ことから、平文は円周群{T}上の最も-1/2に近い区間にある。
上記処理の結果、TLWE暗号文cbでは、一変数関数Fidの最下位のブロックの項が符号反転して現れる。従って、図7において、TLWE暗号文caの平文は、円周群{T}上の値として、-1/(2t)+1/(4t)である。この平文は図6(a)では整数-1に対応していたが、図7に示す暗号文cbでは平文整数として-t(=-4)が割り当てられる。
【0067】
一般化すると、平文が非負の数であるTLWE暗号文caの平文は、TLWE暗号文cbではa/(2t)+1/(4t)となり、平文整数としてはaのままである。
それに対して、平文が負の数であるTLWE暗号文caの平文は、TLWE暗号文cbでは-(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の平文を整数としてみた時と合致していることが確認できる。
この処理の結果、多項式の項に加えた1/4tの項によってオフセットが平文に付加されるため、図6の暗号文caと同様に、図7の暗号文cbにおいても、円周群の0の位置がスライスの境界となっている。
このように、平文が負の数である場合、整数が割り当てられる平文が変化する。言い換えると、暗号文cbの平文を整数シンボルで見る際は暗号文caの整数と同じ値であるとしたとき、暗号文cbの平文のスライスと整数の対応は、暗号文caの時と異なっている。この対応関係を見たときに、円周群における平文のスライスの並び自体は、暗号文caと暗号文cbとの間で変わらないが、負の数が割り当てられる左半面では、平文に割り当てられる平文整数の並びが逆転するのである。
【0068】
t=4(2t=8)である図7では、暗号文の平文に上記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)である。
これらのスライスに、暗号文cbを生成する入力となった暗号文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となる。
【0069】
次に、暗号処理装置1は、関数f(x)の演算結果のうち、xが非負の場合の値のみを取り出して、以下のテストベクタ多項式F(X)を作成する。
そして暗号処理装置1は、このテストベクタ多項式F(X)を用いて暗号文cbに対する第2Bootstrappingを行い、TLWE暗号文ccを得る。
TLWE暗号文cbが非負の場合、つまり平文整数aが0,1,2,…の場合は円周群の右半面(0~0.5)にあるため、符号反転しないでf(0.5),f(1.5),f(2.5),…の値を平文とするTLWE暗号文ccが得られる。
それに対してTLWE暗号文cbが負の場合、つまり平文整数aが-1,-2,-3…の場合は、その順番で0.5~1の区間に並んでいるため、符号が反転して-f(0.5),-f(1.5),-f(2.5)…の値を平文とするTLWE暗号文ccが得られる。
f(x)が奇関数であれば、a=-1,-2,-3,…にそれぞれ対応して得られる暗号文ccの平文φ(cc)は、それぞれf(-0.5),f(-1.5),f(-2.5),…と一致する。
すなわち、上記の非負の場合の例とあわせて、φ(cc)=f(a+0.5)を満たす、奇関数の演算結果に対応する暗号文ccを算出することができた。
【0070】
<手法1の応用>
<手法1>は一次関数を計算する場合全般に応用でき、図2の(a-2)に対応する。
まず、奇関数f(x)=mx(mは実数)とする。一次関数の一般式はax+bと表現されることが多いが、b=0の場合のみ奇関数となる。
<手法1>を用いて、φ(cc)=f(a+0.5)=am+0.5mを計算することができる。<手法1>に対する追加のステップとして、TLWE暗号文ccに自明な暗号文(0,m’-0.5m)を加算して暗号文cdとする。ここでは関数f、ひいてはmを固定して考えているため、ここではmは定数である。
すると、φ(cd)=φ(cc+(0,m’-0.5m))=φ(cc)+m’-0.5m=(am+0.5m)+m’-0.5m=am+m’となり、汎用的に一次関数を計算することができる。
【0071】
<手法2>
一般の奇関数の場合を計算する手法を説明する。これは図2の(a-3)に対応する手法である。
上記一次関数の場合も切片が0であれば奇関数であるため、下記の手順で計算可能である。
第1Bootstrappingを行うためのテストベクタを以下の多項式F’idに変更する。
【0072】
図8に示すように、TLWE暗号文cbは、図7に示した<手法1>の場合のFidと異なり分母が少し大きくなり、スライスが縮小している。
これにより、単純に分母が大きくなっているので、図8に示すように、円周群の右半面に平文がある(非負の数の)場合は少し0側に寄る。そして左半面にある(負の数、つまり-t~-1)場合は図6から「上下」が反転してこちらも0の方に少し寄る。
例えばaが-1の場合、円周群上の値としては-1/2t~0の区間にある。そのため、F’idの最上位のブロックの項が符号反転して最下位に現れているため、Bootstrapping後のTLWE暗号文の平文は、円周群上の値として-(t-1)/{2(t+1)}-1/{4(t+1)}=-t/{2(t+1)}+1/{4(t+1)}、整数としては-tとなる(分母が大きくなっているため保持できる最小値と最大値も広がって-(t+1)~tを保持できるようになっている)。また、aが-tの場合は円周群上の値として-t/2t+1/4t=-1/2+1/4tということで、最も-1/2に近いブロックである。これはつまり、F’idの最下位のブロックの項の符号反転したものがBootstrapping後のTLWE暗号文として得られるため、-1/{4(t+1)}つまり整数として-1となる。
【0073】
一般化すると、aが正の数の場合、TLWE暗号文cbの平文はa/{2(t+1)}+1/{4(t+1)}となり、整数としてはaのままである。
aが負の場合はTLWE暗号文cbの平文が-(t+1+a)/{2(t+1)}+1/{4(t+1)}となっており、整数としては-(t+1+a)となる。
分母が大きくなりスライスが左右で1つずつ増えているため、円周群上の座標は変わっているが、整数としてみたときは<手法1>と同じシンボルになっている。
また、この処理の結果は多項式の項に加えてある1/4tの項のおかげでオフセットが付き、図8のように円周群の0の位置がちょうどスライスの境界となっている。
【0074】
暗号処理装置1は、処理したい関数f(x)の演算結果のうち、xが非負の場合の値のみを取り出してテストベクタ多項式F’(X)を作成する。
暗号処理装置1は、作成したテストベクタ多項式F’(X)を用いてTLWE暗号文cbをBootstrappingし、TLWE暗号文ccを得る。
なお、関数f(x)は整数を引数として整数を得られる関数とする。
すると、図8に示すように、TLWE暗号文cbが非負の場合つまり平文整数a=0,1,2,…の場合は円周群の右側(0~0.5)にあるため、符号反転しないでf(0),f(1),f(2),…の値を平文とする暗号文ccが得られる。
また、図8に示すように、TLWE暗号文cbが負の場合、つまり平文整数aが-1,-2,-3…の場合は、0.5+1/2(t+1)~1の区間に並んでいるため、符号が反転して-f(1),-f(2),-f(3)…の値を平文とする暗号文ccが得られる。
もし、f(x)が奇関数であれば、-f(x)=f(-x)である。
従って、φ(cc)=f(a)と一致することとなる。
【0075】
次に、偶関数を算出する方法を説明する。
偶関数の定義として、実数xの関数f(x)が、f(-x)=f(x)を満たすとき、その関数を偶関数という。
<手法3>
これは、図2の(b-1)に対応する手法である。
暗号処理装置1は、下記の多項式Fabs(X)
をテストベクタとして、TLWE暗号文caに対する第3Bootstrappingを行い、新たな暗号文cbを算出する(図9)。
暗号文cbにおいては、図9図10に示すような変換が行われる。
【0076】
図10は、本実施形態(偶関数)における暗号文の値の遷移を説明する図であり、第3Bootstrappingの結果得られる暗号文cbの平文を示している。
図9において、右半面の最外周の数値はテストベクタ多項式の係数の並び通りに、左半面はその符号反転したものが上下反転して並んでいる。
t=4の場合を前提に説明する。
平文整数aが非負の場合、平文は円周群{T}の右半面に存在するので、Fabs(X)のk/{2(t+1)}+1/{4(t+1)}-1/4において、分母を4×(t+1)=20に揃えると、
2k/{4(t+1)}+1/{4(t+1)}-(t+1)/{4(t+1)}から、{2k+1-(t+1)}/20=(2k-4)/20となる。
t=4であるので、暗号文cbの平文bは、図9に示すように、整数ではなく円周群上の値で見たとき、a=0の場合はb=-4/20、a=1の場合はb=-2/20…と並ぶ。
【0077】
absによる第3Bootstrappingの結果、平文整数aが負の場合は、0.5~1の方向に向かってそれが符号逆転して得られる。従って、暗号文cbの平文bは、図9に示すように、a=-4ならa=0の時の符号反転でb=4/20、a=-1ならa=3の時の符号反転でb=-2/20となる。
図10に示すように、平文bの円周群上の値は、
平文整数aが-4のときは4/20であり、
平文整数aが-3のときは2/20であり、
平文整数aが-2のときは0/20であり、
平文整数aが-1のときは-2/20であり、
平文整数aが0のときは-4/20であり
平文整数aが1のときは-2/20であり
平文整数aが2のときは0/20であり
平文整数aが3のときは2/20である。
【0078】
暗号処理装置1は、暗号文cbに自明な暗号文(0,1/4)を加え、TLWE暗号文ccを得る。1/4は上記の値と分母を揃えると5/20なので、暗号文cbの平文bの分子には5が加わって平文bは全て右半面へと集められる。
図10に示すように、b+5/20の円周群上の値は、
平文整数aが-4のときは9/20であり、
平文整数aが-3のときは7/20であり、
平文整数aが-2のときは5/20であり、
平文整数aが-1のときは3/20であり、
平文整数aが0のときは1/20であり、
平文整数aが1のときは3/20であり、
平文整数aが2のときは5/20であり、
平文整数aが3のときは7/20である。
【0079】
このとき、平文bの分母が20であり、分子が2刻みで増えているため、暗号文ccは、円周群{T}全体を10分割(右半面をt+1=5分割)して使用する場合の、非負の暗号文となっていると見ることができる。
10分割として捉えると、暗号文ccの平文であるb+5/20の整数表現は、図10に示すように、
平文整数aが-4のとき、9/20=4.5/10⇒4であり、
平文整数aが-3のとき、7/20=3.5/10=3であり、
平文整数aが-2のとき、5/20=2.5/10⇒2であり、
平文整数aが-1のとき、3/20=1.5/10⇒1であり、
平文整数aが0のとき、1/20=0.5/10⇒0であり
平文整数aが1のとき、3/20=1.5/10⇒1であり
平文整数aが2のとき、5/20=2.5/10⇒2であり
平文整数aが3のとき、7/20=3.5/10⇒3である。
並び順も、a=0の時を基準にaが正か負に離れるほど順番に大きくなっており、絶対値関数を計算したものと言える。つまりφ(cb)=|a|、ただし||は絶対値記号、と言うことができる。
さらに、暗号文ccの平文は、円周群{T}の右半面しか使用してないので、暗号処理装置1は、非特許文献3の手法を用いて任意の一変数関数を評価することができる。
【0080】
暗号処理装置1は、関数f(x)が整数を引数として整数を得られる関数として、
を用いて暗号文ccに対する第4Bootstrappingを行い、暗号文cdを算出する。
ここで前述の通りcbは右反面しか使用していないため、φ(cc)=f(φ(cb))が成り立つ。そして、φ(cb)=|a|を代入すると、φ(cc)=f(|a|)ただし||は絶対値記号、と計算することができる。
f(x)が偶関数であれば、xが実数の場合にf(x)=f(-x)つまりf(x)=f(|x|)が常に成り立つため、φ(cc)=f(a)と一致する。
【0081】
<手法4>
これは、図2の(b-2)に対応する手法である。
偶関数の場合も、偶関数f(x)のxを0.5ずらしてf(x+0.5)を求めるのであれば、途中の暗号文cbの平文の分母を大きくする必要がなくなる。
図11は、本実施形態(偶関数)における暗号文の値の遷移を説明する図であり、多項式F’absによるBootstrappingの結果得られる暗号文cbの平文を示している。
【0082】
暗号処理装置1は、下記の多項式F’abs(X)
をテストベクタとして、暗号文caに対する第3Bootstrappingを行い、暗号文cbを算出する。
図11に示すように、平文bの円周群上の値は、
平文整数aが-4のときに(-3/16)であり、
平文整数aが-3のときに-(-1/16)であり、
平文整数aが-2のときに-1/16であり、
平文整数aが-1のときに-3/16であり、
平文整数aが0のときに-3/16であり、
平文整数aが1のときに-1/16であり、
平文整数aが2のときに1/16であり、
平文整数aが3のときに3/16である。
【0083】
ここで暗号処理装置1は、暗号文cbに自明な暗号文(0,1/4)を加える。1/4は、上記の値と分母を揃えると4/16であるので、暗号文cbの平文bの分子には4が加わって平文bは全て右半面へと集められる。
図11に示すように、b+4/16の円周群上の値は、
平文整数aが-4のときに7/16であり、
平文整数aが-3のときに5/16であり、
平文整数aが-2のときに3/16であり、
平文整数aが-1のときに1/16であり、
平文整数aが0のときに1/16であり
平文整数aが1のときに3/16であり
平文整数aが2のときに5/16であり
平文整数aが3のときに7/16である。
【0084】
このとき、平文bの分母が16であり、分子が2刻みで増えているため、暗号文ccは、円周群{T}全体を8分割(右半面をt=4分割)して使用する場合の、非負の暗号文となっていると見ることができる。
8分割として捉えると、暗号文ccの平文であるb+4/16の整数表現は、図11に示すように、
平文整数aが-4のとき、7/16=3.5/8⇒3.5であり、
平文整数aが-3のとき、5/16=2.5/8⇒2.5であり、
平文整数aが-2のとき、3/16=1.5/8⇒1.5であり、
平文整数aが-1のとき、1/16=0.5/8⇒0.5であり
平文整数aが0のとき、1/16=0.5/8⇒0.5であり
平文整数aが1のとき、3/16=1.5/8⇒1.5であり
平文整数aが2のとき、5/16=2.5/8⇒2.5であり、
平文整数aが3のとき、7/16=3.5/8⇒3.5である。
【0085】
図11によれば、円周群の0の位置で折り返して、絶対値関数を計算していることがわかる。
φ(cc)=|a+0.5|といえる。ここで、a2=a+0.5と置くと、φ(cc)=|a2|、ただし||は絶対値記号、と言うことができる。
暗号処理装置1は、暗号文ccに対して、上記一変数関数F’(X)
をテストベクタとした第4Bootstrappingを行い、暗号文cdを得る。右反面しか既に使用していないのは上記と同じである。
すると、φ(cd)=f(|a+0.5|)が得られる。ここで、f(x)が偶関数であれば、f(x)=f(-x)=f(|x|)であるため、φ(cd)=f(a+0.5)となる。
【0086】
図12は、本実施形態の暗号処理装置が奇関数と偶関数を計算する処理を説明するフローチャートである。
図12(a)は、奇関数の計算を行う処理を説明する。
(a-1)において、暗号処理装置1(第1Bootstrapping部41)は、ステップS101において、TLWE暗号文caに対して、一変数関数Fid(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS102において、暗号処理装置1(第2Bootstrapping部42)は、暗号文cbに対して、一変数関数F(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応する暗号文ccを算出する。
【0087】
(a-2)において、暗号処理装置1(第1Bootstrapping部41)は、ステップS111において、TLWE暗号文caに対して、一変数関数Fid(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS112において、暗号処理装置1(第2Bootstrapping部42)は、暗号文cbに対して、一変数関数F(X)をテストベクタとして用いた第2Bootstrappingを行い、暗号文ccを算出する。
ステップS113において、暗号処理装置1(第1演算部12)は、暗号文ccに対して、cc+(0,m’-0.5m)の準同型演算を行い、奇関数の計算結果に対応する新たな暗号文cdを算出する。
【0088】
(a-3)において、暗号処理装置1(第1Bootstrapping部41)は、ステップS121において、TLWE暗号文caに対して、一変数関数F’id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS122において、暗号処理装置1(第2Bootstrapping部42)は、暗号文cbに対して一変数関数F’(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応する暗号文ccを算出する。
【0089】
図12(b)は、偶関数の計算を行う処理を説明する。
(b-1)において、暗号処理装置1(第3Bootstrapping部43)は、ステップS201において、TLWE暗号文caに対して、一変数関数Fabs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS202において、暗号処理装置1(第2演算部13)は、暗号文cbに対してcb+(0,1/4)の準同型演算を行い、TLWE暗号文ccを算出する。
ステップS203において、暗号処理装置1(第4Bootstrapping部44)は、暗号文ccに対して一変数関数F’(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応する暗号文cdを算出する。
(b-2)において、ステップS211において、暗号処理装置1(第3Bootstrapping部43)は、TLWE暗号文caに対して一変数関数F’abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS212において、暗号処理装置1(第2演算部13)は、暗号文cbに対してcb+(0,1/4)の準同型演算を行い、TLWE暗号文ccを算出する。
ステップS213において、暗号処理装置1(第4Bootstrapping部44)は、暗号文ccに対して一変数関数F(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応する暗号文cdを算出する。
【0090】
以上では、本実施形態の暗号処理装置が偶関数又は奇関数を計算するための構成及び処理を説明した。以降では、本実施形態の暗号処理装置が、偶関数又は奇関数を計算で用いた演算や処理方法を応用して任意の一変数関数を計算するための構成及び処理を説明する。
図13は、本実施形態の暗号処理装置が任意の一変数関数の計算を実行するための方法を説明する図である。
図13は、暗号処理装置1が、任意の一変数関数の計算を少ないBlindRotateの回数にて高速に処理するための、計算をしたい一変数関数に基づく準備段階を説明している。
論文「Putting up the swiss army knife of homomorphic calculations by means of TFHE functional bootstrapping,Pierre-Emmanuel Clet, Martin Zuber, Aymen Boudguiga, Renaud Sirdey, and Cedric Gouy-Pailler」には、計算したい任意の一変数関数を偶関数と奇関数に分解して、演算結果の暗号文を夫々算出し、最後に加算することで任意の一変数関数の計算結果の暗号文を算出することを開示している。
【0091】
関数を偶関数と奇関数に分解することについて、任意の一変数関数f(x)を用いて

と定めると、単純に両者を足すことでf(x)=fe(x)+fo(x)である。従って、この2関数fe(x)、fo(x)は一変数関数f(x)を2つに分解したものである。また、式の形からfe(x)のxの符号を反転させても式の中で+の左右が入れ替わっているだけである。従って、fe(x)=fe(-x)が成り立ち、fe(x)は偶関数である。
そして、fo(-x)も同様にxの符号を反転させると、式の中の-の左右にあるfが入れ替わり-fo(x)と同じ形になる。つまりfo(-x)=-fo(x)が成り立ち、fo(x)は奇関数である。
【0092】
以上から、上記のようにfe(x)、fo(x)を求めることは、任意の一変数関数f(x)を偶関数と奇関数に分解することである。
上記の議論はxにあてはめられるものが実数であるか整数であるか複素数であるかなどの指定も、f(x)が多項式であるかなどの指定なども一切なく、任意の一変数関数で成り立つ。
従って、<手法2>および<手法3>によってfe(x)とfo(x)を計算することができる。その場合、偶関数fe(x)と奇関数fo(x)の計算結果の算出にそれぞれ2回のBlindRotateで処理を行う。
上記「Putting up the swiss army knife of homomorphic calculations by means of TFHE functional bootstrapping」では、任意の一変数関数を4回のBlindRotateで処理できるとしている。またmanyLUTなど同時に複数のLUTを評価する手法を取り入れることで3回のBlindRotateに削減できるとしている。manyLUTは、同一の入力となる暗号文に対して、複数のテストベクタ多項式を用いたBlindRotateを同時に行うことにより、BlindRotateの回数を削減する手法である。
【0093】
それに対して、本実施形態によれば、計算したい一変数関数を、偶関数fe(x)と奇関数fo(x)に分けて夫々を計算するのではなく、違うかたちの関数に分解して計算を行う。
それによって、本実施形態によれば、manyLUTなしでは3回のBlindRotateで、manyLUTを用いれば2回のBlindRotateで任意の一変数関数をより高速に処理することができる。
以下の説明は、異なるかたちの関数として、偶関数、奇関数を変形した関数を使って説明をしているが、それに限定されることはい。
【0094】
まず(A)に示すように、計算をしたい任意の一変数関数F(x)を用意する。この関数は上記した<手法1>および<手法4>と同様に、x座標は-t~t-1の範囲(両端を含む)の整数に0.5の端数を付けた点が少なくとも定義されている。つまり、xが-t以上t-1以下の整数であれば、F(x+0.5)を計算することが出来るものとする。
次に(B)において、暗号処理装置1は、F(x)における入力xが負の値である領域に限定して左右(x軸方向)を反転させ、一変数関数F’(x)を得る。
F’(x)は、
と定義される。
F’(x)は入力xが-t以上t未満の区間で定義され、これも任意の一変数関数と呼ぶべき条件を満たしているものである。
【0095】
暗号処理装置1は、このF’(x)を、上述の方法を用いて(C-1)に示す偶関数Fe(x)と、(C-2)に示す奇関数Fo(x)と、に分解する。
そして、後述するように、Fe(x)を変形したFe’(x)、Fo(x)を変形したFo’(x)の演算結果の暗号文を夫々算出し、その後加算することで、F(x)の演算結果の暗号文を得る。
具体的に、Fe(x)とFo(x)は、以下のようになる。
xに対して絶対値のみで計算できるFe(x)は偶関数である。一方、正と負で同じ式の符号反転なので、Fo(x)は奇関数である。
【0096】
暗号処理装置1は、これら2関数の負の領域を左右反転させ、(D-2)に示すFe’(x)、(D-3)に示すFo’(x)を得る。
以上の操作を行うことにより、Fo’(x)は、奇関数Fo(x)における、入力xの値が負の領域における出力yの値を、xの値が正の領域における出力yの値をx軸方向に1/2スライドさせ且つ正負を反転させた値とした関数に変換することができる。
また、Fe’(x)は、偶関数Fe(x)における、入力xの値が負の領域における出力yの値を、xの値が正の領域における出力yの値をx軸方向に1/2スライドさせた値とした関数となる。
Fe’(x)、Fo’(x)は以下に示す関数である。
ここで、0≦x<tの時、Fe’(x)=Fe’(x-t)と、Fo’(x)=-Fo’(x-t)が成り立つ。
よって、Fo’(x)は、非特許文献3で示されている制約、f(v+1/2)=-f(v)という性質を満たしている。ここでvは円周群上の値である。加算している1/2は円周群上で半周なので、整数シンボルでみれば±tである。
【0097】
暗号処理装置1は、(E-1)に示すように、一変数関数Fo’(x)の値を係数として有するテストベクタ多項式Ffo(X)
を作ることが出来る。
暗号処理装置1は、(E-2)に示すように、一変数関数Fe’(x)の値を係数として持つテストベクタ多項式Ffe(X)
を作ることが出来る。
【0098】
テストベクタ多項式Ffo(X)、テストベクタ多項式Ffe(X)は、上記<手法1>で述べたF(X)と同様に、一変数関数の出力を係数に設定して、Bootstrappingを行うことによりLUTを参照して関数の演算結果を出力することが出来る。
さらに、Ffo(X)、Ffe(X)は夫々負の領域での並び順が既に反転しているため、これらを係数に設定されたテストベクタ多項式Ffo(X)、テストベクタ多項式Ffe(X)は、<手法1>で述べたFidを用いて円周群における負の平文を反転させる処理を必要としない。
円周群上において、0から0.5までの右半面で最小から最大までの係数が並び、また0.5から1までの左半面で符号反転した最小から最大までの係数が並ぶ。円周群が図6のような状態では、正負両方をうまくBlindRotateで扱うのは難しく、偶関数、奇関数の計算を行うのに夫々2回のBootstrappingが必要である。実際に、<手法1>では、
を用いたBootstrappingによって整数の並びを反転させたあとで、
を用いたBootstrappingによって関数の値を算出していた。一方で、準同型加算を行う場合などは、負の方向の最大値から正の方向の最大値までが連続して並んでいる図6の並び順の方が、正と負の両方の値を扱うのに都合が良い。
【0099】
本実施形態では、テストベクタ多項式に含まれる一変数関数Fo’(x)、一変数関数Fe’(x)において夫々負の領域の並びが反転していることにより、負の左半面については図7のような状態に整数の並びを反転させた場合と同じ効果を得ながら、偶関数、奇関数の計算をすることが出来る。
奇関数と偶関数で、テストベクタ多項式Ffo(X)、テストベクタ多項式Ffe(x)を用いたBootstrappingを1回行うのみで、奇関数と偶関数の計算をすることが出来る。
なお、図13に示した、負値を反転した関数F’(x)の算出や奇関数Fo(x)、偶関数Fe(x)の分離、負値を反転した関数Fo’(x)、関数Fe’(x)の算出は、全てを暗号処理装置1で行わずともよい。一部又は全部を他の装置で算出・生成し、暗号処理装置1に入力されてもよい。
【0100】
図14は、本実施形態の暗号処理装置が任意の一変数関数の計算を実行するための構成を説明する図である。
暗号処理装置1は、第5Bootstrapping部45に暗号文caを入力し、テストベクタ多項式Ffoを用いて第5Bootstrappingを行い、暗号文cc1を得る。暗号文cc1は、平文としてFo’(x+0.5)の値を有する。
【0101】
Fe’(x)は、f(v+1/2)=f(v)となるため、暗号文caにテストベクタ多項式Ffe(X)をそのまま用いることはできない。
ただし、円周群上で半周回した場合と同じ値になるため、平文aが円周群の0~0.5(左半面)、0.5~1(右半面)のどちらの区間にあるかを判定して、片方を1/2加算で円周群上を半周分だけ回せばよい。暗号処理装置1は、暗号文caを第6Bootstrapping部46に入力し全係数が1/4であるテストベクタ多項式T1(X)を用いて、TLWE暗号文caに対して第6Bootstrappingを行う。
これにより、暗号文caの平文aが円周群上で0~0.5、整数として0~t-1の場合は平文として1/4を有し、円周群上で0.5~1、整数として-t~-1の場合は平文として-1/4を有する二値の暗号文cc3が得られる。暗号文cc3は、暗号文caの平文aが円周群の左半面にあるか右半面にあるかを示す暗号文である。
暗号処理装置1は、暗号文cc3と暗号文caを第3演算部14に入力して暗号文caに暗号文cc3に準同型加算する。その結果、暗号文caの平文aが左半面にあったときは、暗号文cc3を加算することによって平文aが右半面に移動する。暗号文caの平文が右半面にあったときは、暗号文cc3を加算することによって平文は右半面に留まる。
従って、暗号文caに暗号文cc3を加算して得られる暗号文ca’は、円周群の右半面の領域0~0.5のみを使用している。
ただしこれだけでは、領域0~0.5ではなく、値域-1/4~1/4の区間を利用して整数を表現することになってしまうため、値域0~0.5の範囲で利用したい場合は、さらに自明な暗号文(0,1/4)を準同型減算するとなお好ましい。
【0102】
暗号処理装置1は、暗号文ca’を第7Bootstrapping部47に入力し、テストベクタ多項式Ffe(X)を用いて暗号文ca’に対する第7Bootstrappingを行い、暗号文cc2を得る。暗号文cc2は、平文として、Fe’(x+0.5)の値を有する。
ここまでの処理で、Bootstrapping(BlindRotate)を3回行っている。
最後に、暗号処理装置1は、暗号文cc1、暗号文cc2を第4演算部16に入力し、暗号文cc1、暗号文cc2を準同型加算して、一変数関数F(x)の暗号文を得ることが出来る。
上記の計算により、
であったため、
であり、xがどちらの場合でも、Fe’(x+0.5)+Fo’(x+0.5)=F(x+0.5)が成り立つ。
第5Bootstrappingと第6Bootstrappingは、同一の暗号文に対する処理である。従って、BlindRotate時に複数のテストベクタ多項式(LUT)を同時に参照するmanyLUTを用い、BlindRotateの数を1回にまとめることが出来る。第7Bootstrappingと合わせて、全体で2回のBlindRotateとすることが出来る。
【0103】
図15は、本実施形態の暗号処理装置が一変数関数を計算するための処理を説明するフローチャートである。
暗号処理装置1(第5Bootstrapping部45)は、ステップS301において、Ffo(X)をテストベクタ多項式として用いて、入力暗号文caに対する第5Bootstrappingを実行し、暗号文cc1を得る。
暗号処理装置1(第6Bootstrapping部46)は、ステップS302において、テストベクタ多項式T1(X)を用いて、入力暗号文caに対する第6Bootstrappingを実行し、暗号文cc3を得る。
暗号処理装置1(第3演算部14)は、ステップS303において、暗号文caと暗号文cc3との準同型演算を行い、暗号文ca’を得る。
暗号処理装置1(第7Bootstrapping部47)は、ステップS304において、Ffe(X)をテストベクタ多項式として用いて、暗号文ca’に対する第7Bootstrappingを実行し、暗号文cc2を得る。
暗号処理装置1(第4演算部15)は、ステップS305において、暗号文cc1と暗号文cc2の準同型演算を行い、任意の一変数関数F(x)の計算結果に対応する暗号文を得る。
【0104】
図16は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、特に第1Bootstrappingなど、図16(a)に示すように、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図16(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
【0105】
図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暗号文が出力される。
【0106】
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の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0107】
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、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を行うことで、所要時間の増加を避けることが出来る。
【0108】
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域を2t個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできる。円周群を分割した個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0109】
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
[応用例]
【0110】
暗号処理装置10は、第1演算部12、第1Bootstrapping部41、第2Bootstrapping部42の機能によって奇関数の計算を行う。
また暗号処理装置10は、第2演算部13、第3Bootstrapping部43、第4Bootstrapping部44の機能によって偶関数の計算を行う。
また暗号処理装置10は、第3演算部14、第4演算部15、第5Bootstrapping部45、第6Bootstrapping部46、第7Bootstrapping部47の機能によって任意の一変数関数の計算を行う。
暗号処理装置1が行う処理は、以下のように応用することが出来る。
具体的な応用例として、生体認証(生涯不変のデータなので秘匿するのは絶対条件。閾値付きで一致するか否かを判定する)のようなファジー認証や、曖昧な、近しいデータをデータベースから検索するファジー検索や、暗号化されたデータベースからのクエリ集計などが挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、生体情報は正確に測定しても厳密に同じ値を取得できるわけではないため、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、暗号化されたデータベースに対するクエリを実行する際に、準同型暗号により暗号化されたデータで様々な演算が必要になる。その中には、一変数関数でありかつ偶関数や奇関数であるものも含まれる。例えば、ファジー認証で登録されているフィンガープリントとの一致度を計算するために、ユークリッド距離を利用する場合、xを計算することになるが、これは偶関数である。また、ベクトルの正規化などでスケールを変換する場合は、スケールの乗算つまり1次多項式を計算することになり、これは奇関数である。また、偶関数や奇関数を計算することによって計算できる任意の一変数関数も、ファジー認証やファジー検索、暗号化されたデータベースに対するクエリを実行する際に必要である。
文章の類似性を評価するため等に用いられ、2つのベクトルの内積を夫々のノルムで割ることが求められるコサイン類似度の算出においても、任意の一変数関数を暗号化したまま計算できることは有用である。
【0111】
図17は、コンピュータ装置の一実施例を示すブロック図である。
図17を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0112】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、図1における制御部10として機能する。
【0113】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、図1における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、図1における記憶部20として機能する。
【0114】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、奇関数の演算について、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第1Bootstrapping処理、第2Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
暗号処理装置1は、偶関数の演算について、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第2演算処理、第3Bootstrapping処理、第4Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
また、暗号処理装置1は、任意の一変数関数の演算について、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第3演算処理、第4演算処理、第5Bootstrapping処理、第6Bootstrapping処理、第7Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
なお、プログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0115】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0116】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、図1において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、図1において、入力部26として機能する。
【0117】
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0118】
1 暗号処理装置、10 制御部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17