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

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

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

特許7556580暗号処理装置、暗号処理方法、暗号処理プログラム
<>
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図1
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図2
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図3
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図4
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図5
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図6
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図7
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図8
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図9
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図10
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図11
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図12
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図13
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図14
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図15
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図16
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図17
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図18
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図19
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図20
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図21
  • 特許-暗号処理装置、暗号処理方法、暗号処理プログラム 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-17
(45)【発行日】2024-09-26
(54)【発明の名称】暗号処理装置、暗号処理方法、暗号処理プログラム
(51)【国際特許分類】
   H04L 9/30 20060101AFI20240918BHJP
   G09C 1/00 20060101ALI20240918BHJP
【FI】
H04L9/30 Z
G09C1/00 620Z
【請求項の数】 15
(21)【出願番号】P 2022203161
(22)【出願日】2022-12-20
(65)【公開番号】P2024088134
(43)【公開日】2024-07-02
【審査請求日】2023-09-21
(73)【特許権者】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
【審査官】中里 裕正
(56)【参考文献】
【文献】特開2021-83038(JP,A)
【文献】国際公開第2021/229156(WO,A1)
【文献】国際公開第2021/229157(WO,A1)
【文献】CLET, P.-E. et al.,Putting up the swiss army knife of homomorphic calculations by means of TFHE functional bootstrapping,Cryptology ePrint Archive,Paper 2022/149 ver:20220915:143535,[online],2022年09月15日,pp.1-30,<URL:https://eprint.iacr.org/archive/2022/149/20220915:143535>,[2024年8月26日検索]
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/30
G09C 1/00
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、値域を所定数に分割した分割領域内に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の演算が可能な完全準同型暗号文であり、
第1暗号文に対して、前記値域における前記第1暗号文に対応する平文シンボル一つ分として用いる分割領域よりも小さい単位で演算結果を選択できるよう構成された第1多項式を用いて第2暗号文を算出し、
前記第2暗号文に対して第2多項式を用い、前記第2暗号文に対応する平文シンボルのうち2種類以上を同一の平文シンボルに変換することにより、所定の演算の演算結果に対応する第3暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項2】
請求項1に記載の暗号処理装置において、
前記第1多項式は階段状の多項式であり、
前記第2多項式は、第3多項式と、前記第3多項式とは異なる第4多項式と、のいずれかを用いて構築され、
前記第1暗号文における前記値域の分割数が偶数の場合には前記第2暗号文に対して前記第3多項式を用い、前記分割数が奇数の場合には前記第2暗号文に対して前記第4多項式を用いることにより、前記分割数の偶奇に関わらず前記第3暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項3】
請求項1に記載の暗号処理装置において、
前記暗号文の平文が対応しうる整数の最大値をtとしたときに、
前記第1多項式は、前記第1暗号文の平文を2t+1個の要素を有するルックアップテーブルで引いた値に対応する暗号文を得る操作を行うための多項式であり、
前記第2多項式は、前記第2暗号文の平文を2t+1個の要素を有するルックアップテーブルで引いた値に対応する暗号文を得る操作を行うための多項式である、
ことを特徴とする暗号処理装置。
【請求項4】
請求項3に記載の暗号処理装置において、
前記第1多項式は、

の何れかを満足する多項式であり、
前記第2多項式は、

を満足する多項式である、
ことを特徴とする暗号処理装置。
【請求項5】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算の演算結果は、前記第1暗号文に対する任意の一変数関数の演算結果である、
ことを特徴とする暗号処理装置。
【請求項6】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算の演算結果は、前記第1暗号文に対する偶関数の演算結果である、
ことを特徴とする暗号処理装置。
【請求項7】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算の演算結果は、前記第1暗号文に対する奇関数の演算結果である、
ことを特徴とする暗号処理装置。
【請求項8】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算の演算結果は、演算対象とする多項式の関数の値である、
ことを特徴とする暗号処理装置。
【請求項9】
請求項8に記載の暗号処理装置において、
前記演算対象とする多項式を偶関数と奇関数とに分割し、
前記所定の演算の演算結果としての、前記第1暗号文に対する前記奇関数の演算結果と前記第1暗号文に対する前記偶関数の演算結果と、に基づいて前記演算対象とする多項式の値を演算する、
ことを特徴とする暗号処理装置。
【請求項10】
請求項1又は2に記載の暗号処理装置において、
前記第1暗号文における前記値域の分割数を素数個とすることにより、前記演算結果として有限体の任意の関数を計算する、
ことを特徴とする暗号処理装置。
【請求項11】
請求項1又は2に記載の暗号処理装置において、
暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部を備え、前記算出部は、入力となる暗号文に対して、所定の多項式を用いて新たな暗号文を算出するまえに係数の数を削減する処理を行う、
ことを特徴とする暗号処理装置。
【請求項12】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、ことを特徴とする暗号処理装置。
【請求項13】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項14】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、値域を所定数に分割した分割領域内に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の演算が可能な完全準同型暗号文であり、
第1暗号文に対して、前記値域における前記第1暗号文に対応する平文シンボル一つ分として用いる分割領域よりも小さい単位で演算結果を選択できるよう構成された第1多項式を用いて第2暗号文を算出し、
前記第2暗号文に対して第2多項式を用い、前記第2暗号文に対応する平文シンボルのうち2種類以上を同一の平文シンボルに変換することにより、所定の演算の演算結果に対応する第3暗号文を算出する、
ことを特徴とする暗号処理方法。
【請求項15】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、値域を所定数に分割した分割領域内に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の演算が可能な完全準同型暗号文であり、
第1暗号文に対して、前記値域における前記第1暗号文に対応する平文シンボル一つ分として用いる分割領域よりも小さい単位で演算結果を選択できるよう構成された第1多項式を用いて第2暗号文を算出し、
前記第2暗号文に対して第2多項式を用い、前記第2暗号文に対応する平文シンボルのうち2種類以上を同一の平文シンボルに変換することにより、所定の演算の演算結果に対応する第3暗号文を算出する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【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】
【文献】TFHE:Fast Fully Homomorphic Encryption over the Torus. Journal of Cryptology, 33:34-91, 2020, I.Chillotti, N.Gama, M.Georgieva, and M.Izabachene
【文献】Integerwise Functional Bootstrapping on TFHE, 2020, Hiroki Okada, Shinsaku Kiyomoto, and Carlos Cid
【文献】Bootstrapping in FHEW-like Cryptosystems, 2020, Daniele Micciancio and Yuriy Polyakove
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、テストベクタ多項式に代入する関数はf(v+1/2)=-f(v)の性質を満たす必要がある。この制約を満たす関数には三角関数などあるが、一般的な制約とは言えず応用が難しかった。
この制約を回避するために、平文としては円周群の0~0.5の区間のみを利用するというアイデアがある。この制約を追加すると、上記制約に関係なく、任意の一変数関数を評価できる。しかし、その場合は暗号文1つに持てる情報が実質半分つまりlbit分減ってしまい、Integer-wiseにした効果が薄れてしまう。
本発明は、一側面として、TFHEをInteger-wise型として利用する際に、円周群全体を無駄なく利用しつつ、任意の一変数関数を計算することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、一実施形態によれば、暗号文を処理する暗号処理装置であって、前記暗号文は、値域を所定数に分割した分割領域内に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の演算が可能な完全準同型暗号文であり、第1暗号文に対して、前記値域における前記第1暗号文に対応する平文シンボル一つ分として用いる分割領域よりも小さい単位で演算結果を選択できるよう構成された第1多項式を用いて第2暗号文を算出し、前記第2暗号文に対して第2多項式を用い、前記第2暗号文に対応する平文シンボルのうち2種類以上を同一の平文シンボルに変換することにより、所定の演算の演算結果に対応する第3暗号文を算出する、ことを特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、TFHEをInteger-wise型として利用する際に、円周群全体を利用しつつ、任意の一変数関数を計算することができる。
【図面の簡単な説明】
【0008】
図1】第1実施例の暗号処理装置の機能構成を説明する図である。
図2図1の機能構成に基づく演算プロセスを説明する図である。
図3】TLWE暗号が平文として有する円周群を説明するイメージ図である。
図4】2値Gate Bootstrappingの動作イメージ図である。
図5】Integer-wise型に適用したTFHEを説明する図である。
図6】第1実施例におけるInteger-wise型TFHEを説明する図である
図7】第1実施例におけるInteger-wise型TFHEを説明する図である
図8】第1実施例におけるInteger-wise型TFHEを説明する図である
図9】第1実施例におけるInteger-wise型TFHEを説明する図である。
図10】第1実施例(偶関数)における暗号文の値の遷移を説明する図である。
図11】第1実施例(偶関数)における暗号文の値の遷移を説明する図である。
図12】第2実施例の暗号処理装置の機能構成を説明する図である。
図13図12の機能構成に基づく演算プロセスを説明する図である。
図14】第2実施例におけるInteger-wise型TFHEを説明する図である。
図15】第2実施例(奇関数)におけるInteger-wise型TFHEを説明する図である
図16】第2実施例(奇関数)における暗号文の値の遷移を説明する図である。
図17】第2実施例(偶関数)におけるInteger-wise型TFHEを説明する図である
図18】第2実施例(偶関数)における暗号文の値の遷移を説明する図である。
図19】第1実施例に係る処理を説明するフローチャートである。
図20】第2実施例に係る処理を説明するフローチャートである。
図21】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
図22】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の演算のことを指すものとする。
【0010】
図1は、第1実施例の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第1Bootstrapping部(算出部)15と、第2Bootstrapping部(算出部)16と、第3Bootstrapping部(算出部)17と、第4Bootstrapping(算出部)18と、出力部35と、を備えている。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
一変数関数としての奇関数の演算において、第1Bootstrapping部15は、入力された暗号文に対して第1Gate Bootstrappingを行う。
第2Bootstrapping部16は、第1Bootstrapping部15から出力された暗号文に対して第2Gate Bootstrappingを行う。
第1演算部12は、第2Bootstrapping部16から出力される暗号文に対して第1準同型演算を行う。
【0012】
一変数関数としての偶関数の演算において、第3Bootstrapping部17は、入力された暗号文に対して第3Gate Bootstrappingを行う。
第2演算部13は、第3Bootstrapping部17から出力される暗号文に対して第2準同型演算を行う。
第4Bootstrapping部18は、第2演算部13から出力された暗号文に対して第4Gate Bootstrappingを行う。
【0013】
第1演算部12、第2演算部13は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部15、第2Bootstrapping部16、第3Bootstrapping部17、第4Bootstrapping部18は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
第1演算部12、第2演算部13、第1Bootstrapping部15、第2Bootstrapping部16、第3Bootstrapping部17、第4Bootstrapping部18、出力部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)において、暗号処理装置1は、TLWE暗号文caを第1Bootstrapping部15に入力して、多項式F1id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
次に、暗号処理装置1は、TLWE暗号文cbを第2Bootstrapping部16に入力して、多項式F1(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応するTLWE暗号文ccを算出する。
(a-2)において、暗号処理装置1は、TLWE暗号文caを第1Bootstrapping部15に入力して、多項式F1id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。次に、暗号処理装置1は、TLWE暗号文cbを第2Bootstrapping部16に入力して、多項式F1(X)をテストベクタとして用いた第2Bootstrappingを行い、TLWE暗号文ccを算出する。
次に、暗号処理装置1は、TLWE暗号文ccを第1演算部12に入力して第1準同型演算を行い、奇関数の計算結果に対応するTLWE暗号文cdを算出する。
(a-3)において、暗号処理装置1は、TLWE暗号文caを第1Bootstrapping部15に入力して、多項式F1’id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、TLWE暗号文cbを第2Bootstrapping部16に入力して、多項式F1(X)をテストベクタとして用いた第2Bootstrappingを行い、奇関数の計算結果に対応するTLWE暗号文ccを算出する。
【0016】
図2(b)において、暗号処理装置1は、一変数関数としての偶関数の演算を行う。
(b-1)において、暗号処理装置1は、TLWE暗号文caを第3Bootstrapping部17に入力して、多項式F1abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、TLWE暗号文cbを第2演算部に入力して第2準同型演算を行い、TLWE暗号文ccを算出する。
暗号処理装置1は、TLWE暗号文ccを第4Bootstrapping部18に入力して、多項式F1’(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応するTLWE暗号文cdを算出する。
(b-2)において、暗号処理装置1は、TLWE暗号文caを第3Bootstrapping部17に入力して、多項式F1’abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、TLWE暗号文cbを第2演算部13に入力して第2準同型演算を行い、TLWE暗号文ccを算出する。
暗号処理装置1は、TLWE暗号文ccを第4Bootstrapping部18に入力して、多項式F1(X)をテストベクタとして用いた第4Bootstrappingを行い、偶関数の計算結果に対応するTLWE暗号文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]のかたちに分解し、2番目の項(剰余部分)だけを取り出して集めると、これもまた「環」の性質を持つため多項式環の剰余環が得られる。
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-μとなって、一番上の項の係数がプラスからマイナスに反転して定数項として現れる。なぜならば、次数がn-2以下の項はXを乗じた後もX+1で割ることができないが、最高次数の項だけはμX=μ(X+1)-μと割ることができるためである。X+1で割った余りで考えているため、右辺で剰余となっている-μのみが残ることとなる。
さらに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回繰り返してかけるという表現を用いることもある。なお、これはあくまで理論を説明する際の便宜的な表現であり、本発明を実施する際には、例えばXを-b回かける場合にX-aをb回かけても、X2n-aをb回かけても良く、結果的に同じことができれば他の変形を行っても良い。
【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となり分散はαとなる乱数により生成された多項式により算出した、TRLWE暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。
この暗号文kとして表せる暗号文をTRGSW暗号文と呼ぶこととする。
TRGSW暗号文は、下記に用いるBootstrapping Keyを構成する。
【0033】
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暗号文のセットである。
【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であると平文多項式μのTRLWE暗号文を復号することなく出力し、sが1であると平文多項式μのTRLWE暗号文を復号することなく出力する。
CMux関数は、平文多項式がμもしくはμとなるTRLWE暗号文を計算することができるが、その結果を見てもどちらを選択したかは復号することなしには分からない。
【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演算ができるようになる。ここで、NAND演算は論理演算の分野においてそれ単体で完備性を備える演算である。すなわち、NAND演算さえ実現できれば、その組み合わせにより全ての論理演算が可能である。そのため、任意の数値を2進数で表現することにより、加算、乗算をはじめとしてあらゆる演算が可能となる。
【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】
[第1実施例:偶数分割]
円周群を偶数分割する場合における奇関数及び偶関数の計算を以下に説明する。
図6乃至図8は、第1実施例におけるInteger-wise型TFHEを説明する図である。図6において、円周群{T}を偶数分割し、偶数個の分割領域に分割している。以下の説明では、この分割領域をスライスと記載する。
図5と同様に平文に対してオフセットを付加していない(平文に対するオフセットが0である)状態を、図6(b)に示している。
図6(a)は、図6(b)に示す暗号文の平文に対して、例えば+1/(4t)のオフセットを付加した状態を示している。オフセットを付加することによって、円周群{T}のスライス割りを変更することが出来る。
下記の説明では、円周群の右半面、左半面とは、オフセットを1/(4t)だけ付加した図6(a)の状態に準拠するものとする。
【0053】
計算したい関数fの引数とする整数aを平文として持つ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)}未満となるようにシステムパラメータを設定する。
第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つのスライス)内にある。
図6(a)に示すように、オフセットを付加することによって、円周群{T}上の0から始まるスライス(0/2t)に整数0を対応付けながら平文をスライスの中央に位置させることが出来る。他のスライスはX/2t(Xは平文整数)から始まる。これにより円周群上の0は、bootstrappingを用いた処理を行う際に使用するテストベクタ多項式の次数0の項を参照するよう対応しているため、このようにオフセットを付ける方が、係数の並び順が自然で見やすくなる利点があるが、これは原理的に必須である要件ではないため、テストベクタや前処理、後処理などで適切な調整を行うことにより、異なるオフセットを採用することもできる。
【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)の平文を持つ新たな暗号文を算出する。
<手法1>
これは、図2の(a-1)に対応する手法である。
暗号処理装置1は、係数を次数の順に見たときに階段状となる一変数多項式の関数(一変数関数)F1id(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暗号文の値によって異なる結果を得る。
【0062】
図7は、TLWE暗号文cbの平文に対応する円周群上の値が元のTLWE暗号文caではどの整数値と対応していたのか、もしくはTLWE暗号文caの平文として円周群上のどこにあるものがTLWE暗号文cbとしてどの整数値に対応させられるかを示している。図7に示すように、多項式F1id(X)を用いた、TLWE暗号文caに対する第1Bootstrappingの結果、TLWE暗号文cbでは、負の数として使う領域である左半面の並びが、TLWE暗号文caから上下反転している。
多項式F1id(X)は、非負の整数0~t-1の暗号文の入力に対しては、同じ非負の整数0~t-1の暗号文を出力するとともに、平文に対して0.5のオフセットを付加する。多項式F1id(X)は、負の整数-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と表現している。
【0063】
図6(a)において円周群{T}の右半面に平文があった場合(平文が非負の数である)、多項式F1id(X)を用いた上記処理の結果、TLWE暗号文cbの平文整数は、図7に示すように円周群{T}の同じスライス(領域)内に留まる。一方、平文が負の数-t~-1であって円周群{T}の左半面に平文がある場合は、上記処理の結果、TLWE暗号文cbの平文整数は、図7に示すように円周群{T}における「上下」が反転する。
例えば、図6に示すようにTLWE暗号文caにおける平文整数aが-1の場合、円周群{T}上の値としては-1/(2t)~0の区間にある。そのため、多項式F1id(X)の最上位のブロックの項が符号反転して最下位に現れる。従って、第1Bootstrapping後のTLWE暗号文cbの平文は、円周群上の値として-1/2+1/(4t)、整数としては-tとなる。
TLWE暗号文caにおける平文整数aが-tの場合は、円周群{T}上の値としては、-t/2t+1/(4t)=-1/2+1/(4t)となり、左半面の最も-1/2に近いブロックにある。多項式F1id(X)の最下位のブロックの項の符号反転したものが第1Bootstrapping後のTLWE暗号文cbとして得られるため、TLWE暗号文cbの平文は、円周群上の値として-1/(4t)つまり整数として-1となる。
【0064】
図7における右半面は、下から反時計周りに0/(2t)から4/(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}で正負の値が連続して並んでいる。
【0065】
図6(a)において、例えばTLWE暗号文caが-1の暗号文であった場合、平文は円周群{T}上の-1/(2t)~0の区間にあった。
上記処理の結果、TLWE暗号文cbでは、多項式F1id(X)の最上位のブロックの項が符号反転して最下位に現れる。従って、図7において、TLWE暗号文caの平文は、円周群{T}上の値として-1/2+1/(4t)である。この平文は図6(a)では整数-t(=-4)に対応していたが、図7に示すTLWE暗号文cbでは平文整数として元の-1を割り当てている。
図6(a)において、例えばTLWE暗号文caが-tの暗号文である場合、平文は円周群{T}上の-t/(2t)+1/(4t)前後に分布している(-1/2より少し大きい値である)ことから、平文は円周群{T}上の最も-1/2に近い区間にある。
上記処理の結果、TLWE暗号文cbでは、多項式F1id(X)の最下位のブロックの項が符号反転して現れる。従って、図7において、TLWE暗号文caの平文は、円周群{T}上の値として、-1/(2t)+1/(4t)である。この平文は図6(a)では整数-1に対応していたが、図7に示すTLWE暗号文cbでは元のTLWE暗号文caの平文整数として-t(=-4)を割り当てている。
このように、テストベクタ多項式Fid(X)によるbootstrappingの前後で割り当てる整数値を同じにした場合、TLWE暗号文cbの場合には左半面の整数値の並び順が反転すると解釈することができる。
【0066】
一般化すると、平文が非負の数である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のTLWE暗号文caと同様に、図7のTLWE暗号文cbにおいても、円周群の0の位置がスライスの境界となっている。
このように、平文が負の数である場合、整数が割り当てられる平文が変化する。言い換えると、TLWE暗号文cbの平文を整数シンボルで見る際は暗号文caの整数と同じ値であるとしたとき、TLWE暗号文cbの平文のスライスと整数の対応は、TLWE暗号文caの時と異なっている。この対応関係を見たときに、円周群における平文のスライスの並び自体は、暗号文caと暗号文cbとの間で変わらないが、負の数が割り当てられる左半面では、平文に割り当てられる平文整数の並びが逆転するのである。
単純に並びが反転しているだけであるため、テストベクタ多項式Fid(X)によるbootstrappingを2回行うことにより、元の並び順での表現に戻る。つまり平文を円周群上の値で見たときに同じスライス内に戻ってくることとなる。ただし、平文に加えられている誤差はbootstrappingの性質により十分に軽減された状態となっているため、この処理は円周群の全面を用いる際のbootstrappingとして利用できる。
【0067】
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)である。
これらのスライスに、TLWE暗号文cbを生成する入力となったTLWE暗号文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となる。
【0068】
次に、暗号処理装置1は、関数f(x)の演算結果のうち、xが非負の場合の値のみを取り出して、以下の多項式F1(X)を作成する。

そして暗号処理装置1は、この多項式F1(X)をテストベクタとして用いてTLWE暗号文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,…にそれぞれ対応して得られるTLWE暗号文ccの平文φ(cc)は、それぞれf(-0.5),f(-1.5),f(-2.5),…と一致する。
すなわち、上記の非負の場合の例とあわせて、φ(cc)=f(a+0.5)を満たす、奇関数の演算結果に対応するTLWE暗号文ccを算出することができた。
【0069】
<手法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)を加算してTLWE暗号文cdとする。ここでは関数f、ひいてはmを固定して考えているため、ここではmは定数である。
すると、φ(cd)=φ(cc+(0,m’-0.5m))=φ(cc)+m’-0.5m=(am+0.5m)+m’-0.5m=am+m’となり、汎用的に一次関数を計算することができる。
【0070】
<手法2>
一般の奇関数の場合を計算する手法を説明する。これは図2の(a-3)に対応する手法である。
上記一次関数の場合も切片が0であれば奇関数であるため、下記の手順で計算可能である。
第1Bootstrappingを行うためのテストベクタを以下の多項式F1’id(X)に変更する。
【0071】
多項式F1’id(X)は、<手法1>の場合のFid(X)と異なり分母が少し大きくなっている。その結果、多項式F1’id(X)を用いた第1Bootstrappingによって得られる図8のTLWE暗号文cbは、スライスが図7よりも縮小している。
単純に分母が大きくなっているので、図8に示すように、円周群の右半面に平文がある(正の数の)場合は少し0側に寄る。そして左半面にある(負の数、つまり-t~-1)場合は図6から「上下」が反転してこちらも0の方に少し寄る。
例えばaが-1の場合、円周群上の値としては-1/(2t)~0の区間にある。そのため、多項式F1’id(X)の最上位のブロックの項が符号反転して最下位に現れているため、第1Bootstrapping後の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に近いブロックである。これはつまり、F1’id(X)の最下位のブロックの項の符号反転したものが第1Bootstrapping後のTLWE暗号文として得られるため、-1/{4(t+1)}つまり整数として-1となる。
【0072】
一般化すると、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/(4(t+1))の項のおかげでオフセットが付き、図8のように円周群の0の位置がちょうどスライスの境界となっている。
【0073】
暗号処理装置1は、処理したい関数f(x)の演算結果のうち、xが非負の場合の値のみを取り出して多項式F1’(X)を作成する。

暗号処理装置1は、作成した多項式F1’(X)をテストベクタとして用いてTLWE暗号文cbをBootstrappingし、TLWE暗号文ccを得る。
なお、関数f(x)は整数を引数として整数を得られる関数とする。
すると、図8に示すように、TLWE暗号文cbが非負の場合つまり平文整数a=0,1,2,…の場合は円周群の右側(0~0.5)にあるため、符号反転しないでf(0),f(1),f(2),…の値を平文とするTLWE暗号文ccが得られる。
また、図8に示すように、TLWE暗号文cbが負の場合、つまり平文整数aが-1,-2,-3…の場合は、0.5-1/2(t+1)~1の区間に並んでいるため、符号が反転して-f(1),-f(2),-f(3)…の値を平文とするTLWE暗号文ccが得られる。
もし、f(x)が奇関数であれば、-f(x)=f(-x)である。
従って、φ(cc)=f(a)と一致することとなる。
【0074】
次に、偶数分割の円周群を用いて偶関数を算出する方法を説明する。
偶関数の定義として、実数xの関数f(x)が、f(-x)=f(x)を満たすとき、その関数を偶関数という。
<手法3>
これは、図2の(b-1)に対応する手法である。
暗号処理装置1は、下記の多項式F1abs(X)

をテストベクタとして、TLWE暗号文caに対する第3Bootstrappingを行い、新たなTLWE暗号文cbを算出する(図9)。
TLWE暗号文cbにおいては、図9図10に示す変換が行われる。
【0075】
図10は、第1実施例(偶関数)における暗号文の値の遷移を説明する図であり、第3Bootstrappingの結果得られるTLWE暗号文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であるので、TLWE暗号文cbの平文bは、図9に示すように、整数ではなく円周群上の値で見たとき、a=0の場合はb=-4/20、a=1の場合はb=-2/20…と並ぶ。
【0076】
abs(X)による第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である。
【0077】
暗号処理装置1は、TLWE暗号文cbに自明な暗号文(0,1/4)を加え、TLWE暗号文ccを得る。1/4は上記の値と分母を揃えると5/20なので、TLWE暗号文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である。
【0078】
このとき、平文bの分母が20であり、分子が2刻みで増えているため、TLWE暗号文ccは、円周群{T}全体を10分割(右半面をt+1=5分割)して使用する場合の、非負の暗号文となっていると見ることができる。
10分割として捉えると、TLWE暗号文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|、ただし||は絶対値記号、と言うことができる。
さらに、TLWE暗号文ccの平文は、円周群{T}の右半面しか使用してないので、暗号処理装置1は、非特許文献3の手法を用いて任意の一変数関数を評価することができる。
【0079】
暗号処理装置1は、関数f(x)が整数を引数として整数を得られる関数として、
を用いてTLWE暗号文ccに対する第4Bootstrappingを行い、TLWE暗号文cdを算出する。
ここで前述の通りTLWE暗号文cbは右反面しか使用していないため、φ(cc)=f(φ(cb))が成り立つ。そして、φ(cb)=|a|を代入すると、φ(cc)=f(|a|)ただし||は絶対値記号、と計算することができる。
f(x)が偶関数であれば、xが実数の場合にf(x)=f(-x)つまりf(x)=f(|x|)が常に成り立つため、φ(cc)=f(a)と一致する。
【0080】
<手法4>
これは、図2の(b-2)に対応する手法である。
偶関数の場合も、偶関数f(x)のxを0.5ずらしてf(x+0.5)を求めるのであれば、途中のTLWE暗号文cbの平文の分母を大きくする必要がなくなる。
図11は、第1実施例(偶関数)における暗号文の値の遷移を説明する図であり、多項式F1’abs(X)によるBootstrappingの結果得られるTLWE暗号文cbの平文を示している。
【0081】
暗号処理装置1は、下記の多項式F1’abs(X)
をテストベクタとして、TLWE暗号文caに対する第3Bootstrappingを行い、TLWE暗号文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である。
【0082】
ここで暗号処理装置1は、TLWE暗号文cbに自明な暗号文(0,1/4)を加える。1/4は、上記の値と分母を揃えると4/16であるので、TLWE暗号文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である。
【0083】
このとき、平文bの分母が16であり、分子が2刻みで増えているため、TLWE暗号文ccは、円周群{T}全体を10分割(右半面をt+1=5分割)して使用する場合の、非負の暗号文となっていると見ることができる。
10分割として捉えると、TLWE暗号文ccの平文であるb+4/16の整数表現は、図11に示すように、
平文整数aが-4のとき、7/16=3.5/10⇒3.5であり、
平文整数aが-3のとき、5/16=2.5/10⇒2.5であり、
平文整数aが-2のとき、3/16=1.5/10⇒1.5であり、
平文整数aが-1のとき、1/16=0.5/10⇒0.5であり
平文整数aが0のとき、1/16=0.5/10⇒0.5であり
平文整数aが1のとき、3/16=1.5/10⇒1.5であり
平文整数aが2のとき、5/16=2.5/10⇒2.5であり、
平文整数aが3のとき、7/16=3.5/10⇒3.5である。
【0084】
図11によれば、円周群の0の位置で折り返して、絶対値関数を計算していることがわかる。つまりφ(cc)=|a+0.5|、ただし||は絶対値記号、と言うことができる。
暗号処理装置1は、TLWE暗号文ccに対して、上記多項式F1’(X)をテストベクタとした第4Bootstrappingを行い、TLWE暗号文cdを得る。右反面しか既に使用していないのは上記と同じである。
すると、φ(cd)=f(|a+0.5|)が得られる。ここで、f(x)が偶関数であれば、f(x)=f(-x)=f(|x|)であるため、φ(cd)=f(a+0.5)となる。
【0085】
[第2実施例:奇数分割]
[第1実施例]では、円周群を偶数個に分割する場合を説明した。
以下に示す[第2実施例]では、暗号処理装置1は、円周群を奇数個に分割する場合における奇関数及び偶関数の計算を説明する。
円周群の全体を使用している場合、準同型加算でのオーバーフローは単純に最大値+1での剰余として処理される。例えば円周群全体を7分割して0~6の整数値を使用している場合、4+6を準同型加算すると結果は本来10であるが、円周群の一周を通り越してしまうため、復号すると1周分の分割数である7を引いて10-7=3となる。つまり、単純な準同型加算を行うだけで結果的に(a+b)mod(t)を計算したことになる。ここでmod(t)はtで割った剰余を表す。準同型減算でも同様に(a-b)mod(t)となる。
一般に整数を整数で割った剰余からなる集合は剰余群の性質を持つが、整数を素数で割った剰余からなる集合は特別に「体」の性質を持つことが知られており、これは「有限体」と呼ばれている。
有限体は様々な扱いやすい特長を有している。例えば、「有限体」において全ての要素に逆元が定義されている。これは、任意の要素同士の除算は逆元の乗算に置き換え可能であることを意味する。一般的に除算は複雑な処理が必要であり、コンピュータで計算する場合も他の四則演算より多くの計算時間を必要とする。このような除算の計算を、乗算のみで済ませることができる利点は大きい。
しかし、[第1実施例]で説明した方法では円周群の全体を偶数個に分割することしかできず、2以外の素数は全て奇数であるため、有限体の任意の関数を効率的に計算することが難しい。
それに対して、[第2実施例]では、円周群の全体を用いることと円周群を奇数個特に素数個(奇素数個)に分割することとを両立して暗号化された有限体を効率的に扱い、有限体の任意の関数を計算することが出来る。
なお、[第2実施例]の方法は、円周群を奇数分割している場合に好適であるが、円周群を偶数分割する場合に適用することも可能である。
【0086】
図12は、第2実施例の暗号処理装置の機能構成を説明する図である。
図1と同じ構成には同じ符号を付して説明を省略する。
図1と同様に、図12の暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第5Bootstrapping部(算出部)41と、第6Bootstrapping部(算出部)42と、第7Bootstrapping部(算出部)43と、第8Bootstrapping(算出部)44と、出力部35と、を備えている。
一変数関数としての奇関数の演算において、第5Bootstrapping部41は、受付部11が受け付けた入力暗号文に対して第5Gate Bootstrappingを行う。
第6Bootstrapping部42は、第5Gate Bootstrapping部41から出力された暗号文に対して第6Gate Bootstrappingを行う。
一変数関数としての偶関数の演算において、第7Bootstrapping部43は、受付部11が受け付けた入力暗号文に対して第7Gate Bootstrappingを行う。
第8Bootstrapping部44は、第7Bootstrapping部43から出力された暗号文に対して第8Gate Bootstrappingを行う。
【0087】
第5Bootstrapping部41、第6Bootstrapping部42、第7Bootstrapping部43、第8Bootstrapping部44は、Gate Bootstrapping処理をソフトウェアで実現する演算処理部である。
受付部11、第5Bootstrapping部41、第6Bootstrapping部42、第7Bootstrapping部43、第8Bootstrapping部44、出力部35の少なくとも一つが、ハードウェアで実現されてもよい。
【0088】
図13は、図12の機能構成に基づく演算プロセスを説明する図である。
暗号処理装置1は、Integer-wise型のTLWE暗号文について、奇関数と偶関数の演算を行う。
TLWE暗号文caは、奇関数と偶関数の演算を行いたい平文整数aの暗号文である。
図13(a)において、暗号処理装置1は、一変数関数としての奇関数の演算を行う。
暗号処理装置1は、TLWE暗号文caを第5Bootstrapping部41に入力して多項式F2id(X)をテストベクタとして用いた第5Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、TLWE暗号文cbを第6Bootstrapping部42に入力して多項式F2(X)をテストベクタとして用いた第6Bootstrappingを行い、奇関数の計算結果に対応するTLWE暗号文ccを算出する。
【0089】
図13(b)において、暗号処理装置1は、一変数関数としての偶関数の演算を行う。
暗号処理装置1は、TLWE暗号文caを第7Bootstrapping部43に入力して多項式F2abs(X)をテストベクタとして用いた第7Bootstrappingを行い、TLWE暗号文cbを算出する。
暗号処理装置1は、TLWE暗号文cbを第8Bootstrapping部44に入力して多項式F2’(X)をテストベクタとして用いた第8Bootstrappingを行い、偶関数の計算結果に対応するTLWE暗号文ccを算出する。
【0090】
[奇関数]
まず、奇数分割した円周群を用いて奇関数を評価する場合を説明する。
以下の説明と図では、特に断りなくt=2の場合を例示する場合がある。
図14は、第2実施例におけるInteger-wise型TFHEを説明する図であり、奇数分割した円周群を示している。
図14(a)は、平文に対してオフセットを付加していない状態を示している。
図14(a)では、円周群{T}における0の前後を整数0に対応付けている。円周群{T}を奇数個に分割するため、円周群{T}の0.5(1/2)が最大値t(=2)と最小値-t(=-2)との境界となる。
円周群上{T}の0から0.5の値域(右半面)には、テストベクタ多項式の次数が低い項の係数から次数が高い項の係数が順に対応している。また0.5から1の値域(左半面)には、テストベクタ多項式の、符号が反転した次数が低い項の係数から次数が高い項の係数が順に対応している。
上記のように図14(a)は、円周群を奇数分割して平文にオフセットを付加しない場合を示している。0近辺でプラス側の誤差が付加されている場合、平文は右半面にあって、テストベクタ多項式における低次の項の係数に対応する。一方、0付近でマイナス側の誤差が付加されている場合、平文は左半面にあって、テストベクタ多項式における符号反転した高次の項の係数に対応する。
従って、整数0に対応するスライス内で、平文にプラス側の誤差が付加されている場合とマイナス側の誤差が付加されている場合とで係数が連続しない。
後述の多項式F2id(X)をテストベクタとして用いたBootstrappingにおいて、左半面に割り当てた整数を反転させたときには、マイナス側の誤差が付加された整数0は、0.5側に移動するが、プラス側の誤差が付加された整数0は0付近に留まるため、不連続性は顕著となる。
【0091】
一方、図14の0.5側に着目すると、円周群上の0.5は、整数2を割り当てたスライスと整数-2を割り当てたスライスとの境界となっている。
整数2を割り当てたスライスや整数-2を割り当てたスライスは、平文にプラス側の誤差が付加された場合もマイナス側の誤差が付加された場合も0.5を跨ぐことがなく係数が連続する。
すなわち、整数2に対してプラス側の誤差が付加された場合もマイナス側の誤差が付加された場合も、スライスは右半面にあって係数は連続する。整数-2に対してプラス側の誤差が付加された場合もマイナス側の誤差が付加された場合も、スライスは左半面にあって係数は連続する。
【0092】
円周群の0付近における係数の不連続性を解消するために、[第1実施例]の偶数分割と同様に、整数0を割り当てたスライスが0と1の境界から始まるように平文にオフセットを付してもよい。
しかし、その場合は、整数2を割り当てたスライスが0.5を跨ぎ、整数2に対してプラス側の誤差が付加されている場合とマイナス側の誤差が付されている場合とで係数が連続しなくなる問題が生じる。
【0093】
従って、円周群を奇数分割する[第2実施例]では、暗号処理装置1は、平文にオフセットを付加しない。暗号処理装置1は、平文にオフセットを付加することに代えて、図14(b)に示すように、整数を割り当てたスライスを夫々プラス側とマイナス側の誤差範囲で2つのスライスに分割し、偶数分割と類似した処理によって奇関数、偶関数を計算する。
図14(b)のスライス内に、各スライスに割り当てられたTLWE暗号文caの平文aの値(整数値)が表示されている。数字に付されたpは平文に付加される誤差がプラス側の場合を示し、数字に付されたmは平文に付加される誤差がマイナス側の場合を示している。
図14(a)の説明に関連して、0pのスライスは円周群に右半面にあり、0mのスライスは円周群の左半面にある。0pのスライスの平文はテストベクタ多項式における最も低次の項の係数に対応し、0mのスライスの平文はテストベクタ多項式における符号が反転した最も高次の項の係数に対応する。従って、同じ整数0に対応していても、平文にプラス側の誤差が付加されているスライス0pとマイナス側の誤差が付加されているスライス0mとで係数が連続しない。
2m、2pのスライスは何れも円周群の右半面にあり、-2m、-2pのスライスは何れも左半面にある。2mのスライスの平文と2pのスライスの平文は、テストベクタ多項式における連続した(隣接した)次数の項の係数に夫々対応し、-2mのスライスの平文と-2pのスライスの平文も同様である。すなわち、同じ整数2に対応するスライス2pと2mは係数が連続し、同じ整数-2に対応するスライス-2p、-2mは係数が連続する。
【0094】
暗号処理装置1は、円周群の分割サイズを決める定数tを正の整数で設定する。これを用いて1ブロックの幅は1/(2t+1)とする。つまり、円周群全体を2t+1個(奇数個)のブロックに分割する。
ここで、tが1つのTLWE暗号文に記録できる整数の最大値となり、-tが最小値となる。
図14(b)に示すように、円周群上の-1/{2(2t+1)}から1/{2(2t+1)}の範囲を0の区間とし、そのブロックに各ブロックが順に隣接している。
これは説明のための便宜上のものであり、実際には「0から1/(2t+1)までを0に対応するブロックとして実装する」などのようにオフセットをずらして実装しても、他のパラメータや多項式などを調整したり、事前に調整したりするなどして、つじつまを合わせることは可能である。
【0095】
次に、暗号処理装置1は、TFHEのシステムパラメータを設定する。
誤差の最大値は、±1/{2(2t+1)}未満となるように設定する。
計算したい関数の引数とするTLWE暗号文caがあるとする。
TLWE暗号文caは、秘密鍵がなければ知ることのできない整数aに対応する実数a/(2t+1)を平文として有する。
これは誤差なしの平文であり、実際にはこれに先ほど定めた範囲の誤差が付加された値が平文として暗号文に格納されている。
誤差が付加された平文が分布する範囲は、a/(2t+1)±1/(4t+2)すなわち、(2a-1)/(4t+2)から(2a+1)/(4t+2)の範囲である。
【0096】
暗号処理装置1は、TLWE暗号文caに対して、以下の多項式F2id(X)をテストベクタとして用いて第5Bootstrappingを行い、TLWE暗号文cbを得る。
Bootstrappingは、BlindRotate、SampleExtract、Public Key Switchingを含む。
多項式F2id(X)は、[実施例1]の偶数分割で利用した多項式F1id(X)と比べて、多項式を分割するブロックの数(左側のΣ式でkの取りうる値の個数)が約倍になり、その分、ブロック1つあたりに含まれる項の数(右側のΣ式で1の取りうる値の個数)が約半分になっている。
多項式F2id(X)は多項式F1id(X)に比べて多項式の分母が2倍であり、円周群を倍の数のスライス(プラス誤差のスライスとマイナス誤差のスライス)に分けている。その結果、一つのスライス幅は半分になっている。
元々平文aとして利用するために整数と対応付けてあるブロックをそれぞれ2つに分けて、BlindRotateによるルックアップテーブルとしては、分割したどちらかのブロックに対応するテーブルを引く。
【0097】
図15は、第2実施例(奇関数)におけるInteger-wise型TFHEを説明する図であり、TLWE暗号文cbのスライス分割を示している。
図15における各スライス内には、多項式F2id(X)をテストベクタとして用いた第5Bootstrappingの結果、各スライスに割り当てられたTLWE暗号文caの平文aの値(整数値)が表示されている。数字に付されたpは平文に付加される誤差がプラス側の場合、mは誤差がマイナス側の場合を示している。
円の外側は、多項式F2(X)をテストベクタとして用いたTLWE暗号文cbに対する第6Bootstrappingの結果得られたTLWE暗号文ccの平文整数の値(φ(cc))が示されている。φ(cc)は、関数f、-fの出力となる整数である。
【0098】
図16は、第2実施例(奇関数)における暗号文の値の遷移を説明する図であり、第5Bootstrapping、第6Bootstrappingを行った結果における暗号文の値を示している。t=2の場合を前提に説明する。
平文整数aが0で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で1/20であり、平文シンボルで表現すると0.5である。TLWE暗号文ccは、f(0)の値を平文として有する。
平文整数aが1で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で3/20であり、平文シンボルで表現すると1.5である。TLWE暗号文ccは、f(1)の値を平文として有する。
平文整数aが1で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は5/20であり、平文シンボルで表現すると2.5である。TLWE暗号文ccは、f(1)の値を平文として有する。
平文整数aが2で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で7/20であり、平文シンボルで表現すると3.5である。TLWE暗号文ccは、f(2)の値を平文として有する。
平文整数aが2で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で9/20であり、平文シンボルで表現すると4.5である。TLWE暗号文ccは、f(2)の値を平文として有する。
【0099】
平文整数aが-2で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-(1/20)であり、平文シンボルで表現すると-0.5である。TLWE暗号文ccは、-f(2)の値を平文として有する。
平文整数aが-2で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-(3/20)であり、平文シンボルで表現すると-1.5である。TLWE暗号文ccは、-f(2)の値を平文として有する。
平文整数aが-1で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-(5/20)であり、平文シンボルで表現すると-2.5である。TLWE暗号文ccは、-f(1)の値を平文として有する。
平文整数aが-1で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-(7/20)であり、平文シンボルで表現すると-3.5である。TLWE暗号文ccは、-f(1)の値を平文として有する。
平文整数aが0で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-(9/20)であり、平文シンボルで表現すると-4.5である。TLWE暗号文ccは、-f(0)の値を平文として有する。
【0100】
図16における暗号文の値の遷移を詳しく説明する。
平文整数aは、正の場合と誤差がプラス側の0である場合には円周群の右半面に位置する。
TLWE暗号文caの平文が円周群{T}の右半面にある(平文が正の数又は誤差がプラス側の0である)場合、第5Bootstrappingの結果、TLWE暗号文cbの平文は付近の正負どちらかのブロックに移動する。具体的には、TLWE暗号文cbの平文は2a-0.5もしくは2a+0.5のどちらかの値となる。
TLWE暗号文caの平文が円周群{T}の左半面にある(平文が負の数つまり-t~-1又は誤差がマイナス側の0である)場合、TLWE暗号文caにおける整数の並びが上下反転される。
例えば平文整数aが、誤差がマイナス側の0である場合、円周群上の値としては-1/(4t+2)~0の区間にある。
多項式F2idをテストベクタとして用いたTLWE暗号文caに対する第5Bootstrappingの結果、多項式F2idの最上位のブロックの項が符号反転して最下位に現れる。従って、第5Bootstrappingの結果得られるTLWE暗号文cbの平文は、円周群上の値として-1/2+1/(8t+4)、シンボルとしては-2t-0.5となる。
平文整数aが-tの場合、円周群上の値としては-t/(2t+1)である。
多項式F2idをテストベクタとして用いたTLWE暗号文caに対する第5Bootstrappingの結果、多項式F2idの最下位(誤差がマイナス側の場合)もしくは1つ上(誤差がプラス側の場合)のブロックの項を符号反転したものが現れる。
従って、第5Bootstrappingによって得られるTLWE暗号文cbの平文(シンボル)は、誤差がマイナス側であれば-0.5、誤差がブラス側であれば-1.5となる。
【0101】
一般化すると、平文整数aが正もしくは誤差がプラス側の0である場合、TLWE暗号文cbの平文は(2a±0.5)/(4t+2)+1/(8t+4)となり、シンボルとしては2a±0.5となる。
平文整数aが負の数又は誤差がマイナス側の0である場合、TLWE暗号文cbの平文は、-(2t+1+2a±0.5)/2t+1/(8t+4)となり、シンボルとしては-(2t+1+2a±0.5)となる。
この処理の結果、多項式の項に加えた1/(8t+4)の項によって、TLWE暗号文cbでは、TLWE暗号文caの平文にオフセットが付加され、図16に示すように円周群{T}の0の位置がちょうどスライスの境界となっている。
【0102】
暗号処理装置1は、処理したい関数f(x)の演算結果のうち、xが非負の場合の値のみを取り出して多項式F2(X)

を作成する。そして、暗号処理装置1はこの多項式F2(X)をテストベクタとして用いてTLWE暗号文cbに対して第6Bootstrappingを行い、TLWE暗号文ccを得る。関数f(x)は整数を引数として整数を得られる関数である。
偶数分割の場合に用いた多項式F1(X)と多項式F2(X)との違いは、多項式F1id(X)と多項式F2id(X)との違いと同じく、多項式の項の分割数を約倍に増やした点と、その結果の分割数も増えている点である。fの引数も変わっているが、これはkの値域が変わったためである。
【0103】
TLWE暗号文cbの平文シンボルが非負、つまり0.5,1.5,2.5,…の場合は、TLWE暗号文cbの平文は円周群の右半面(0~0.5)にある。その場合、TLWE暗号文cbに対して多項式F2(X)をテストベクタとする第6Bootstrappingを行って得たTLWE暗号文ccは、TLWE暗号文caの平文a(整数表現)が0(プラス側誤差)、1(マイナス側誤差)、1(プラス側誤差)、2(マイナス側誤差)、2(プラス側誤差)…の場合に対応して、f(0)、f(1)、f(1)、f(2)、f(2)、…の値を平文cとして有する。
TLWE暗号文cbの平文シンボルが負、つまり-0.5、-1.5、-2.5、-3.5…の場合は、その順番で0.5~1(左半面)の区間に並んでいるため符号が反転する。
従って、TLWE暗号文ccは、TLWE暗号文caの平文a(整数表現)が0(マイナス側誤差)、-1(プラス側誤差)、-1(マイナス側誤差)、-2(プラス側誤差)、-2(マイナス側誤差)…の場合に対応して、-f(0)、-f(1)、-f(1)、-f(2)、-f(2)…の値を平文cとして有する。
f(x)が奇関数であれば、-f(x)=f(-x)であるため、φ(cc)=f(a)と一致することとなる。
ここで、図16に示すように、誤差がマイナス側の場合もプラス側の場合も、同じfの値をルックアップテーブル(テストベクタ多項式)に配置しているため、結果的に誤差の正負は関係なくなっている。少なくともfの引数には整数aと同じ値が入っている。
【0104】
[偶関数]
偶関数を評価する場合を説明する。基本的に奇関数の場合とは同じ方法で実現することが出来る。
暗号処理装置1は、TLWE暗号文caに対して以下の多項式F2abs(X)をテストベクタとして用いて第7Bootstrappingを行い、TLWE暗号文cbを得る。

多項式F2abs(X)は、多項式の項から1/4を引いている点で上記の多項式F2id(X)と異なる。
図17は、第2実施例(偶関数)におけるInteger-wise型TFHEを説明する図であり、第7Bootstrapping、図8Bootstrappingでの暗号文の値の変遷を示している。
図17における各スライス内には、多項式F2abs(X)をテストベクタとして用いた第7Bootstrappingの結果、各スライスに割り当てられたTLWE暗号文caの平文aの値(整数値)が表示されている。数字に付されたpは平文に付加される誤差がプラス側の場合を示し、数字に付されたmは平文に付加される誤差がマイナス側の場合を示している。
円の内側には変換前のTLWE暗号文caの平文の並び方が示され、外側には第7Bootstrappingによる処理後のTLWE暗号文cbの平文の中心が示されている。この平文の中心に±1/20の誤差が付加される。
円周群の右半面には、テストベクタ多項式の係数の並び通りに、左半面は符号反転したものが上下反転して並んでいる。0が左右に分かれて存在するが、どちらも同じ-4/20に変換されている。
【0105】
図18は、第2実施例(偶関数)における暗号文の値の遷移を説明する図である。t=2の場合を前提に説明する。
図18の説明で、TLWE暗号文ccは、TLWE暗号文cbに1/4を準同型加算している。
平文整数aが0で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-4/20である。TLWE暗号文ccは誤差を含めて1/20±1/20であり、シンボルで表現すると0.5である。TLWE暗号文cdは、f(0)の値を平文として有する。
平文整数aが1で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-2/20である。TLWE暗号文ccは誤差を含めて3/20±1/20であり、シンボルで表現すると1.5である。TLWE暗号文cdは、f(1)の値を平文として有する。
【0106】
平文整数aが1で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は、0/20である。TLWE暗号文ccは、誤差を含めて5/20±1/20であり、シンボルで表現すると2.5である。TLWE暗号文cdは、f(1)の値を平文として有する。
平文整数aが2で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は、2/20である。TLWE暗号文ccは、誤差を含めて7/20±1/20であり、シンボルで表現すると3.5である。TLWE暗号文cdは、f(2)の値を平文として有する。
平文整数aが2で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は、4/20である。TLWE暗号文ccは、誤差を含めて9/20±1/20であり、シンボルで表現すると4.5である。TLWE暗号文cdは、f(2)の値を平文として有する。
【0107】
平文整数aが-2で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-(-4/20)である。TLWE暗号文ccは、誤差を含めて9/20±1/20であり、シンボルで表現すると4.5である。TLWE暗号文cdは、f(2)の値を平文として有する。
平文整数aが-2で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-(-2/20)である。TLWE暗号文ccは、誤差を含めて7/20±1/20であり、シンボルで表現すると3.5である。TLWE暗号文cdは、f(2)の値を平文として有する。
平文整数aが-1で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-(-0/20)である。TLWE暗号文ccは、誤差を含めて5/20±1/20であり、シンボルで表現すると2.5である。TLWE暗号文cdは、f(1)の値を平文として有する。
平文整数aが-1で付加される誤差がプラス側の場合、TLWE暗号文cbの平文は円周群上で-(-2/20)である。TLWE暗号文ccは、誤差を含めて3/20±1/20であり、シンボルで表現すると1.5である。TLWE暗号文cdは、f(1)の値を平文として有する。
平文整数aが0で付加される誤差がマイナス側の場合、TLWE暗号文cbの平文は円周群上で-(-4/20)である。TLWE暗号文ccは、誤差を含めて1/20±1/20であり、シンボルで表現すると0.5である。TLWE暗号文cdは、f(0)の値を平文として有する。
【0108】
図18における暗号文の値の遷移を詳しく説明する。
平文整数aは、正の場合と誤差がプラス側の0である場合には円周群の右半面に位置する。
TLWE暗号文cbの平文の分母を20(=8t+4)に揃えると、(2k)+(1)-(2t+1)=2k-2tから、a=0(プラス側誤差)の場合の分子は-4である。
a=1(マイナス側誤差)の場合の平文の分子は-2である。
a=1(プラス側誤差)の場合の平文の分子は0である。
a=2(マイナス側誤差)の場合の平文の分子は+2である。
a=2(プラス側誤差)の場合の平文の分子は+4である。
平文整数aは、負の場合と誤差がマイナス側の0である場合には円周群の左半面に位置する。その場合、0.5~1の方向に向かってTLWE暗号文cbの平文が正の場合とは符号が逆転して得られるため、a=-2(マイナス側誤差)の場合、TLWE暗号文cbの平文の分子は、a=0(プラス側誤差)の時の符号反転で4となる。
a=-2(プラス側誤差)の場合、TLWE暗号文cbの平文の分子は、a=1(マイナス側誤差)の時の符号反転で2となる。
a=0(マイナス側誤差)の場合、TLWE暗号文cbの平文の分子は、a=2(プラス側誤差)の符号反転で-4となる。
【0109】
暗号処理装置1は、TLWE暗号文cbに自明な暗号文(0,1/4)を加え、TLWE暗号文ccを得る。
1/4=5/20であるので、分子に5が加わり、全て右半面へと集められる。±1/(4t+2)の範囲の誤差が加わるが、それを加味しても0~0.5(右半面)の範囲に含まれる。
これは、分子が20で分母が2刻みで増えているため、全体を10分割(全体を2t+1=5分割のさらに倍)して使用する場合の非負の暗号文になっていると見ることができる。
また、並び順も、a=0の時を基準にaが正か負に離れるほど順番に大きくなっており、絶対値関数を計算したものと言える。
【0110】
TLWE暗号文ccの平文が既に円周群の右半面しか使用していないため、非特許文献3の手法で任意の関数を評価することができる。ただし、TLWE暗号文caで平文caに付加された誤差がプラス側かマイナス側かにより、2つのスライスのどちらかに振り分けられている。
従って、奇関数の場合と同様に、元々同じ整数に対応する同じスライスである2つのスライスについて同じ結果が得られるように調整する。
具体的には、関数f(x)が整数を引数として整数を得られる関数として、奇関数の場合と同じ多項式F2(X)

をテストベクタとして用いてTLWE暗号文ccを第8Bootstrappingし、TLWE暗号文cdを算出する。
これにより、φ(cd)=f(|a|)が計算することができる。||は絶対値記号である。
f(x)が偶関数であれば、xが非負の整数の場合にf(x)=f(-x)が成り立つため、φ(cd)=f(a)と一致する。
図18に示すように、誤差がマイナス側の場合もプラス側の場合も、同じfの値をルックアップテーブル(テストベクタ多項式)に配置しているため、結果的に誤差の正負は関係なくなっている。
【0111】
以上説明したように、暗号処理装置1は、TFHEを奇数分割のInteger-wiseとして利用する際に円周群全体を無駄なく利用しつつ、偶関数と奇関数に限って任意の一変数関数の結果を計算することができる。
本実施形態では、1段目のテストベクタ多項式の項のブロックを、実際の円周群での分割より細かく分割して、2段目では元の値とつじつまが合うように複数のブロックを同じ値に変換することで、円周群全体を奇数分割にした場合でも偶関数・奇関数の評価を可能とする。
【0112】
[第3実施例]
以下に、[第3実施例]として、多項式の値(多項式の関数の値)を求めるための処理を説明する。
[第3実施例]において、多項式の値を求めるにあたり、暗号処理装置1は、任意の多項式の偶数次数の項と奇数次数の項に分けて、それぞれx、x、x・・・を求めて、最後に線形結合(各出力をそれぞれ定数倍して合計)する。0次は定数であり、1次は元の値であるため、2次以上(xの2乗以上)を計算すればよい。従って、共通ステップのBootstrapping2回を合わせても、高々多項式の次数と同じ回数のBootstrappingで計算することができる。
また、各項を1つずつ計算するより、下記の偶関数と奇関数に分解する手法で、多項式x+xn-1+・・・を偶数次数の項と奇数次数の項に振り分けて、夫々を偶関数と奇関数にするのがよい。
【0113】
論文「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」には、計算したい任意の一変数関数を偶関数と奇関数に分解して、演算結果の暗号文を夫々算出し、最後に加算することで任意の一変数関数の計算結果を算出することを開示している。
【0114】
関数を偶関数と奇関数に分解することについて、任意の一変数関数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)は式の中の-の左右にあるfが入れ替わり-fo(x)と同じ形になる。つまりfo(-x)=-fo(x)が成り立ち、fo(x)は奇関数である。
以上から、fe(x)、fo(x)を求めることは、任意の一変数関数f(x)を偶関数と奇関数に分解することである。
上記の議論はxにあてはめられるものが実数であるか整数であるか複素数であるかなどの指定も、f(x)が多項式であるかなどの指定なども一切なく、任意の一変数関数で成り立つ。
【0115】
偶関数の計算と奇関数の計算には、円周群を偶数分割する[第1実施例]と奇数分割する[第2実施例]の方法を何れも用いることが出来る。
計算したい任意の関数f(x)があるとき、これをf(x)=fe(x)+fo(x)と分解し、奇関数fo(x)の値と偶関数fe(x)の値を夫々計算して加算することによって関数f(x)の値を計算することが出来る。
[第1実施例]の方法を用いる場合において、例えば上記した<手法2>および<手法3>によって奇関数fo(x)と偶関数fe(x)とを夫々計算することができる。
その場合、暗号処理装置1は、<手法2>および<手法3>で説明したように、奇関数fo(x)の計算と偶関数fe(x)の計算のために夫々2回ずつ、合計で4回のBootstrappingを行う。具体的には、暗号処理装置1は、奇関数fo(x)については第1Bootstrapping、第2Bootstrappingを行い、偶関数fe(x)については第3Bootstrapping、第4Bootstrappingを行う。
そして、暗号処理装置1は、fe(x)の値を平文として持つ暗号文とfo(x)の値を平文としてもつ暗号文とを加算して任意の関数f(x)を計算することができる。関数の形によっては、fe(x)とfo(x)のどちらにも0.5の端数が出る場合もあるが、最後に加算する際に消えるため問題ない。
【0116】
また、計算したい任意の関数g(x)があるとき、f(x)=g(x-0.5)とし、このf(x)を偶関数fe(x+0.5)と奇関数fo(x+0.5)に分解してもよい。この場合、上記した<手法1>および<手法4>によって奇関数fo(x+0.5)と偶関数fe(x+0.5)とを夫々計算することができる。
その場合、暗号処理装置1は、<手法1>および<手法4>で説明したように、奇関数fo(x+0.5)の計算と偶関数fe(x+0.5)の計算のために夫々2回ずつ、合計で4回のBootstrappingを行う。具体的には、暗号処理装置1は、奇関数fo()については第1Bootstrapping、第2Bootstrappingを行い、偶関数fe(x+0.5)については第3Bootstrapping、第4Bootstrappingを行う。具体的には、暗号処理装置1は、奇関数fo(x+0.5)については第1Bootstrapping、第2Bootstrappingを行い、偶関数fe(x+0.5)については第3Bootstrapping、第4Bootstrappingを行う。
f(x)=g(x-0.5)から、g(x)=f(x+0.5)が得られるため、<手法1>および<手法4>で用いるテストベクタ多項式を構成するfo(k+0.5)やfe(k+0.5)の値は、g(k)とg(-k)を用いて計算することができる。
暗号処理装置1は、<手法1>および<手法4>で夫々得られるfo(a+0.5)の値を平文として持つ暗号文とfe(a+0.5)の暗号文の値を平文として持つ暗号文を準同型加算して得られる暗号文ceを得る。
暗号文ceの平文φ(ce)は、fe(a+0.5)+fo(a+0.5)=f(a+0.5)=g(x)となり、任意の関数g(x)を計算することができる。
【0117】
上記したように、暗号処理装置1は、奇関数を計算する<手法1>及び偶関数を計算する<手法4>は、夫々階段状多項式として、

を用いる。
また暗号処理装置1は、奇関数を計算する<手法2>及び偶関数を計算する<手法3>は、夫々階段状多項式として、

を用いる。
<手法1>及び<手法4>で用いる多項式に現れる分母2tは、<手法2>及び<手法3>で用いる多項式に現れる分母2(t+1)と比べて小さい。従って、<手法1>及び<手法4>を用いる場合は、<手法2>及び<手法3>を用いる場合と比べて途中で現れる暗号文における分割数が少なくなる。
分割数が少なくなることに反比例して、スライス1つに割り当てる範囲を広くできるため、ノイズへの耐性を強くすることが出来る。
【0118】
図19は、第1実施例(偶数分割)に係る処理を説明するフローチャートである。
図19(a)は、奇関数の演算を行う処理を説明する。
(a-1)において、暗号処理装置1(第1算出部15)は、ステップS101において、入力を受け付けた、TLWE暗号文caに対して、多項式F1id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS102において、暗号処理装置1(第2算出部16)は、TLWE暗号文cbに対して、多項式F1(X)をテストベクタとして用いた第2Bootstrappingを行い、TLWE暗号文ccを算出する。
【0119】
(a-2)において、暗号処理装置1(第1算出部15)は、ステップS111において、入力を受け付けた、対象となるTLWE暗号文caに対して、多項式F1id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS112において、暗号処理装置1(第1算出部16)は、TLWE暗号文cbに対して、多項式F1(X)をテストベクタとして用いた第2Bootstrappingを行い、TLWE暗号文ccを算出する。
ステップS113において、暗号処理装置1(第1演算部12)は、TLWE暗号文ccに対して、cc+(0,m’-0.5m)の準同型演算を行い、新たなTLWE暗号文cdを算出する。
【0120】
(a-3)において、暗号処理装置1(第1算出部15)は、ステップS121において、入力を受け付けた、対象となるTLWE暗号文caに対して、多項式F1’id(X)をテストベクタとして用いた第1Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS122において、暗号処理装置1(第2算出部16)は、TLWE暗号文cbに対して多項式F1’(X)をテストベクタとして用いた第2Bootstrappingを行い、TLWE暗号文ccを算出する。
【0121】
図19(b)は、奇関数の演算を行う処理を説明する。
(b-1)において、暗号処理装置1(第3算出部17)は、ステップS201において、入力を受け付けた、対象となるTLWE暗号文caに対して、多項式F1abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS202において、暗号処理装置1(第2演算部13)は、暗号文cbに対してcb+(0,1/4)の準同型演算を行い、TLWE暗号文ccを算出する。
ステップS203において、暗号処理装置1(第4算出部18)は、TLWE暗号文ccに対して多項式F1’(X)をテストベクタとして用いた第4Bootstrappingを行い、TLWE暗号文cdを算出する。
【0122】
(b-2)において、ステップS211において、暗号処理装置1(第3算出部17)は、入力を受け付けた、対象となるTLWE暗号文caに対して多項式F1’abs(X)をテストベクタとして用いた第3Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS212において、暗号処理装置1(第2演算部13)は、暗号文cbに対してcb+(0,1/4)の準同型演算を行い、TLWE暗号文ccを算出する。
ステップS213において、暗号処理装置1(第4算出部18)は、TLWE暗号文ccに対して多項式F1(X)をテストベクタとして用いた第4Bootstrappingを行い、TLWE暗号文cdを算出する。
【0123】
図20は、第2実施例(奇数分割)に係る処理を説明するフローチャートである。
図20(a)は、奇関数の演算を行う処理を説明する。
ステップS301において、暗号処理装置1(第5算出部41)は、入力を受け付けた、対象となるTLWE暗号文caに対して多項式F2id(X)をテストベクタとして用いた第5Bootstrappingを行い、TLWE暗号文cbを算出する。
ステップS302において、暗号処理装置1(第6算出部42)は、暗号文cbに対して多項式F2(X)をテストベクタとして用いた第6Bootstrappingを行い、TLWE暗号文ccを算出する。
図20(b)は、偶関数の演算を行う処理を説明する。
ステップS401において、暗号処理装置1(第7算出部43)は、入力を受け付けた、対象となるTLWE暗号文caに対して多項式F2abs(X)をテストベクタとして用いた第7Bootstrappingを行い、TLWE暗号文cbを算出する。ステップS402において、暗号処理装置1(第8算出部44)は、暗号文cbに対して多項式F2’(X)をテストベクタとして用いた第8Bootstrappingを行い、TLWE暗号文ccを算出する。
【0124】
図21は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、特に第1Bootstrappingなど、図21(a)に示すように、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図21(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図21(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、Public Key Switchingの結果、LEVEL0のTLWE暗号文が出力される。
それに対して図21(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にPublic Key Switchingを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0125】
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の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【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、第1Bootstrapping部15、第2Bootstrapping部16、第3Bootstrapping部17、第4Bootstrapping部18の機能によって(第1実施例)偶数分割での偶関数、奇関数の計算を行う。
暗号処理装置10は、第5Bootstrapping部41、第6Bootstrapping部42、第7Bootstrapping部43、第8Bootstrapping部44の機能によって(第2実施例)、奇数分割での偶関数、奇関数の計算を行う。
暗号処理装置1が行う処理は、以下のように応用することが出来る。
具体的な応用例として、生体認証(生涯不変のデータなので秘匿するのは絶対条件。閾値付きで一致するか否かを判定する)のようなファジー認証や、曖昧な、近しいデータをデータベースから検索するファジー検索や、暗号化されたデータベースからのクエリ集計などが挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、生体情報は正確に測定しても厳密に同じ値を取得できるわけではないため、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、暗号化されたデータベースに対するクエリを実行する際に、準同型暗号により暗号化されたデータで様々な演算が必要になる。その中には、一変数関数でありかつ偶関数や奇関数であるものも含まれる。例えば、ファジー認証で登録されているフィンガープリントとの一致度を計算するために、ユークリッド距離を利用する場合、xを計算することになるが、これは偶関数である。また、ベクトルの正規化などでスケールを変換する場合は、スケールの乗算つまり1次多項式を計算することになり、これは奇関数である。また、偶関数や奇関数を計算することによって計算できる任意の一変数関数も、ファジー認証やファジー検索、暗号化されたデータベースに対するクエリを実行する際に必要である。
文章の類似性を評価するため等に用いられ、2つのベクトルの内積を夫々のノルムで割ることが求められるコサイン類似度の算出においても、任意の一変数関数を暗号化したまま計算できることは有用である。
【0130】
図22は、コンピュータ装置の一実施例を示すブロック図である。
図22を参照して、コンピュータ装置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演算処理、第1Bootstrapping処理、第2Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
偶数分割の偶関数の演算を行う場合、暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第2演算処理、第3Bootstrapping処理、第4Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
奇数分割の奇関数の演算を行う場合、暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第5Bootstrapping処理、第6Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
奇数分割の偶関数の演算を行う場合、暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第7Bootstrapping処理、第8Bootstrapping処理、出力処理のいずれか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 ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22