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

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

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

特開2024-167879暗号処理装置、暗号処理方法、暗号処理プログラム
<>
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図1
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図2
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図3
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図4
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図5
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図6
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図7
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図8
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図9
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図10
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図11
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図12
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図13
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図14
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図15
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図16
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図17
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024167879
(43)【公開日】2024-12-04
(54)【発明の名称】暗号処理装置、暗号処理方法、暗号処理プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20241127BHJP
【FI】
G09C1/00 620Z
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2024025934
(22)【出願日】2024-02-22
(31)【優先権主張番号】P 2023083822
(32)【優先日】2023-05-22
(33)【優先権主張国・地域又は機関】JP
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
(57)【要約】
【課題】Integer-wise型TFHEの四則演算を実現する。
【解決手段】暗号文を処理する暗号処理装置であって、暗号文は、所定の値域内に、所定の分散を持つ誤差を与えた値を整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、第1暗号文(ca)に基づく暗号文と第2暗号文(cb)に基づく暗号文とを準同型演算した演算結果に全ての係数が同じ第1多項式を用いて、演算結果における平文の位置を示す第3暗号文(cd)を算出し、演算結果に第3暗号文を準同型加算して平文の範囲を値域内の所定の範囲内に縮小した暗号文に所定の多項式を用いることにより、第1暗号文と第2暗号文との演算を行う。
【選択図】図2
【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値域内に、所定の分散を持つ誤差を与えた値を整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に基づく暗号文と第2暗号文に基づく暗号文とを準同型演算した演算結果に全ての係数が同じ第1多項式を用いて、前記演算結果における平文の位置を示す第3暗号文を算出し、
前記演算結果に前記第3暗号文を準同型演算して平文の範囲を前記値域内の所定の範囲内に縮小した暗号文に所定の多項式を用いることにより、前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理装置。
【請求項2】
請求項1に記載の暗号処理装置において、
前記第1暗号文に基づく暗号文に前記第2暗号文に基づく暗号文を準同型加算した演算結果に前記第3暗号文を準同型加算又は準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第4暗号文を算出し、
前記第1暗号文に基づく暗号文から前記第2暗号文に基づく暗号文を準同型減算した演算結果に前記第3暗号文を準同型加算又は準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第5暗号文を算出し、
前記第4暗号文及び前記第5暗号文を用いて前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理装置。
【請求項3】
請求項1に記載の暗号処理装置において、
前記第1暗号文に基づく暗号文に前記第2暗号文に基づく暗号文を準同型加算した演算結果に前記第3暗号文を準同型加算又は準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第4暗号文を算出し、
前記第4暗号文から前記第1暗号文又は前記第2暗号文を準同型減算し、又は前記第1暗号文から前記第4暗号文を準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第5暗号文を算出し、
前記第4暗号文及び前記第5暗号文を用いて前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理装置。
【請求項4】
請求項1に記載の暗号処理装置において、
前記第1暗号文に基づく暗号文から前記第2暗号文に基づく暗号文を準同型減算した演算結果に前記第3暗号文を準同型加算又は準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第5暗号文を算出し、
前記第5暗号文に前記第2暗号文を準同型加算し、又は前記第5暗号文から前記第1暗号文を準同型減算し、又は前記第1暗号文から前記第5暗号文を準同型減算して平文の範囲を前記値域内の所定の範囲内に縮小した第4暗号文を算出し、
前記第4暗号文及び前記第5暗号文を用いて前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理装置。
【請求項5】
請求項2乃至4の何れか一項に記載の暗号処理装置において、
前記第4暗号文に第2多項式を用いて第6暗号文を算出し、
前記第5暗号文に第3多項式を用いて第7暗号文を算出し、
前記第6暗号文から前記第7暗号文を準同型減算して、前記第1暗号文と前記第2暗号文の平文同士の乗算結果に対応する暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項6】
請求項2乃至4の何れか一項に記載の暗号処理装置において、
前記第4暗号文に、第1の係数及び第2の係数を有する第4多項式を用いて前記第1の係数に基づく第8暗号文と前記第2の係数に基づく第9暗号文とを算出し、
前記第5暗号文に、第3の係数及び第4の係数を有する第5多項式を用いて前記第3の係数に基づく第10暗号文と前記第4の係数に基づく第11暗号文とを算出し、
前記第8暗号文から前記10暗号文を準同型減算して、前記第1暗号文と前記第2暗号文の平文同士の乗算結果の上位ビットに対応する暗号文を算出し、前記第9暗号文から前記第11暗号文を準同型減算して、前記乗算結果の下位ビットに対応する暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項7】
請求項6に記載の暗号処理装置において、
前記第1の係数の計算値を格納した第1テーブルと前記第2の係数の計算値を格納した第2テーブルとを有し、
前記第4暗号文に前記第4多項式を用いることにより、前記第1テーブルと前記第2テーブルとを同時に参照して前記第8暗号文又は前記第9暗号文を算出し、
前記第3の係数の計算値を格納した第3テーブルと前記第4の係数の計算値を格納した第4テーブルを有し、
前記第5暗号文に前記第5多項式を用いることにより、前記第3テーブルと前記第4テーブルとを同時に参照して前記第10暗号文又は前記第11暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項8】
請求項1に記載の暗号処理装置において、
前記第1暗号文の係数を2で割って、前記第1暗号文に基づく暗号文を算出し、前記第2暗号文の係数を2で割って、前記第2暗号文に基づく暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項9】
請求項1に記載の暗号処理装置において、
前記第1暗号文に基づく暗号文は第1暗号文であり、前記第3暗号文の係数を2で割って新たな前記第3暗号文を算出し、前記第2暗号文に基づく暗号文は第2暗号文であり、前記第4暗号文の係数を2で割って新たな前記第4暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項10】
請求項1に記載の暗号処理装置において、
暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部を備え、前記算出部は、入力となる暗号文に対して、所定の多項式を用いて新たな暗号文を算出するまえに係数の数を削減する処理を行う、
ことを特徴とする暗号処理装置。
【請求項11】
請求項1に記載の暗号処理装置において、
前記所定の演算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
ことを特徴とする暗号処理装置。
【請求項12】
請求項1に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項13】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値域内に、所定の分散を持つ誤差を与えた値を整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に基づく暗号文と第2暗号文に基づく暗号文とを準同型演算した演算結果に全ての係数が同じ第1多項式を用いて、前記演算結果における平文の位置を示す第3暗号文を算出し、
前記演算結果に前記第3暗号文を準同型演算して平文の範囲を前記値域内の所定の範囲内に縮小した暗号文に所定の多項式を用いることにより、前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理方法。
【請求項14】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値域内に、所定の分散を持つ誤差を与えた値を整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
第1暗号文に基づく暗号文と第2暗号文に基づく暗号文とを準同型演算した演算結果に全ての係数が同じ第1多項式を用いて、前記演算結果における平文の位置を示す第3暗号文を算出し、
前記演算結果に前記第3暗号文を準同型演算して平文の範囲を前記値域内の所定の範囲内に縮小した暗号文に所定の多項式を用いることにより、前記第1暗号文と前記第2暗号文との演算を行う、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号処理装置、暗号処理方法、暗号処理プログラムに関する。
【背景技術】
【0002】
準同型暗号(Homomorphic Encryption)は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことが出来る暗号方式である。
平文同士での加算に対応する暗号文同士の演算が存在する暗号が加法準同型暗号であり、平文同士での乗算に対応する暗号文同士の演算が存在する暗号が乗法準同型暗号である。
有限巡回群を整数に見立てて、加法演算(加算、減算)のみを行う加法準同型暗号と、乗法演算(乗算)のみを行う乗法準同型暗号とが以前から知られていた。
有限巡回群は、加算を繰り返せば整数倍が出来るので、平文による整数倍ができ、乗算を繰り返せば平文によるべき乗計算をすることも出来る。
また、加法演算と乗法演算の両方を暗号化したまま処理する環準同型暗号および、加法と乗法を含む全ての演算が可能な完全準同型暗号(Fully Homomorphic Encryption,FHE)がある。
完全準同型暗号の一つとして、暗号化時に復号には問題のない程度の小さな誤差を平文に加えることで構成される、LWE(Learning with Errors)問題に基づく完全準同型暗号が知られている。
【0003】
LWE問題に基づく完全準同型暗号では、演算を行うとともに誤差が蓄積していくので、誤差が大きくなりすぎて復号ができなくなる前に、暗号化したまま誤差成分を縮小するbootstrappingが実行される。
bootstrappingの計算時間は、完全準同型暗号で演算を行う際に必要となる計算時間の大部分を占める。また、bootstrappingでは膨大なデータを扱うため、その計算量は膨大である。したがって、完全準同型暗号の演算においては、実用的な時間内で演算結果を得ることができないことが問題であった。
この問題を劇的に改善した手法が、非特許文献1(以下の説明において、上記論文として参照される)に示されるTFHE(Fast Fully Homomorphic Encryption over the Torus)である。
準同型暗号には、平文として二値を有し論理演算をベースとして利用するBit-wise型の準同型暗号と、平文として整数を丸ごと一暗号文とするInteger-wise型の準同型暗号と、があり、非特許文献1に示されるTFHEはBit-wise型である。
なおTFHEの平文は円周群に対応づけられた0~1の実数である。よって、円周群の値域0~1を区切った区間を順番に整数と対応付けることにより、整数を平文として有するInteger-wise型の準同型暗号として応用することが出来る(非特許文献2参照)。
【先行技術文献】
【特許文献】
【0004】
【非特許文献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
【発明の概要】
【発明が解決しようとする課題】
【0005】
Integer-wiseでの四則演算が可能な準同型暗号としてTFHEを利用することができれば、1ビットずつ計算するよりも効率的に処理を行うことができる。
なおTFHEで用いるTLWE暗号文は、円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。一方、乗算に関しては、円周群はZ-加群であるため整数と円周群(暗号文)の乗算は定義されているものの、円周群同士の乗法演算が定義されていないため自明とは言えない。
本発明は、一側面として、暗号文同士の乗算を可能とし、Integer-wise型TFHEの四則演算をより完全に実現することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、一側面として、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値域内に、所定の分散を持つ誤差を与えた値を整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、第1暗号文に基づく暗号文と第2暗号文に基づく暗号文とを準同型演算した演算結果に全ての係数が同じ第1多項式を用いて、前記演算結果における平文の位置を示す第3暗号文を算出し、前記演算結果に前記第3暗号文を準同型加算して平文の範囲を前記値域内の所定の範囲内に縮小した暗号文に所定の多項式を用いることにより、前記第1暗号文と前記第2暗号文との演算を行う。
【発明の効果】
【0007】
本発明によれば、一側面として、Integer-wise型TFHEの四則演算をより完全に実現することが出来る。
【図面の簡単な説明】
【0008】
図1】本実施形態の第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】本実施形態の第2実施例に係る暗号処理装置の機能構成を説明する図である。
図10図9の機能構成に基づく演算プロセスを説明する図である。
図11】本実施形態の第1実施例に係る乗算処理を説明するフローチャートである。
図12】本実施形態の第2実施例に係る乗算処理を説明するフローチャートである。
図13】本実施形態の第4実施例に係る暗号処理装置の機能構成を説明する図である。
図14図13の機能構成に基づく演算プロセスを説明する図である。
図15】本実施形態の第5実施例に係る暗号処理装置の機能構成を説明する図である。
図16図15の機能構成に基づく演算プロセスを説明する図である。
図17】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
図18】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の演算のことを指すものとする。
【0010】
[第1実施例]
図1は、本実施形態の第1実施例に係る暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第4演算部15と、第5演算部16と、第1Bootstrapping部(算出部)17と、第2Bootstrapping部(算出部)18と、第3Bootstrapping部(算出部)19と、出力部35と、を備えている。また制御部10は、暗号文の係数を2で割る第6演算部41、第7演算部42を備えている。
暗号処理装置1は、暗号文を構成する円周群の半面(右半面)を使って、Integer-wise型の正のTLWE暗号文同士の乗算を行う。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第6演算部41は、入力暗号文又は第1演算部12から出力された暗号文の係数を2で割る演算を行う。
第7演算部42は、入力暗号文又は第2演算部13から出力された暗号文の係数を2で割る演算を行う。
第1演算部12は、入力暗号文又は第6演算部41から出力された暗号文に対して第1準同型演算を行う。
第2演算部13は、入力暗号文又は第7演算部42から出力された暗号文に対して第2準同型演算を行う。
第1Bootstrapping部17は、第1演算部12から出力された暗号文に対して第1Bootstrappingを行う。
第3演算部14は、第1演算部12から出力された暗号文と第1Bootstrapping部17から出力された暗号文とに対して第3準同型演算を行う。
第4演算部15は、第2演算部13から出力された暗号文と第1Bootstrapping部17から出力された暗号文とに対して第4準同型演算を行う。
第1Bootstrapping部17は、第2演算部13から出力された暗号文に対して第1Bootstrappingを行うようにしてもよい。
その場合も、第3演算部14は、第1演算部12から出力された暗号文と第1Bootstrapping部17から出力された暗号文とに対して第3準同型演算を行う。また、第4演算部15は、第2演算部13から出力された暗号文と第1Bootstrapping部17から出力された暗号文とに対して第4準同型演算を行う。
【0012】
第2Bootstrapping部18は、第3演算部14から出力された暗号文に対して第2Bootstrappingを行う
第3Bootstrapping部19は、第4演算部15から出力された暗号文に対して第3Bootstrappingを行う。
第5演算部16は、第2Bootstrapping部18から出力された暗号文と第3Bootstrapping部19から出力された暗号文とに対して第5準同型演算を行う。
【0013】
第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部41、第7演算部42は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部17、第2Bootstrapping部18、第3Bootstrapping部19は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部41、第7演算部42、第1Bootstrapping部17、第2Bootstrapping部18、第3Bootstrapping部19、出力部35の少なくとも一つが、ハードウェアで実現されてもよい。
【0014】
出力部35は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、暗号文に対する演算で用いられる一時ファイルや一時データ、出力暗号文を格納することが出来る。
また記憶部20には、暗号化された暗号化データベース60を格納することが出来る。
また記憶部20には、下記に説明するテストベクタ多項式の係数の計算値を格納したLUT(ルックアップテーブル)を格納する。
通信部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、TLWE暗号文cb)の乗算を行う。ここで、TLWE暗号文caは、平文整数aの暗号文であり、TLWE暗号文cbは、平文整数bの暗号文である。TLWE暗号文ca、TLWE暗号文cbは、何れも平文の範囲として円周群の右半面を使った例えば平文として正の整数を有する暗号文である。
暗号処理装置1は、下記に説明するQuarter Squareと呼ばれる手法を使って暗号文同士の乗算を行う。
【0016】
図2(A)は、平文aと平文bの和(a+b)と差(a-b)に夫々対応する暗号文を算出する処理を示している。
図2(A)において、暗号処理装置1は、TLWE暗号文caを第6演算部41に入力し、TLWE暗号文caの係数を2で割った新たなTLWE暗号文ca’を得る。
また暗号処理装置1は、TLWE暗号文cbを第7演算部42に入力し、TLWE暗号文cbの係数を2で割った新たなTLWE暗号文cb’を得る。
暗号処理装置1は、TLWE暗号文ca’とTLWE暗号文cb’を第1演算部12に入力し、TLWE暗号文ca’とTLWE暗号文cb’との準同型加算(ca’+cb’)(第1準同型演算)を行って新たなTLWE暗号文cc1を得る。
【0017】
また、暗号処理装置1は、TLWE暗号文ca’とTLWE暗号文cb’を第2演算部13に入力し、TLWE暗号文ca’からのTLWE暗号文cb’の準同型減算(ca’-cb’)(第2準同型演算)を行って新たなTLWE暗号文cc2を得る。
暗号処理装置1は、TLWE暗号文cc1又はTLWE暗号文cc2を第1Bootstrapping部17に入力し、全ての係数が1/4のフラットなテストベクタ多項式T1(X)を用いてTLWE暗号文cc1又はTLWE暗号文cc2に対するGate Bootstrappingを行い、新たなTLWE暗号文cdを得る。
暗号処理装置1は、TLWE暗号文cc1とTLWE暗号文cdを第3演算部14に入力し、TLWE暗号文cc1とTLWE暗号文cdとの準同型加算(cc1+cd)(第3準同型演算)を行って新たなTLWE暗号文cc1’を得る。
暗号処理装置1は、TLWE暗号文cc2とTLWE暗号文cdを第4演算部15に入力し、TLWE暗号文cc2とTLWE暗号文cdとの準同型加算(cc2+cd)(第4準同型演算)を行って新たなTLWE暗号文cc2’を得る。
【0018】
図2(B)は、平文aと平文bの和(a+b)の2乗割る4、差(a-b)の2乗割る4に夫々対応する暗号文を算出する処理を示している。
図2(B)において、暗号処理装置1は、TLWE暗号文cc1’を第2Bootstrapping部18に入力し、テストベクタ多項式T(X)を用いた後述するFunctional Bootstrapping(第2Bootstrapping)を行い、新たな暗号文cf1を得る。
また暗号処理装置1は、TLWE暗号文cc2’を第3Bootstrapping部19に入力し、テストベクタ多項式T(X)を用いたFunctional Bootstrapping(第3Bootstrapping)を行い、新たな暗号文cf2を得る。
【0019】
図2(C)は、平文aと平文bの和(a+b)の2乗割る4から差(a-b)の2乗割る4を引いて得られる乗算結果を算出する処理を示している。
図2(C)において、暗号処理装置1は、TLWE暗号文cf1とTLWE暗号文cf2を第5演算部16に入力し、TLWE暗号文cf1からTLWE暗号文cf2を準同型減算(第5準同型演算)して新たなTLWE暗号文cgを得る。
【0020】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0021】
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0022】
図3は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、図3に示す円周群{T}の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0023】
[TLWE暗号]
TLWE暗号を説明する。
円周群{T}上の要素として、一様分布な乱数をN個並べたベクトル[a]を用意する。また、0,1の2値からランダムにN個並べた秘密鍵ベクトル[s]を用意する。
平均値が平文μであり、分散が事前に定めたαとなるようなガウス分布(正規分布)の乱数をeとしたときに、([a],[s]・[a]+e)の組がTLWE暗号文の一例となる。
同一の平文μに対して無限個のTLWE暗号文を生成した時のeの平均値が平文μであり、μは誤差なしの平文、eは誤差付きの平文である。
なお、「・」は、ベクトルの内積を表す。以降についても同様である。
上記[s]・[a]+eをbとおくと、TLWE暗号文は([a],b)と表すことができる。
φ(([a],b))=b-[s]・[a]=eは、TLWE暗号文を復号する関数である。TLWE暗号は平文に秘密鍵ベクトルと乱数ベクトルの内積と誤差を付加して暗号化するため、秘密鍵ベクトルと乱数ベクトルの内積を算出することで、TLWE暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
【0024】
この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で誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0025】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φにかけると、φ(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0026】
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)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0027】
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環の要素である多項式T(X)をT[X](X+1)+T[X]のかたちに分解し、2番目の項(剰余部分)だけを取り出して集めると、これもまた「環」の性質を持つため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(X+1)と表す。
【0028】
多項式環の剰余環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-μとなって全ての項の係数がマイナスとなる。
【0029】
さらにXを掛け続けると、
-μXn-1-μXn-2・・・-μX+μ
-μXn-1-μXn-2・・・+μX+μ
と最高次数の項の係数がマイナスからプラスに反転して定数項として現れていき、全部で2n回繰り返すと、元の多項式環の剰余環の要素F(X)=μXn-1+μXn-2+・・・+μX+μに戻る。このように、最上位の係数(μ)が最下位の定数項に符号反転して(-μ)現れて、全体的に項が1つ、ずれている。
すなわち、多項式F(X)=μXn-1+μXn-2+・・・+μX+μは、多項式環の剰余環T[X]/(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回かけても良く、結果的に同じことができれば他の変形を行っても良い。
【0030】
[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)とする。
【0031】
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は除算の余りを意味する。
【0032】
[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のべき乗の和の形に分解する。
【0033】
円周群{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]
というベクトルになる。
【0034】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文dが得られる。下位ビットは四捨五入をしてまるめられている。
【0035】
TRLWE暗号文dに対して、||d-[v]・H||が最小値となる[v]を得る操作が、Gadget Decompositionであるとも言える。ここで||はベクトルのノルム(長さ)である。
e(X)の係数全てが、平均値は0となり分散はαとなる乱数により生成された多項式により算出した、TRLWE暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。
この暗号文kとして表せる暗号文をTRGSW暗号文と呼ぶこととする。
TRGSW暗号文は、下記に用いるBootstrapping Keyを構成する。
【0036】
Bootstrapping Keyを説明する。
Bootstrapping Keyは、Gate Bootstrappingに用いるために、秘密鍵を暗号化する方法として利用する。
TLWE暗号文に用いる秘密鍵[s](N次)とは別に、Gate Bootstrappingに使うために、秘密鍵[s]を暗号化するための秘密鍵[s’]の各要素を0か1の2値で選択する。
秘密鍵[s’]の次数は、TRLWE暗号で使用する多項式の次数nとそろえる必要がある。
秘密鍵[s]の要素ごとにTRGSW暗号文を作成する。
秘密鍵[s’]で復号するとφs’(Zj)=0となるTRLWE暗号文Zjを2l(エル)個作成する。
そして、上記したTRGSW暗号文の構成どおり、
とする。
このTRGSW暗号文を、秘密鍵[s]のそれぞれの要素ごとに異なるZjを用いて構成したセットを、Bootstrapping Key(BK)と呼ぶ。つまり、BKはN個のTRGSW暗号文のセットである。
【0037】
TRGSW暗号文BKiとTRLWE暗号文dの外積を、
BKi×d=Dec(d)・BKi
と定義する。
Gadget Decompositionは、TRLWE暗号文dに対して||d-[v]・H||が最小値となる[v]を得る操作であった。
従って、[v]=Dec(d)と誤差(ε(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)は、平文多項式のそれぞれの係数の絶対値の大きさをシステムパラメータで調整することができるので、この後の演算も含めて十分小さくなるように設定する。
【0038】
そうするとφ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暗号文を計算することができるが、その結果を見てもどちらを選択したかは復号することなしには分からない。
【0039】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な技法を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)Public Key Switchingから構成される。
【0040】
図4は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、平文とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図3の円周群{T}における0~0.25(1/4)、0.75(3/4)~1の区間の平文を持つTLWE暗号文を、平文が0のTLWE暗号文に変換し、0.25(1/4)~0.75(3/4)の区間の平文を持つTLWE暗号文を、平文が0.25(1/4)の暗号文に変換する。
この変換の際、平文に付加される誤差は±1/16の範囲のいずれかである。
【0041】
(1)BlindRotate
Gate Bootstrappingの最初のステップとしてBlindRotateが行われる。
BlindRotateは、TLWE暗号文からTRLWE暗号文を作成する工程である。
BlindRotateでは、多項式T(X)を平文とする自明なTRLWE暗号文(0,T(X))から、X-φs(c’)を乗算したTRLWE暗号文を復号することなく得る。0は、0次の多項式0を示す。
ここでφs(c’)は、下記のLWE暗号文c’を復号関数にかけた平文である。
BlindRotateでは、上記した有限巡回群をなす、テストベクタとしての下記の多項式F(X)
F(X)=μXn-1+μXn-2+…μX+μ
ただし、μ=1/8
にXn/2を掛けて得た下記の多項式T(X)
T(X)=F(X)・Xn/2
を用意する。
【0042】
平文μ1を秘密鍵[s]で暗号化したTLWE暗号文cがあるとする。
このTLWE暗号文c=([a],b)の各要素を2n倍して四捨五入したLWE暗号文c’=([a’],b’)を得る。
LWE暗号文c’=([a’],b’)を復号すると、μ1’=φ(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の要素である多項式の各項の係数を所定の個数だけ巡回させれば済む。
【0043】
そうすると、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)とみなすことが出来る。
【0044】
(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の処理を行うことができる誤差の限界であり、後述のトレードオフが発生する仕組みとなる。
【0045】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をn-1として、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0046】
これに対して下記の演算を行い、
を得る。
「多項式環の剰余環」であるので(X+1)で割った余りを求めると、
が得られる。
【0047】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0048】
つまり、(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が得られた。
【0049】
(3)Public Key Switching
(2)のSampleExtractで得られたTLWE暗号文csは、秘密鍵[s]ではなく、秘密鍵[s']で暗号化されている。
従って、TLWE暗号文csを復号することなく、TLWE暗号文csの鍵を秘密鍵[s]に差し替え、秘密鍵[s]で暗号化された状態に戻す必要がある。
そのためPublic Key Switchingの手法を説明する。
TFHEで用いるTLWE暗号文の秘密鍵[s]はN次のベクトルであった。
これを用い、Bootstrapping Keyを作成したときのn次のベクトルの秘密鍵[s’]を暗号化する。
すなわち、
と、秘密鍵s’の値を円周群{T}の要素、0から1の実数を二進数で表現したときの各桁にずらした値として暗号化する。秘密鍵は[s]である。「桁数」tはシステムパラメータである。
このようにして作成した暗号文KSを秘密鍵[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に対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
上記におけるTLWE暗号文cxを計算する式
の内側のΣを取り出すと
である。
これはすなわち
であるため、s’が0の場合は平文が0となるTLWE暗号文となる。一方、s’が1の場合は、aが2進数表記で小数点以下j桁目が1の場合にのみ、TLWE暗号文の平文として小数点以下j桁目に1を加算することになる。つまり、この部分で、s’が1の場合にのみ、平文としてaの値を2進数での各桁に分解してTLWE暗号文の中身として再構成していると言える。
そして、外側の
の計算と自明な暗号文([0],b)の加算とを行うことにより、暗号文の中身としてはs’が1である位置に対応するaの値全てとbとを合計している。これは実質的に、暗号文の中でTLWE暗号文の復号を行っているものと解釈できる。
【0050】
ここで得られた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進数で表現することにより、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0051】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の四捨五入で加わる誤差、CMuxで加わる誤差、Public Key Switchingで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0052】
上記したように、TFHEは0もしくは非0を平文として持ち、論理演算を行うBit-wise型の準同型暗号である。ただし図3で説明したように平文は円周群{T}に対応づけられた0~1の実数である。従って、円周群{T}を区切った区間を順番に整数と対応付けることにより、整数を平文として持つInteger-wise型の準同型暗号として応用することが出来る。
TFHEで用いるTLWE暗号文は円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。
以下に説明する方法で、さらに乗算が可能となる。乗算が可能となることで、すでに公知である加算と一部の乗算と併せてTFHEをInteger-wise型での四則演算がより完全なかたちで可能な準同型暗号として利用することができる。Bit-wise型のTFHEによって1ビットずつ計算するよりも効率的に処理を行うことができる。
【0053】
図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を中心とする領域に対応付けた、整数で表現した際の最小値となる領域から反時計回りに連続して整数を割り当てることが出来る。
【0054】
図5に示すように、円周群{T}上の0(1)は、-1/(2t)~1/(2t)の領域の範囲内にある。円周群{T}上における暗号文の平文は、必要に応じて例えば1/(2t)に基づいたオフセットを、図5の状態に加算あるいは減算して領域内の位置(円周群{T}上の位置)を調整することが出来る。
また、本質的に変わることはないが、下記に説明する実施形態では、図5の説明とは円周群の分割数tの意味が異なっていることに注意されたい。
【0055】
図6乃至図8は、本実施形態におけるInteger-wise型TFHEを説明する図である。
図6に示すように、本実施形態の乗数、被乗数夫々の暗号文は、円周群{T}の値域全体(0~1)を2t個に分割している。
なお、図6乃至図8では、円周群{T}の値域0~1を-0.5~0.5とする場合がある。
tの値を大きくして円周群{T}を細かく分割するとTLWE暗号文に記録可能な整数値の最大値をより大きくできるが、細かく分割しすぎると平文に付加する誤差範囲が小さくなりすぎ、暗号の強度が低下するという問題がある。この点については後に説明する。
円周群{T}を分割した1/(2t)の区間毎に、整数値が割り当てられTLWE暗号文が取り得る平文整数の値は-tからt-1である。t-1が1つのTLWE暗号文に記録できる整数の最大値であり、-tが1つのTLWE暗号文に記録できる整数の最小値である。
図5の場合と同様に平文に対してオフセットを付加していない(平文に対するオフセットが0)状態を図6(b)に示している。図6(a)は、図6(b)に示す暗号文の平文に対して、例えば+1/(4t)のオフセットを付加した状態を示している。オフセットを付加することによって、円周群{T}のスライス割りを変更することが出来る。
なお、下記の説明では、円周群の右半面、左半面とは、オフセットを1/(4t)だけ付加した図6(a)の状態に準拠するものとする。
【0056】
図6(b)に示すオフセット未付加の状態では、円周群{T}上の0(1)が-1/(4t)~1/(4t)のスライス内にある。
図6(a)に示すようにオフセットを付加することによって、円周群{T}上の0から始まるスライス(0/2t)に整数0を対応付けることが出来る。他のスライスはX/2t(Xは平文整数)から始まる。これにより円周群上の0は、bootstrappingを用いた処理を行う際に使用するテストベクタ多項式の次数0の項を参照するよう対応しているため、このようにオフセットを付ける方が、係数の並び順が自然で見やすくなる利点があるが、これは原理的に必須である要件ではないため、テストベクタや前処理、後処理などで適切な調整を行うことにより、異なるオフセットを採用することもできる。
図6(a)において、オフセットを付加された平文は、各スライス(例えば、3/(2t)から始まるスライス)の中央に、±1/(4t)の誤差範囲内で位置する。このとき、正規分布の平均が例えば3/(2t)+1/(4t)となり、ほとんどの場合に±1/(4t)の誤差範囲内に分布することで、3/(2t)から始まるスライスの中央に平文が分布する。
オフセットを付加した平文は、図6(a)において、3/(2t)のスライスにのみ図示しているが、あくまで例示であり、全てのスライスに始点となる値にオフセットを付した平文が存在する。
【0057】
図6の暗号文は、円周群{T}の右半面をt個に分割し、左半面をt個に分割している。円周群{T}の右半面は0及び正の平文整数(0~t-1)に対応し、左半面は負の平文整数(-1~-t)に対応している。1ブロック(スライス)の幅は1/(2t)である。
整数値は、円周群{T}の0~1(-1/2~1/2)の値域を2t個に区切った、夫々-t/(2t)~(t-1)/(2t)から始まるスライスに割り当てられる。
非負の整数は、右半面の0/(2t)、1/(2t)、…、(t-3)/(2t)、(t-2)/(2t)、(t-1)/(2t)から始まるスライスに割り当てられる。負の整数は、左半面の-t/(2t)、-(t-1)/(2t)、-(t-2)/(2t)…、-1/(2t)から始まるスライスに割り当てられる。
これらのスライスは、夫々始点となる値に+1/(4t)のオフセットを付加した値を中心とするスライスである。1/(4t)のオフセットは、1/(2t)のスライス幅の半分に相当する。1/(4t)のオフセットを整数表現に含めて表すと、便宜上+0.5のオフセットと表現することが出来る。
【0058】
図6(a)に示すように、2t=16(t=8)として円周群の値域を16個に分割する場合には、円周群{T}の右半面で0から7(=t-1)の整数を表現し、左半面で-8(=-t)から-1の整数を表現することが出来る。すなわち、暗号文全体は-8、-7、-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6、7の整数を表現することが出来る。
これらの整数値は、円周群{T}の値域を2t=16個に区切った、-8/(2t)、-7/(2t)、-6/(2t)、-5/(2t)、-4/(2t)、-3/(2t)、-2/(2t)、-1/(2t)、0/(2t)、1/(2t)、2/(2t)、3/(2t)、4/(2t)、5/(2t)、6/(2t)、7/(2t)から始まる区間に割り当てられる。1/2から始まる領域から反時計回りに連続して整数を割り当てている。
なお、上記の0.5のオフセットを考慮すると、右半面の例えば1/(2t)から始まるスライスは、1.5/(2t)を中心とするスライスであるし、左半面の例えば-8/(2t)から始まるスライスは、-7.5/(2t)を中心としたスライスである。オフセットを含んで表現される整数は、上から反時計回りに-7.5、-6.5、-5.5、-4.5、-3.5、-2.5、-1.5、-0.5、0.5、1.5、2.5、3.5、4.5、5.5、6.5、7.5である。
【0059】
本実施形態の暗号処理装置1は、Integer-wise型のTLWE暗号文同士の乗算を以下の方法により実現する。
暗号処理装置1は、Quarter Squareと呼ばれる手法を用いる。Quarter Squareは、(a+b)と(a-b)を夫々展開したものを比較すると
(a+b)-(a-b)=a+2ab+b-(a-2ab+b)=4ab
から4abであることを利用して、aとbの乗算結果であるabを得る手法である。
Quarter Squareで必要になる演算は、
(1)aとbの加算(a+b)及び減算(a-b)、
(2)aとbの加算結果の2乗(a+b)及び減算結果の2乗(a-b)
(3)aとbの加算結果及び減算結果の2乗同士の減算(a+b)-(a-b)
(4)減算結果4abを4で割ってabを得ること、
の4種類である。
(1)~(4)に対応する演算をaとbの暗号文について行う場合を考える。
(1)のaとbの加算及び減算に対応する暗号文の加算及び減算と(3)の2乗同士の減算に対応する暗号文同士の減算は、TLWE暗号文同士で準同型に計算可能である。
また(2)の暗号文同士の2乗の計算と、(4)の暗号文を4で割る(平文の整数での除算)計算は、1変数関数としてルックアップテーブル(LUT)で処理することが出来る。従って、Quarter Squareを用いた乗算は、TFHEで定義されている演算と相性が良い。
【0060】
上記の(a+b)-(a-b)=4abから、aとbの加算結果及び減算結果の2乗同士の差(a+b)-(a-b)は必ず4の倍数になる。この場合、(a+b)の2乗と(a-b)の2乗はどちらも4で割った余りが同じである。(a+b)を2乗した後に4で割って余りを切り捨てた商から(a-b)を2乗した後に4で割って余りを切り捨てた商を減算しても、(a+b)の2乗から(a-b)の2乗を減算して4で割った商と同じ正しい値が得られる。
従って、図2においては、暗号処理装置1は、(A)では(a+b)、(a-b)に夫々対応する暗号文の演算を行い、(B)では(a+b)/4、(a-b)/4に夫々対応する暗号文の演算を行い、(C)では、(a+b)/4-(a-b)/4に対応する暗号文の演算を行うことによって、平文aと平文bの乗算結果に対応する暗号文の演算を行う。
特に(B)の処理をTFHEで実装する場合、予め(a+b)、(a-b)を夫々2乗して4で割った商のみをLUTに格納しておくことが好ましい。
【0061】
ただし、2乗の計算前にaとbの和(a+b)や差(a-b)を計算すると、加算及び減算後の値は夫々値域が2倍になる。
ナイーブに円周群(平文の定義域)の右半面を用いて(例えば正の数のみで)計算を行っていた場合は、値域が倍になった円周群全面からLUTを参照する操作が必要になる。
TFHEのBootstrappingを用いてLUTを参照する処理は、Functional Bootstrappingと呼ばれ、なかでも円周群の全面からLUTを参照する手法はFDFB(Full-Domain Functional Bootstrapping)と呼ばれる。
FDFBには様々な手法が提案されている。いずれの手法を用いてもQuarter Squareを実現することが出来るが、本実施形態では、FDFBの一例として、論文「TOTA: Fully Homomorphic Encryption with Smaller Parameters and Stronger Security(https://eprint.iacr.org/2021/1347)」に開示される、TOTAと呼ばれる手法を応用する。
【0062】
図7は、TOTAの手法でFDFBを行う方法を説明する図である。
本来、円周群上の点に対する除算は定義されていない。しかし、円周群上の点を一時的に実数と見なすことで強制的に除算を行うことは実装上可能である。
図7に示すように、例えば円周群{T}上の値0.8を実数の0.8と見なし、これを2で割ると0.4となる。
一般的に、除算は乗算の逆演算と考えられる。従って、例えば「2r=0.8を円周群上で満たすrを求めることを除算と呼ぶ」と定義しても他の理論と矛盾しない。
この場合のrは、0.4と0.9の2つの値を取りうる。それぞれの値は2倍すると0.8と1.8であり、円周群{T}上ではどちらも0.8に等しいからである。
2で割る場合は、必ず円周群{T}の右半面と左半面に1つずつ解があり、強制的に除算を行う操作は、円周群{T}の右半面の値を選択することと常に等しい。
【0063】
ここで、円周群{T}上の点を用いたベクトル[a]とスカラbの組み合わせ([a],b)で構成されるTLWE暗号文ccがあるとする。
TLWE暗号文ccのベクトル[a]の全ての要素と、スカラbを、上記の手法を用いて強制的に2で除算したTLWE暗号文cc’を([a’],b’)とする。
図7に示すように、TLWE暗号文ccの平文の円周群上の値が0.8である場合、TLWE暗号文ccを強制的に2で除算したTLWE暗号文cc’の平文の円周群上の値は0.4である場合と0.9である場合があり、どちらであるかはTLWE暗号文cc’を復号せずには分からない。
元々の平文(TLWE暗号文ccの平文)の円周群上の値をp(上記の場合0.8)とすると、p=b-[s]・[a](mod 1)が成り立っていた。
(mod 1)は、1で割った余りであるから、b-[s]・[a]の小数部だけが得られる。等号の左右で小数部のみが一致していると解釈できる。
つまり、何らかの整数nが存在し、実数の世界での計算としてp=b-[s]・[a]+nが成立している。
【0064】
ここでp=b-[s]・[a]+nにTLWE暗号文cc’の[a’]とb’を代入する。
([a],b)を2で除算したのが([a’],b’)であるので、[a]=2[a’]であり、b=2b’である。
代入の結果、p=b-[s]・[a]+n=2b’-2[s]・[a’]+nとなる。
p/2=(2b’-2[s]・[a’]+n)/2から、p/2は、b’-[s]・[a’]+n/2である。
この式は実数の世界で成立する式であるため、等号の左右では小数部も当然等しい。そのためp/2=b’-[s]・[a’]+n/2(mod 1)も当然成立する。
これを移項するとp/2-n/2=b’-[s]・[a’]であり、右辺は、TLWE暗号文cc’の平文である。従って、TLWE暗号文cc’の平文はp/2-n/2である。
ここで、nは未知ではあるが何らかの値として存在している「整数」であったため、n/2の小数部は0もしくは0.5の何れかである。
従って、TLWE暗号文cc’の平文は、p/2又はp/2+0.5の何れかである。
p/2-0は、p/2であり、p/2-0.5は、円周群上で-0.5と0.5が等しいことからp/2+0.5である。
【0065】
ここで、0又は0.5であるn/2の小数部をuとする。uは整数nが偶数であるか奇数であるかの情報と等価である。整数nが偶数であればn/2の小数部uは0であり、整数nが奇数であればn/2の小数部u=0.5である。逆もまた成立する。
uを用いて表すと、TLWE暗号文cc’の平文は、p/2+uである。
TLWE暗号文cc’の平文がp/2であるかp/2+0.5であるかの情報は、暗号化された状態ではあるが、平文が円周群{T}の右半面にあるか、左半面にあるかによって得ることができる。
具体的には、全係数が1/4であるフラットなテストベクタ多項式を用いてTLWE暗号文cc’に対するBootstrappingを行ってTLWE暗号文cdを得る。これによって、平文が右半面にあれば平文として1/4を有し、平文が左半面にあれば平文として-1/4を有するTLWE暗号文cdが得られる。TLWE暗号文cdは、TLWE暗号文cc’の平文が右半面と左半面の何れにあるかを示す暗号文である。
TLWE暗号文cdは平文がu+1/4を有する。TLWE暗号文cc’にTLWE暗号文cdを準同型加算して得られるTLWE暗号文cc’+cdは、(p/2+u)+(u+1/4)=p/2+1/4から未知の値uが消え、平文としてp/2+1/4を有する。
【0066】
さらに、TLWE暗号文cc’+cdから自明な暗号文(0,1/4)を準同型減算(cc’+cd-(0,1/4))すると、平文としてp/2を有するTLWE暗号文が得られる。
これにより、元々の(TLWE暗号文ccの)平文pがフルドメイン(円周群全域0~1)の値を取る場合でも、TLWE暗号文cc’では、右半面(0~0.5)に平文の範囲を縮小することができる。ただし、平文全体の範囲が半分になったのにあわせ各スライスは半分の広さになっている。
【0067】
TLWE暗号文ccが円周群全体に平文を有していた場合、TLWE暗号文cc’は平文の範囲として円周群の右半面のみを使用するようになる。
この状態になれば、円周群の右半面しか使用されないため、LUTからスライスのサイズを同様に半分にしたテストベクタ多項式を作成し、通常通りBootstrappingを行えばよい。
計算時間の大部分を占めるBlindRotateは、TLWE暗号文cdを求めるための1回と、実際にLUTを参照するための1回と、で合わせて2回である。
Quarter Squareにより乗算を行う場合は、xとyの加算結果の2乗割る4と減算結果の2乗割る4のテーブルを夫々参照するために、全体でFDFBが2回必要となる。1回のFDFBに要するBlindRotateの回数は上記のように2回である。従って、単純に構成した場合、乗算全体に要するBlindRotateの回数は4回である。
本実施形態では、これをさらに高速化する。
【0068】
[第1実施例]
本実施形態に係る暗号文の乗算方法を説明する。
暗号処理装置1は、TFHEのシステムパラメータを設定する。このとき、暗号処理装置1は、Gate Bootstrapping後に得られる暗号文において、平文に付加される誤差の範囲が±1/(8t)未満となるようにシステムパラメータを設定する。
被乗数(掛けられる数)のTLWE暗号文caと、乗数(掛ける数)のTLWE暗号文cbがあるとする。
乗数、被乗数のTLWE暗号文ca、cbは、図6(a)に示す構成のTLWE暗号文であり、右半面をt個に分割し、円周群{T}全体を2t個に分割している。
TLWE暗号文caとTLWE暗号文cbの夫々において、円周群{T}の右半面を非負の整数である平文に対応させ、左半面を負の整数である平文に対応させることが出来るが、本実施形態では、TLWE暗号文caとTLWE暗号文cbの平文の範囲として右半面のみを利用する。
TLWE暗号文caは、秘密鍵がなければ知り得ない整数aに対応する実数a/(2t)+1/(4t)を平文として有する。
TLWE暗号文cbは、秘密鍵がなければ知り得ない整数bに対応する実数b/(2t)+1/(4t)を平文として有する。
TLWE暗号文ca、cbの平文が夫々a/(2t)、b/(2t)であるのは、円周群全体を2t個に分割していることに基づく。上記に説明したように、平文に付加している+1/(4t)のオフセットは、円周群の0から始まるスライスを整数0と対応付けながら平文をスライスの中央に位置させる。このオフセットは必須ではない。
乗算は可換であるため、乗数と被乗数、すなわち平文整数aとb、TLWE暗号文caとTLWE暗号文cbは相互に入れ替えることが出来る。
【0069】
図6(a)について説明したように、TLWE暗号文ca、TLWE暗号文cbにおいても、a/(2t)+1/(4t)と平文にオフセットを付加している。
平文にオフセットを追加した暗号文同士を乗算した結果、オフセット同士が掛け合わされた値に相当するオフセットが乗算結果の平文に追加される。このオフセットの成分は後の演算で消えるため演算結果(乗算結果)に影響はない。
オフセットの値1/(4t)は例でありこれに限定されるものではないが、オフセットの値に応じて、多項式やパラメータを調整する必要がある。
【0070】
図6(a)において、負の数を扱う円周群{T}の左半面では、上から反時計回りに、-t/(2t)から始まるスライス~-1/(2t)から始まるスライスを用いて整数-t~-1を表現することが出来る。
0と正の数(非負の数)を扱う円周群{T}の右半面では、下から反時計回りに、0/(2t)から始まるスライス~t-1/(2t)から始まるスライスを用いて、整数0~t-1を表現することが出来る。
本実施形態の乗算対象となるTLWE暗号文ca、cbは、図6(a)において、円周群{T}の右半面のみに平文を有するものとする。
【0071】
図2と上記のFDFBの説明を参照して、Quarter Squareの手法を応用した暗号文同士の乗算処理を詳しく説明する。
図2(A)において、暗号処理装置1は、(a+b)、(a-b)に対応する暗号文を夫々求める。
暗号処理装置1(第6演算部41)は、TLWE暗号文caの係数を2で割って新たなTLWE暗号文ca’を得る。
暗号処理装置1(第7演算部42)は、TLWE暗号文cbの係数を2で割って新たなTLWE暗号文cb’を得る。
上記のように、TLWE暗号文caの平文はa/(2t)+1/(4t)、TLWE暗号文cbの平文はb/(2t)+1/(4t)である。
従って、TLWE暗号文ca’は、a/(4t)+1/(8t)+uを平文として有する。またTLWE暗号文cb’は、b/(4t)+1/(8t)+u’を平文として有する。
このu、u’は上記のFDFBの説明で言及した暗号文を2で割った際に現れる値である。
区別のために、TLWE暗号文cbの係数を2で割ることによって現れるuの成分はu’と表記している。
TLWE暗号文ca’とTLWE暗号文cb’の平文は、係数を2で割る前のTLWE暗号文caとTLWE暗号文cbの半分となり、円周群{T}上での演算(mod 1)によって消えていたnの偶奇情報であるu(u’)が0又は0.5として現れている。
【0072】
暗号処理装置1(第1演算部12)は、TLWE暗号文ca’とTLWE暗号文cb’とに対する第1準同型演算(ca’+cb’-(0,1/(8t)))を行って新たなTLWE暗号文cc1を得る。
暗号処理装置1(第2演算部13)は、TLWE暗号文ca’とTLWE暗号文cb’とに対する第2準同型演算(ca’-cb’+(0,1/(8t)))を行って新たなTLWE暗号文cc2を得る。
第1準同型演算(準同型加算)によって得られるTLWE暗号文cc1は、
a/(4t)+1/(8t)+u+b/(4t)+1/(8t)+u’-(0,1/(8t))から、
(a+b)/(4t)+1/(8t)+u+u’を平文として有する。
第2準同型演算(準同型減算)によって得られるTLWE暗号文cc2は、
a/(4t)+1/(8t)+u-(b/(4t)+1/(8t)+u’)+(0,1/(8t))から、
(a-b)/(4t)+1/(8t)+u-u’を平文として有する。
これらの準同型加算及び準同型減算において加算及び減算した自明なTLWE暗号文(0,1/(8t))は、スライスの境界を円周群の0と揃えるための本質的ではないオフセットである。このオフセットについては以降の説明では省略する。
【0073】
ここで、円周群{T}上では0.5=-0.5である。これは、円周群{T}上の点0から右回りでも左回りでも半周すると同じ地点に至ると解釈できる。
そして、上記の説明から、u、u’は何れも0又は0.5の値のみ取り得るため、円周群{T}上で、u=-u(uが0の場合0=0,uが0.5の場合0.5=-0.5)であり、u’=-u’(u’が0の場合0=0,u’が0.5の場合0.5=-0.5)である。
従って、TLWE暗号文cc1とTLWE暗号文cc2の平文が含むu+u’とu-u’の成分は、何れも常に同じ値となる。また、u+u’は0又は0.5の何れかのみを取り得る。
uが0、u’が0の場合u+u’=0、u-u’=0
uが0、u’が0.5の場合u+u’=0.5、u-u’=-0.5⇒0.5
uが0.5、u’が0の場合u+u’=0.5、u-u’=0.5
uが0.5、u’が0.5の場合u+u’=1⇒0、u-u’=0
従って、u+u’は、0又は+0.5の未知の値の成分u’’と考えられる。
【0074】
TLWE暗号文caとTLWE暗号文cbの和に対応するTLWE暗号文cc1、TLWE暗号文caとTLWE暗号文cbの差に対応するTLWE暗号文cc2は、何れも平文の範囲として円周群{T}の全面を使っている。
そこで、暗号処理装置1は、TLWE暗号文cc1、TLWE暗号文cc2の平文の範囲を円周群{T}の右半面に縮小する処理を行う。
暗号処理装置1(第1Bootstrapping部17)は、TLWE暗号文cc1とTLWE暗号文cc2の何れかに対して、全係数が1/4であるフラットな第1テストベクタ多項式を用いた第1Bootstrappingを行い、TLWE暗号文cdを得る。このTLWE暗号文cdは、上記のFDFBで説明したものと同じくTLWE暗号文cc1、cc2が右半面と左半面のどちら側に平文を有するかを示す暗号文である。
TLWE暗号文cdは、TLWE暗号文cc1、cc2の何れかのみに基づいて算出することが出来る。
暗号処理装置1(第3演算部14)は、TLWE暗号文cc1にTLWE暗号文cdを準同型加算する第3準同型演算を行い、図8(a)で説明する新たなTLWE暗号文cc1’を得る。
暗号処理装置1(第4演算部15)は、TLWE暗号文cc2にTLWE暗号文cdを準同型加算する第4準同型演算を行い、図8(b)で説明する新たなTLWE暗号文cc2’を得る。
上記のようにTLWE暗号文cdは、その平文が右半面にあれば平文として1/4を有し、左半面にあれば平文として-1/4を有する暗号文である。TLWE暗号文cdが、平文が右半面にあれば平文として-1/4を有し、左半面にあれば平文として1/4を有する暗号文となるように第1テストベクタ多項式を構成してもよく、その場合、TLWE暗号文cc1又はTLWE暗号文cc2からTLWE暗号文cdを準同型減算してTLWE暗号文cc1’、TLWE暗号文cc2’を求めてもよい。下記の場合についても同様である。
上記からu’’=u+u’=u-u’であり、TLWE暗号文cdの平文は、u’’+1/4=u+u’+1/4=u-u’+1/4を同時に満たす。
よって、TLWE暗号文cc1’は、
(a+b)/(4t)+1/(8t)+u+u’+(u+u’+1/4)-(0,1/4)
=(a+b)/(4t)+1/(8t)+u+u’+(u-u’+1/4)-(0,1/4)
=(a+b)/(4t)+1/(8t)+u+u+1/4-(0,1/4)
=(a+b)/(4t)+1/(8t)
から、平文として(a+b)/(4t)+1/(8t)を有する。u+uは、0又は1であり、円周群上の値としては何れも0である。
またTLWE暗号文cc2’は、
(a-b)/(4t)+1/(8t)+u-u’+(u-u’+1/4)-(0,1/4)
=(a-b)/(4t)+1/(8t)+u-u’+(u+u’+1/4)-(0,1/4)
=(a-b)/(4t)+1/(8t)+u+u+1/4-(0,1/4)
=(a-b)/(4t)+1/(8t)
から、平文として(a-b)/(4t)+1/(8t)を有する。u+uは、0又は1であり、円周群上の値としては何れも0である。
【0075】
図8は、平文の値域を縮小した暗号文を説明する図である。
図8(a)に示すように、TLWE暗号文cc1’は、円周群{T}の全面を使っていたTLWE暗号文caとTLWE暗号文cbの和に対する暗号文cc1の値域を円周群{T}の右半面に縮小した暗号文である。
平文整数として0~7を取り得る、TLWE暗号文caとTLWE暗号文cbとの加算結果には負の値が発生しない。従って、加算結果に対応するTLWE暗号文cc1は、平文整数として0~14の何れかをとり得る。
従って、図8(a)に示すように、TLWE暗号文cc1’は、円周群の右半分における0/(4t)~14/(4t)の領域(スライス)に0~14の平文整数が割り当てられる。15/(4t)の領域は使用されない。
TLWE暗号文cc1’を算出するにあたり、TLWE暗号文caとTLWE暗号文cbとの和を求め、暗号文の値域を右半面に縮小してスライスを半分の幅にしている。従って、TLWE暗号文cc1’に対応する円周群{T}における一つのスライス幅は、TLWE暗号文ca、TLWE暗号文cbの1/(2t)の半分の1/(4t)となっている。
図8(b)に示すように、TLWE暗号文cc2’は、円周群{T}の全面を使っていたTLWE暗号文caとTLWE暗号文cbの差に対する暗号文cc2の値域を円周群{T}の右半面に縮小した暗号文である。
平文整数として0~7を取り得る、TLWE暗号文caとTLWE暗号文cbとの減算結果には負の値が発生し得る。従って、減算結果に対応するTLWE暗号文cc2は、平文整数として-7~-1、0~7の何れかをとり得る。
従って、図8(b)に示すように、TLWE暗号文cc2’は、円周群の右半分における0/(4t)~15/(4t)の領域に-7~7の平文整数が割り当てられる。
TLWE暗号文cc2’を算出するにあたり、TLWE暗号文caとTLWE暗号文cbとの差を求め、暗号文の値域を右半面に縮小してスライスを半分の幅にしている。従って、TLWE暗号文cc2’に対応する円周群{T}における一つのスライス幅は、TLWE暗号文ca、TLWE暗号文cbの1/(2t)の半分の1/(4t)となっている。
ただし、右半面に縮小する際は、円周群の値域全体である0~1を右半面である0~0.5の範囲に並びを変えずに縮小するため、TLWE暗号文cc2の円周群上の値0~0.5(平文整数では0~7に対応する)がTLWE暗号文cc2’では0~0.25の範囲に縮小される。同様にTLWE暗号文cc2の円周群上の値0.5~1(平文整数では-8~-1に対応する)がTLWE暗号文cc2’では0.25~0.5の範囲に縮小される。そのため、TLWE暗号文cc2’では円周群の0から反時計回りに、0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1の順で並ぶこととなる。
上記の処理によって、TLWE暗号文cc1’、TLWE暗号文cc2’を算出することにより、(a+b)と(a-b)とに夫々対応する暗号文を算出したことになる。これに要したBlindRotateの回数は、第1テストベクタ多項式を用いてTLWE暗号文cdを求めたときの1回のみである。
【0076】
図2(B)において、暗号処理装置1は、(a+b)/4と(a-b)/4に対応する暗号文を夫々求める。
(a+b)の2乗を4で割った余りを切り捨てて商を算出し、(a-b)の2乗を4で割った余りを切り捨てて商を算出する。
暗号処理装置1(第2Bootstrapping部18)は、TLWE暗号文cc1’に対して、
第2テストベクタ多項式T(X)
を用いた第2Bootstrapping(Functional Bootstrapping)を行う。
第2テストベクタ多項式T(X)の係数の計算値をLUTに格納しておき、LUTに格納された計算値をBlindRotateによって参照する。
その結果、暗号処理装置1は、
を平文として有するTLWE暗号文cf1を得る。
【0077】
また暗号処理装置1(第3Bootstrapping部19)は、TLWE暗号文cc2’に対して、第3テストベクタ多項式T(X)
を用いた第3Bootstrapping(Functional Bootstrapping)を行う。
第3テストベクタ多項式T(X)の係数の計算値をLUTに格納しておき、LUTに格納された計算値をBlindRotateによって参照する。
その結果、暗号処理装置1は、
を平文として有するTLWE暗号文cf2を得る。
これによって、(a+b)/4に対応するTLWE暗号文cf1、(a-b)/4に対応するTLWE暗号文cf2が得られた。
上記において、和の場合と差の場合で並び順が異なることにより2種類のテストベクタ多項式T(X)、T(X)を用いている。
ただし、本質的には、テストベクタ多項式T(X)は、
の値(整数シンボル値)を分子として有する
(ただしtは分割数)
を係数としており、またテストベクタ多項式T(X)は、
の値(整数シンボル値)を分子として有する
を係数としている。
和と差の場合でLUTを夫々1回参照するためにBlindRotateを行うので、TLWE暗号文cf1、TLWE暗号文cf2を算出するために要したBlindRotateの回数は2回であった。
【0078】
図2(C)において、暗号処理装置1は、(a+b)/4-(a-b)/4、すなわち乗算結果に対応する暗号文を求める。
暗号処理装置1(第5演算部16)は、TLWE暗号文cf1からTLWE暗号文cf2を準同型減算し、TLWE暗号文cgを得る。
TLWE暗号文cf1からTLWE暗号文cf2を準同型減算することとは、平文同士で、
を演算することに対応する。
平文同士の演算では、
となる。
TLWE暗号文cgは、平文としてab/2tを有し、乗算結果が得られている。
暗号処理装置1は、3回のBlindRotateで乗算結果の暗号文を算出することが出来た。最初に説明した単純にFDBDを2回行う場合の4回と比較して、BlindRotateの回数を1回少なく出来ている。
【0079】
[第2実施例]
[第1実施例]では、TLWE暗号文cgとして得られた乗算結果は、平文の分母が2tであり、乗数、被乗数のTLWE暗号文ca、cbにおける平文の分母2tとは異なっている。このようなTLWE暗号文cgは、平文の分母が2tである他の暗号文との次以降の乗算に用いることが出来ない。
[第2実施例]では、暗号処理装置1は、乗算結果の暗号文を、下位ビットと上位ビットに分解する。より詳しくは、[第2実施例]の暗号処理装置1は、乗算結果の上位ビットの暗号文と下位ビットの暗号文とを夫々算出する。
なお、乗算結果の下位ビット、上位ビットとは、乗算結果を二進数で表したときの下位の所定数ビットと残りのビットである。これはtを2のべき乗にした場合の表現であり、異なる値の場合でも表現が異なるのみで本質的に意味が変わるものではない。
下位ビットは、乗算結果(ab)をtで割った剰余であり、上位ビットは乗算結果(ab)をtで割った商である。
【0080】
図9は、本実施形態の第2実施例に係る暗号処理装置の機能構成を説明する図である。
図10は、図9の機能構成に基づく演算プロセスを説明する図である。
図9図10に示す[第2実施例]では、第2算出部18、第3算出部19、第5演算部16に替えて、第8演算部43、第9演算部44、第4算出部51、第5算出部52を備える点で、図1図2の[第1実施例]と異なる。
【0081】
TLWE暗号文cc1’、TLWE暗号文cc2’を算出する(A)の処理は[第1実施例]と同じである。
(B)の処理において、暗号処理装置1は、(a+b)/4に対応するTLWE暗号文、(a-b)/4に対応するTLWE暗号文を得るために、LUTの内容を、下位ビット用のLUTと上位ビット用のLUTに予め分解する。
暗号処理装置1は、manyLUTの手法を用いて、1回のBlindRotateで下位ビット用のLUTと上位ビット用のLUTを参照する。これによりBlindRotateの回数を増やすことなく、乗算結果の上位ビットの暗号文と下位ビットの暗号文を算出することが出来る。なお、manyLUTとは、共通のTLWE暗号文を用いて、異なるテストベクタ多項式に対するBlindRotateを行う(異なるLUTを参照する)処理である。
暗号処理装置1は、(a+b)/4に関して、aとbの乗算結果の下位ビットに対応する
を第4テストベクタ多項式Tp1(X)における奇数次の項の係数とし、係数の計算値を予め奇数次(下位ビット)用のLUTに格納する。
は(a+b)/4をtで割った剰余であり(a+b)/4の下位ビットに対応する。
また暗号処理装置1は、(a+b)/4に関して、aとbの乗算結果の上位ビットに対応する
を第4テストベクタ多項式Tp1(X)における偶数次の項の係数とし、係数の計算値を予め偶数次(上位ビット)用のLUTに格納する。

は(a+b)/4をtで割った商であり(a+b)/4の上位ビットに対応する。
【0082】
また、暗号処理装置1は、(a-b)/4に関して、aとbの乗算結果の下位ビットに対応する
を第5テストベクタ多項式Tm1(X)における奇数次の項の係数とし、計算値を予め下位ビット用のLUTに格納する。
は(a-b)/4をtで割った剰余であり(a-b)/4の下位ビットに対応する。
また暗号処理装置1は、(a-b)/4に関して、aとbの乗算結果の上位ビットに対応する
を第5テストベクタ多項式Tm1(X)における偶数次の項の係数とし、計算値を予め上位ビット用のLUTに格納する。
は(a-b)/4をtで割った商であり、(a-b)/4の上位ビットに対応する。
これとは逆に、テストベクタ多項式Tp1(X)、テストベクタ多項式Tm1(X)における偶数次の係数を(a+b)/4、(a-b)/4の下位ビットに対応させ、奇数次の係数を上位ビットに対応させてもよい。ただし本実施例では、偶数次の係数を上位ビットに対応させ、奇数次の係数を下位ビットに対応させるものとして説明する。
【0083】
暗号処理装置1(第4Bootstrapping部51)は、TLWE暗号文cc1’に対して、上記テストベクタ多項式Tp1(X)を用いた第4Bootstrapping(Functional Bootstrapping)を行う。
このとき、暗号処理装置1は、manyLUTによって上位ビット(偶数次)用のLUTと下位ビット(奇数次)用のLUTを同時に参照することが出来る。
ここで、任意の整数の2乗の計算結果が常に非負であり且つtが正の値であることから、4やtによる除算、床関数、剰余算によって符号が変わらない。
従って、第4テストベクタ多項式Tp1(X)の全係数

は必ず非負であり、かつ分子がt未満であるため、円周群{T}の右半面しか使用していない。
暗号処理装置1は、TLWE暗号文cc1’に対するmanyLUTによる第4Bootstrappingの結果、偶数次側(上位ビット=商)のTLWE暗号文cPUと、奇数次側(下位ビット=剰余)のTLWE暗号文cPLと、を得る。
【0084】
暗号処理装置1(第5Bootstrapping部52)は、TLWE暗号文cc2’に対して、第5テストベクタ多項式Tm1(X)を用いた第5Bootstrapping(Functional Bootstrapping)を行う。このとき、暗号処理装置1は、manyLUTによって上位ビットのLUTと下位ビットのLUTを同時に参照することが出来る。
【0085】
ここで、任意の整数の2乗の計算結果が常に非負であり且つtが正の値であることから、4やtによる除算、床関数、剰余算によって符号が変わらない。
従って、テストベクタ多項式Tm1(X)の全係数

が必ず非負であり、かつtで割っているため分子は必ずt未満であるため、円周群{T}の右半面のみを使用している。
暗号処理装置1は、TLWE暗号文cc2’に対するmanyLUTを用いた第5Bootstrappingの結果、偶数次側(上位ビット=商)のTLWE暗号文cMUと、奇数次側(下位ビット=剰余)をTLWE暗号文cMLと、を得る。
【0086】
(C)に関して、テストベクタ多項式Tp1(X)とテストベクタ多項式Tm1(X)の係数を、(a+b)/4、(a-b)/4を夫々tで割った商と剰余とに分解していた。従って、(a+b)/4の暗号文は、[第2実施例]では、商のTLWE暗号文cPU、剰余のTLWE暗号文cPLに分解されている。
また(a-b)/4の暗号文は、[第2実施例]では、商のTLWE暗号文cMU、剰余のTLWE暗号文cMLに分解されている。
従って、TLWE暗号文cPUとTLWE暗号文cPLとに対して、t×cPU+cPLを計算すると、計算結果の平文は、[第1実施例]の暗号文cf1の平文
と一致する。
また、TLWE暗号文cMUとTLWE暗号文cMLとに対して、t×cMU+cMLを計算すると、計算結果の平文は、[第1実施例]の暗号文cf2の平文
と一致する。
【0087】
暗号処理装置1(第8演算部43)は、(a+b)/4の商に対応するTLWE暗号文cPUから、(a-b)/4の商に対応するTLWE暗号文cMUを準同型減算(cPU-cMU)し、乗算結果の上位ビットに対応するTLWE暗号文cを得る。
さらに、暗号処理装置1(第9演算部44)は、(a+b)/4の剰余に対応するTLWE暗号文cPLから(a-b)/4の剰余に対応するTLWE暗号文cMLを準同型減算(cPL-cML)し、乗算結果の下位ビットに対応するTLWE暗号文cを得る。
ここで、上位ビットと下位ビットを組み合わせた平文を計算すると、
φ(t×c+c)=φ(t×(cPU-cMU)+(cPL-cML))=φ((t×cPU+cPL)-(t×cMU+cML))=φ(t×cPU+cPL)-φ(t×cMU-cML)であるため、
であることが確認できる。
ここでφは復号関数であり、φ()で得られる値は、暗号文の平文である。
従って、TLWE暗号文cとTLWE暗号文cは、ab/2tの計算結果を上位ビットと下位ビットに分解した値をそれぞれ平文として有する。
【0088】
TLWE暗号文cとTLWE暗号文cは、乗算結果の上位ビット、下位ビットとなる暗号文であるが、平文の分母が2tであるため、平文の分母が2tである他の暗号文との次以降の乗算に用いることが出来る。
以上により平文aと平文bの乗算結果の上位ビットに対応する暗号文c、下位ビットに対応する暗号文cが夫々得られた。
【0089】
上述したように各LUTを参照した結果が、円周群の右半面のみであることから、その差であるTLWE暗号文cとTLWE暗号文cは何れも平文が円周群の全面からはみ出ることはなく、情報の欠損は発生していないことが確認される。
なお、TLWE暗号文cは負になる場合がある。例えばa=1、b=6、t=8の場合には、TLWE暗号文cuの平文整数が1、TLWE暗号文cの平文整数が-2という結果が得られる。1×6=6であるはずのところ、t×1-2=6であり、計算自体は正しくできていると言える。
ただしa=3、b=2、t=8の場合、TLWE暗号文cの平文整数が0、TLWE暗号文cの平文整数が6でt×0+6=6であることと比較すると、同じ乗算結果としての6という結果を表すために2種類以上の表現が得られる。
後続の計算次第ではこのままでも問題ない場合もあるが、用途次第では追加で正規化が必要になる。
正規化とは、上記における6という結果に対して常に同じ表現で計算結果が得られるようにすることである。
【0090】
正規化が必要な場合は以下の処理を追加する。まず、TLWE暗号文cが負か非負か、すなわちその平文が円周群{T}の右半面にあるか左半面にあるかを判定するため、全係数が1/(4t)であるフラットなテストベクタ多項式でTLWE暗号文cをBootstrappingし、TLWE暗号文csを得る。
TLWE暗号文csは、TLWE暗号文cの平文が円周群{T}の左半面にある場合は、平文として-1/(4t)を有し、右半面にある場合は、平文として1/(4t)を有する。
TLWE暗号文cs’=cs-(0,1/(4t))と、
TLWE暗号文cs’’=t×cs-(0,1/4)
を計算する。
TLWE暗号文cs’は整数シンボルとして、-1(TLWE暗号文cの平文が負の場合のみ)又は0であるため、暗号処理装置1は、TLWE暗号文cs’をTLWE暗号文cに準同型加算する。
TLWE暗号文cs’’は、TLWE暗号文cの平文が負の場合に、平文が-1/2、それ以外は0であるため、暗号処理装置1は、TLWE暗号文cs’’をTLWE暗号文cに準同型加算(又は準同型減算)する。
TLWE暗号文cの平文が1、TLWE暗号文cの平文が-2の場合、TLWE暗号文csの平文は-1/(4t)であり、平文として0を有する新たなTLWE暗号文c、平文として6を有する新たなTLWE暗号文cが得られる。
【0091】
[第3実施例]
[第1実施例]、[第2実施例]では、TLWE暗号文caとTLWE暗号文cbの係数を2で割った後で、TLWE暗号文ca’とTLWE暗号文cb’の加算及び減算を行っていた。
それに限らず、先にTLWE暗号文caとTLWE暗号文cbの加算及び減算を行った後で、2で割るようにしてもよい。
この場合、暗号処理装置1は、TLWE暗号文caとTLWE暗号文cbとの準同型加算(ca+cb)を行って新たなTLWE暗号文を得る。また暗号処理装置1は、TLWE暗号文caからTLWE暗号文cbを準同型減算(ca-cb)して新たなTLWE暗号文を得る。
暗号処理装置1は、上記準同型加算結果の暗号文の係数を2で割ってTLWE暗号文cc1を得る。また暗号処理装置1は、上記準同型減算結果の暗号文の係数を2で割ってTLWE暗号文cc2を得る。
TLWE暗号文cc1、cc2を用いたこれ以降の処理は、図2図10と同じである。
ただし、TLWE暗号文caとTLWE暗号文cbの和と差のLWE暗号文の夫々の要素は円周群の元ではなくなるため、情報が欠損しないようにする必要がある。
例えば、円周群上の0.6を平文として有するTLWE暗号文ca、円周群上の0.8を平文としてTLWE暗号文cbの乗算を行う。それにあたり、[第1実施例]、[第2実施例]の場合と同様にTLWE暗号文ca、TLWE暗号文cbの和を算出するとする。
そのとき、0.6+0.8と平文同士の和を取る場合は、円周群上の演算としては1.4つまり0.4となるのが正しい。しかし、和を2で割る際には1.4の方を2で割る必要がある。0.4を2で割ると0.2となり正しい値が得られないからである。
そのため、円周群を整数部0bit、小数部32bitの固定小数表現で表している場合、和や差は整数部1bitと小数部32bitで表現する必要がある。
これは変数のビット幅が固定されているCPUでの実装では不利となる。
最下位に誤差が載ることを許容して整数部1bitと小数部31bitとしてもよい。この場合、和や差の結果として得られた整数部1bitと小数部31bitの固定小数表現を、ビットの並びをそのままにして整数部0bit小数部32bitの固定小数として読むと、加算及び減算の後の2で割る演算が行われたかたちとなる。
【0092】
図11は、本実施形態の第1実施例に係る乗算処理を説明するフローチャートである。
暗号処理装置1(第6演算部41)は、ステップS101において、TLWE暗号文caの係数を2で割ってTLWE暗号文ca’を得る。
暗号処理装置1(第7演算部42)は、ステップS102において、TLWE暗号文cbの係数を2で割って新たなTLWE暗号文cb’を得る。
ステップS101、ステップS102の処理は順不同である。
暗号処理装置1(第1演算部12)は、ステップS103において、TLWE暗号文ca’とTLWE暗号文cb’の準同型加算を行い、新たなTLWE暗号文cc1を得る。
暗号処理装置1(第2演算部13)は、ステップS104において、TLWE暗号文ca’からTLWE暗号文cb’を準同型減算し、新たなTLWE暗号文cc2を得る。
ステップS103、ステップS104の処理は順不同である。
【0093】
[第3実施例]に関連して、ステップS103、S104に対応する処理を行ったあとで、ステップS101、S102に対応する処理を行ってもよい。
すなわち、TLWE暗号文caとTLWE暗号文cbとの準同型加算を行い、その演算結果の暗号文の係数を2で割ってTLWE暗号文cc1を得てもよい。
TLWE暗号文caからのTLWE暗号文cbの準同型減算を行い、その演算結果の暗号文の係数を2で割ってTLWE暗号文cc2を得てもよい。
【0094】
暗号処理装置1(第1Bootstrapping部17)は、ステップS105において、TLWE暗号文cc1に対して係数が全て1/4のフラットな第1テストベクタ多項式T1(X)を用いて第1Bootstrappingを行い、新たなTLWE暗号文cdを得る。
暗号処理装置1(第3演算部14)は、ステップS106において、TLWE暗号文cc1とTLWE暗号文cdの準同型加算を行い、新たな暗号文cc1’を得る。
暗号処理装置1(第4演算部15)は、ステップS107において、TLWE暗号文cc2とTLWE暗号文cdの準同型加算を行い、新たな暗号文cc2’を得る。
ステップS106、ステップS107の処理は順不同である。
暗号処理装置1(第2Bootstrapping部18)は、ステップS108において、TLWE暗号文cc1’に対して、第2テストベクタ多項式T(X)を用いた第2Bootstrappingを行い、新たなTLWE暗号文cf1を得る。
暗号処理装置1(第3Bootstrapping部19)は、ステップS109において、TLWE暗号文cc2’に対して、第3テストベクタ多項式T(X)を用いた第3Bootstrappingを行い、新たなTLWE暗号文cf2を得る。
ステップS108、ステップS109の処理は順不同である。
暗号処理装置1(第5演算部16)は、ステップS110において、TLWE暗号文cf1からTLWE暗号文cf2を準同型減算して、乗算結果に対応する新たなTLWE暗号文cgを得る。このTLWE暗号文cgは、上位ビット、下位ビットを全て含む。
以上の処理によってInteger-wise型のTLWE暗号文同士の乗算結果を得ることが出来た。
【0095】
図12は、本実施形態の第2実施例に係る乗算処理を説明するフローチャートである。
ステップS201乃至207までは、図11のステップS101乃至107と同じである。
[第3実施例]に関連して、ステップS203、S204に対応する処理を行ったあとで、ステップS201、S202に対応する処理を行ってもよい。
すなわち、TLWE暗号文caとTLWE暗号文cbとの準同型加算を行い、その演算結果の暗号文の係数を2で割ってTLWE暗号文cc1を得てもよい。
TLWE暗号文caからのTLWE暗号文cbの準同型減算を行い、その演算結果の暗号文の係数を2で割ってTLWE暗号文cc2を得てもよい。
暗号処理装置1(第4Bootstrapping部51)は、ステップS208において、TLWE暗号文cc1’に対して、第4テストベクタ多項式Tp1(X)を用いた第4Bootstrappingを行い、新たなTLWE暗号文cPU、cPLを得る。
暗号処理装置1(第5Bootstrapping部52)は、ステップS209において、TLWE暗号文cc2’に対して、第5テストベクタ多項式T(X)を用いた第5Bootstrappingを行い、新たなTLWE暗号文cMU、cMLを得る。
ステップS208、ステップS209の処理は順不同である。
暗号処理装置1(第8演算部43)は、ステップS210において、TLWE暗号文cPUからTLWE暗号文cMUを準同型減算し、新たなTLWE暗号文cを得る。TLWE暗号文cは、乗算結果の上位ビットに対応する暗号文である。
暗号処理装置1(第9演算部44)は、ステップS211において、TLWE暗号文cPLからTLWE暗号文cMLを準同型減算し、新たなTLWE暗号文cを得る。TLWE暗号文cは、乗算結果の下位ビットに対応する暗号文である。
以上の処理によって、Integer-wise型のTLWE暗号文同士の乗算結果の上位ビットと下位ビットを得ることが出来た。
【0096】
[第4実施例]
図2(A)に示したように、[第1実施例]では、TLWE暗号文caとTLWE暗号文cbの係数を夫々2で割ってTLWE暗号文ca’とTLWE暗号文cb’を算出し、これらの暗号文同士の準同型加算、準同型減算を行うことにより、TLWE暗号文cc1’とTLWE暗号文cc2’を算出していた。
それに限らず、図2(A)の場合と同じ手順でTLWE暗号文cc1’を算出したあと、TLWE暗号文cc1’からTLWE暗号文cbを準同型減算することでTLWE暗号文cc2’を算出することが出来る。
TLWE暗号文cc1’の平文が(a+b)/(4t)+1/(8t)であり、TLWE暗号文cc2’の平文が(a-b)/(4t)+1/(8t)であることから、
(a+b)/(4t)+1/(8t)-{(a-b)/(4t)+1/(8t)}
=a/(4t)+b/(4t)+1/(8t)-{a/(4t)-b/(4t)+1/(8t)}
=a/(4t)+b/(4t)+1/(8t)-a/(4t)+b/(4t)-1/(8t)=2b/(4t)=b/(2t)
から、オフセットの違いを無視するとTLWE暗号文cc1’-TLWE暗号文cc2’=TLWE暗号文cbが成り立つ。
従って、TLWE暗号文cc1’-TLWE暗号文cbからTLWE暗号文cc2’を求めることが出来る。
具体的には、暗号処理装置1は、cc1’-cb+(0,1/(4t))を計算する準同型演算を行うことでTLWE暗号文cc2’を算出する。
この場合、図2(A)におけるTLWE暗号文ca’からTLWE暗号文cb’を準同型減算する第2演算部13による第2準同型演算を行う必要がない。結果的に、TLWE暗号文cc2とTLWE暗号文cdを準同型加算する第4演算部15による第4準同型演算を行わない。
【0097】
以下に詳しく説明する。
上記のように、TLWE暗号文cc1’の平文は、(a+b)/(4t)+1/(8t)であった。またTLWE暗号文cbの平文は、b/(2t)+1/(4t)であった。
従って、cc1’-cb+(0,1/(4t))の平文は、
以下の計算、
(a+b)/(4t)+1/(8t)-{b/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-{b/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-2b/(4t)-1/(4t)+1/(4t)
=a/(4t)+b/(4t)-2b/(4t)-1/(4t)+1/(4t)+1/(8t)
=a/(4t)-b/(4t)+1/(8t)
=(a-b)/(4t)+1/(8t)
から、(a-b)/(4t)+1/(8t)である。
そして、[第1実施例]で説明したTLWE暗号文cc2’の平文は(a-b)/(4t)+1/(8t)であった。
以上から、cc1’-cb+(0,1/(4t))によってTLWE暗号文cc2’と同一の平文を有する暗号文が得られることが分かった。
【0098】
また{(a+b)/(4t)+1/(8t)}+{(a-b)/(4t)+1/(8t)}
=a/(4t)+b/(4t)+1/(8t)+a/(4t)-b/(4t)+1/(8t)
=2a/(4t)+2/(8t)=a/(2t)+1/(4t)
から、オフセットの違いを無視するとTLWE暗号文cc1’+TLWE暗号文cc2’=TLWE暗号文caが成り立つ。
従って、TLWE暗号文cc1’からTLWE暗号文caを準同型減算することで、TLWE暗号文cc2’を算出することが出来る。
具体的には、暗号処理装置1は、cc1’-ca+(0,1/(4t))を計算する準同型演算を行うことでTLWE暗号文cc2’を算出する。
【0099】
上記のように、TLWE暗号文cc1’の平文は、(a+b)/(4t)+1/(8t)であった。またTLWE暗号文caの平文は、a/(2t)+1/(4t)であった。
従って、cc1’-ca+(0,1/(4t))の平文は、
以下の計算、
(a+b)/(4t)+1/(8t)-{a/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-{a/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-2a/(4t)-1/(4t)+1/(4t)
=a/(4t)+b/(4t)-2a/(4t)-1/(4t)+1/(4t)+1/(8t)
=-a/(4t)+b/(4t)+1/(8t)
=(-a+b)/(4t)+1/(8t)
から、(-a+b)/(4t)+1/(8t)である。
そして、[第1実施例]で説明したTLWE暗号文cc2’の平文は(a-b)/(4t)+1/(8t)であった。以上から、cc1’-ca+(0,1/(4t))によって、平文に対応する整数シンボルの符号がTLWE暗号文cc2’から反転したTLWE暗号文cc2’’が得られる。TLWE暗号文cc2’’の扱いについては後述する。
あるいは、TLWE暗号文caからTLWE暗号文cc1’を準同型減算(ca-cc1’)することで、TLWE暗号文cc2’’を算出することなくTLWE暗号文cc2’を算出することが出来る。この場合は、ca-cc1’に(0,1/(4t))などのオフセットを付与せずともよい。
【0100】
図13は、本実施形態の第4実施例に係る暗号処理装置の機能構成を説明する図である。
図14は、図13の機能構成に基づく演算プロセスを説明する図である。
図13図14に示す[第4実施例]は、第2演算部13、第4演算部15を備えず、第10演算部45を備える点で、図1図2の[第1実施例]と異なる。
[第4実施例]では、平文aと平文bの和(a+b)と差(a-b)に夫々対応する暗号文を図14に示すように算出する。
図14において、暗号処理装置1は、TLWE暗号文caを第6演算部41に入力し、TLWE暗号文caの係数を2で割った新たなTLWE暗号文ca’を得る。
また暗号処理装置1は、TLWE暗号文cbを第7演算部42に入力し、TLWE暗号文cbの係数を2で割った新たなTLWE暗号文cb’を得る。
暗号処理装置1は、TLWE暗号文ca’とTLWE暗号文cb’を第1演算部12に入力し、TLWE暗号文ca’とTLWE暗号文cb’との準同型加算(第1準同型演算)を行って新たなTLWE暗号文cc1を得る。
暗号処理装置1は、TLWE暗号文cc1を第1Bootstrapping部17に入力し、全ての係数が1/4のフラットなテストベクタ多項式T1(X)を用いてTLWE暗号文cc1に対するGate Bootstrappingを行い、新たなTLWE暗号文cdを得る。
【0101】
暗号処理装置1は、TLWE暗号文cc1とTLWE暗号文cdを第3演算部14に入力し、TLWE暗号文cc1とTLWE暗号文cdとの準同型加算(第3準同型演算)を行って新たなTLWE暗号文cc1’を得る。
【0102】
TLWE暗号文cdが、平文が右半面にあれば平文として-1/4を有し、左半面にあれば平文として1/4を有する暗号文となるように第1テストベクタ多項式を構成し、TLWE暗号文cc1からTLWE暗号文cdを準同型減算してTLWE暗号文cc1’を求めてもよい。
暗号処理装置1は、TLWE暗号文cc1’とTLWE暗号文cbを第10演算部45に入力し、TLWE暗号文cc1’とTLWE暗号文cbとの準同型減算(第10準同型演算)を行って新たなTLWE暗号文cc2’を得る。
この第10準同型演算は、上記したcc1’-cb+(0,1/(4t))を計算する準同型演算である。
あるいは、暗号処理装置1は、TLWE暗号文cc1’とTLWE暗号文caを第10演算部45に入力し、第10準同型演算として、TLWE暗号文cc1’とTLWE暗号文caとの準同型減算を行って新たなTLWE暗号文cc2’を得る。この場合、第10準同型演算は、上記したcc1’-ca+(0,1/(4t))を計算する準同型演算である。
TLWE暗号文cc1’とTLWE暗号文cc2’を算出した以降の処理は図2と同じである。
【0103】
[第5実施例]
[第4実施例]ではTLWE暗号文cc1’を算出し、算出したTLWE暗号文cc1’からTLWE暗号文cb又はTLWE暗号文caを準同型減算することで、TLWE暗号文cc2’を算出した。
それに対して、図2(A)の場合と同じ手順でTLWE暗号文cc2’を算出したあと、TLWE暗号文cc2’に対してTLWE暗号文cbを準同型加算することでTLWE暗号文cc1’を算出することが出来る。これは、[第4実施例]で記載したように、TLWE暗号文cc1’-TLWE暗号文cc2’=TLWE暗号文cbが成り立つことによる。TLWE暗号文cc2’+TLWE暗号文cbからTLWE暗号文cc1’を求めることが出来る。
具体的には、暗号処理装置1は、cc2’+cb-(0,1/(4t))を計算する準同型演算を行うことでTLWE暗号文cc1’を算出する。
【0104】
上記のように、TLWE暗号文cc2’の平文は、(a-b)/(4t)+1/(8t)であった。またTLWE暗号文cbの平文は、b/(2t)+1/(4t)であった。
従って、cc2’+cb-(0,1/(4t))の平文は、
以下の計算、
(a-b)/(4t)+1/(8t)+{b/(2t)+1/(4t)}-1/(4t)
=a/(4t)-b/(4t)+1/(8t)+{b/(2t)+1/(4t)}-1/(4t)
=a/(4t)-b/(4t)+1/(8t)+2b/(4t)+1/(4t)-1/(4t)
=a/(4t)+b/(4t)+1/(8t)
から、(a+b)/(4t)+1/(8t)である。
そして、[第1実施例]で説明したTLWE暗号文cc1’の平文は(a+b)/(4t)+1/(8t)であった。
以上から、cc2’+cb-(0,1/(4t))によってTLWE暗号文cc1’と同一の平文を有する暗号文が得られることが分かった。
【0105】
また、TLWE暗号文cc2’からTLWE暗号文caを準同型減算することでTLWE暗号文cc1’を算出することが出来る。
これは、[第4実施例]で記載したように、TLWE暗号文cc1’+TLWE暗号文cc2’=TLWE暗号文caが成り立つことによる。TLWE暗号文cc2’-TLWE暗号文caからTLWE暗号文cc1’を求めることが出来る。
具体的には、暗号処理装置1は、cc2’-ca+(0,1/(4t))を計算する準同型演算を行うことでTLWE暗号文cc1’を算出する。
上記のように、TLWE暗号文cc2’の平文は、(a-b)/(4t)+1/(8t)であった。またTLWE暗号文caの平文は、a/(2t)+1/(4t)であった。
従って、cc2’-ca+(0,1/(4t))の平文は、
以下の計算、
(a+b)/(4t)+1/(8t)-{a/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-{a/(2t)+1/(4t)}+1/(4t)
=a/(4t)+b/(4t)+1/(8t)-2a/(4t)-1/(4t)+1/(4t)
=a/(4t)+b/(4t)-2a/(4t)-1/(4t)+1/(4t)+1/(8t)
=-a/(4t)+b/(4t)+1/(8t)
=(-a+b)/(4t)+1/(8t)
から、(-a+b)/(4t)+1/(8t)である。
そして、TLWE暗号文cc2’の平文は(a-b)/(4t)+1/(8t)であった。以上から、cc2’-ca+(0,1/(4t))によって、平文に対応する整数シンボルの符号が反転したTLWE暗号文cc1’’が得られる。TLWE暗号文cc1’’の扱いについては後述する。
あるいは、TLWE暗号文caからTLWE暗号文cc2’を準同型減算(ca-cc2’)することで、TLWE暗号文cc1’’を算出することなく、TLWE暗号文cc1’を算出することが出来る。この場合は、ca-cc2’に(0,1/(4t))などのオフセットを付与せずともよい。
【0106】
図15は本実施形態の第5実施例に係る暗号処理装置の機能構成を説明する図である。
図16は、図15の機能構成に基づく演算プロセスを説明する図である。
図15図16に示す[第5実施例]は、第1演算部12、第3演算部14、第10演算部45を備えず、第2演算部13、第4演算部15、第11演算部46を備える点で、図13図14の[第4実施例]と異なる。
[第5実施例]では、平文aと平文bの和(a+b)と差(a-b)に夫々対応する暗号文を図16に示すように算出する。
図16において、暗号処理装置1は、TLWE暗号文caを第6演算部41に入力し、TLWE暗号文caの係数を2で割った新たなTLWE暗号文ca’を得る。
また暗号処理装置1は、TLWE暗号文cbを第7演算部42に入力し、TLWE暗号文cbの係数を2で割った新たなTLWE暗号文cb’を得る。
暗号処理装置1は、TLWE暗号文ca’とTLWE暗号文cb’を第2演算部13に入力し、TLWE暗号文ca’とTLWE暗号文cb’との準同型減算(第2準同型演算)を行って新たなTLWE暗号文cc2を得る。
暗号処理装置1は、TLWE暗号文cc2を第1Bootstrapping部17に入力し、全ての係数が1/4のフラットなテストベクタ多項式T1(X)を用いてTLWE暗号文cc2に対するGate Bootstrappingを行い、新たなTLWE暗号文cdを得る。
【0107】
暗号処理装置1は、TLWE暗号文cc2とTLWE暗号文cdを第4演算部15に入力し、TLWE暗号文cc2とTLWE暗号文cdとの準同型加算(第4準同型演算)を行って新たなTLWE暗号文cc2’を得る。
TLWE暗号文cdが、平文が右半面にあれば平文として-1/4を有し、左半面にあれば平文として1/4を有する暗号文となるように第1テストベクタ多項式を構成し、TLWE暗号文cc2からTLWE暗号文cdを準同型減算してTLWE暗号文cc2’を求めてもよい。
暗号処理装置1は、TLWE暗号文cc2’とTLWE暗号文cbを第11演算部46に入力し、TLWE暗号文cc2’とTLWE暗号文cbとの準同型加算(第11準同型演算)を行って新たなTLWE暗号文cc1’を得る。
この第11準同型演算は、上記したcc2’+cb-(0,1/(4t))を計算する準同型演算である。
あるいは、暗号処理装置1は、TLWE暗号文cc2’とTLWE暗号文caを第10演算部45に入力し、第11準同型演算として、TLWE暗号文cc2’とTLWE暗号文caとの準同型減算を行って新たなTLWE暗号文cc1’を得る。この場合、第11準同型演算は、上記したcc2’-ca+(0,1/(4t))を計算する準同型演算である。
TLWE暗号文cc1’とTLWE暗号文cc2’を算出した以降の処理は図2図10と同じである。
【0108】
また、図9図10で説明した[第2実施例]の場合に関しても、平文aと平文bの和(a+b)と差(a-b)に夫々対応する暗号文を算出する図10(A)の処理で[第4実施例]、[第5実施例]の方法を行って、TLWE暗号文cc1’、TLWE暗号文cc2’を算出することが出来る。
この場合、暗号処理装置1は、図13の第2算出部18、第3算出部19に替えて、図9の第8演算部43、第9演算部44、第4算出部51、第5算出部52を備えた機能構成を有する。
【0109】
また[第3実施例]では、[第1実施例]、[第2実施例]のTLWE暗号文cc1、cc2を得るにあたり、TLWE暗号文caとTLWE暗号文cbの準同型加算と準同型減算を行い、得られた暗号文の係数を夫々2で割るようにしていた。
[第4実施例]に関しても、TLWE暗号文cc1を得るにあたり、TLWE暗号文caとTLWE暗号文cbの準同型加算を行い、得られた暗号文の係数を2で割ってもよい。
この場合、暗号処理装置1は、TLWE暗号文caとTLWE暗号文cbの準同型加算を行って新たなTLWE暗号文を算出し、得られた暗号文の係数を2で割ってTLWE暗号文cc1を得る。TLWE暗号文cc1、TLWE暗号文cc2を用いたこれ以降の処理は図2図10と同じである。
[第5実施例]に関しても、TLWE暗号文cc2を得るにあたり、TLWE暗号文caとTLWE暗号文cbの準同型減算を行い、得られた暗号文の係数を2で割ってもよい。
この場合、暗号処理装置1は、TLWE暗号文caとTLWE暗号文cbの準同型減算を行って新たなTLWE暗号文を算出し、得られた暗号文の係数を2で割ってTLWE暗号文cc2を得る。TLWE暗号文cc1、TLWE暗号文cc2を用いたこれ以降の処理は図2図10と同じである。
【0110】
なお、上述のように、[第4実施例]で得られるTLWE暗号文cc2’’と、[第5実施例]で得られるTLWE暗号文cc1’’は整数シンボルとしてはTLWE暗号文cc2’とTLWE暗号文cc1’から正負(符号)が反転している。
図2(B)、図10(B)で、TLWE暗号文cc1’TLWE暗号文cc2’を用いて行う演算は2乗を行う演算であり、x=(-x)であることから理論的にはTLWE暗号文cc2’’、TLWE暗号文cc1’’もそのまま利用可能である。しかし、例えば[第5実施例]のTLWE暗号文cc1’の2乗を行うLUTの値域を超えてしまう。従って、[第1実施例]の第2BootstrappingのBlindRotateに用いるテストベクタ多項式Tp(X)、あるいは[第2実施例]の第4BootstrappingのBlindRotateに用いるテストベクタ多項式Tp1(X)を変更する必要がある。
従って、図2(B)、図10(B)の2乗の計算の前に、[第4実施例]で算出したTLWE暗号文cc2’’[第5実施例]で算出したTLWE暗号文cc1’’の符号を再度反転させることが望ましい。
【0111】
以下に、TLWE暗号文cc2’’、TLWE暗号文cc1’’の符号を再び反転させてTLWE暗号文cc2’TLWE暗号文cc1’を得る方法を説明する。
オフセットの影響があるため、TLWE暗号文cc2’’、TLWE暗号文cc1’’は、整数シンボルとしてはTLWE暗号文cc2’、TLWE暗号文cc1’から夫々正負が反転していても円周群上では完全に反転しているのではない。
従って、まずはTLWE暗号文cc2’’、TLWE暗号文cc1’’からオフセットである(0,1/(8t))を減算してオフセットを除去し、暗号文の全係数の符号を反転してから(0,1/(8t))を加算してオフセットを付与する。
その結果、TLWE暗号文cc2’’、TLWE暗号文cc1’’の整数シンボルの符号を反転させたTLWE暗号文cc2’TLWE暗号文cc1’が得られる。
これにより、図2(B)、図10(B)と同じテストベクタ多項式Tp(X)、テストベクタ多項式Tp1(X)を用いたBootstrappingを行い、TLWE暗号文cc2’とTLWE暗号文cc1’の2乗を算出することが出来る。
【0112】
TLWE暗号文cc2’’、TLWE暗号文cc1’’からTLWE暗号文cc2’、TLWE暗号文cc1’を得る計算は以下のように表される。
TLWE暗号文cc2’’、TLWE暗号文cc1’’をTLWE暗号文ctとする。得られるべきTLWE暗号文cc2’、TLWE暗号文cc1’をTLWE暗号文ct’とする。
c1=ct-(0,1/(8t))を行い、TLWE暗号文ctのオフセットを外す。
c2=-c1を行い、オフセットを除去したTLWE暗号文ctの円周群上での符号を反転させる。
ct’=c2+(0,1/(8t))を行って再度オフセットを付与し、TLWE暗号文ct’を得る。
上記の演算は、ct’=-(ct-(0,1/(8t))+(0,1/(8t))とまとめられ、さらに、ct’=-ct+(0,1/(4t))と整理出来る。
[第4実施例]の第10準同型演算において、-{cc1’-ca+(0,1/(4t))}+(0,1/(4t))とすることで、TLWE暗号文cc2’’を算出することなくTLWE暗号文cc2’を算出することが出来る。
すなわち、
-{cc1’-ca+(0,1/(4t))}+(0,1/(4t))
=-cc1’+ca-(0,1/(4t))+(0,1/(4t)
=-cc1’+ca
=-{(a+b)/(4t)+1/(8t)}+a/(2t)+1/(4t)
=-(a+b)/(4t)-1/(8t)+a/(2t)+1/(4t)
=-a/(4t)-b/(4t)-1/(8t)+a/(2t)+1/(4t)
=-a/(4t)+a/(2t)-b/(4t)-1/(8t)+1/(4t)
=-a/(4t)+2a/(4t)-b/(4t)-1/(8t)+2/(8t)
=a/(4t)-b/(4t)+1/(8t)
=(a-b)/(4t)+1/(8t)
と計算できる。TLWE暗号文cc2’の平文は(a-b)/(4t)+1/(8t)であり、上記の計算によって、TLWE暗号文cc2’’の符号を反転させてTLWE暗号文cc2’を得られることが分かる。
【0113】
また、[第5実施例]の第11準同型演算において、-{cc2’-ca+(0,1/(4t))}+(0,1/(4t))とすることで、TLWE暗号文cc1’’を算出することなくTLWE暗号文cc1’を算出することが出来る。
すなわち、
-{cc2’-ca+(0,1/(4t))}+(0,1/(4t))
=-cc2’+ca-(0,1/(4t))+(0,1/(4t)
=-cc2’+ca
=-{(a-b)/(4t)+1/(8t)}+a/(2t)+1/(4t)
=-(a-b)/(4t)-1/(8t)+a/(2t)+1/(4t)
=-a/(4t)+b/(4t)-1/(8t)+a/(2t)+1/(4t)
=-a/(4t)+a/(2t)+b/(4t)-1/(8t)+1/(4t)
=-a/(4t)+2a/(4t)+b/(4t)-1/(8t)+2/(8t)
=a/(4t)+b/(4t)+1/(8t)=(a+b)/(4t)+1/(8t)
と計算できる。TLWE暗号文cc1’の平文は、(a+b)/(4t)+1/(8t)であり、上記の計算によって、TLWE暗号文cc1’’の符号を反転させてTLWE暗号文cc1’を得られることが分かる。
[第4実施例]で算出したTLWE暗号文cc1’、[第5実施例]で算出したTLWE暗号文cc2’も、ct’=-ct+(0,1/(4t))の式を用いることで、必要に応じて(b-a)/(4t)+1/(8t)、-(a+b)/(4t)+1/(8t)と符号を反転させることが出来る。
【0114】
乗算は可換であり、a×b=b×aである。従って、上記に説明した[第1実施例]、[第2実施例]、[第3実施例]、[第4実施例]、[第5実施例]において、TLWE暗号文caとTLWE暗号文cbの平文を互いに入れ替えても、乗算結果としては同じ平文を有する暗号文が得られる。
【0115】
図17は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、特に第1Bootstrappingなど、図17(a)に示すように、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図17(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図17(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、Public Key Switchingの結果、LEVEL0のTLWE暗号文が出力される。
それに対して図17(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にPublic Key Switchingを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0116】
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の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0117】
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、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を行うことで、所要時間の増加を避けることが出来る。
【0118】
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域を2t個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値の上限をより大きくできる。円周群を分割する個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の分割領域の値として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0119】
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
[応用例]
暗号処理装置1が行う処理は、以下のように応用することが出来る。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベースから、特定のフィールドが一定の範囲内のものを集約したい場合(例えば、30~39歳の平均年収を求めたい場合など)を考える。
このとき、暗号処理装置1は暗号化されたデータベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
暗号化されたデータベースではインデックスを作成することができないため、データベース全体に対する比較と集約が必要である。
【0120】
暗号処理装置1は、第1演算部12、第2演算部13、第3演算部14、第4演算部15、第5演算部16、第6演算部41、第7演算部42、第1Bootstrapping部17、第2Bootstrapping部18、第3Bootstrapping部19の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
また、第1演算部12、第2演算部13、第3演算部14、第4演算部15、第6演算部41、第7演算部42、第8演算部43、第9演算部44、第1Bootstrapping部17、第4Bootstrapping部51、第5Bootstrapping部52の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
また、第1演算部12、第3演算部14、第5演算部16、第6演算部41、第7演算部42、第10演算部45、第1Bootstrapping部17、第2Bootstrapping部18、第3Bootstrapping部19の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
また、第1演算部12、第3演算部14、第6演算部41、第7演算部42、第8演算部43、第9演算部44、第10演算部45、第1Bootstrapping部17、第4Bootstrapping部51、第5Bootstrapping部52の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
また第2演算部13、第4演算部15、第5演算部16、第6演算部41、第7演算部42、第11演算部46、第1Bootstrapping部17、第2Bootstrapping部18、第3Bootstrapping部19の機能によって暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
また第2演算部13、第4演算部15、第6演算部41、第7演算部42、第8演算部43、第9演算部44、第11演算部46、第1Bootstrapping部17、第4Bootstrapping部51、第5Bootstrapping部52の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
比較演算は、レコードとクエリの暗号文同士で減算を行うことであり、減算結果の正負が比較演算の等価となる。
暗号処理装置1はさらに、比較演算でクエリと一致したレコードに対する集約演算を行うことが出来る。
集約演算において、暗号処理装置1は、比較演算でクエリと一致したレコードを加算して合計を演算し、さらに除算を用いて平均値を求める。
このように、暗号化されたデータベースに対するクエリの処理には、暗号文を構成する整数同士の加算、減算、乗算、除算などの四則演算、や比較(比較は減算結果の正負と等価である)を行う必要がある。
特に、重み付け平均値を求める場合には、レコードと重み付け係数との乗算などが必要となる。そして、Bit-wise型の暗号文を用いる場合、処理には全加算器演算が多用されることが考えられる。そして、扱う整数のビット長が大きくなれば必要となる全加算器の数も増加する。四則演算とは、入力された暗号文を用いた順列を二進数で表記した際の各ビットの暗号文とみなした暗号化された数値同士に対して準同型な四則演算である。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、クエリの実行時間を著しく低減することが可能となる。
【0121】
このようなデータベースの集約に限らず、整数同士の四則演算や比較は、暗号文を用いた様々なデータ処理で多用される。
他の例として、ファジー認証やファジー検索が挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、上記の暗号化されたデータベースにおける比較演算・集約演算と同様に、暗号化されたデータベースとクエリとの比較を行い、その際には、準同型暗号により暗号化されたデータで比較演算を行う必要がある。提示された生体認証データと登録された生体認証データの一致度として内積を求める場合に、乗算を行う必要がある。
【0122】
またファジー認証やファジー検索において比較を行う際、ユークリッド距離が用いられることが多い。ユークリッド距離を演算する際には2乗の演算が必要となる。Bit-wise型の準同型暗号では、乗算を行う際にデータのビット長に対して、O(N)の全加算器を演算しなければならない。また単純な減算による比較演算でも、O(N)の全加算器を演算する必要がある。本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、ファジー認証やファジー検索に要する処理時間を大幅に低減することが出来る。
【0123】
図18は、コンピュータ装置の一実施例を示すブロック図である。
図18を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0124】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、図1、9、13、15における制御部10として機能する。
【0125】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、図1、9、13、15における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、図1、9、13、15における記憶部20として機能する。
【0126】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
第1実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第5演算処理、第6演算処理、第7演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
第2実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第6演算処理、第7演算処理、第8演算処理、第9演算処理、第1Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
【0127】
第4実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第3演算処理、第5演算処理、第6演算処理、第7演算処理、第10演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
又は、第4実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第3演算処理、第6演算処理、第7演算処理、第8演算処理、第9演算処理、第10演算処理、第1Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
【0128】
第5実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第2演算処理、第4演算処理、第5演算処理、第6演算処理、第7演算処理、第11演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
又は、第5実施例の暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第2演算処理、第4演算処理、第6演算処理、第7演算処理、第8演算処理、第9演算処理、第11演算処理、第1Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、出力処理のいずれか1以上を含む処理を実行する。
なおプログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0129】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0130】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、図1、9、13、15において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、図1、9、13、15において、入力部26として機能する。
【0131】
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0132】
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