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

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

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

特開2024-13184暗号処理装置、暗号処理方法、暗号処理プログラム
<>
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図1
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図2
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図3
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図4
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図5
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図6
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図7
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図8
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図9
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図10
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図11
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図12
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図13
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図14
  • 特開-暗号処理装置、暗号処理方法、暗号処理プログラム 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024013184
(43)【公開日】2024-01-31
(54)【発明の名称】暗号処理装置、暗号処理方法、暗号処理プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240124BHJP
【FI】
G09C1/00 620Z
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2023002303
(22)【出願日】2023-01-11
(31)【優先権主張番号】P 2022114761
(32)【優先日】2022-07-19
(33)【優先権主張国・地域又は機関】JP
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
(57)【要約】
【課題】Integer-wise型TFHEの四則演算を実現する。
【解決手段】暗号文を処理する暗号処理装置であって、暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、乗数である第1暗号文cbに対して所定の多項式を用いることにより新たな第1暗号文cb’を算出し、新たな第1暗号文cb’よりも次数が高い高次暗号文を生成ccし、高次暗号文ccと、被乗数である第2暗号文caと、に対して所定の多項式を用いることにより、第1暗号文と第2暗号文との乗算結果に対応する第3暗号文cc’を得る。
【選択図】図2
【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と被乗数である第2暗号文とに基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と前記第2暗号文との平文同士の乗算結果に対応する暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項2】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と、被乗数である第2暗号文と、前記第1暗号文と前記第2暗号文の乗算結果に加算するための第5暗号文と、に基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と、前記第2暗号文と、前記第5暗号文と、の平文同士の融合積和演算の結果に対応する暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項3】
請求項1に記載の暗号処理装置において、
被乗数である前記第2暗号文に前記第3暗号文を用いることにより算出した暗号文に対して第1多項式を用いることにより、前記第4暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項4】
請求項2に記載の暗号処理装置において、
被乗数である前記第2暗号文に前記第3暗号文を用いることにより算出した暗号文に対して第1多項式を用いることにより算出した暗号文に前記第5暗号文を準同型加算することにより、前記第4暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項5】
請求項1又は2に記載の暗号処理装置において、
前記第1階段状多項式の係数に1/2のオフセットを加えたことを特徴とする暗号処理装置。
【請求項6】
請求項5に記載の暗号処理装置において、
前記第1暗号文に対して、係数に1/2のオフセットを加えた第2階段状多項式を夫々用いることにより、前記第1暗号文から負の平文の並び順が反転した新たな第1暗号文を算出し、
前記新たな第1暗号文に基づいて、前記第1階段状多項式を平文に持つ前記第3暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項7】
請求項1に記載の暗号処理装置において、
所定数倍した前記第4暗号文に対して所定の多項式を用いることにより算出した新たな暗号文と前記第4暗号文とを準同型演算した結果に基づいて第6暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項8】
請求項4に記載の暗号処理装置において、
前記乗算結果に前記第5暗号文を加算して算出した前記第4暗号文を所定数倍した暗号文に対して所定の多項式を用いることにより算出した新たな暗号文と前記第4暗号文とを準同型演算した結果に基づいて第6暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項9】
請求項7又は8に記載の暗号処理装置において、
前記第6暗号文は、乗算結果を前記所定数で割った剰余であり、前記所定数が2のべき数である場合、乗算結果の下位ビットである、
ことを特徴とする暗号処理装置。
【請求項10】
請求項7又は8に記載の暗号処理装置において、
前記第6暗号文に対して所定の多項式を用いることにより算出した新たな暗号文を前記第4暗号文から準同型演算した結果に基づいて第7暗号文を算出する、
ことを特徴とする暗号処理装置。
【請求項11】
請求項10に記載の暗号処理装置において、
前記第7暗号文は、乗算結果を前記所定数で割った商であり、前記所定数が2のべき数である場合、乗算結果の上位ビットである、
ことを特徴とする暗号処理装置。
【請求項12】
請求項1又は2に記載の暗号処理装置において、
暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部を備え、前記算出部は、入力となる暗号文に対して、所定の多項式を用いて新たな暗号文を算出するまえに係数の数を削減する処理を行う、
ことを特徴とする暗号処理装置。
【請求項13】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
ことを特徴とする暗号処理装置。
【請求項14】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
ことを特徴とする暗号処理装置。
【請求項15】
請求項1又は2に記載の暗号処理装置において、
前記所定の演算を行うことによって、入力された前記暗号文に基づくカラツバ法の演算を行う、
ことを特徴とする暗号処理装置。
【請求項16】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と被乗数である第2暗号文とに基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と前記第2暗号文との平文同士の乗算結果に対応する暗号文を算出する、
ことを特徴とする暗号処理方法。
【請求項17】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と、被乗数である第2暗号文と、前記第1暗号文と前記第2暗号文の乗算結果に加算するための第5暗号文と、に基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と、前記第2暗号文と、前記第5暗号文と、の平文同士の融合積和演算の結果に対応する暗号文を算出する、
ことを特徴とする暗号処理方法。
【請求項18】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と被乗数である第2暗号文とに基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と前記第2暗号文との平文同士の乗算結果に対応する暗号文を算出する、
ことを特徴とする暗号処理プログラム。
【請求項19】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と、被乗数である第2暗号文と、前記第1暗号文と前記第2暗号文の乗算結果に加算するための第5暗号文と、に基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と、前記第2暗号文と、前記第5暗号文と、の平文同士の融合積和演算の結果に対応する暗号文を算出する、
ことを特徴とする暗号処理プログラム。
【請求項20】
暗号文を処理する暗号処理装置であって、
前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
乗数である第1暗号文に所定の多項式を用いることにより、多項式を平文に持つ第8暗号文を算出し、
被乗数である第2暗号文に基づく暗号文の各要素を前記第8暗号文の各要素それぞれに乗算することにより、
前記第1暗号文と前記第2暗号文との平文同士の乗算結果に対応する第4暗号文を算出する、
ことを特徴とする暗号処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号処理装置、暗号処理方法、暗号処理プログラムに関する。
【背景技術】
【0002】
準同型暗号(Homomorphic Encryption)は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことが出来る暗号方式である。
平文同士での加算に対応する暗号文同士の演算が存在する暗号が加法準同型暗号であり、平文同士での乗算に対応する暗号文同士の演算が存在する暗号が乗法準同型暗号である。
有限巡回群を整数に見立てて、加法演算(加算、減算)のみを行う加法準同型暗号と、乗法演算(乗算)のみを行う乗法準同型暗号とが以前から知られていた。
有限巡回群は、加算を繰り返せば整数倍が出来るので、平文による整数倍ができ、乗算を繰り返せば平文によるべき乗計算をすることも出来る。
また、加法演算と乗法演算の両方を暗号化したまま処理する環準同型暗号および、加法と乗法を含む全ての演算が可能な完全準同型暗号(Fully Homomorphic Encryption,FHE)がある。
完全準同型暗号の一つとして、暗号化時に復号には問題のない程度の小さな誤差を平文に加えることで構成される、LWE(Learning with Errors)問題に基づく完全準同型暗号が知られている。
【0003】
LWE問題に基づく完全準同型暗号では、演算を行うとともに誤差が蓄積していくので、誤差が大きくなりすぎて復号ができなくなる前に、暗号化したまま誤差成分を縮小するbootstrappingが実行される。
bootstrappingの計算時間は、完全準同型暗号で演算を行う際に必要となる計算時間の大部分を占める。また、bootstrappingでは膨大なデータを扱うため、その計算量は膨大である。したがって、完全準同型暗号の演算においては、実用的な時間内で演算結果を得ることができないことが問題であった。
この問題を劇的に改善した手法が、非特許文献1(以下の説明において、上記論文として参照される)に示されるTFHE(Fast Fully Homomorphic Encryption over the Torus)である。
準同型暗号には、平文として二値を有し論理演算をベースとして利用するBit-wise型の準同型暗号と、平文として整数を丸ごと一暗号文とするInteger-wise型の準同型暗号と、があり、非特許文献1に示されるTFHEはBit-wise型である。
なおTFHEの平文は円周群に対応づけられた0~1の実数である。よって、円周群の値域0~1を区切った区間を順番に整数と対応付けることにより、整数を平文として有する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暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と被乗数である第2暗号文とに基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と前記第2暗号文との平文同士の乗算結果に対応する暗号文を算出する、暗号処理装置を特徴とする。
また本発明は、一側面として、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、乗数である第1暗号文に基づいて、第1階段状多項式を平文に持つ第3暗号文を生成し、前記第3暗号文と、被乗数である第2暗号文と、前記第1暗号文と前記第2暗号文の乗算結果に加算する第5暗号文と、に基づく演算を行うことにより、演算結果の第4暗号文として、前記第1暗号文と、前記第2暗号文と、前記第5暗号文と、の平文同士の融合積和演算の結果に対応する暗号文を算出する、暗号処理装置を特徴とする。
【発明の効果】
【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】本実施形態のInteger-wise型TFHEを説明する図である。
図10】本実施形態の乗算処理を説明するフローチャートである。
図11】本実施形態の乗算処理を説明するフローチャートである。
図12】本実施形態の第2実施例に係る暗号処理装置の機能構成を説明する図である。
図13図12の機能構成に基づく演算プロセスを説明する図である。
図14】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
図15】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の演算のことを指すものとする。
【0010】
[第1実施例]
図1は、本実施形態の第1実施例に係る暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第4演算部15と、第1Bootstrapping部(算出部)16と、第2Bootstrapping部(算出部)17と、第3Bootstrapping部(算出部)18と、第4Bootstrapping(算出部)19と、鍵交換部30と、出力部35と、を備えている。また制御部10は、事前処理部として機能する第5Bootstrapping部(算出部)21と、第6Bootstrapping(算出部)22と、を備えている。
暗号処理装置1は、暗号文を構成する円周群の全体(全面)を使って、Integer-wise型のTLWE暗号文同士の符号付き乗算を行う。符号付き乗算は、マイナスの符号を有する負の整数を使った乗算である。
また暗号処理装置1は、より簡便な乗算手法として、円周群の半面(右半面)を使って、正の整数の暗号文同士乗算も行うことが出来る。これについては、[第2実施例]として後に説明する。[第2実施例]では、事前処理部としての第5Bootstrapping部21及び第6Bootstrapping部22と、第4演算部15は必要ない。
【0011】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第1演算部12は、後述の第4演算部15から出力される暗号文に対して第1準同型演算を行う。
第2演算部13は、第3Bootstrapping部18による処理の途中で出力される暗号文に対して、第2準同型演算を行う。
第3演算部14は、第4Bootstrapping部19による処理の途中で出力される暗号文に対して、第3準同型演算を行う。
第4演算部15は、第2Bootstrapping部17から出力される暗号文に対して、第4準同型演算を行う。
【0012】
第1Bootstrapping部16は、第5Bootstrapping部21による事前処理後の暗号文に対して、第1Gate Bootstrappingを行う。
第2Bootstrapping部17は、鍵交換部30から出力された鍵交換後の暗号文と第6Bootstrapping部21による事前処理後の暗号文に対して第2Gate Bootstrappingを行う。
第3Bootstrapping部18は、第1演算部12から出力される暗号文に対して第3Gate Bootstrappingを行う。
第4Bootstrapping部19は、第3Bootstrapping部18から出力される暗号文に対して第4Gate Bootstrappingを行う。
第5Bootstrapping部21は、入力暗号文に対して事前処理としての第5Gate Bootstrappingを行う。
第6Bootstrapping部22は、入力暗号文に対して事前処理としての第6Gate Bootstrappingを行う。
鍵交換部30は、第1Bootstrapping15から出力された暗号文の秘密鍵を交換する後述のPrivate Key Switchingを行う。Private Key Switchingは、本質的には、乗数のTLWE暗号文から階段状の多項式を平文として有するTRLWE暗号文を得るために行うのであり、暗号文の秘密鍵を交換すること自体が目的ではない。階段状の多項式を平文(平文多項式)として有するTRLWE暗号文を得られれば、別の方法を用いてもよい。
【0013】
第1演算部12、第2演算部13、第3演算部14、第4演算部15は下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部16、第2Bootstrapping部17、第3Bootstrapping部18、第4Bootstrapping部19は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
鍵交換部30は、Private Key Switchingをソフトウェアで実現する演算処理部である。
第1演算部12、第2演算部13、第3演算部14、第4演算部15、第1Bootstrapping部16、第2Bootstrapping部17、第3Bootstrapping部18、第4Bootstrapping部19、鍵交換部30、出力部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の暗号文であり、TLWE暗号文cbは、乗数となる平文整数bの暗号文である。
図2(a)において、暗号処理装置1は、乗算処理に先立つ事前処理として、TLWE暗号文cbを第5Bootstrapping部21に入力して第5Gate Bootstrappingを行い、新たなTLWE暗号文cb1を得る。
また暗号処理装置1は、事前処理として、暗号処理装置1は、TLWE暗号文caを第6Bootstrapping部22に入力して第6Gate Bootstrappingを行い、新たなTLWE暗号文ca1を得る。
暗号処理装置1は、第5Bootstrapping後の新たなTLWE暗号文cb1を第1Bootstrapping部16に入力して第1Bootstrappingを行い、TLWE暗号文cb’を得る。第1Bootstrappingは、TLWE暗号文cb1における円周群を2t分割から乗算結果の暗号文としての2t分割に変換するための処理である。
さらに暗号処理装置1は、TLWE暗号文cb’を、鍵交換部30に入力し、キースイッチングキーKS1を用いて、TLWE暗号文cb’に対してPrivate Key Switchingを行い、平文として階段状の多項式(平文多項式)を有するTRLWE暗号文ccを得る。
さらに暗号処理装置1は、TRLWE暗号文ccを第2Bootstrapping部17に入力し、TRLWE暗号文ccとTLWE暗号文ca1を入力として第2Bootstrapping(BlindRotate、SampleExtract)を行い、TLWE暗号文cc1を得る。
ここでPrivate Key Switchingを鍵交換部30が実行するように説明しているが、Private Key Switchingを第2Bootstrappingの一部と考えることも出来る。その場合、第2Bootstrapping部17がPrivate Key Switchingを実行し、暗号処理装置1は鍵交換部30を有さずともよい。
【0016】
暗号処理装置1は、TLWE暗号文cc1を第4演算部15に入力し、cc1-cb’からTLWE暗号文cc’を得る第4準同型演算を行う。
得られたTLWE暗号文cc’は、平文整数aと平文整数bの乗算結果abに対応する暗号文である。しかしTLWE暗号文cc’の平文は、後述するように分母が2tであるため、平文の分母が2tである暗号文との次以降の乗算に用いることが出来ない。従って、暗号処理装置1は、平文の分母を2tとするための処理を引き続き行う。
【0017】
暗号処理装置1は、TLWE暗号文cc’を第1演算部12に入力してTLWE暗号文cc’をt倍する演算を行う。暗号処理装置1は、t倍したTLWE暗号文cc’を第3Bootstrapping部18に入力して第3Bootstrappingを行い、TLWE暗号文clを得る。詳しくは、第3Bootstrapping部18は、t倍したTLWE暗号文cc’に対してBlindRotate、SampleExtractを行い、TLWE暗号文cdを得る。暗号処理装置1は、TLWE暗号文cdを第2演算部13に入力して、t倍したTLWE暗号文cc’にTLWE暗号文cdを加算する演算cc’×t+cd-(0,1/4)を行う。その結果に対して、暗号処理装置1(第3Bootstrapping部18)は、Public Key Switchingを行い、乗算結果の下位ビットに対応するTLWE暗号文clを得る。
【0018】
必要に応じて乗算結果の上位ビットを得るために、図2(b)において、暗号処理装置1は、乗算結果の下位ビットに対応する暗号文clを第4Bootstrapping部19に入力して第4Bootstrappingを行い、TLWE暗号文cl’を得る。詳しくは、第4Bootstrapping部19は、TLWE暗号文clに対して、BlindRotate、SampleExtractを行い、TLWE暗号文cl’を得る。暗号処理装置1は、TLWE暗号文cl’とTLWE暗号文cc’を第3演算部14に入力し、cc’からcl’を減算してTLWE暗号文cuを算出する演算cc’-cl’を行う。暗号処理装置1(第4Bootstrapping部19)は、第3演算部14の演算結果であるTLWE暗号文cuに対してPublic Key Switchingを行い、乗算結果の上位ビットに対応するTLWE暗号文cu’を得る。
なお、乗算結果の下位ビット、上位ビットとは、乗算結果を二進数で表したときの下位の所定数ビットと残りのビットである。これはtを2のべき数にした場合の表現であり、異なる値の場合でも表現が変わるのみで本質的に意味するものは変わらない。
【0019】
後述するが、事前処理における第5Bootstrapping、第6Bootstrappingに用いる多項式では、円周群{T}上で正負の値が連続して並ぶ新たなTLWE暗号文ca、cbが得られるように、多項式の各項に1/2(円周群を分割したスライスの1/2)のオフセットを付加する調整を施している。キースイッチングキーKS1の階段状の平文多項式の各項にも、スライスの1/2(0.5)分のオフセットを付加する調整を施している。
これにより、乗算結果に対応する暗号文では、円周群{T}上で正負の値が連続して並び、オフセットを付加しない場合よりも多くの情報を格納することが出来る。
下記に説明するが、乗算結果の暗号文は円周群を2t分割するものである。非整数である1/2(0.5)のオフセットを表現できるように、第1Bootstrappingでは、計算途中に用いられるTLWE暗号文cb’をTLWE暗号文cbの2t分割から、2tの倍の4t分割とする処理を行う。
【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の区間の平文を0のTLWE暗号文に変換し、0.25(1/4)~0.75(3/4)の区間の平文を0.25(1/4)の暗号文に変換する。
この変換の際、平文に付加される誤差は±1/16の範囲のいずれかである。
【0041】
(1)BlindRotate
Gate Bootstrappingの最初のステップとしてBlindRotateが行われる。
BlindRotateは、TRLWE暗号文を作成する工程である。
BlindRotateでは、多項式T(X)を平文とする自明なTRLWE暗号文(0,T(X))から、X-φs(c’)を乗算したTRLWE暗号文を復号することなく得る。0は、0次の多項式0を示す。
ここでφs(c’)は、下記のLWE暗号文c’を復号関数にかけた平文である。
BlindRotateでは、上記した有限巡回群をなす、テストベクタとしての下記の多項式F(X)
F(X)=μXn-1+μXn-2+…μX+μ
ただし、μ=1/8
にXn/2を掛けて得た下記の多項式T(X)
T(X)=F(X)・Xn/2
を用意する。
【0042】
平文μ1を秘密鍵[s]で暗号化したTLWE暗号文cがあるとする。
このTLWE暗号文c=([a],b)の各要素を2n倍して四捨五入したLWE暗号文c’=([a’],b’)を得る。
LWE暗号文c’=([a’],b’)を復号すると、μ1’=φ(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として、
と多項式をおいて、(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’]を暗号化する。
すなわち、
と、円周群{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に対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【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乃至図9は、本実施形態におけるInteger-wise型TFHEを説明する図である。
図6に示すように、本実施形態の乗数、被乗数夫々の暗号文は、円周群{T}の値域全体(0~1)を2t個に分割している。
なお、図6乃至図9では、円周群{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)のスライスにのみ図示しているが、あくまで例示であり、全てのスライスに始点となる値にオフセットを付した平文が存在する。図7についても同様である。
【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は、階段状の多項式を用いたBlindRotateを実行すると同時にInteger-wise暗号文同士の乗算を行う。
本実施形態では、乗数の暗号文から階段状の多項式を得るために、一例として上記論文(非特許文献1)に記載のPrivate Key Switchingを使用する。まず、Private Key Switchingについて説明する。
Private Key Switchingに用いるキースイッチングキーを、Public Key Switchingに用いるキースイッチングキーKSと区別してキースイッチングキーKS1と記載する。
キースイッチングキーKS1を用いた Private Key Switching の実行結果は、f(c)=TRLWE_Enc(f’(TLWE_Dec(c))として定義し得る。
すなわち、暗号処理装置1がTLWE暗号文cを復号して得た平文に関数f’を適用し、TRLWE暗号化する処理を行うことにより得られる暗号文を、復号することなく算出することができる関数fが、キースイッチングキーKS1を用いて行う Private Key Switchingである。キースイッチングキーKS1を用いることでTLWE暗号文からTRLWE暗号文を得ることが出来る。
キースイッチングキーKS1を作成する者は、秘密鍵[s]及び[s’]を知っているため、以下のキースイッチングキーKS1を生成することが出来る。

Private Key Switchingを行う者、例えば暗号処理装置1は、秘密鍵[s]および[s’]を知らなくても、キースイッチングキーKS1を用いて、TLWE暗号文c([a],b)から以下の計算を行うことが出来る。
また、キースイッチングキーKS1は、本質的にTRLWE暗号文の集合であるため、キースイッチングキーKS1から秘密鍵[s]および[s’]を得ることはできない。
【0060】
暗号処理装置1は、上記のPublic Key Switchingの場合と類似して、TLWE暗号文の要素を、
と夫々分解する。
i,jおよびbは、aもしくはbを2進数で表現した時の各桁の値であり0又は1の値を取り得る。
その後、暗号処理装置1は、
を演算する。
これが、秘密鍵無しで何を計算したことになるか確認するため、式を変形すると、
となる。
以上の演算結果から、最初のTLWE暗号文cを復号することなく、TLWE暗号文の平文をf’に代入した結果を平文とするTRLWE暗号文c’が得られている。関数f’は、暗号化処理・復号処理と、関数f’の評価処理の順序を入れ替えても問題ない関数である必要がある。TLWE暗号文を復号することなく、任意の関数の評価結果の暗号文を得るという点においては、BootstrappingやPublic Key Switchingでも同様のことが可能である。
本実施形態では、f’(x)として、以下の階段状の多項式を得る関数を設定し、キースイッチングキーKS1を事前に計算する。
【0061】
暗号文の乗算方法の説明に戻る。
暗号処理装置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は、秘密鍵がなければ知り得ない整数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とTLWEcbは相互に入れ替えることが出来る。
【0062】
図6(a)について説明したように、TLWE暗号文ca、TLWE暗号文cbにおいても、a/(2t)+1/(4t)と平文にオフセットを付加している。
平文にオフセットを追加した暗号文同士を乗算した結果、オフセット同士が掛け合わされた値に相当するオフセットが乗算結果の平文に追加される。このオフセットの成分は後の演算で消えるため演算結果(乗算結果)に影響はない。
オフセットの値1/(4t)は例でありこれに限定されるものではないが、オフセットの値に応じて、多項式やパラメータを調整する必要がある。
【0063】
図6(a)において、負の数を扱う円周群{T}の左半面では、上から反時計回りに、-t/(2t)から始まるスライス~-1/(2t)から始まるスライスを用いて整数-t~-1を表現する。
0と正の数(非負の数)を扱う円周群{T}の右半面では、下から反時計回りに、0/(2t)から始まるスライス~t-1/(2t)から始まるスライスを用いて、整数0~t-1を表現する。
【0064】
[事前処理]
暗号処理装置1は、暗号文の乗算に先立って、被乗数のTLWE暗号文ca、乗数のTLWE暗号文cbの夫々について、負の数を扱う円周群{T}の左半面の値を上下反転させる下記の事前処理を行う。
図7は、事前処理後のTLWE暗号文ca1、TLWE暗号文cb1に対応する円周群を示している。
事前処理において、暗号処理装置1は、TLWE暗号文ca、TLWE暗号文cbの夫々に対して、階段状となる、1変数多項式の関数(一変数関数)fid
を用いて第5Gate Bootstrapping、第6Gate Bootstrappingを行う。
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暗号文の値によって異なる結果を得る。
【0065】
一変数関数fidは、非負の整数0~t-1の暗号文の入力に対しては、同じ非負の整数0~t-1の暗号文を出力するとともに、平文に対して0.5のオフセットを付加する。一変数関数fidは、負の整数-t~-1の暗号文の入力に対しては、整数-1~-tの暗号文を出力するとともに、平文整数に対して0.5のオフセットを付加する。
図6に示したように、TLWE暗号文ca、TLWE暗号文cbにおいて、1つの整数が対応するスライスの幅は1/(2t)であり、平文整数に0.5のオフセットを付加することは、平文の実数a/(2t)等に1/(4t)のオフセットを追加することである。平文に対する+1/(4t)のオフセット部分に整数表現に含めて表したものを+0.5と表現している。
【0066】
図6(a)において円周群{T}の右半面に平文があった場合、一変数関数fidを用いた上記事前処理の結果、新たなTLWE暗号文ca1、TLWE暗号文cb1の平文整数は、図7に示すように円周群{T}の同じスライス(領域)内に留まる。一方、円周群{T}の左半面に平文がある場合は、上記事前処理の結果、新たなTLWE暗号文ca1、TLWE暗号文cb1の平文整数は、図7に示すように円周群{T}における「上下」が反転する。
すなわち、図7における右半面は、下から反時計周りに0/(2t)から7/(2t)のスライスに0からt-1の整数が割り当てられ、図6(a)の場合と平文整数の並びが変わっていない。
一方、左半面は、上から半時計回りに、-t/(2t)から-1/(2t)のスライスに-1~-tの整数が割り当てられ、図6(a)の場合から並びが逆転している。
事前処理後の図7において、整数としては、円周群{T}の上から、-1、-2、-3、-4、-5、-6、-7、-8、0、1、2、3、4、5、6、7である。円周群{T}で正負の値が連続して並んでいる。
【0067】
図6(a)において、例えばTLWE暗号文caが-1の暗号文であった場合、平文は円周群{T}上の-1/(2t)~0の区間にあった。
上記事前処理の結果、TLWE暗号文ca1では、一変数関数fidの最上位のブロックの項が符号反転して最下位に現れる。従って、図7において、TLWE暗号文ca1の平文は、円周群{T}上の値として-1/2+1/(4t)である。この平文は図6(a)では整数-t(=-8)に対応していたが、事前処理後、図7では平文整数として-1が割り当てられる。
図6(a)において、例えばTLWE暗号文caが-tの暗号文である場合、平文は円周群{T}上の-t/(2t)+1/(4t)前後に分布している(-1/2より少し大きい値である)ことから、平文は円周群{T}上の最も-1/2に近い区間にある。
上記事前処理の結果、TLWE暗号文ca1では、一変数関数fidの最下位のブロックの項が符号反転して現れる。従って、図7において、TLWE暗号文ca1の平文は、円周群{T}上の値として、-1/(2t)+1/(4t)である。この平文は図6(a)では整数-1に対応していたが、事前処理後、図7では平文整数として-t(=-8)が割り当てられる。
【0068】
一般化すると、平文が非負の数であるTLWE暗号文caの平文は、事前処理後のTLWE暗号文ca1ではa/(2t)+1/(4t)となり、平文整数としてはaのままである。
それに対して、平文が負の数であるTLWE暗号文caの平文は、事前処理後のTLWE暗号文ca1では-(t+1+a)/(2t)+1/(4t)である。
平文の分子だけを見た場合、平文整数aが-1の場合、-(t+1+a)=-{t+1+(-1)}=-tとなり、平文整数aが-tの場合、-(t+1+a)=-{t+1+(-t)}=-1となることからも分かる。TLWE暗号文cbについても同様である。
このように、平文が非負の数である場合、事前処理によって、整数が割り当てられる平文が変化する。しかし、事前処理後の平文には事前処理前の整数が割り当てられる。従って、事前処理の結果、円周群における平文の並び自体は図6(a)と図7の間で変わらないが、負の数が割り当てられる左半面では、平文に割り当てられる平文整数の並びが逆転するのである。
【0069】
t=8(2t=16)である図7では、暗号文の平文に上記0.5のオフセットが加わっているため、スライスの中央に位置する平文は、上から左回り(反時計回り)に、-7.5/(2t)、-6.5/(2t)、-5.5/(2t)、-4.5/(2t)、-3.5/(2t)、-2.5/(2t)、-1.5/(2t)、-0.5/(2t)、0.5/(2t)、1.5/(2t)、2.5/(2t)、3.5/(2t)、4.5/(2t)、5.5/(2t)、6.5/(2t)、7.5/(2t)である。
これらのスライスに、円周群{T}の上から、反時計回りに-1、-2、-3、-4、-5、-6、-7、-8、0、1、2、3、4、5、6、7が割り当てられている。0.5のオフセットを含んで表現する整数は、円周群{T}の上から、-0.5、-1.5、-2.5、-3.5、-4.5、-5.5、-6.5、-7,5、0.5、1.5、2.5、3.5、4.5、5.5、6.5、7.5となる。
分割数が2tのままでは平文の分子が整数とならないため、特に乗数となるTLWE暗号文cbに関しては、分割数を2倍の4tとする。その場合の平文は、-15/(4t)、-13/(4t)、-11/(4t)、-9/(4t)、-7/(4t)、-5/(4t)、-3/(4t)、-1/(4t)、1/(4t)、3/(4t)、5/(4t)、7/(4t)、9/(4t)、11/(4t)、13/(4t)、15/(4t)である。
【0070】
暗号処理装置1は、これ以降Gate Bootstrapping後(事前処理後)の新たなTLWE暗号文ca1、TLWE暗号文cb1を使用する。
【0071】
(1)上記の事前処理の後、暗号処理装置1(第1Bootstrapping部16)は、第1Bootstrappingとして、テストベクタ多項式T(X)
を用いて、乗数のTLWE暗号文cb1に対してBlindRotateを行い、さらに自明な暗号文(0,1/8t)を減算してTLWE暗号文cb’(LEVEL1)を得る。
事前処理後の新たなTLWE暗号文cb1は、図7に示したように2t分割であった。第1Bootstrappingは、BlindRotateによって、円周群を4t分割して平文の分母を4tにするために行う。
後述するように、本実施形態では、乗算の計算途中において、円周群{T}全体を2t個に分割した暗号文同士の乗算結果を1つのTLWE暗号文cc1に記録する。TLWE暗号文cc1は円周群全体を4t個に分割している。これは乗算結果のTLWE暗号文cc’の分割数(2t)の2倍である。
TLWE暗号文cb’の分割数を4t個とすることで、後述するようにTLWE暗号文cc1からTLWE暗号文cb’を減算して乗算結果のTLWE暗号文cc’を得る際に、スケール変更の必要がなくなる。
これはキースイッチングキーKS1を組み立てる際の多項式f’(X)の係数部分を2i+1のように2倍のスケールにして、+0.5のオフセットの加算を+1と整数にしたものを打ち消す効果もある。
【0072】
図7ではTLWE暗号文cb1は、-t~t-1の平文整数を-0.5~0.5に対応させた円周群{T}全体を使って表現していたが、BlindRotateの結果、図8に示すTLWE暗号文cb’は、0周辺の概ね-1/(4t)~1/(4t)の範囲を使う。
具体的にはt=8の場合、事前処理後の図7のTLWE暗号文cb1では円周群{T}を2t=16分割していたところ、図8のTLWE暗号文cb’では4t=256分割している。従って、TLWE暗号文cbで円周群{T}全体を使って表現していた平文は、TLWE暗号文cb’の円周群における1/16の範囲で表現される。
この範囲は、TLWE暗号文cbの円周群における一つのスライスと同等の0周辺の概ね-1/(4t)~1/(4t)の範囲に相当する。
図8において、1/(4t)~0.5、0.5~-1/(4t)の区間は未使用(割り当てなし)である。そして、0周辺を4t=256分割の細やかさで-t/4t~(t-1)/4tを割り当てる。これらは、整数としては、整数-8、-7、-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6、7に対応する。
【0073】
平文整数bが負の整数だった場合は、図7では、上記の事前処理によって-1~-t(左半面)が図6(a)の状態から上下反転している。
事前処理後のTLWE暗号文cb1に対して(1)の円周群を4t分割して平文の分母を4tにするためのBootstrappingを行うと、Bootstrapping後のTLWE暗号文cb’の平文は、平文整数bの正負に関わらず、b/(4t)となる。
事前処理前の平文bが負の場合、bが-1の時は、事前処理後の平文bが-tとなり、第1Bootstrappingの結果、最下位のブロックが符号反転して-1/(8t)となる。その後、自明な暗号文(0,1/8t)を減算するため、-1/(4t)=b/(4t)となる。
一方、b=-tの場合、事前処理後は-1となり、第1Bootstrappingの結果、最上位ブロックが符号反転して-(t-1)/(4t)-1/(8t)となる。その後、自明な暗号文(0,1/8t)を減算すると-t/(4t)=b/(4t)となる。
【0074】
(1)の処理によりTLWE暗号文cb1から、円周群を4t分割へと変換したTLWE暗号文cb’が得られた。
乗数の暗号文に関して、事前準備で上下が反転した負の数の平文整数は、(1)の第1Bootstrappingの結果、再び上下が反転している。負の数は、左半面の上から、-8、-7、-6、-5、-4、-3、-2、-1と割り当てられている。
また、テストベクタにはオフセット(1/8t)を付けているが、第1Bootstrapping後に自明な暗号文(0,1/8t)を準同型減算することで消える。従って、図8に示す暗号文cb’では、オフセットがない分割の仕方(0の±1/8tの範囲に分布する)となっている。
【0075】
(2)暗号処理装置1(鍵交換部30)は、TLWE暗号文cb’に対して、事前に準備してあるキースイッチングキーKS1によるPrivate Key Switchingを行い、階段状の多項式を平文として有するTRLWE暗号文ccを得る。得られたTRLWE暗号文ccの秘密鍵は[s’]である。
TRLWE暗号文ccを秘密鍵[s’]で復号した結果は、
となる。従って、TRLWE暗号文ccの平文は、階段状の平文多項式
であり、円周群の右半面をt分割(0、1、2、3…)、左半面をt分割(-1、-2、-3…)して、TLWE暗号文cbの平文bの値ずつ階段状に係数が増加していく多項式という結果が得られている。
TLWE暗号文cbが平文として3の値を有していたとき、Private Key Switchingの結果、円周群の右半面と対応する次数の項の係数には、TLWE暗号文cbの平文(3)の倍数である0、3、6、9、12にオフセットとして、bの半分の値1.5を加えた1.5、4.5、7.5、10.5、13.5と並んでいる平文多項式が得られる。
この多項式は上記のキースイッチングキーKS1を得るための関数
に由来する。
【0076】
事前処理におけるfidにおいて平文に0.5のオフセットを加えていることに対応して、TRLWE暗号文ccの平文多項式(キースイッチングキーKS1)においても平文に0.5のオフセットを加えている。0.5(1/2)のオフセットは、キースイッチングキーKS1における2i+1を2で割ったi+(1/2)に由来する。より適切には、+0.5のオフセットを含む係数部分i+(1/2)を2倍のスケールにし、オフセットの加算を+1と整数にしている。
(1)で説明したようにTLWE暗号文cb’は、元のTLWE暗号文cb1の平文整数bの正負に関わらずb/(4t)であるため、bが負である場合は、TLWE暗号文ccの平文多項式はすべての項が負となっており、bが正である場合とは反対に、係数はbずつ減少している。
【0077】
(3)暗号処理装置1(第2Bootstrapping部17)は、第2Bootstrappingを行う。暗号処理装置1は、TRLWE暗号文cc(LEVEL1)を、TLWE暗号文ca(LEVEL0)を用いてBlindRotateし、SampleExtractを行ってTLWE暗号文cc1(LEVEL1)を得る。LEVEL1の暗号文であるTLWE暗号文cc1の秘密鍵は[s’]である。
(i)平文整数aが負の整数ではない(0又は正である)場合、TLWE暗号文caを2n倍したTLWE暗号文ca’は、φ(ca’)=(an)/t+n/(2t)から、平文として(an)/t+n/(2t)を有する。
従って、φs’(cc)の平文多項式のうち、指数が(an)/t+n/(2t)近傍の項が定数項として得られる。上記の平文多項式でi=aとなる項の係数である。
よって、φ(cc1)=(2a+1)b/(4t)となり、TLWE暗号文cc1は、平文として(2a+1)b/(4t)を有する。
TLWE暗号文cc1は平文整数aと平文整数bの積に対応する暗号文であり、この段階で平文整数aと平文整数bの積が得られている。
【0078】
具体的には、第2Bootstrappingの結果、TLWE暗号文cb’の平文多項式に基づく3の倍数の整数に半分の1.5を加えた、1.5、4.5、7.5、10.5、13.5が並んでいるなか、caの平文整数a+1番目(aは0を含むため)の値を得るため、caの平文整数aが2のときには、TLWE暗号文cc’として3番目の7.5の値を得る。実際に、(a+0.5)×bの解として、2.5×3=7.5の値が得られ、乗算が正しく行われている。aに加えられている0.5のオフセットは、後程除去する。
【0079】
(ii)平文整数aが負の整数である場合は、事前処理の結果、TLWE暗号文caの左半面のみ上下反転し、TLWE暗号文caは、平文として、-(t+1+a)/(2t)+1/(4t)を有している。従って、事前処理後のTLWE暗号文ca1を2n倍したTLWE暗号文ca’は、φ(ca’)={-(t+1+a)}n/t+n/(2t)=-n-{(a+1)}n/t+n/(2t)から、平文として、-n-{(a+1)}n/t+n/(2t)を有する。
多項式の剰余群T(X)/(X+1)が有限巡回群である性質から、X-1を-n回乗算すると、すべての項が負の数になる。従って、BlindRotateでは、TLWE暗号文cc1の平文多項式の係数を全て正負反転させたうえで、φ(ca’)+n=-{(a+1)}n/t+n/(2t)だけX-1を乗ずると解釈できる。
つまり、BlindRotate後の平文多項式では、指数が{-(a+1)n}/t+n/(2t)近傍の項が定数項として得られる。つまり上記平文多項式でi=-(a+1)となる項の係数の負の数である。よって、φs’(cc1)=-{-2(a+1)+1}b/(4t)=-(-2a-1)b/(4t)=(2a+1)b/(4t)となり、平文が正の整数であった場合と同じ式が得られる。上記のように、TLWE暗号文cc1は、平文整数aと平文整数bの積に対応する暗号文である。
【0080】
これが、キースイッチングキーKS1の計算に用いたf’の多項式に、+1/2の項を加えた効果である。
+1/2の項を加えない場合、平文整数aが正の整数であった場合はab/(2t)となり、負の整数(0を含む)であった場合には(a+1)b/(2t)となる。a=0の場合とa=-1(平文整数aが負の整数)の場合とで同じ結果となるため、aやbを符号分離しないと元々どちらだったかの判断ができない。
TLWE暗号文cbの事前処理と(1)の処理については、この2回のBootstrappingによって、g(x)=1/(2t)×xという1次関数を計算したことになる。
上記の論文「Bootstrapping in FHEW-like Cryptosystems, Daniele Micciancio and Yuriy Polyakov Duality Technologies February 23,2020」では、特定の条件を満たす任意の関数を評価する手法を紹介している。本実施形態では、TLWE暗号文cbの事前処理と(1)のように2回のBootstrappingを用いることで、1次関数以外でも、特定の条件なしに任意の奇関数を正負両方の値域に対して評価することができる。
【0081】
ここで、SampleExtractで定数項のTLWE暗号文(全体を4t分割)を得ることができるので、1/2の項を消すために、TLWE暗号文cc1からTLWE暗号文cb’を引いて、TLWE暗号文cc’を得る。
ここで1/2を計算するために、予めTLWE暗号文cb’の計算時に半分の大きさにして、キースイッチングキーKS1を倍の大きさとしてある。これによってキースイッチングキーKS1の分子を整数にすることが出来る。
φs’(cc’)=φs’(cc1)-cb’=(2a+1)b/(4t)-b/(4t)=ab/2tから、TLWE暗号文cc’は、平文としてab/2tを有する。
これによって、aとbの積に対応するTLWE暗号文cc’(LEVEL1)が得られた。TLWE暗号文cc’は、図9に示すように、円周群{T}を2t分割した暗号文である。
【0082】
図9に示す乗算結果のTLWE暗号文cc’は、円周群{T}の左右の半面をt個に夫々分割し、円周群全体では、2t個に分割している。
2t-1が、途中で得られる乗算結果としてTLWE暗号文が持つことができる最大値である。
t=8の場合、円周群の右半面をt=64分割し、円周群{T}の右半面ではt=64個の整数、0、1、2、3、4、5、6、7・・・63を表現することが出来る。円周群{T}の左半面ではt=64個の整数、-64、-63、-62、…-1を表現することが出来る。
円周群{T}の値域0~1の全体を2t=128個に分割し、暗号文は-64、-63・・・、-4、-3、-2、-1、0、1、2、3、4・・・62、63の整数を表現することが出来る。
【0083】
これらの整数値は、円周群の0~1の値域全体を2t個に区切った1/2tずつの区間に割り当てられる。
t=8の場合、2=8から、乗数、被乗数のTLWE暗号文ca、cbは、円周群(右半面)に3ビットの整数を記録する。3ビットの整数同士の乗算結果は6ビットの整数であり、これを記録するTLWE暗号文は、円周群(右半面)を2=64分割すなわちt個に分割する。
ただし、乗算結果の暗号文は、乗数、被乗数の暗号文とは円周群の分割数が異なっている。TLWE暗号文ca、cbの平文の分母が2tであったのに対し、TLWE暗号文cc’の平文は分母が2tである。乗算の前後で、暗号文における円周群の分割数が異なっている。
TLWE暗号文cc’を、TLWE暗号文ca、cbのような、平文の分母が2tである暗号文との乗算等に用いることはできない。
【0084】
TLWE暗号文cc’を平文の分母が2tである暗号文に変換する(暗号文の乗算前後で円周群の分割数を合わせる)必要がある。そこで暗号処理装置1は、そのための変換を高速に行う。
この変換とは、例えば6ビット(t分割)の乗算結果から、下位3ビット(t分割)、上位3ビット(t分割)を抽出し、乗算前と同じt分割の暗号文を得ることである。
【0085】
TLWE暗号文cc’に乗算する暗号文の平文の分母を2tとしてもよいが、乗算を重ねるごとに円周群の分割数が増えていき、許容される誤差範囲が小さくなっていくため複雑な構成に用いる場合は好ましくない。一方で、このような構成をLeveled-FHEと呼び、例えば畳み込み(内積)演算一回で済む場合など、用途によってはこのまま利用しても構わない。
本実施形態では、暗号文の乗算前後で円周群の分割数を合わせるための変換を高速に行うために、例えば6ビット(2t分割)となっている乗算結果から、下位3ビット(2t分割)、上位3ビット(2t分割)を抽出し、乗算前と同じ2t分割の暗号文を得る。
また乗算結果はtを容易に超えるため、乗算結果をtで割った商と剰余とに分解する。商が上位3ビットであり、剰余が下位3ビットである。
【0086】
例えばt=8の場合、0~63(8=64)を、ノコギリ型の多項式(係数が0123~67012…)と階段型の多項式(係数が000011112222…)という階段型の多項式とによって夫々Bootstrappingをしても乗算結果をtで割った商と剰余を求めることは出来る。しかしながら、TFHEで用いられるベクトルの次数Nは635、多項式の次数nは1024が最適であるとされているため、BlindRotateの直前にTLWE暗号文の係数635個を2n倍する段階で、四捨五入の誤差が635個分累積する。また多項式の次数nを0~0.5の区間の分割数にあわせて分割した区間が整数1つに対応する区間であるが、64分割だと16の幅しかないため±8の誤差しか許されない。これでは計算エラー率が高すぎるという問題がある。
【0087】
多項式の次数nを増やす、あるいはベクトルの次数Nを小さくするという選択肢もあるが、そうした場合、暗号の強度や計算速度が犠牲になる。多項式の次数を増やすと、CMuxで行う乗算の計算量がO(n)で増える一方、ベクトルの次数を小さくすると解析の際の自由度が下がり、暗号として容易に解けるようになる。
従って本実施形態では、以下に示す方法によってエラー率を十分に抑えつつ、平文の分母が2tからの平文の分母が2tである暗号文(商の暗号文、剰余の暗号文)の計算を行う。
【0088】
(4)暗号処理装置1(第3Bootstrapping部18)は、TLWE暗号文cc’をt倍したうえでPublic Key Switchingを行ってLEVEL0に落とし、自明な暗号文(0,1/(4t))を加算した後で、μ=1/4のテストベクタ多項式でBlindRotateおよびSampleExtractを行う。
加算する(0,1/(4t))は、0と-1の境界を円周群{T}上の0にするためのオフセットである。
TLWE暗号文cc’をt倍すると平文の分母が2tになるが、円周群{T}上で0~0.5の区間を乗算結果の下位ビットとして用いたいところである。なぜならば、下位ビットは常に正であるためである。しかし、実際にこの演算を行うと、0.5~1の区間にも分布する。
そのため、t倍した結果平文が0~0.5の区間であれば1/4、0.5~1の区間であれば-1/4を平文として持つTLWE暗号文cd(LEVEL1)が得られる。LEVEL1の暗号文であるTLWE暗号文cdは、秘密鍵が[s’]である。
【0089】
(5)暗号処理装置1(第2演算部13)は、cc’×t+cd-(0,1/4)+(0,1/(4t))を計算する。
暗号処理装置1(第3Bootstrapping18)は、計算結果に対してPublic Key Switchingを行い、秘密鍵を[s]としたTLWE暗号文cl(LEVEL0)を得る。これにより、乗算結果の下位ビットが得られる。
TLWE暗号文clは、復号するとφ(cl)=(ab mod t)/(2t)+1/(4t)となる暗号文である。
上位ビットが不要な場合はここで終了しても構わない。
【0090】
剰余が常に正であると考えると、TLWE暗号文cc’の平文が負であっても、TLWE暗号文clの平文は正になる。商まで計算すると、t×商+剰余=abが正負問わず成立するため、数学的に矛盾はない。乗算結果が1変数に格納されている状態から、コンピュータで除算剰余算命令を用いて求める場合、言語処理系やCPUアーキテクチャによって様々だが、tを2のべき数としてシフト演算とAND演算で分解する、つまり2進数表記にして単純にビットを分けるという処理とは完全に一致する結果となる。
t倍したTLWE暗号文で計算しているため、整数シンボル1つに対応する値の幅がt倍に広がっており、相対的に四捨五入による誤差を許容できるようになっている。また、加算乗算を秘密鍵[s’]によるTLWE暗号文で行うことにより、比較的大きな誤差を付加するPublic Key Switchingの影響を小さくすることができる。
【0091】
乗算結果の上位ビットが必要な場合は、以下の演算を行う。
(6)情報処理装置1(第4Bootstrapping部19)は、下位ビットのTLWE暗号文clに対して、下記のテストベクタ多項式
を用いてBlindRotate、SampleExtractを行い、TLWE暗号文cl’(LEVEL1)を得る。TLWE暗号文cl’は、秘密鍵が[s’]である。
TLWE暗号文cl’は、平文の分母が1/2tの暗号文であって、乗算結果の下位ビット(ab mod t)を、0~1/(2t)の区間を使用して保持する暗号文である。剰余は負の数ではないとの前提であるため、円周群の右半面のみを使っているものと考えられるため、テストベクタ多項式にオフセットを加える工夫は、してもしなくても結果に影響はない。
【0092】
(7)暗号処理装置1は、cu=cc’-cl’+(0,1/(4t))を計算してTLWE暗号文cuを得る。
TLWE暗号文cuに対してPublic Key Switchingを行い、秘密鍵を[s’]から[s]に戻してTLWE暗号文cu’を得る。つまり、ab/2tから(ab mod t)/2tを引くことで分子をtの倍数とし、分子と分母をtで約分する。
すると、
が得られる。
この時、TLWE暗号文cc’、TLWE暗号文cl’の平文に付加される誤差成分は正規分布に従っているため、再生性によってTLWE暗号文cuの平文に付加される誤差も正規分布に従う。よって、TLWE暗号文cu’はそのまま次の演算に使用することができる。
つまり、右半面を64分割した暗号文から、8の剰余となる暗号文を引くことで、必ず8の倍数を平文とする暗号文となる。つまり8個置きにブロックを使用している。これを、右半面を8分割した暗号文を比較すると、分割の仕方が同じで、与えられている誤差の分散が異なるのみであるとみなすことができるため、TLWE暗号文cuは実質右半面を8分割した暗号文として扱うことができる。
なぜならばTLWE暗号文cc’、TLWE暗号文cl’において平文に付加される誤差成分は正規分布に従っている。cc’-cl’で得られるTLWE暗号文cuにおいて平文に付加される誤差も、再生性と呼ばれる性質によって正規分布に従う。よって、乗算の上位桁(ビット)のTLWE暗号文cu’はBootstrappingを行うことなく、そのまま次の演算に使用することができる。
TLWE暗号文cu’もTLWE暗号文clも、最後にPublic Key Switchingで秘密鍵を[s]に戻したLEVEL0になっている。この処理をなくして、事前処理の時にTLWE暗号文ca、TLWE暗号文cbそれぞれに対してPublic Key Switchingを行うことで、LEVEL1を入出力とすることができる。
上記に説明したように、本実施形態では、円周群{T}の右半面を符号なし整数(0又は正の整数)として利用し、円周群{T}の左半面を符号付き整数(負の整数)として扱っている。TLWE暗号文の平文空間である円周群{T}を全面利用することにより、多くの(下記に説明する[第2実施例]より実質1bit分多い)情報を詰め込むことができるようになる。これにより、多倍長整数を構成する場合などで少ない暗号文を対象とすることで演算量を削減することが出来る。
【0093】
CMuxをループすることで、Private Key Switchingの代替とすることもできる。
暗号処理装置1は、被乗数のTLWE暗号文cb(事前処理後のTLWE暗号文cb1)をBlindRotateした後の結果をTRLWE暗号文cとする。TRLWE暗号文cは、多項式を平文に有する。
暗号処理装置1は、TLWE暗号文ca(事前処理後のTLWE暗号文ca1)の各係数を2t倍して四捨五入してTLWE暗号文ca’’を得る。2t倍後に四捨五入していることで、TLWE暗号文ca’’の要素はすべて整数である。
このとき、φ(ca’’)=aが成り立ち、従って、TLWE暗号文ca’’の平文はTLWE暗号文caの平文と同じaである。
TLWE暗号文ca’’はcaa,cabから構成される。そして、caa、cabは、夫々TLWE暗号文([a],b)を構成する上記の要素[a]、bに対応する。
暗号処理装置1は、A=cab×cとし、caa、cabをTRLWE暗号文cに対する乗算を含む下記のCMuxの計算を繰り返し行う。BKはBootstrapping Keyである。
このCMuxの計算は、上記論文について説明したBlindRotateを改造したものである(改造BlindRotate)。
caa×c+cab×cと、cab×cという二つのTRLWE暗号文を、Bootstrapping Keyに基づくsの値(0又は1)に応じて何れか選択する。
が1の時は、Aとしてcaa×c+cab×cが選択され、sが0の時は、Aとしてcab×cが選択される。
これをn回目までを繰り返す。これにより、元々のTLWE暗号文ca’’が有していた要素と、Bootstrapping Keyにおける秘密鍵ベクトルに応じて、TLWE暗号文ca’’と暗号文cの平文多項式の乗算結果を平文に有する新たなTRLWE暗号文Aを得ることが出来る。
上記したようにTLWE暗号文ca’’の要素caa,cabはすべて整数であるため、TRLWE暗号文cの要素の係数である円周群に対してスカラ倍が計算可能である。また、係数は円周群同士なので加算も可能である。
以上の計算を行うと、
を計算したことになる。
すなわち、TLWE暗号文ca’’を復号した整数(被除数)を乗数のTRLWE暗号文cに乗算し、乗算結果の暗号文を得る。
この演算は、被乗数であるTLWE暗号文ca’’の平文を暗号文cの平文である多項式の係数に乗算することと等価な演算である。
暗号文Aの平文多項式の定数項は、ab/2tとなっており、TLWE暗号文cc’と同じ暗号文を得ることが出来た。
以降は、上記の(4)以降の処理と同じであり、暗号処理装置1は、TLWE暗号文cc’からTLWE暗号文cdを計算し、TLWE暗号文cl、cl’cu’を順次計算していく処理を行う。
【0094】
図10は、本実施形態の乗算処理を説明するフローチャートである。
暗号処理装置1(第6Bootstrapping部22)は、ステップS101において、乗数のTLWE暗号文caに対して、fidを用いた第6Bootstrappingを行い、新たなTLWE暗号文ca1を得る。
暗号処理装置1(第5Bootstrapping部21)は、ステップS102において、乗数のTLWE暗号文cbに対してFidを用いた第5Bootstrappingを行い、新たなTLWE暗号文cb1を得る。ステップS101、ステップS102は順不同である。
暗号処理装置1(第1Bootstrapping部16)は、ステップS103において、乗数のTLWE暗号文cb1に対して第1Bootstrappingを行い、TLWE暗号文cb’を得る。
暗号処理装置1(鍵交換部30)は、ステップS104において、TLWE暗号文cb’に対してPrivate Key Switchingを行い、TRLWE暗号文ccを得る。
暗号処理装置1(第2Bootstrapping部17)は、ステップS105において、TRLWE暗号文ccに対してTLWE暗号文ca1を用いてBlindRotateを行い、ステップS106において、SampleExtractを行い、TLWE暗号文cc1を得る。
暗号処理装置1(第4演算部15)は、ステップS107において、cc1-cb’を行ってTLWE暗号文cc’を得る。
暗号処理装置1(第1演算部12)は、ステップS108において、cc’×tを行う。
暗号処理装置1(第3Bootstrapping部18)は、t倍後のTLWE暗号文cc’に対してステップS109でBlindRotate、ステップS110でSampleExtractを行ってTLWE暗号文cdを得る。
暗号処理装置1(第2演算部13)は、ステップS111において、cc’×t+cd(0,1/4)を行い、暗号処理装置1(第3Bootstrapping部18)は、ステップS112においてPublic Key Switchingを行ってTLWE暗号文clを得る。
以上の処理によって、Integer-wise型のTLWE暗号文同士の乗算結果の下位ビット(3ビット)を得ることが出来た。
【0095】
図11は、本実施形態の乗算処理を説明するフローチャートである。
暗号処理装置1(第4Bootstrapping部19)は、ステップS201において、TLWE暗号文clに対して、TLWE暗号文caを用いてBlindRotateを行い、ステップS202においてSampleExtractを行ってTLWE暗号文cl’を得る。
暗号処理装置1(第3演算部14)は、ステップS203において、cc’-cl’を行い、TLWE暗号文cuを得る。
暗号処理装置1(第4Bootstrapping部19)は、ステップS204において、TLWE暗号文cuに対してPublic Key Switchingを行ってTLWE暗号文cu’を得る。
以上の処理によって、Integer-wise型のTLWE暗号文同士の乗算結果の上位ビットを得ることが出来た。
<第2実施例>
【0096】
以下に説明する[第2実施例]において、乗数、被乗数のTLWE暗号文ca、cbは、図6に示す平文を有する暗号文である。ただし、演算対象の暗号文は円周群{T}の右半面のみを使用する。以下の説明で行う乗算は、符号無し(正の整数)を平文として有する暗号文同士の乗算である。
平文として、正の整数のみを扱うことを前提とすれば、上記に説明した符号付きの乗算よりも少ない処理で高速に乗算を行うことが出来る。
[第2実施例]においても、本実施形態では、暗号処理装置1は、上記論文(非特許文献1)で提示されているPrivate Key Switchingを用いて、乗数のTLWE暗号文から階段状の多項式を平文として有するTRLWE暗号文を生成する。そして、暗号処理装置1は、得られたTRLWE暗号文に対して、被乗数のTLWE暗号文によるBlindRotateを行うことによって乗算を実現する。
なお、この[第2実施例]では、負の整数の平文のために円周群{T}の左半面を使用しないため、左半面の上下を反転させるための事前処理である一変数関数fidを用いたBootstrappingを行わない。そして、階段状の多項式(一変数関数fid、キースイッチングキーKS1において平文(多項式の係数)に0.5のオフセットを付加すること、最後に0.5を戻すことも行わない。
【0097】
図12は、本実施形態の第2実施例に基づく暗号処理装置の機能構成を説明する図である。
図13は、図12の機能構成に基づく演算プロセスを説明する図である。
図12図13に示す[第2実施例]では、事前処理を行う第5算出部21、第6算出部22、第4演算部15を有さない点、第2算出部が直接TLWE暗号文cc’を出力する点で、図1図2とは異なる。
乗算処理を行うための(1)~(7)の処理を説明する。
(1)暗号処理装置1(第1Bootstrapping部16)は、テストベクタ多項式
を用いてTLWE暗号文cbに対してGate Bootstrappingを行い、TLWE暗号文cb’を得る。
このGate Bootstrappingの結果、暗号文の平文の分母が2tから2tに変化しており、円周群の右半面をt=8分割したTLWE暗号文cbがt=64分割したTLWE暗号文cb’に変換されている。
TLWE暗号文cbは、t=8分割した円周群の0~0.5(右半面)に0~(t-1)までの整数を対応させた暗号文である。
この時点でTLWE暗号文cb’の平文の分子はTLWE暗号文cbと変わっていないので、TLWE暗号文cb’は、t=64分割した円周群の0~0.5(右半面)のさらに下半面に0~(t-1)までの整数を対応させている。
TLWE暗号文cb、TLWE暗号文cb’の他のパラメータは後述する。後述するように、実際にはレベルの上下が関係してくるからである。
【0098】
(2)暗号処理装置1(鍵交換部30)は、TLWE暗号文cb’に対してキースイッチングキーKS1を用いてPrivate Key Switchingを行い、TRLWE暗号文ccを得る。暗号文ccの秘密鍵は[s’]である。
[第2実施例]では、f’’(x)として、以下の階段状の多項式を得る関数を設定し、キースイッチングキーKS1を事前に計算する。
TRLWE暗号文ccを秘密鍵[s’]で復号した結果、
となる。
暗号文ccの平文は、平文多項式
であり、円周群の右半面をt分割(0、1、2、3…)して、TLWE暗号文cbの平文の値ずつ階段状に係数が増加していく多項式という結果が得られている。TLWE暗号文cbが平文として3の値を有していたとき、Private Key Switchingの結果、円周群の右半面と対応する次数の項の係数には、暗号文cbの平文(3)の倍数である0、3、6、9、12と並んだ平文多項式が得られる。
【0099】
(3)暗号処理装置1(第2Bootstrapping部)は、第2Bootstrappingとして、TRLWE暗号文ccを、TLWE暗号文caを用いてBlindRotateし、SampleExtractを行ってTLWE暗号文cc’を得る。暗号文cc’の秘密鍵は[s’]である。
TLWE暗号文caを2n倍したTLWE暗号文ca’は{a/(2t)}×2nから、平文としてan/tを有する。
従って、φs’(cc’)の平文多項式のうち、指数がan/t+n/(2t)近傍である項が、定数項として得られる。
つまり、φs’(cc’)=ab/(2t)となり、TLWE暗号文cc’は、平文としてab/(2t)を有する。平文整数aと平文整数bの積が得られており、TLWE暗号文cc’は平文整数aと平文整数bの積に対応する暗号文である。
具体的に、第2Bootstrappingの結果、TLWE暗号文cb’の平文多項式に基づく3の倍数の整数0、3、6、9、12が並んでいるなか、TLWE暗号文caの平文整数a+1番目(aは0を含むため)の値を得るため、TLWE暗号文caの平文整数aが2のときには、TLWE暗号文cc’として3番目の6の値を得る。実際に、a×bの解として、2×3=6の値が得られ、乗算が正しく行われている。
以降、乗算結果の下位ビットのTLWE暗号文cl、上位ビットのTLWE暗号文cu’を算出するための処理は、上述の符号付き乗算の場合の(4)以降の処理と同じであるため、説明を省略する。CMuxをループすることで、Private Key Switchingの代替とすることもできることも同じである。
【0100】
[第2実施例]に係る処理の流れは、ステップS101、ステップS102の準備処理を行わず、ステップS107の減算処理に行わずにステップS106で暗号文cc’を直接算出することを除いて、図9のフローチャートと同じである。
【0101】
[第3実施例]
暗号処理装置1はさらに、[第1実施例]、[第2実施例]で説明した整数aを平文として有するTLWE暗号文caと整数bを平文として有するTLWE暗号文cbの乗算の過程で得られるTLWE暗号文cc’に対して、整数eを平文として有するTLWE暗号文ce、あるいは整数eを平文として有する自明な暗号文の準同型加算を行うことで、下記に説明するTLWE暗号文caとTLWE暗号文cbの乗算とほぼ同じ手順で整数a×b+eを平文として有する暗号文を算出することが出来る。
【0102】
単純に、a×bに対応する暗号文の乗算を行った後でeに対応する暗号文を加算すると、加算によって繰り上がり、繰り下がりが発生する場合がある。そのため、繰り上がり、繰り下がりを示す暗号文を算出するために平文a×bと平文eの比較結果に対するBlindRotateを複数回行う必要があり、そのために多大な計算時間が必要となる。
それに対して、[第3実施例]では、暗号文caとcbの乗算処理の過程に平文eに対応する暗号文の加算を組み込むことで、第3Gate Bootstrapping、第4Gate Bootstrappingに加えて、繰り上がり、繰り下がりのためのBlindRotateを行う必要が無く、FMA(Fused Multiply-Add)の演算を著しく高速化することが出来る。
整数a×b+eを算出するための手順は、TLWE暗号文ceを途中で準同型加算する以外は、[第1実施例]、[第2実施例]で説明した乗算の手順と同じ手順であり、BlindRotateの回数も同じである。
下記の説明において、整数a×b+eの暗号文を算出するための方法を単に乗算方法として示す。また、準同型加算の代わりに準同型減算を組み込み、整数a×b-eの暗号文を算出することも可能である。
【0103】
a×b+eの形式の演算は、FMA、融合積和演算として知られている。FMAは、例えば、生体認証などに応用しうるベクトル同士の内積(内積距離)の計算に利用しうる。
簡単な例として、3つの要素がそれぞれ暗号化された3次元ベクトル[a]=(要素aの暗号文,要素aの暗号文,要素aの暗号文)と、3次元ベクトル[b]=(要素bの暗号文,要素bの暗号文,要素bの暗号文)の内積[a]・[b]を求めるときには、要素毎に乗算を行った結果を全て加算することが行われる。従って、暗号処理装置1は、aの暗号文・bの暗号文+aの暗号文・bの暗号文+aの暗号文・bの暗号文、を計算する。
FMAを用いずに上記演算を行う場合、単純にaの暗号文とbの暗号文の乗算結果、aの暗号文とbの暗号文の乗算結果、aの暗号文とbの暗号文の乗算結果をそれぞれ計算するところまでで乗算演算3回分のBlindRotateが必要となる。ここからさらに、各乗算結果を合計するために準同型加算を要素数(ベクトルの次数)-1回行う必要がある。ここで、特に各要素の値に制約がない場合、繰り上がりや繰り下がりを考慮する必要があるため、その判定のために追加のbootsteappingもしくはBlindRotateが必要となる。
つまり[第1実施例]、[第2実施例]で説明したBlindRotateの回数を3倍した数に、さらに繰り上がりや繰り下がりの処理に必要なBlindRotateの回数の2倍の数のBlindRotateを、内積の計算全体で行うことになる。
【0104】
一方、FMAを用いる場合、aの暗号文・bの暗号文+aの暗号文・bの暗号文+aの暗号文・bの暗号文の計算を以下のように行うことが出来る。
暗号処理装置1は、aの暗号文とbの暗号文の乗算結果の途中で得られるTLWE暗号文cc’を上記のTLWE暗号文ceに対応付け、aの暗号文とbの暗号文の乗算を、上記のTLWE暗号文caとTLWE暗号文cbの乗算に対応付けることで、aの暗号文・bの暗号文+aの暗号文・bの暗号文、の計算を乗算の手順の前半部分(TLWE暗号文cc’を求めるまで)を1回と、乗算の手順全体を1回で行うことが出来る。
さらに暗号処理装置1は、上記で求めたaの暗号文・bの暗号文+aの暗号文・bの暗号文の演算結果の暗号文を暗号文ceに対応付け、aの暗号文とbの暗号文の乗算を、暗号文caと暗号文cbに対応付けることで、aの暗号文・bの暗号文+aの暗号文・bの暗号文+aの暗号文・bの暗号文、の計算を乗算の手順1回で行うことが出来る。
FMAを用いたことで、ベクトル同士の内積に対応する計算を、乗算とほぼ等しい演算処理を全部で2回と、乗算の演算処理の前半部分を1回行うことで実行することが出来、これは乗算全体を3回行うよりも少ない計算量で済む。FMAを用いない場合は、乗算3回に加えてさらに繰り上がりや繰り下がりの処理が必要になることと比べると遥かに高速に処理できると言える。
ベクトルの要素が2つの場合や、3よりも多い場合も、同様に行うことが出来る。
【0105】
また、誤差の許容範囲が許すのであれば、TLWE暗号文cc’に加えるTLWE暗号文の数を増やすことも考えられる。例えば、aの暗号文とbの暗号文の乗算の途中で得られるTLWE暗号文cc’をce1とする。同様にaの暗号文とbの暗号文の乗算の途中で得られるTLWE暗号文cc’をce2とする。TLWE暗号文同士の準同型加算結果ce1+ce2の演算結果の暗号文を暗号文ceに対応付け、aの暗号文とbの暗号文の乗算を、暗号文caと暗号文cbに対応付けることで、aの暗号文・bの暗号文+aの暗号文・bの暗号文+aの暗号文・bの暗号文、の計算を行うことができる。この場合は、乗算演算の前半部分を2回と、乗算演算の手順全体を1回で済んでいる。
下記にも説明するが、いずれの場合も、a×b+eに対応する準同型加算を、平文の分母が2tである段階で行うことが望ましい。また整数a×b-eの暗号文を算出する場合は、平文の分母が2tである段階で準同型減算を行うことが望ましい。分母が2tである段階では1つのTLWE暗号文に記憶できる整数の値域が-tからt-1と広いため、準同型加算又は準同型減算を行うことによる繰り上がりや繰り下がりの発生を考慮する必要がないためである。
【0106】
具体的に暗号処理装置1は、以下の処理によってFMAを実現する。
暗号処理装置1は、図2図13の[第1実施例]、[第2実施例]に加えて、ab/(2t)を平文として有するTLWE暗号文cc’に対して、e/2tを平文として有する暗号文ce、あるいはe/2tを平文として有する自明な暗号文(0,e/2t)を準同型加算し、新たなTLWE暗号文cc’を得る。新たなTLWE暗号文cc’は、平文として(ab+e)/2tを取り得る。
暗号処理装置1は、この新たな暗号文cc’に対して、[第1実施例]、[第2実施例]と同様に、第1演算部12、第2演算部13、第3Bootstrapping部18による処理を行うことで、(ab+e)/2tを平文として有する、a×b+eの演算結果の下位ビットのTLWE暗号文clを算出する。TLWE暗号文clは、(ab+e mod t)/2tを平文として有する。
さらに、暗号処理装置1は、TLWE暗号文clに対して第4Bootstrapping部19による処理を行い、(ab+e mod t)/2tを平文として有するTLWE暗号文cl’を算出する。暗号処理装置1は、TLWE暗号文cl’を第3演算部14に入力し、TLWE暗号文cl’とab+eに対応する新たなTLWE暗号文cc’との準同型減算を行ってTLWE暗号文cuを得る。TLWE暗号文cuは、{(ab+e)-(ab+e mod t)}/2tを平文として有し、暗号処理装置1は、TLWE暗号文cuをPublic KeyswitchingすることによってTLWE暗号文cu’を得る。
【0107】
[第1実施例]で説明した円周群の全面を使った符号付き乗算の場合、図2において、例えば第4演算部15が、TLWE暗号文cc’に対して、TLWE暗号文ce又は自明な暗号文(0,e/2t)を準同型加算して新たなTLWE暗号文cc’を算出する。第4演算部15が算出した新たなTLWE暗号文cc’に対して、第1演算部12、第3Bootstrapping部18、第2演算部13による処理を行い、必要な場合、第4Bootstrapping部19、第3演算部14による処理をさらに行う。
あるいは、第4演算部15がTLWE暗号文cc’を算出した後、第1演算部12が、TLWE暗号文cc’に対して暗号文ce又は自明な暗号文(0,e/2t)を準同型加算して新たなTLWE暗号文cc’を算出したうえでこれをt倍し、その結果に対して第3Bootstrapping部18、第2演算部13による処理を行ってもよい。
【0108】
[第2実施例]で説明した円周群の右半面だけを使った符号なし乗算の場合、図13において、第2Bootstrapping部17が、TLWE暗号文cc’を算出した後、例えば、第1演算部12が、TLWE暗号文cc’に対してTLWE暗号文ce又は自明な暗号文(0,e/2t)を準同型加算して新たなTLWE暗号文cc’を算出したうえでこれをt倍し、その結果に対して第3Bootstrapping部18、第2演算部13による処理を行う。必要な場合、第4Bootstrapping部19、第3演算部14による処理をさらに行う。
【0109】
いずれの場合でも、新たなTLWE暗号文cc’に対する整数eの暗号文の準同型加算又は準同型減算は、新たなTLWE暗号文cc’を第1演算部12によってt倍して平文の分母を2tとする前に行うことが望ましい。平文同士の計算としては、例えばab/2t+e/2tに対応する。平文の分母が2tである段階では1つのTLWE暗号文に記憶できる整数の値域が-tからt-1と広いため、準同型加減算を行うことによる繰り上がりや繰り下がりの発生を考慮する必要がない利点がある。
一方で、乗算処理の過程で準同型加算を行う場合であっても第1演算部12でTLWE暗号文cc’をt倍した暗号文に対して整数eの暗号文を準同型加減算する場合には、平文同士の計算としては、ab/2t+e/2tとして行うことになる。この場合は、1つのTLWE暗号文に記憶できる整数の値域が-tからt-1と狭く準同型加減算による繰り上がりや繰り下がりの発生を考慮する必要があるため、その判定のために追加のbootsteappingもしくはBlindRotateが必要となる。
【0110】
[第4実施例]
暗号処理装置1は、[第1実施例]の符号付き乗算、[第2実施例]の符号なし乗算、[第3実施例]のFMAを応用し、カラツバ法と呼ばれる手法によって多倍長演算(乗算)を高速化することができる。
被乗数Xと乗数Yの積Zを求めるとき、被除数Xと乗数Yを、基数kに基づいて2分割して計算する場合は
X=x・k+x
Y=y・k+y
と分割し、積Zは、
Z=z・k+z・k+z
と表すことが出来る。
【0111】
積Zを構成するz、z、zの暗号文を算出するために、
=xの暗号文×yの暗号文
=xの暗号文×yの暗号文
=xの暗号文×yの暗号文+xの暗号文×yの暗号文
の演算を行うため、カラツバ法を用いない場合は、全体で4回の乗算を行う必要がある。 これは2桁の整数を通常の筆算で計算するのと同じ計算方法である。
一般に乗算は、扱う桁数が増えるほど計算が複雑になるため、乗数と被乗数を2分割することにより、それぞれの乗算で扱う桁数が半分で済むというメリットがある。これを再帰的に繰り返すことで、直接乗算の計算が可能な桁数まで値を小さくすることができる。
【0112】
それに対して、カラツバ法では、z、z、zのうち特にzの暗号文を、
-(xの暗号文-xの暗号文)×(yの暗号文-yの暗号文)+zの暗号文+zの暗号文
として求める。
(xの暗号文-xの暗号文)と(yの暗号文-yの暗号文)は夫々暗号文同士の準同型減算結果である。平文xと平文xの値、平文yと平文yの値によっては、準同型減算結果は負の値となる場合がある。準同型減算結果が何れも正であっても、-(xの暗号文-xの暗号文)×(yの暗号文-yの暗号文)は符号付きの乗算を行う必要がある。
従って、(xの暗号文-xの暗号文)×(yの暗号文-yの暗号文)について、[実施例1]の円周群の全面を使った符号付き乗算を行う。平文x-平文xに対応する暗号文が暗号文ca、平文y-平文yに対応する暗号文が暗号文cbに対応する。
の暗号文+zの暗号文-(xの暗号文-xの暗号文)×(yの暗号文-yの暗号文)は、zの暗号文+zの暗号文を上記TLWE暗号文ceに対応付け、(xの暗号文-xの暗号文)×(yの暗号文-yの暗号文)を上記TLWE暗号文caとTLWE暗号文cbの乗算と対応付けるとFMAと同じかたちであり、[第3実施例]と同様に、乗算の演算処理1回でzの暗号文を計算することが出来る。
なお、zの暗号文+zの暗号文は、いずれも上位と下位に分解する前の、TLWE暗号文cc’として得られるTLWE暗号文を使用する必要がある。
【0113】
図14は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、特に第1Bootstrappingなど、図14(a)に示すように、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図14(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図14(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、Public Key Switchingの結果、LEVEL0のTLWE暗号文が出力される。
それに対して図14(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にPublic Key Switchingを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0114】
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の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0115】
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、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を行うことで、所要時間の増加を避けることが出来る。
【0116】
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域を2t個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできる。円周群を分割した個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0117】
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
[応用例]
暗号処理装置1が行う処理は、以下のように応用することが出来る。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベースから、特定のフィールドが一定の範囲内のものを集約したい場合(例えば、30~39歳の平均年収を求めたい場合など)を考える。
このとき、暗号処理装置1は暗号化されたデータベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
暗号化されたデータベースではインデックスを作成することができないため、データベース全体に対する比較と集約が必要である。
【0118】
暗号処理装置10は、第1演算部12、第2演算部13、第3演算部14、第4演算部15、第1Bootstrapping部16、第2Bootstrapping部17、第3Bootstrapping部18、第4Bootstrapping部19、第5Bootstrapping部21、第6Bootstrapping部22、鍵交換部30の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
比較演算は、レコードとクエリの暗号文同士で減算を行うことであり、減算結果の正負が比較演算の等価となる。
暗号処理装置1はさらに、比較演算でクエリと一致したレコードに対する集約演算を行うことが出来る。
集約演算において、暗号処理装置1は、比較演算でクエリと一致したレコードを加算して合計を演算し、さらに除算を用いて平均値を求める。
このように、暗号化されたデータベースに対するクエリの処理には、暗号文を構成する整数同士の加算、減算、乗算、除算などの四則演算、や比較(比較は減算結果の正負と等価である)を行う必要がある。
特に、重み付け平均値を求める場合には、レコードと重み付け係数との乗算などが必要となる。そして、Bit-wise型の暗号文を用いる場合、処理には全加算器演算が多用されることが考えられる。そして、扱う整数のビット長が大きくなれば必要となる全加算器の数も増加する。四則演算とは、入力された暗号文を用いた順列を二進数で表記した際の各ビットの暗号文とみなした暗号化された数値同士に対して準同型な四則演算である。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、クエリの実行時間を著しく低減することが可能となる。
【0119】
このようなデータベースの集約に限らず、整数同士の四則演算や比較は、暗号文を用いた様々なデータ処理で多用される。
他の例として、ファジー認証やファジー検索が挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、上記の暗号化されたデータベースにおける比較演算・集約演算と同様に、暗号化されたデータベースとクエリとの比較を行い、その際には、準同型暗号により暗号化されたデータで比較演算を行う必要がある。提示された生体認証データと登録された生体認証データの一致度として内積を求める場合に、乗算を行う必要がある。
【0120】
またファジー認証やファジー検索において比較を行う際、ユークリッド距離が用いられることが多い。ユークリッド距離を演算する際には2乗の演算が必要となる。Bit-wise型の準同型暗号では、乗算を行う際にデータのビット長に対して、O(N)の全加算器を演算しなければならない。また単純な減算による比較演算でも、O(N)の全加算器を演算する必要がある。本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、ファジー認証やファジー検索に要する処理時間を大幅に低減することが出来る。
【0121】
図15は、コンピュータ装置の一実施例を示すブロック図である。
図15を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0122】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、図1における制御部10として機能する。
【0123】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、図1における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、図1における記憶部20として機能する。
【0124】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、第6Bootstrapping処理、鍵交換処理、出力処理のいずれか1以上を含む処理を実行する。
なお、プログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0125】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0126】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、図1において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、図1において、入力部26として機能する。
【0127】
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
【符号の説明】
【0128】
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