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

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

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

特許7084067暗号処理装置、暗号処理方法、及び暗号処理プログラム
<>
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図1
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図2
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図3
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図4
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図5
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図6
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図7
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図8
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図9
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図10
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図11
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図12
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図13
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図14
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図15
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図16
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図17
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図18
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図19
  • 特許-暗号処理装置、暗号処理方法、及び暗号処理プログラム 図20
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2022-06-06
(45)【発行日】2022-06-14
(54)【発明の名称】暗号処理装置、暗号処理方法、及び暗号処理プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20220607BHJP
【FI】
G09C1/00 620Z
【請求項の数】 8
(21)【出願番号】P 2021131701
(22)【出願日】2021-08-12
【審査請求日】2022-03-03
(31)【優先権主張番号】P 2021053360
(32)【優先日】2021-03-26
(33)【優先権主張国・地域又は機関】JP
【早期審査対象出願】
(73)【特許権者】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
(72)【発明者】
【氏名】松岡 航太郎
【審査官】松平 英
(56)【参考文献】
【文献】特表2019-514301(JP,A)
【文献】米国特許出願公開第2021/0075588(US,A1)
【文献】中国特許出願公開第111931243(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/14
21/00-21/88
G09C 1/00-5/00
H04K 1/00-3/00
H04L 9/00-9/40
(57)【特許請求の範囲】
【請求項1】
暗号文を処理する暗号処理装置であって、
前記暗号文は、シンボル0または1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能な完全準同型暗号文であり、
所定の順序で配列される第1暗号文の平文と第2暗号文の平文の夫々に対応する新たな暗号文を、前記順序と同じ又は逆の順序で得ることができ、
前記新たな暗号文の順序を第3暗号文の平文に基づいて選択可能な処理を行い、
前記処理において、
平文として2値よりも多い多値を有する前記暗号文に基づく一時暗号文を出力することにより前記処理に必要な計算の回数を削減する、
ことを特徴とする暗号処理装置。
【請求項2】
請求項1に記載の暗号処理装置において、
誤差の重なりが所定値以内となるように前記誤差を設定することにより、前記暗号文を用いて前記一時暗号文を出力する際の多項式による演算の回数を削減する、
ことを特徴とする暗号処理装置。
【請求項3】
請求項1又は2に記載の暗号処理装置において、
入力された前記暗号文に対して前記所定の演算に係る準同型演算を行う演算部と、
前記演算部による準同型演算の結果に対して、所定の多項式を用いて新たな暗号文を算出する算出部と、を備え、
前記演算部による準同型演算の結果に対して、所定の多項式を用いて新たな暗号文を算出するまえに暗号文の係数の数を削減する、
ことを特徴とする暗号処理装置。
【請求項4】
請求項1乃至3の何れか一項に記載の暗号処理装置において、
前記処理を実行することによりバブルソートを行う
ことを特徴とする暗号処理装置。
【請求項5】
請求項1乃至3の何れか一項に記載の暗号処理装置において、
入れ替える暗号文は、暗号化データベースに格納される値を集約した集約用テーブルに格納される値であり
前記暗号化データベースに格納される値は、集約の基準となる複数の基準値と、各基準値に関連付けられた値と、を含み、
前記集約テーブルは、前記複数の基準値と、前記暗号化データベースにおいて各基準値に付けられた値の集約結果と、を含み、
前記集約用テーブルが備える集約用基準値と、前記暗号化データベースが備える基準値と、を比較した比較結果に基づいて、集約用基準値に対応する前記暗号化データベースの値を、集約用基準値に対応づけて前記集約用テーブルにおいて集約することによって前記暗号化データベースを集約し、
集約後の前記集約用テーブルに対して前記処理を実行することを特徴とする暗号処理装置。
【請求項6】
請求項5に記載の暗号処理装置において、
前記基準値と前記集約用基準値は複数ビットの値よりなり、
一の前記基準値と、一の前記集約用基準値とをビットごとに比較した結果を集計することによって比較を行い、
前記比較結果と、前記基準値に対応する値と、に基づく値を前記集約テーブルにおける対応する合計値に加算することにより前記暗号化データベースを集約する、
ことを特徴とする暗号処理装置。
【請求項7】
プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
前記暗号文は、シンボル0または1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能な完全準同型暗号文であり、
所定の順序で配列される第1暗号文の平文と第2暗号文の平文の夫々に対応する新たな暗号文を、前記順序と同じ又は逆の順序で得ることができ、
前記新たな暗号文の順序を第3暗号文の平文に基づいて選択可能な処理を行い、
前記処理において、
平文として2値よりも多い多値を有する前記暗号文に基づく一時暗号文を出力することにより前記処理に必要な計算の回数を削減する、
ことを特徴とする暗号処理方法。
【請求項8】
暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
前記暗号文は、シンボル0または1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能な完全準同型暗号文であり、
所定の順序で配列される第1暗号文の平文と第2暗号文の平文の夫々に対応する新たな暗号文を、前記順序と同じ又は逆の順序で得ることができ、
前記新たな暗号文の順序を第3暗号文の平文に基づいて選択可能な処理を行い、
前記処理において、
平文として2値よりも多い多値を有する前記暗号文に基づく一時暗号文を出力することにより前記処理に必要な計算の回数を削減する、
ことを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号文を処理する暗号処理装置、暗号処理方法、及び暗号処理プログラムに関する。
【背景技術】
【0002】
準同型暗号(Homomorphic Encryption)は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことができる暗号方式である。平文同士での加算に対応する暗号文同士の演算が存在する暗号が加法準同型暗号であり、平文同士での乗算に対応する暗号文同士の演算が存在する暗号が乗法準同型暗号である。
有限巡回群を整数に見立てて、加法演算(加算、減算)、乗法演算(乗算)のみを行う加法準同型暗号、乗法準同型暗号が以前から知られていた。
有限巡回群は、加算を繰り返せば整数倍ができるので、「平文の」整数倍ができ、乗算を繰り返せば「平文の」のべき乗計算をすることもできる。
また、加法演算(加算、減算)と乗法演算(乗算)の両方を暗号化したまま処理する完全準同型暗号(Fully Homomorphic Encryption,FHE)がある。
現在知られている完全準同型暗号では、複数回の加減算、乗算が可能な、例えばLWE問題に基づくsomewhat準同型暗号を用いる。LWE問題に基づく場合、somewhat準同型暗号は、暗号化時に復号には問題ない程度の小さな誤差を平文に加えることで構成される。なお、somewhat準同型暗号はLWE暗号に限定されない。
【0003】
LWE問題に基づくsomewhat準同型暗号では演算を行うとともに誤差が蓄積していくので、誤差が大きくなりすぎて復号ができなくなる前に、暗号化したまま誤差成分を縮小するbootstrappingを行う。
このようなbootstrappingは膨大なデータ量が必要となったり計算量が膨大となったりし、実用的な意味で完全準同型暗号が実現できていたとは言えなかった。
この問題を劇的に改善した手法が、非特許文献1(以下の説明において、上記論文として参照される)に示されるTFHE(Fast Fully Homomorphic Encryption over the Torus)である。
【先行技術文献】
【特許文献】
【0004】
【文献】TFHE:Fast Fully Homomorphic Encryption over the Torus. Journal of Cryptology, 33:34-91, 2020, I.Chillotti, N.Gama, M.Georgieva, and M.Izabachene
【発明の概要】
【発明が解決しようとする課題】
【0005】
TFHEをはじめとする準同型暗号は、格納される値やデータを暗号化した暗号化データベースを実現するための暗号としても注目されている。
上記のとおり、準同型暗号は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことができる暗号方式である。
暗号化されたデータベースではインデックスを作成することはできないが、データベース上の値だけでなくクエリも準同型暗号で暗号化することにより、いずれをも復号することなく内容を秘匿したまま検索などの操作を行うことができる。
また、暗号化されたデータベースに対する操作としては、データベース上の値をカテゴリごとに集約し、集約結果を昇順や降順に入れ替える操作も考えられる。
本発明は、一側面として、暗号化されたデータベースに対する入れ替え処理を効率化することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、暗号文を処理する暗号処理装置であって、前記暗号文は、シンボル0または1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能な完全準同型暗号文であり、所定の順序で配列される第1暗号文の平文と第2暗号文の平文の夫々に対応する新たな暗号文を、前記順序と同じ又は逆の順序で得ることができ、前記新たな暗号文の順序を第3暗号文の平文に基づいて選択可能な処理を行い、前記処理において、平文として2値よりも多い多値を有する前記暗号文に基づく一時暗号文を出力することにより前記処理に必要な計算の回数を削減する、暗号処理装置を特徴とする。
【発明の効果】
【0007】
本発明によれば、一側面として、暗号化されたデータベースに対する入れ替え処理を効率化することができる。
【図面の簡単な説明】
【0008】
図1】暗号文の条件付き入れ替えを行うための暗号演算処理部の構成を説明する図である。
図2】本実施形態の暗号処理装置の機能構成を説明する図である。
図3】本実施形態の暗号処理装置の演算プロセスを詳しく説明する図である。
図4】TLWE暗号が平文として有する円周群を説明するイメージ図である。
図5】2値Gate Bootstrappingの動作イメージ図である。
図6】暗号化されたデータベースの一例を示す図である。
図7】空の応答としてのテーブルの一例を示す図である。
図8】集約結果テーブルの一例を示す図である。
図9】暗号処理装置による暗号化データベース集約処理の流れを説明するフローチャートである。
図10】第1のステップのGate Bootstrappingの動作を説明する図である。
図11】第2のステップのGate Bootstrappingの動作を説明する図である。
図12】第3のステップのGate Bootstrappingの動作を説明する図である。
図13】本実施形態の条件付き入れ替え処理において暗号文が取り得る値を示す図である。
図14】暗号処理装置による集約結果ソート処理の流れを説明するフローチャートである。
図15】ソート処理を完了後の集約結果テーブルの一例を示す図である。
図16】変形例に係る暗号処理装置の機能構成を説明する図である。
図17】変形例に係る暗号処理装置の演算プロセスを詳しく説明する図である。
図18】変形例に係る集約結果ソート処理の流れを説明するフローチャートである。
図19】本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
図20】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の論理演算のことを指すものとする。
【0010】
本実施形態は、下記に詳しく説明するように、暗号化されたデータベース(暗号化データベース)に対する操作を行う暗号処理装置に関する。
本実施形態の暗号処理装置は、暗号化した値を格納した暗号化データベースを、特定の基準値に基づいて集約した集約結果に対して、暗号文を復号することなく、昇順又は降順で入れ替えを行う。
このようなデータベースの値を暗号文のまま入れ替える場合、平文データベースを入れ替える場合や暗号化データベースの値を復号してから入れ替える場合と異なり、値の大小関係で簡単に入れ替えることはできない。
その場合、暗号処理装置は、下記に説明するように、条件付き入れ替えの基準となる暗号文avと暗号文bvとの引き算を行って暗号文czを得る。暗号文czは、暗号文avと暗号文bvの大小関係を示すボロービットである。
暗号処理装置は、条件付き入れ替えの対象となる、暗号文av、bvに夫々対応する暗号文az及び暗号文bzと、上記暗号文czとを、図1に示すマルチプレクサ(MUX)演算文を用いた暗号演算処理部に入力し、新たな暗号文az’、新たな暗号文bz’を得る。そして暗号処理装置は、暗号文az、暗号文bzを夫々、暗号文az’、暗号文bz’で置き換えることによって入れ替えを行う。
【0011】
図1は、暗号文の条件付き入れ替えを行うための暗号演算処理部を例示する図である。
図1は、論理演算素子によるハードウェア回路で暗号演算処理部を説明しているが、暗号演算処理部をソフトウェアで実装したCPUが実行する入れ替えプログラムであると考えてもよい。
暗号演算処理部をソフトウェアで実装するとき、暗号文に対して論理回路(論理ゲート)を設計するイメージで演算を行う。
図1(a)に示すように、暗号演算処理部50は2つのMUX演算部51、52を備える。
MUX演算部51、52は、1つの暗号文czによって、2つの暗号文az、bxを選択する論理演算を行う。
第1MUX演算部51と第2MUX演算部52に、夫々暗号文az、bx、cxが入力される。
第1MUX演算部51に対しては、入力0に暗号文azを入力し、入力1に暗号文bzを入力し、出力として暗号文az’を得る。
第2MUX演算部52に対しては、入力0に暗号文bzを入力し、入力1に暗号文azを入力し、出力として暗号文bz’を得る。
このようにすると、暗号文czがビット「0」の時には、暗号文az’、暗号文bz’は暗号文az、暗号文bzと同じ並び順となり、暗号文czがビット「1」の時には、az’、暗号文bz’は順序が入れ替わり暗号文bz、暗号文azの並び順で出力される。
【0012】
図1(b)に示すように、一つのマルチプレクサは、2つのAND回路53、54と、1つのNOT回路部55と、1つのOR回路56とから構成される。
第1AND回路部53、第2AND回路部54は、ANDを得るための演算処理部である。
NOT回路部55は、NOTを得るための演算処理部である。
OR回路部56は、ORを得るための演算処理部である。
図1の2つのマルチプレクサは同じ構成を有している。
MUX演算部51において、暗号文azと暗号文czが第1AND回路部53に入力される。
暗号文czは、NOT回路部55にも入力され、その出力と、暗号文bzとが第2AND回路部54に入力される。
第1AND回路部53の出力と第2AND回路部54の出力とがOR回路部56に入力され、OR回路部56の出力がマルチプレクサの出力として出力される。
また、MUX演算部52において、暗号文bzと暗号文czが第1AND回路部53に入力される。
暗号文czは、NOT回路部55にも入力され、その出力と、暗号文azとが第2AND回路部54に入力される。
第1AND回路部53の出力と第2AND回路部54の出力とがOR回路部56に入力され、OR回路部56の出力がマルチプレクサの出力として出力される。
上記の構成によって、MUX演算部51、52は、夫々(cz AND az)OR((NOT cz) AND bz)、(cz AND bz)OR((NOT cz) AND az)の論理演算を実行する。
【0013】
MUX演算部51、52は、夫々2つのAND回路部と、1つのOR回路部と、1つのNOT回路部と、を備え、すなわち4つの論理演算素子(論理演算素子に対応する処理部)を備えている。従って、1回のマルチプレクサの演算につき、論理演算素子4つ分の演算時間が必要である。TFHEによる完全準同型暗号の演算に用いる場合、論理演算素子(AND回路部、OR回路部)の演算(準同型演算)の後段で、夫々Gate Bootstrappingを行う必要がある。なおNOT回路部55にGate Bootstrappingは不要である。従って、MUX演算部51、52における2つのAND回路部53、54と1つのOR回路部55で、3回のGate Bootstrappingを行う。
条件付き入れ替え処理において新たな暗号文を演算する1回の演算処理において、MUX演算部51の処理を実行し、もう一つの新たな暗号文のためにMUX演算部52の処理を行う。上記のようにMUX演算部51、MUX演算部52によって夫々3回のGate Bootstrappingを行う必要がある。従って、図1の暗号演算処理部50による完全準同型暗号の演算には、膨大なGate Bootstrappingの演算時間を要し、実用的に暗号化データベースを操作できるとは言えない。
【0014】
これに対して、上記論文には、図1の構成を用いた改良したHomMUXと呼ばれる手法を提案している。これによれば、THFEのマルチプレクサ(HomMUX)演算を1回の比較につき2回行う点は上記と同じである。
MUX演算1回につきGate Bootstrappingを2回行う場合と同じだけの処理時間を要するため、MUX演算2回ではBlindRotate4回分(4ゲート分)の計算時間を要する。必要なソートを全て行うためには膨大な処理時間がかかることには違いがない。
【0015】
本実施形態の暗号処理装置は、このような暗号化データベースに対する操作に要する処理時間を削減して実用的なものにする。
暗号化データベースに対する操作の説明に先だって、本実施形態の暗号処理装置が行う完全準同型暗号の演算について説明する。
【0016】
図2は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1演算部12と、第2演算部13と、第3演算部14と、第1Bootstrapping部(第1算出部)15と、第2Bootstrapping部(第2算出部)16と、第3Bootstrapping部(第3算出部)17と、出力部18と、を備えている。
また、制御部10は、集約部21と、比較部22と、置換部23とを備えている。
【0017】
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第1演算部12は、受付部11が受け付けた入力暗号に対して、第1準同型演算を行う。
第2演算部13は、第1Bootstrapping部15から出力される暗号文に対して、第2準同型演算を行う。
第3演算部14は、第2Bootstrapping部16から出力される暗号文に対して、第3準同型演算を行う。
第1演算部12、第2演算部13、及び第3演算部14は、下記に説明する暗号化データベースに対する集約・入れ替え操作のための準同型演算をソフトウェアで実現する演算処理部である。第1演算部12、第2演算部13、及び第3演算部14の少なくとも一つが、ハードウェアで実現されてもよい。
【0018】
第1Bootstrapping部15は、第1演算部12の演算結果に対して下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
第2Bootstrapping部16は、第2演算部13の演算結果に対して下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
第3Bootstrapping部17は、第3演算部14の演算結果に対して下記に説明するGate Bootstrapping処理を行い、新たな暗号文を出力する。
集約部21は、暗号化データベースを集約するための処理を行う。
比較部22は、集約結果のソート(条件付き入れ替え)のために、隣接する暗号文同士を比較する。
置換部23は、暗号化データベースの集約結果をソートするために、比較部22による比較結果に基づいて、第1~第3演算部12~14、第1~第3算出部15~17の処理によって得られた新たな暗号文で、元の暗号文を置き換える。
【0019】
出力部18は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、条件付き入れ替えの演算で用いられる一時ファイルや一時データ、出力暗号文を格納することができる。
また記憶部20には、暗号化された暗号化データベース60を格納することができる。
通信部25は、暗号処理装置1をネットワークに接続し、外部装置との通信を可能にする。
記憶部20に暗号化された暗号化データベース60を格納し、通信部25を備えることにより、暗号処理装置1は、データベースサーバとして機能することができる。
この場合、暗号処理装置1は、外部装置としての端末装置から、暗号化されたクエリを受け付け、暗号化された暗号化データベース60に対する検索を行い、暗号化された検索結果を端末装置に応答することができる。
入力部26は、暗号処理装置1に対して、演算処理対象の暗号文や、暗号化データベース60に対するクエリを入力する。
【0020】
図3は、本実施形態の暗号処理装置の演算プロセスを詳しく説明する図である。
図3の説明において、暗号処理装置1に入力される暗号文az、bz、czは、いずれも上記論文に示されるTLWE暗号文である。TLWE暗号は、0又はμ(非0)の値を平文として有するBit-wise型の完全準同型暗号である。
論理ゲートを用いた論理演算によって様々な演算を行うことができる。
また後述するように、TLWE暗号文は、二進数のシンボル0又は1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能である。
【0021】
図3に示す構成では、非特許文献1の論文(上記論文)で提示された(2値)Gate Bootstrappingを使用する。
上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
入力された暗号文az、czを第1演算部12に入力して準同型演算(暗号文az+cz-(0,1/8))を行い、その演算結果である暗号文ctを2値Gate Bootstrappingを行う第1Bootstrapping部15に入力する。
第1Bootstrapping部15の出力は、平文として2値(0,μ)の何れかを取り得る一時暗号文tzである。
暗号文tz、暗号文bzを第2演算部13に入力して準同型演算(tz+bz-(0,1/8))を行い、その出力結果を第2算出部16に入力し、2値Gate Bootstrappingが行われて一時暗号文uzが出力される。
暗号文uz、暗号文czを第3演算部14に入力して準同型演算((0,1/4)-uz+cz)を行い、その出力結果を第3算出部に入力し、2値Gate Bootstrappingが行われて新たな暗号文az’、新たな暗号文bz’が出力される。
第1演算部12による準同型演算、第2演算部13による準同型演算、第3演算部14による準同型演算に要する時間は微々たるものである。Gate Bootstrappingは、準同型演算を用いてMUX演算を処理するとき、ほとんど全ての処理時間を消費している。
【0022】
図1に示す暗号処理装置50のように、2値Gate Bootstrappingを用いて全加算器の演算を行う場合、MUX演算部51、52夫々におけるAND回路部53、54、OR回路部56の後段で計3回、全体で6回Gate Bootstrappingを実行する必要がある。AND回路部53、54を並列処理することにより1つのMUX演算部は2ゲート分の処理(Bootstrappingの段数は2段階)で行い得る。従って、MUX演算部51、52全体を4ゲート分の処理(Bootstrappingの段数は2段階)で行うことが出来る。
【0023】
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成した「TLWE暗号」と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
【0024】
TFHEにおけるGate Bootstrappingの入力は秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の変形(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
【0025】
図4は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、図4に示す円周群{T}の点0、又は円周群{T}上の0以外(非0)の任意の点に対応する実数μを平文として有する。TLWE暗号自体は円周群上の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
【0026】
[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暗号を誤差付きで復号することができる。この時、秘密鍵ベクトルが未知の場合は、内積となる成分が算出できないため、復号することができない。
このTLWE暗号は加法準同型であり、TLWE暗号文の平文同士の加法演算を、暗号文を復号することなく行うことができる。
【0027】
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で誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
【0028】
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φにかけると、φ(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
【0029】
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)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
【0030】
TFHEでは、有限巡回群である円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](X+1)+T[X]のかたちに分解し、剰余部分だけを取り出して集めると、これもまた「環」であるため「多項式環の剰余環」が得られる。
TFHEでは、「多項式環の剰余環」をT[X]/(X+1)と表す。
【0031】
「多項式環の剰余環」T[X]/(X+1)の要素(元)として、任意の係数μ(μ∈T)を用いて、多項式F(X)=μXn-1+μXn-2+・・・+μX+μ
を取り出す。
多項式環の剰余環の要素F(X)にXを掛けると、μXn-1+μXn-2+・・・+μX-μとなって、一番上の項の係数がプラスからマイナスに反転して定数項として現れる。
さらにXを掛けると、μXn-1+μXn-2+・・・+μX-μX-μのように、もう一度同じことが起きる(一番上の項の係数がプラスからマイナスに反転して定数項として現れる)。
これを全部でn回繰り返すと、
-μXn-1-μXn-2・・・-μX-μとなって全ての項の係数がマイナスとなる。
【0032】
さらに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)が有する性質を利用して完全準同型暗号を実現する。
【0033】
[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)とする。
【0034】
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)を定めたものが、復号関数として機能する。
【0035】
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、図4の円周群{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のべき乗の和の形に分解する。
【0036】
円周群{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)9+0.25X×2+0.25×0]
と分解できる。
従って、Gadget Decompositionを行うと、
Dec(d)=[-X+2,2X,0,X+2X+1,2,0]
というベクトルになる。
【0037】
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、
という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文d’が得られる。下位ビットは四捨五入をしてまるめられている。
【0038】
TRLWE暗号文dに対して、||d-[v]・H||が最小値となる[v]を得る操作が、Gadget Decompositionであるとも言える。ここで||はベクトルのノルム(長さ)である。
e(X)の係数全てが平均値0となり、分散はαとなる多項式でできた暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。
この暗号文kをTRGSW暗号文BKとして定義する。
TRGSW暗号文BKは、下記に用いるBootstrapping Keyを構成する。
【0039】
Bootstrapping Keyを説明する。
Bootstrapping Keyは、Gate Bootstrappingに用いるために、秘密鍵を暗号化しておくために利用する。
TLWE暗号文に用いる秘密鍵[s](N次)とは別に、Gate Bootstrappingに使うために、秘密鍵[s]を暗号化するための秘密鍵[s’]の各要素を0か1の2値で選択する。
秘密鍵[s’]の次数は、TRLWE暗号で使用する多項式の次数nとそろえる必要がある。
秘密鍵[s]の要素ごとにTRGSW暗号文BKを作成する。
秘密鍵[s’]で復号するとφs’(Zj)=0となるTRLWE暗号文Zjを2l(エル)個作成する。
そして、上記したTRGSW暗号文の構成どおり、
とする。
このTRGSW暗号文を、秘密鍵[s]の次数と同じN個用意したセットを、Bootstrapping Keyと呼ぶ。
【0040】
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)は、平文の絶対値の大きさをシステムパラメータで制約することができるので、この後の演算も含めて十分小さくなるように設定する。
【0041】
そうするとφs’(BKi×d)=φs’(s×d)となるが、sが0であっても1であっても計算結果は上記3つの暗号文c1、c2、c3の和になる。単純な比較でsが0と1の何れであるかを判別することができない。
2つの平文μ、μに対応するTRLWE暗号文d、dがあるとして、d=d-dと代入して、最後にdを加算すると、下記のようなCMux関数が完成する。
CMux(BK,d,d)=BKi×(d-d)+d=Dec(d-d)・BK+d
CMux関数は、sが0であると平文μの暗号文を復号することなく出力し、sが1であると平文μの暗号文を復号することなく出力する。
CMux関数は、平文μもしくは平文μの暗号文を計算することができるが、どちらを選択したかは分からない。
【0042】
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)キースイッチングから構成される。
【0043】
図5は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、「平文」とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図4の円周群{T}における0~0.25(1/4)、0.75(3/4)~1の区間の平文を0のTLWE暗号文に変換し、0.25(1/4)~0.75(3/4)の区間の平文を0.25(1/4)の暗号文に変換する。
この変換の際、平文に付加される誤差は±1/16の範囲のいずれかである。
【0044】
(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
を用意する。
【0045】
平文μ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’は整数であるため、累乗が自然に定義できる。
以降、上記に説明したBootstrapping KeyであるBKを用いて、順番にA=CMux(BK,Ai-1,Xa’ii-1)を計算する。ここでも、a’iが整数になっているため、Xの累乗が自然に定義できる。
【0046】
そうすると、sが0の時は、平文はそのまま変わらず、sが1の時は、Xa’iが順番に乗算されていく。
従って、
と繰り返すと、
となる。
ここで、
は、復号関数φs(c’)の符号を反転したものに等しいので、
となる。ここでφs’(A)は、多項式T(X)にX-1をμ1’回乗算した多項式の暗号文である。
【0047】
(2)SampleExtract
(1)のBlindRotateで得たTRLWE暗号文Anを復号して得られる平文多項式φ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を得るための処理である。
【0048】
TLWE暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、
と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を
とおいて、
と展開することができる。
【0049】
これに対して下記の演算を行い、

を得る。
「多項式環の剰余環」であるので(X+1)で割った余りを求めると、
が得られる。
【0050】
さらに、
とおくと、
となり、
から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、
が得られる。
とおくと、
のように、TLWE暗号の復号関数に変形することができる。
【0051】
つまり、(1)のBlindRotateで得たTRLWE暗号文A=(A(X),B(X))から、係数を
として取り出すと、元のTRLWE暗号文Aに対応する平文多項式の定数項と同じ値を平文とする、新しいTLWE暗号([a”],b)が得られた。この新しいTLWE暗号文は、平文として-μ又はμの2種類を有する。
得られたTLWE暗号文に対して、平文がμとなる自明な暗号文([0],μ)を加えたTLWE暗号文cs=([a”],b)+([0],μ)がSampleExtractの出力である。
具体的には、テストベクタとしての多項式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が得られた。以上の操作を、TFHEではSampleExtractと呼ぶ。
【0052】
(3)キースイッチング
(2)のSampleExtractで得られたTLWE暗号文csは、秘密鍵[s]ではなく、秘密鍵[s']で暗号化されている
従って、TLWE暗号文csを復号することなく、TLWE暗号文csの鍵を秘密鍵[s]に差し替え、秘密鍵[s]で暗号化された状態に戻す必要がある。
そのためキースイッチングの手法を説明する。
NAND演算に用いる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ビットの固定小数に変換すると、
の形式で書くことができる。
この段階で誤差が増えるが、システムパラメータで絶対値の最大値を制約することができる。
キースイッチング本体の処理として、以下のTLWE暗号文cxを計算する。
([0],b)の項は自明な暗号文なので、復号するとbであり、TLWE暗号文cxを復号した結果を計算すると、
である。
s’は、jに対して定数なのでくくりだして
とし、上記で固定小数に分解したときの式を代入する。
その結果、
となって鍵の切り替えが成功したことになる。
【0053】
ここで得られたTLWE暗号文cxは、Gate Bootstrappingの入力としたTLWE暗号文cと同じ秘密鍵[s]で暗号化されている。
キースイッチングの処理を行うことにより、秘密鍵[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演算ができるようになり、加算、乗算をはじめとしてあらゆる演算が可能となる。
【0054】
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の整数化で加わる誤差、CMuxで加わる誤差、キースイッチングで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
【0055】
上記に説明したTFHE暗号を扱う暗号処理装置1は、以下のような実施例に適用することができる。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベース(以下、暗号データベース)に対して、カテゴリ(地区ごとの平均年齢など)ごとに集約したい場合がある。
このとき暗号処理装置1は、暗号化データベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
TFHEは決定性暗号ではないため、暗号化データベースでは、同一の平文に対して無数の暗号文が対応している。
そのため、暗号化データベースをカテゴリごとに集約したい場合に、レコードをどのカテゴリとして集約すればよいのかわからない。
下記に説明する手法によれば、暗号化データベースをカテゴリごとに分類した上で集約を行い、集約結果を高速にソート(入れ替え)することができる。
【0056】
本実施形態による集約結果のソート(入れ替え)手法により、値の大きい順(降順)や小さい順(昇順)に集約結果を並べた上で、クエリに応答することができる。
本実施形態によるソート方法では、ソート(入れ替え)に用いる演算を高速化し、本実施形態のソート方法を用いない実装と比較して約20%低いレイテンシでの応答が可能となる。
【0057】
本実施形態において、カテゴリごとに分類して集計(集約)を行うために、暗号処理装置1は、空の返答を予め作成する。
そして、空の返答に対して暗号化したまま比較を行い、カテゴリが一致した場合にのみクエリのカラムを加え、一致しない場合には0を加える処理を繰り返すことでデータベースの集約を行う。
【0058】
集約結果のソートには、バブルソートを用いる。
バブルソートは、隣り合うふたつの要素の値を比較し、値の大きい順(降順)、あるいは値の小さい順(昇順)に、要素を入れ替える整列アルゴリズムである。
バブルソートは、平均計算時間がO(q)と比較的遅いため、平文でソートを行う際にはあまり用いられない。
しかしバブルソートは、最悪計算量O(q)だけ処理を繰り返せば、必ずソートが完了する利点がある。またバブルソートは、クイックソートのようにデータの中身によって処理を変えることがないため、暗号文を暗号化したままの処理が可能である。
さらに、バブルソートでは、比較を行い大小関係が逆であれば順序を入れ替える、という操作をデータ数q-1の二乗回((q-1))繰り返すが、比較は、引き算を行った際のボロービットで判断できる。
暗号化されたレコードのバブルソートにおいて、隣り合う暗号化されたレコード同士の比較に関しては、完全準同型暗号の演算が可能な全加算器の構成を適用して実行することができる。
完全準同型暗号の演算が可能な全加算器をソフトウェアで実装するとき、暗号文に対して論理回路(論理ゲート)を設計するイメージで演算を行う。
全加算器回路は、2つの半加算器と1つのOR回路部(ORを得るための演算処理部)から構成される。
第1半加算器は、AND回路部(ANDを得るための演算処理部)とXOR回路部(XORを得るための演算処理部)を備える。
第2半加算器は、AND回路部(ANDを得るための演算処理部)とXOR回路部(XORを得るための演算処理部)を備える。
加算される入力Aと入力Bが第1半加算器のAND回路部とXOR回路部に入力される。
第1半加算器のAND回路部の出力と、第2半加算器のAND回路部の出力と、が後段のOR回路部に入力され、OR回路部からは桁上げ出力(Carry out)が出力される。
第1半加算器のXOR回路部からの出力と、桁上げ入力(Carry in)が第2半加算器のAND回路部とXOR回路部に入力される。
第2半加算器のXOR回路部からは、全加算器回路の出力(Sum)が出力される。
バブルソートでは、この比較結果によって隣り合うレコードを入れ替えたり、あるいは入れ替えなかったりする処理を行う。
TFHEの場合、図1でも説明した準同型MUX(上記論文ではHomMUX)を用いた高速な条件付き入れ替え演算をバブルソートの処理に利用することもできる。
【0059】
本実施形態の暗号処理装置1による、暗合化されたデータベースの集約処理をより具体的に説明していく。
図6は、暗号化データベースの一例を示す図である。
図6に示す暗号化データベース60は、例えば、情報処理装置1の記憶部20に格納される。情報処理装置1は、暗号化データベース60を管理し、外部装置からのクエリに応じて暗号化データベース60に対する操作を行うデータベースサーバとして機能し得る。
【0060】
図6の暗号化データベース60は、カラム61、カラム62、カラム63を備えている。
カラム61には「名前」、カラム62には「住所」、カラム63には「年齢」が格納される。
「名前」カラム61の先頭フィールドには見出し「名前」が格納され、「住所」カラム62の先頭フィールドには見出し「住所」が格納され、「年齢」カラム63の先頭フィールドには、見出し「年齢」が格納されている。
「名前」カラム61、「住所」カラム62、「年齢」カラム63が備える夫々備える複数のフィールドに、データが登録されている。
なお、図6に示す暗号化データベース60には、説明の便宜上平文が表示されているが、実際には、暗号化データベース60の全てのデータは全てTFHEで利用可能なTLWE暗号文である。
また、下記の説明では、図6の暗号化データベース60における見出しを表示する先頭行は行数に含めないものとする。実際に名前や住所、年齢を登録している暗号化データベース60の2番目の行(名前フィールドに「鈴木太郎」)を1行目とし、3番目の行(名前フィールドに「佐藤たかし」)を2行目とし、以下同様とする。
【0061】
本実施形態において、情報処理装置1は、一例として、暗号化データベース60に対して「住所」ごとの「平均年齢」を得るクエリを実行する。
暗号化データベース60の集約処理に当たって、本実施形態では、図7に示すような空の応答(空テーブル)を利用する。
図7は、空の応答としてのテーブルの一例を示す図である。
図7の空テーブル(TBL)70の各フィールドには、クエリのキーである「住所」と、集約処理で求めるべき「年齢の合計」、「人数」が格納される。
空テーブル70は、カラム71、カラム72、カラム73を備えている。
カラム71には「住所」、カラム72には「年齢の合計」、カラム73には「人数」が格納される。
「住所」カラム71の先頭フィールドには見出し「住所」が格納され、「年齢の合計」カラム72の先頭フィールドには見出し「年齢の合計」が格納され、「人数」カラム73の先頭フィールドには、見出し「人数」が格納されている。
【0062】
上記のように、「住所」カラム71の各フィールドには、図6の暗号化データベース60の「住所」カラム62に登録されるデータと同じ「住所」のデータが格納されている。本実施形態のクエリは、暗号化データベース60において、少なくとも「住所」を格納する「住所」カラム62にどのようなデータが登録されているかが既知であることを前提に実行されるのである。
初期状態の空テーブル70には、集約処理で求めるべき「年齢の合計」を格納する「年齢の合計」カラム72と「人数」を格納する「人数」カラム73の全てのフィールドに、「0」が登録されている。
空テーブル70の全てのデータは、TFHEの手法で暗号化されたTLWE暗号文である。
なお、空テーブル70の作成とその暗号化の作業は、クエリを投げるすなわち検索要求を行う端末装置側で行ってもよいし、暗号化データベース60を管理する暗号処理装置1側で行ってもよい。
【0063】
暗号処理装置1は、暗号化データベース60(図6)の「住所」カラム62の特定の行(レコード)に登録される住所データに対して、空テーブル70(図7)の「住所」カラム71の全ての行に登録される住所データを順次比較する。
住所データの同士の比較は、文字列データの比較である。暗号化データベース60の住所データと空テーブル70の一の住所データとを比較する際、暗号処理装置1は、暗号化データベース60及び空テーブル70の住所データの同じ位置のビット同士に対し、TFHEによるビット演算のEXNORを実行する。
詳しくは、暗号処理装置1は、暗号化データベース60の住所データと空テーブル70の住所データの1ビット目同士、2ビット目同士、3ビット目同士・・のEXNORを行う。
EXNORでは、一致するビットは「1」となり異なるビットは「0」となる。暗号処理装置1は、EXNORの結果同士をANDで集約する。
暗号化データベース60と空テーブル70の住所データが完全に一致していれば集約結果として「1」の暗号文が得られ、一部でも一致していなければ「0」の暗号文が得られる。
すなわち、暗号処理装置1は、暗号化データベース60の住所データと空テーブル70の住所データとを夫々ai,bi(iは文字列データのビット単位での位置)としたときに、cr=(a0 EXNOR b0)AND(a1 EXNOR b1)AND・・・を計算する。
【0064】
計算の結果得られるcrは暗号化データベース60の住所データと空テーブル70の住所データの比較結果である。
両データが完全に一致、すなわち同じ住所であれば、比較結果crの平文はビットとして「1」となり、一致していなければ比較結果crの平文はビット「0」である。
【0065】
次に暗号処理装置1は、暗号化データベース60の「年齢」カラム63のフィールドに格納されるビット値に対して、対応する住所に関する上記比較結果cr(平文がビットとして「1」又は「0」の暗号文)を準同型AND(上記論文ではHomAND)処理する。
その結果、住所が一致している場合(比較結果crの平文がビットとして「1」の場合)には、対応する「年齢」が得られ、住所が異なる場合(比較結果crの平文がビット「0」の場合)には、「0」が得られる。
暗号処理装置1は、空テーブル70の「住所」カラム71の全ての住所フィールドのデータに対して同様の演算を行う。
【0066】
暗号処理装置1は、比較を行った住所に対応する空テーブル70の「年齢の合計」カラム72のフィールドに、得られた「年齢」の値(暗号文)を加算する。
このとき暗号化データベース60と一致していた住所に対応する空テーブル70の「年齢の合計」カラム72のフィールドには、得られた「年齢」の値(暗号文)が加算されている。暗号化データベース60と一致していなかった住所に対応する「年齢の合計」カラム72のフィールドに「0」が加算されている。
【0067】
すなわち、暗号処理装置1は、空テーブル70の値と暗号化データベース60の値を比較し、比較結果crを得る。そして暗号処理装置1は、暗号化データベース60の値と比較結果cr(平文がビット「1」又は「0」の暗号文)のANDをとってから加算する。このとき、空テーブル70の値と暗号化データベース60の値が一致していた場合には暗号化データベースの値が、異なっていた場合には0が、空テーブル70に加算されている。
また暗号処理装置1は、比較を行った住所に対応する空テーブル70の「人数」カラム73のフィールドに、得られた「人数」の値(暗号文)を加算する。
このとき暗号化データベース60と一致していた住所に対応する空テーブル70の「人数」カラム73のフィールドに、比較結果cr(平文がビット「1」の暗号文)が加算されている。また暗号化データベース60と一致していなかった住所に対応する空テーブル70の「人数」カラム73のフィールドには、比較結果cr(平文がビット「0」の暗号文)が加算されている。
以上の処理を、暗号化データベース60の全ての行に対して行うと、最終的に、図8に示す、「年齢の合計」と人数とを住所ごとに集計した集約結果テーブル80が得られる。
【0068】
なお、上記の比較結果crは、暗号化された状態で得られており、暗号処理装置1は、比較結果crの平文を知ることはない。すなわち、暗号処理装置1は、暗号化データベース60の住所データと空テーブル70の住所データとが一致しているか否かが分からない。
上記のように暗号処理装置1は、比較結果crの平文がビット「1」と「0」の何れであっても、暗号化データベース60の値と比較結果crの準同型AND(HomAND)をとることによる加算処理を行う。
暗号処理装置1は、暗号化データベース60の住所データと空テーブル70の住所データが一致しているか否かによって処理を分岐することはない。
【0069】
より具体的に、暗号化データベースの集約処理を説明する。
例えば暗号処理装置1は、暗号化データベース60の1行目のレコード(名前:鈴木太郎、住所:千代田区、年齢:46)の住所フィールドのデータと、空テーブル70の住所フィールドの各データ(千代田区、港区、台東区)と、に対してビットごとのEXNORとANDによる集計を行う。
この場合、空テーブル70の「千代田区」について、比較結果としての平文がビット「1」の暗号文が得られる。
従って、暗号処理装置1は、暗号化データベース60の1行目のレコードにおける年齢フィールドの値に比較結果cr(平文がビット「1」)をANDして得た「46」を、空テーブル70の千代田区に該当する行の年齢の合計フィールドに加算し、空テーブル70の千代田区に該当する行の人数フィールドに1(比較結果としての平文がビット「1」の暗号文)を加算する。「千代田区」以外の他の住所は、比較結果が、平文がビット「0」の暗号文となるので、該当する行の年齢の合計フィールド、人数フィールドには0が加算される。
【0070】
次に、暗号処理装置1は、暗号化データベース60の2行目のレコード(名前:佐藤たかし、住所:港区、年齢:50)の住所フィールドのデータと、空テーブル70の住所フィールドの各データ(千代田区、港区、台東区)と、に対してビットごとのEXNORとANDによる集計を行う。
この場合、空テーブル70の「港区」について比較結果としてビット「1」の暗号文が得られる。
従って、暗号処理装置1は、暗号化データベース60の2行目のレコードにおける年齢フィールドの値に比較結果cr(平文がビット「1」)をANDして得た「50」を、空テーブル70の港区に該当する行の年齢の合計フィールドに加算し、空テーブル70の港区に該当する行の人数フィールドに1(比較結果としての平文がビット「1」の暗号文)を加算する。「港区」以外の他の住所は、比較結果が、平文がビット「0」の暗号文となるので、該当する行の年齢の合計フィールド、人数フィールドには0が加算される。
【0071】
次に、暗号処理装置1は、暗号化データベース60の3行目のレコード(名前:田中次郎、住所:千代田区、年齢:34)の住所フィールドのデータと、空テーブル70の住所フィールドの各データ(千代田区、港区、台東区)と、に対してビットごとのEXNORとANDによる集計を行う。
この場合、空テーブル70の「千代田区」について比較結果としてビット「1」の暗号文が得られる。
従って、暗号処理装置1は、暗号化データベース60の3行目のレコードにおける年齢フィールドの値に比較結果cr(平文がビット「1」)をANDして得た「34」を、空テーブル70の千代田区に該当する行の年齢の合計フィールドに加算し、空テーブル70の千代田区に該当する行の人数フィールドに1(比較結果としての平文がビット「1」の暗号文)を加算する。「千代田区」以外の他の住所は、比較結果が、平文がビット「0」の暗号文となるので、該当する行の年齢の合計フィールド、人数フィールドには0が加算される。
【0072】
次に、暗号処理装置1は、暗号化データベース60の4行目のレコード(名前:吉川幸次、住所:台東区、年齢:58)の住所フィールドのデータと、空テーブル70の住所フィールドの各データ(千代田区、港区、台東区)と、に対してビットごとのEXNORとANDによる集計を行う。
この場合、空テーブル70の「台東区」について比較結果としてビット「1」の暗号文が得られる。
従って、暗号処理装置1は、暗号化データベース60の4行目のレコードにおける年齢フィールドの値に比較結果cr(平文がビット「1」)をANDして得た「58」を、空テーブル70の台東区に該当する行の年齢の合計フィールドに加算し、空テーブル70の台東区に該当する行の人数フィールドに1(比較結果としての平文がビット「1」の暗号文)を加算する。
「台東区」以外の他の住所は、比較結果が、平文がビット「0」の暗号文となるので、該当する行の年齢の合計フィールド、人数フィールドには0が加算される。
【0073】
次に、暗号処理装置1は、暗号化データベース60の5行目のレコード(名前:武田定宗、住所:港区、年齢:43)の住所フィールドのデータと、空テーブル70の住所フィールドの各データ(千代田区、港区、台東区)と、に対してビットごとのEXNORとANDによる集計を行う。
この場合、空テーブル70の「港区」について比較結果としてビット「1」の暗号文が得られる。
従って、暗号処理装置1は、暗号化データベース60の5行目のレコードにおける年齢フィールドの値に比較結果cr(平文がビット「1」)をANDして得た「43」を、空テーブル70の港区に該当する行の年齢の合計フィールドに加算し、空テーブル70の港区に該当する行の人数フィールドに1(比較結果としての平文がビット「1」の暗号文)を加算する。
「港区」以外の他の住所は、比較結果が、平文がビット「0」の暗号文となるので、該当する行の年齢の合計フィールド、人数フィールドには0が加算される。
これを全てのレコードについて実行することで、図8に示す集約結果テーブル80を得ることができる。
上記の説明では、空テーブル70の住所フィールドとの比較と年齢の合計及び人数の集計は、暗号化データベース60の行ごとに順次行っている。
それに限らず、「住所」カラム62の住所データと空テーブル70の住所データとの比較をまとめて実行して、空テーブル70の住所レコードに対応する暗号化データベース60の行を記憶しておき、年齢の合計及び人数の集計はあとで一括して行っても良い。逆に、空テーブル70の行ごとに、順次暗号化データベース60の住所フィールドとの比較を行ってもよい。
空テーブル70の住所フィールドと一致した住所について年齢を得て、住所ごとに人数と年齢を合算して、「年齢の合計」カラム72、「人数」カラム73に格納する点で違いはない。
【0074】
図8は、集約結果テーブルの一例を示す図である。
図8に示す集約結果テーブル80の各フィールドには、「住所」と、集約処理結果としての「年齢の合計」、集約処理結果としての「人数」が格納される。
空テーブル70は、カラム71、カラム72、カラム73を備えている。
カラム81には「住所」、カラム82には「年齢の合計」、カラム83には「人数」が格納される。
「住所」カラム81の先頭フィールドには見出し「住所」が格納され、「年齢の合計」カラム82の先頭フィールドには見出し「年齢の合計」が格納され、「人数」カラム83の先頭フィールドには、見出し「人数」が格納されている。
【0075】
図8の集約結果テーブル80に基づいて、「住所」カラム81に格納される各住所について、「年齢の合計」カラム82に格納される対応する「年齢の合計」を「人数」カラム83に格納される対応する「人数」で割ることにより、住所ごとの「平均年齢」を得ることができる。
集約結果テーブル80に格納される「年齢の合計」と「人数」は何れもBit-wise形式のTLWE暗号文である。
「平均年齢」を求めるための割り算は、論理演算を用いた2進数の割算(除算)を行う既知の方法を用いて実現することができる。
暗号化データベース60の集約後、「平均年齢」カラムを集約結果テーブル80の一部として追加して、「平均年齢」カラムにおける各住所との対応フィールドに「平均年齢」の暗号文を書き込んでもよい。
その場合、「平均年齢」に基づいて「住所」を条件付き入れ替えするときに、「平均年齢」も入れ替えることができる。
【0076】
図9は、暗号処理装置による暗号化データベース集約処理の流れを説明するフローチャートである。
図9に示す処理は、暗号処理装置1(受付部11)が、外部装置から暗号化データベースを集約してソートをするクエリを受け付けたときに行われる処理である。
暗号処理装置1(集約部)は、ステップS101において、変数mに暗号化データベース60の行数、すなわちレコード数を代入し、変数pに1を代入して初期化する。
【0077】
暗号処理装置1(集約部)は、ステップS102において、暗号化データベース60のp行目の住所データと、空テーブル70の全ての住所データと、を夫々比較する。すなわち、上記に説明したように、暗号化データベース60の住所データと、空テーブル70の住所データをai,bi(iは文字列データのビット単位での位置)としたときに、比較結果cr=(a0 EXNOR b0)AND(a1 EXNOR b1)AND…を計算する。
住所データが完全に一致すると比較結果crはビット「1」の暗号文となり、住所データが異なると比較結果crはビット「0」の暗号文となる。
【0078】
暗号処理装置1(集約部)は、ステップS103において、比較結果cr(平文がビット「1」又は「0」の暗号文)を住所データに対応する暗号化データベース60における「年齢」にANDする。
比較結果crの平文がビット「1」の場合年齢が得られ、これが空テーブル70の年齢の合計フィールドに加算される。
比較結果crの平文がビット「0」の場合は0が得られ、これが空テーブル70の年齢の合計フィールドに加算される。
すなわち、暗号処理装置1(集約部)は、暗号化データベース60の年齢をar、空テーブル70の年齢の合計をbrとしたとき、比較結果crを用いて、br+(cr AND ar)を計算する。加算処理は、例えば、上記に説明した全加算器によって行うことができる。
【0079】
そして、暗号処理装置1(集約部)は、ステップS104において、比較結果cr(ビット「1」又は「0」の暗号文)を住所データに対応する空テーブル70における「人数」にANDする。
比較結果crの平文がビット「1」の場合、空テーブル70の人数フィールドに1が加算される。
比較結果crの平文がビット「0」の場合、空テーブル70の人数フィールドに0が加算される。
暗号処理装置(集約部)1は、空テーブル70の人数をdrとしたとき、上記crを用いてdr+crを計算して人数を得る。加算処理は、例えば、上記に説明した全加算器によって行うことができる。比較結果crは1bit幅の整数を暗号化したものとして加算される。
【0080】
暗号処理装置1(集約部)は、ステップS105において、p=mであるか、すなわち暗号化データベース60の全ての行(レコード)について集約を終えたか否かを判定する。
p=mでない場合(ステップS105でNo)、暗号処理装置1は、ステップS107において、変数pにp+1を代入してインクリメントし、ステップS102に処理を戻す。
p=mである場合(ステップS105でYes)、暗号処理装置1(集約部)は、図8の集約結果テーブル80を完成し、暗号化データベース集約処理を終了する。
【0081】
この集約結果を、平均年齢が高い方から低い方にソートすることを考える。上記のようにバブルソートを用いると、暗号化したままのソート処理が可能である。
バブルソートでは、比較結果によって隣り合うデータを入れ替えたり入れ替えなかったりする処理を行う。
バブルソートの性質として、q行のテーブルをソートする際に(q-1)回比較と入れ替えを繰り返すと、必ず完全にテーブルを降順又は昇順にソートする(入れ替える)ことができる。ここでの(q-1)回の計算を最悪計算量と呼ぶ。
バブルソートは最悪計算量だけ計算を行えばソートが完了するので、暗号文のソートに好適であるが、同様の性質を有する方法であればバブルソートに限定することなく、別のソート方法を採用してもよい。
バブルソートは、比較をして入れ替えることを繰り返すのみであるので、暗号文の中身(平文)が分からずともソート処理ができることが利点である。
【0082】
一例として、HomMUX(準同型MUX)演算を利用してソート処理を行うことができる。これは、図1で説明した処理である。
以下の手順(1)~(5)からなる処理を集約結果テーブル80(図8)の行数分繰り返すことで、平均年齢を基準にした集約結果テーブル80の行のソートが可能である。
下記の説明において、図8の集約結果テーブル80における見出しを表示する先頭行は行数に含めないものとする。実際に住所、年齢の合計、人数を登録している集約結果テーブル80の2番目の行(住所フィールドに「千代田区」)を1行目とし、3番目の行(名前フィールドに「港区」)を2行目とし、以下同様とする。
【0083】
i行目の「年齢の合計」カラム82の値と「人数」カラム83の値に基づく平均年齢の値(データ)を暗号文avとする。またi-1行目の「年齢の合計」カラム82の値と「人数」カラム83の値に基づく「平均年齢」を暗号文bvとする。
暗号文av、暗号文bvは、条件付き入れ替えの基準となる「平均年齢」を示す暗号文である。
条件付き入れ替えの対象となる「住所」、「年齢の合計」、「人数」に関して、i行目のデータの任意のビットを暗号文azとし、i-1行目のデータの同じ位置のビットを暗号文bzとする。
新しいi行目のデータを暗号文az’とし、新しいi-1行目のデータを暗号文bz’とする。
i-1行目の「平均年齢」がi行目の「平均年齢」より大きければ暗号文az’と暗号文azの平文を同じくし、暗号文bz’と暗号文bzの平文を同じくする。そうでなければ暗号文az’と暗号文bz、暗号文bz’と暗号文azの平文を同じくする。
【0084】
図8の集約結果テーブル80では、データ行数が3行(q=3)のみであるが、より行数が多い場合でも同じ処理方法で対応することができる。
本実施形態のバブルソートでは、隣接するi行目のデータとi-1行目のデータを比較して大小によって入れ替える。
i行目のデータとi-1行目との比較を行うので、i=2行目を初期値として比較を行っていく。
【0085】
まず、2行目の港区(i=2)の平均年齢46.5(暗号文av)と、1行目の千代田区(i-1=1)の平均年齢40(暗号文bv)と、を比較する。
このとき、2行目(i=2)の暗号文av、1行目(i-1=1)の暗号文bvについて減算を行って得たボロービットczと、暗号文az及び暗号文bzとによってMUX演算2回を行い、新たな暗号文az’、暗号文bz’を算出する。
図8の場合、千代田区の平均年齢(40)<港区の平均年齢(46.5)であり、i行目とi-1行目のレコードが入れ替わり、下記に示すように港区が1行目、千代田区が2行目となる。
【0086】
次に、3行目の台東区(i=3)の平均年齢58(暗号文av)と、2行目の千代田区(i-1=2)の平均年齢40(暗号文bv)と、を比較する。
このとき、3行目(i=3)の暗号文az、2行目(i-1=2)の暗号文bzについて減算を行って得たボロービットcz、暗号文az及び暗号文bzによってMUX演算2回を行い、新たな暗号文az’、暗号文bz’を算出する。
【0087】
図8の場合、千代田区の平均年齢(40)<台東区の平均年齢(58)であり、i行目とi-1行目のレコードが入れ替わり、下記に示すように、台東区が2行目、千代田区が3行目となる。

全ての行数(q行目)まで比較と入れ替えが済んだ結果、最も平均年齢が少ない千代田区が集約結果テーブル80の最も下に位置している。
上記と同じ処理を、行数分繰り返す。
なお上記は「住所」についてのソートであり、「年齢の合計」、「人数」についても、ボロービットczを用いて同様の処理を行うことで、集約結果テーブル80全体をソートすることが出来る。
【0088】
上記をまとめると、以下の処理を行う。
手順(1):i=2として初期化する。
手順(2):暗号文bv-暗号文avのボロービットを暗号文czとする。
手順(3):暗号文az’を、全ビットに対する後述するHomMUX(cz,az,bz)とする。
手順(4):暗号文bz’を、全ビットに対するHomMUX(cz,bz,az)とする。
すなわち、手順(3)、手順(4)では、
暗号文az’=HomMUX(cz,az,bz)
暗号文bz’=HomMUX(cz,bz,az)
を、演算する。
暗号文czの平文が1の場合は暗号文azの平文=暗号文bz’の平文、暗号文bzの平文=暗号文az’の平文であり、平文として、i行目とi-1行目のレコードは元の順序から入れ替わっている。
暗号文czの平文が0の場合は暗号文azの平文=暗号文az’の平文、暗号文bz=暗号文bz’であり、平文として、i行目とi-1行目のレコードは元の順序から入れ替わっていない。
手順(5):iの値を1増やし、手順(2)に戻る。
【0089】
以上の手順を、iの値が集約結果テーブル80の行数qと等しくなるまで繰り返す。
これによって、最も大きな(小さな)レコードが集約結果テーブル80の最終行に浮かび上がってくる。
手順(1)~(5)を行数q-1分繰り返し、バブルソートが終了する。
これによって、暗号化したまま、平均年齢を基準にした集約結果テーブル80のソート(バブルソート)が可能である。
条件付き入れ替えの対象となる「住所」、「年齢の合計」、「人数」の各カラムのデータについて、手順(1)~(5)を繰り返す処理を行うことにより、集約結果テーブル80全体をソートすることが出来る。
【0090】
手順(2)~(4)の処理は、例えば、上記に説明した全加算器と、上記論文に記載のHomMUXによって行うことができる。
HomMUXについて簡単に解説する。図1で説明したMUX演算では、1つのビットcによって、2つのビットd/dを選択する論理演算は(c AND d)OR((NOT c) AND d)である。ビットc図1における暗号文cz、2つのビットd/dは暗号文az/bzまたは暗号文bz/azである。
NOTにGate Bootstrappingは不要なため、AND演算部2つとOR演算部1つで、3Gate Bootstrappingを使用するのが、自然な実装である。図1について説明したように、NOT回路部55にGate Bootstrappingは不要であるので、AND回路部、OR回路部の準同型演算の後段で、夫々Gate Bootstrappingを行う必要がある。
従って、図1における暗号文az、bzから新たな暗号文az’を演算するためのMUX演算部51、52が備える2つのAND回路部53、54と1つのOR回路部55において、夫々3回のGate Bootstrappingを行う必要がある。
1回のマルチプレクサの処理で3回のGate Bootstrappingを行い、それを2回行うので、必要な並び替えを行うためには膨大な演算時間を要する。
上記論文では、これを改良したHomMUXを提案している。
このHomMUXでは、左辺(c AND d)と右辺((NOT c) AND d)のGate Bootstrappingを、キースイッチングの手前(SampleExtractの後)まで行い、それぞれがs’を秘密鍵とするTLWE暗号文となっている状態で加算する。
ORの左辺と右辺は同時に1/4になることがないため、左辺のTLWE暗号文(秘密鍵はs’)と右辺のTLWE暗号文(秘密鍵はs’)の和は、0もしくは1/4であり、秘密鍵はs’のTLWE暗号文となる。それからキースイッチングを行うことでsを秘密鍵とするTLWE暗号文にする。
これは、SampleExtractまでで付与される誤差は、キースイッチングで付与される誤差に比べてはるかに(1桁以上)小さいために可能なことである。キースイッチングの前の加算で誤差が2倍になるが、それでもキースイッチングによる誤差よりもはるかに小さいため無視することができる。
【0091】
なお、この方法によるバブルソートでは、暗号処理装置は、手順(2)において、2つの行の順序があっているかを知るために引き算を1回行う。
手順(2)の結果、必要な入れ替えを行うために、手順(3)、(4)において、THFEのマルチプレクサ(HomMUX)演算を1回の比較につき2回行う。MUX演算1回につきGate Bootstrappingを2回行う場合と同じだけの処理時間を要するため、MUX演算2回ではBlindRotate4回分(4ゲート分)の計算時間を要する。
これは、上記の例(MUX演算1回につきGate Bootstrappingを3回)と比較すると少ない。しかしながら、q行全てに入れ替えに関しては、引き算を(q-1)回行い、MUX演算式を2(q-1)回行うため、必要なソートを全て行うためには膨大な処理時間がかかることになる。
【0092】
そこで、本実施形態では、1回の入れ替えに関して、2回のMUXを行う上記手順のうち、手順(3)及び手順(4)を他の手順で置き換えることで、MUX演算2回分の処理を高速化し、ソートを高速にする。
具体的には、テストベクタ多項式を改良し、且つ1回のBlindRotateの後でSampleExtractを2回行って2種類の暗号文を取り出すことにより、3ゲート分(Gate Bootstrapping3回分)の処理時間で、1回の入れ替えを行うことができる。MUX演算を用いる場合と比べて単純計算で3÷4=75%となり理論上約25%の高速化が見込め、実装では約21%の高速化が確認された。
【0093】
下記に詳しく説明する。
バブルソートについての基本的な考え方は上記のMUX演算を用いる場合と同じである。暗号文az、暗号文bzから暗号文az’、暗号文bz’を算出する方法が異なる。
まず、MUX演算を用いる場合と同様に、「年齢の合計」カラム82の値と「人数」カラム83の値に基づいて、集約結果テーブル80(図8)の各行の平均年齢を演算する。
各行の平均年齢の演算は、例えば上記に説明した全加算器によって行うことができる。
すなわち、i行目の「平均年齢」を示すデータの任意のビットを暗号文avとし、i-1行目の「平均年齢」示すデータの同じ位置のビットを暗号文bvとする。
暗号文av、暗号文bvは、条件付き入れ替えの基準となる「平均年齢」を示す暗号文である。
条件付き入れ替えの対象となる「住所」、「年齢の合計」、「人数」に関して、i行目のデータの任意のビットを暗号文azとし、i-1行目のデータの同じ位置のビットを暗号文bzとする。
新しいi行目のデータを暗号文az’とし、新しいi-1行目のデータを暗号文bz’とする。
i-1行目の「平均年齢」がi行目の「平均年齢」より大きければ暗号文az’と暗号文azの平文を同じくし、暗号文bz’と暗号文bzの平文を同じくする。そうでなければ暗号文az’と暗号文bz、暗号文bz’と暗号文azの平文を同じくする。
TLWE暗号文az、TLWE暗号文bz、さらに下記のTLWE暗号文czは、上記論文通り、ビット「0」の場合は平文として0±1/16とし、ビット「1」の場合は1/4±1/16とする。
【0094】
下記の手順(11)~(14)によって平均年齢を基準にした集約結果テーブル80のレコードのソートが可能である。
手順(11):i=2とする。上記したように、集約結果テーブル80における見出しを表示する先頭行は行数に含めないものとする。実際に住所、年齢の合計、人数を登録している集約結果テーブル80の2番目の行(住所フィールドに「千代田区」)を1行目とし、3番目の行(名前フィールドに「港区」)を2行目とし、以下同様とする。
手順(12):条件付き入れ替えの基準となる平均年齢の暗号文bv-暗号文avのボロービット(繰り下がり)を暗号文czとする。
手順(13):下記に説明するソート処理を行う。
手順(14):iの値を1増やし、手順(12)に戻る。
【0095】
iの値をインクリメントしながら、手順(11)~(14)からなる処理を集約結果テーブル80(図8)の行数分繰り返すことで、最も大きな(小さな)値がリストの端に浮かび上がるかたちとなる。
手順(11)~(14)をレコードの数(見出しを除く行数分)-1だけ繰り返すことにより、集約結果テーブル80の全てレコードを基準となる「平均年齢」に基づいて降順又は昇順に入れ替えることができる。
条件付き入れ替えの対象となる「住所」、「年齢の合計」、「人数」の各カラムのデータについて、手順(12)~(14)を繰り返す処理を行うことにより、集約結果テーブル80全体をソートすることが出来る。
集約結果テーブル80(図8)のレコード数は3つなので、最悪の場合、手順(12)、(13)のソート処理を2回行い、それをさらに2回繰り返し、合計4回行う(最悪計算量(q-1)→2)。
バブルソートはO(q)であるが、実際の計算量は(q-1)である。(q-1)=q-2q+1なので、O((q-1))=O(q)となる。
手順(12)の演算も、全部で(q-1)回(q=レコード数)行う。これも上記に説明した全加算器によって行うことができる。
【0096】
手順(13)におけるソート処理は、下記の3つのステップによって実行する。
[第1のステップ]
まず、暗号処理装置1は、az+cz-(0,1/8)を計算し、上記論文に記載のGate Bootstrapping(1回目)を行う。
上記論文では、BlindRotateにおけるテストベクタとして、
F(X)=μXn-1+μXn-2・・・+μX+μ
ただし、μ=1/8を用いていた。
それに対して、暗号処理装置1は、Gate BootstrappingのBlindRotateにおけるテストベクタとして、
T1(X)=μn-1+μn-2+…μ(n/2)+μ(n/2)-1+…μX+μを用いる。なお、μ=0、μ=1/2とする。
こうすると、SampleExtract直後の段階で、暗号文azと暗号文czの平文ビットが異なる場合は1/2が得られ、暗号文azと暗号文czがともに0もしくは1ならば、0が得られる。上記論文ではここに(0,1/8)を足しているが、何も加えないこととする。以降は上記論文と同様にキースイッチングを行う。すると、0もしくは1/2の暗号文で、誤差は±1/16のTLWE暗号文tzが得られる。
【0097】
図10は、第1のステップのGate Bootstrappingの動作を説明する図である。
上記論文と同様のキースイッチングを行うと、図10に示すように、0から0.25(1/4)の区間が1/2となり、0.25(1/4)から0.5(1/2)の区間、0.75(3/4)から1の区間は0となる。
結果的に、第1のステップでは、平文として1/2と0の2種類の値を取り得、誤差が±1/16であるTLWE暗号文tzが得られる。
TLWE暗号文czの値とTLWE暗号文azの値が異なるときTLWE暗号文tzの平文は1/2であり、TLWE暗号文czの値とTLWE暗号文azの値が同じ(ともに0もしくは1)ときTLWE暗号文tzの平文は0である。このような一時暗号文tzを得るのが、第1のステップである。
【0098】
[第2のステップ]
次に、暗号処理装置1は、tz+bz-(0,1/8)を計算し、Gate Bootstrapping(2回目)を行う。
上記と同様に、暗号処理装置1は、Gate BootstrappingのBlindRotateにおけるテストベクタとして、
T1(X)=μn-1+μn-2+…μ(n/2)+μ(n/2)-1+…μX+μ
を用いる。今回はμ=5/8、μ=1/8とする。上記論文ではここで(0,1/8)を足しているが、本実施形態では何も加えない。
【0099】
図11は、第2のステップのGate Bootstrappingの動作を説明する図である。
Gate Bootstrappingの結果、図11に示すように、0から0.25(1/4)の範囲が1/8となり、0.25(1/4)から0.5(1/2)の範囲が5/8となる。
これらは、テストベクタにおいてμ=5/8、μ=1/8として指定した値がそのまま出ている。
0.5(1/2)から0.75(3/4)の範囲が7/8となる。0.5(1/2)から0.75(3/4)の範囲には0から0.25(1/4)の範囲の負の値が出てくるので-1/8となり、-1/8は円周群{T}上では7/8に相当するからである。
0.75(3/4)から1の範囲は3/8となる。0.75(3/4)から1の範囲には0.25(1/4)から0.5(1/2)の範囲の負の値が出てくるので-5/8となり、-5/8は円周群{T}上では3/8に相当するからである。
第2のステップでは、平文として1/8、3/8、5/8、7/8の4種類の値を有する一時暗号文uzが得られる。
【0100】
[第3のステップ]
次に、暗号処理装置1は、(0,1/4)-uz+czを計算し、計算結果として1/8、3/8、5/8、7/8を得る。そして、これらの値に対して上記論文通りのGate Bootstrapping(3回目)を行う。
図12は、第3のステップのGate Bootstrappingの動作を説明する図である。
3回目のGate Bootstrappingにおいて、暗号処理装置1は、異なるサンプリング位置でSampleExtractを2回行う。
まず、0の位置でSampleExtract(0)を行ってキースイッチングを行うと、図12(a)に示すような1/8と7/8の2種類の値が得られる。
【0101】
図12(a)における0から0.25(1/4)の範囲が7/8となり、0.25(1/4)から0.5(1/2)の範囲が1/8となる。
0.5(1/2)から0.75(3/4)の範囲は、0から0.25(1/4)の範囲の負の値が出てくるので-7/8の暗号文となり、-7/8は円周群{T}上では1/8に相当する。
0.75(3/4)から1の範囲は、0.25(1/4)から0.5(1/2)の範囲の負の値が出てくるので-1/8の暗号文となり、-1/8は円周群{T}上では7/8に相当する。得られた値に(0,1/8)を足すと、平文として0、1/4の2種類の値を取り得る新たな暗号文az’が得られる。
【0102】
また、n/2の位置でSampleExtract(n/2)を行ってキースイッチングを行うと、図12(b)に示すような1/8と7/8の2種類の値が得られ、得られた値を(0,1/8)から引くと、平文として0、1/4の2種類の値を取り得る新たな暗号文bz’が得られる。
【0103】
図12(b)における0から0.25(1/4)の範囲が7/8となり、0.25(1/4)から0.5(1/2)の範囲が7/8となる。
0.5(1/2)から0.75(3/4)の範囲は、0から0.25(1/4)の範囲の負の値が出てくるので-7/8の暗号文となり、-7/8は円周群{T}上では1/8に相当する。
0.75(3/4)から1の範囲は、0.25(1/4)から0.5(1/2)の範囲の負の値が出てくるので-7/8の暗号文となり、-7/8は円周群{T}上では1/8に相当する。得られた値を(0,1/8)から引くと、平文として0、1/4の2種類の値を取り得る新たな暗号文bz’が得られる。
【0104】
このように、一度のGate BootstrappingにおいてSample extractを2回行うことで、暗号文az’の値と、暗号文bz’の値とを一度に求めることができる。
その結果、Gate Bootstrapping(BlindRotate)の回数を3回とすることができる。Gate Bootstrappingを2回行うHomMUXを2回使う場合に比べて、Gate Bootstrappingを1回減らし、ソートを高速化することができる。
暗号文czの平文が1/4、つまりビットとして1でありi-1行目の方が小さく、すなわち順序を入れ替えたい場合には、暗号文azの平文=暗号文bz’の平文、暗号文bzの平文=暗号文az’の平文となる。暗号分czの平文が0の場合は、暗号文azの平文=暗号文az’の平文、暗号文bzの平文=暗号文bz’の平文となる。
【0105】
図13は、本実施形態の条件付き入れ替え処理において暗号文が取り得る値を示す図である。
図13の(1)~(4)は、ボロービットを示す暗号文czの平文が0である場合を示している。
(1)において、i行目のデータの暗号文azの平文が0、i-1行目のデータの暗号文bzの平文が0の場合、第1のステップで得られる暗号文tzの平文は0である。第2のステップで得られる暗号文uzの平文は3/8であり、第3のステップで得られる(0,1/4)-uz+czの平文は7/8である。
上記SampleExtract(0)で得られた値に(0,1/8)を足して得られる新しいi行目のデータの暗号文az’は0となる。また上記SampleExtract(n/2)で得られた値を(0,1/8)から引いて得られる新しいi-1行目のデータの暗号文bz’は0となる。
この場合、暗号文azの平文=暗号文az’の平文、暗号文bzの平文=暗号文bz’の平文となっており、暗号文azと暗号文bzを、夫々新たな暗号文az’と暗号文bz’で置き換えたとき、平文として、i行目とi-1行目のレコードは夫々元の順序のままである。
(2)~(4)においても(1)と同様に、暗号文azの平文=暗号文az’の平文、暗号文bzの平文=暗号文bz’の平文となっている。例えば(2)において、i行目のデータの暗号文azの平文が0、i-1行目のデータの暗号文bzの平文が1/4であり、新しいi行目のデータの暗号文az’は0、新しいi-1行目のデータの暗号文bz’は1/4である。
暗号文azと暗号文bzを、夫々新たな暗号文az’と暗号文bz’で置き換えたとき、平文として、i行目とi-1行目のレコードは夫々元の順序のままである。
【0106】
図13の(5)~(8)は、ボロービットを示す暗号文czの平文が1/4である場合を示している。
(5)において、i行目のデータの暗号文azの平文が0、i-1行目のデータの暗号文bzの平文が0の場合、第1のステップで得られる暗号文tzの平文は1/2である。第2のステップで得られる暗号文uzの平文は5/8であり、第3のステップで得られる(0,1/4)-uz+czの平文は7/8である。
上記SampleExtract(0)で得られた値に(0,1/8)を足して得られる新しいi行目のデータの暗号文az’は0となる。また上記SampleExtract(n/2)で得られた値を(0,1/8)から引いて得られる新しいi-1行目のデータの暗号文bz’は0となる。
この場合、暗号文azの平文=暗号文bz’の平文、暗号文bzの平文=暗号文az’の平文となっており、暗号文azと暗号文bzを、夫々暗号文az’と暗号文bz’で置き換えたとき、平文として、i行目とi-1行目のレコードは元の順序から入れ替わっている。
(6)~(8)においても(5)と同様に、暗号文azの平文=暗号文bz’の平文、暗号文azの平文=暗号文bz’の平文となっている。例えば(6)において、i行目のデータの暗号文azの平文が0、i-1行目のデータの暗号文bzの平文が1/4であり、新しいi行目のデータの暗号文az’は1/4、新しいi-1行目のデータの暗号文bz’は0となっている。
暗号文azと暗号文bzを、夫々新たな暗号文az’と暗号文bz’で置き換えたとき、平文として、i行目とi-1行目のレコードは元の順序から入れ替わっている。
【0107】
上記に説明したように、暗号文az’と暗号文bz’は、暗号文czの平文によって、夫々の平文が、暗号文az、暗号文bzの平文と同じ異なる暗号文となるか、暗号文bz、暗号文azの平文と同じ異なる暗号文になるか、のいずれかとなる。
復号関数をφとしたとき、φ(cz)=0の場合(i-1行目の方が平均年齢が大きく、順序を入れ替えない場合)、
φ(az’)=φ(az)
φ(bz’)=φ(bz)
となる。
φ(cz)=1/4の場合(i-1行目の方が平均年齢が小さく、順序を入れ替える場合)、
φ(az’)=φ(bz)
φ(bz’)=φ(az)
となる。
【0108】
いずれの場合でも、暗号文az≠暗号文az’かつ、暗号文bz≠暗号文bz’であり、暗号文自体は、元の暗号文と新たな暗号文とで異なるものになる。暗号文自体は、暗号処理装置1が直接扱うものであり、暗号文az’、暗号文bz’が、暗号文azと暗号文bzと夫々同じ暗号文であるか否か、あるいは暗号文bzと暗号文azと夫々同じ暗号文であるか否かがわかると、暗号文czの平文が推測できてしまう。従って、暗号文自体は元の暗号文と新たな暗号文とで必ず異なるものになる。ただし、暗号文az’の平文、暗号文bz’の平文は、暗号文czの平文によって、暗号文azの平文、暗号文bzの平文のいずれかになる。
実際のところ、新たな暗号文az’と暗号文bz’を得た段階で、暗号文czによって暗号文azと暗号文bzを入れ替えるか否かの処理が済んでいる。従って、暗号文azと暗号文bzを、暗号文az’と暗号文bz’で夫々置き換えることで、条件付き入れ替えの処理が完了する。
【0109】
本実施形態の暗号処理装置1は、条件付き入れ替えの基準となる、例えば「平均年齢」の暗号文av、bvから得られた同じ暗号文czを用いて、条件付き入れ替えの対象となる「住所」、「年齢の合計」、「人数」等の他のフィールドの暗号文az、bzから暗号文az’、bz’を求める。
そして暗号処理装置1は、「住所」、「年齢の合計」、「人数」等の条件付き入れ替えの対象となる各カラムについて暗号文az’、bz’で暗号文az、bzを置き換えることで、集約結果テーブル80全体のソートを行うことが出来る。
条件付き入れ替えの基準となる平均年齢(暗号文av、bv)についてもソートを行う場合には、上記に説明した暗号文az、bzの並び替えの場合と同様の処理によって、新たな暗号文av’、bv’を求め、暗号文av’、bv’によって暗号文av、bvを置き換えることによって行うことが出来る。
【0110】
図14は、暗号処理装置による集約結果ソート処理の流れを説明するフローチャートである。
図14に示す処理は、暗号処理装置1(集約部21)が、暗号化データベースを集約してソートをするクエリに対して、暗号化データベースの集約を行った後に行われる処理である。
情報処理装置1は、ステップS201において、変数qに集約結果テーブル80の行数(レコード数)を代入し、変数iに2を代入する。
情報処理装置1(比較部22)は、ステップS202において暗号文bv-暗号文avを演算し、ボロービットの暗号文czを得る。
比較部22は、この演算を、例えば上記に説明した全加算器によって行わせることができる。
情報処理装置1(第1演算部12)は、ステップS203においてaz+cz-(0,1/8)を計算する。
情報処理装置1(第1Bootstrapping部15)は、ステップS204において1回目のGate Bootstrappingを行い、その結果、ステップS205において、暗号文tzを得る。
【0111】
次に、情報処理装置1(第2演算部13)は、ステップS206においてtz+bz-(0,1/8)を計算する。
情報処理装置1(第2算出部16)は、ステップS207において2回目のGate Bootstrappingを行い、その結果、ステップS208において、暗号文uzを得る。
【0112】
次に、情報処理装置1(第3演算部14)は、ステップS209において、(0,1/4)-uz+czを計算する。
次に、情報処理装置1(第3Bootstrapping部17)は、ステップS210~S214において、3回目のGate Bootstrappingを行う。
情報処理装置1(第3Bootstrapping部17)は、ステップS210でBlindRotateを行い、ステップS211において、SampleExtract(0)とキースイッチングを行い、その結果、ステップS212において暗号文az’を得る。
情報処理装置1(第3Bootstrapping部17)は、ステップS213においてSampleExtract(n/2)とキースイッチングを行い、その結果ステップS214において、暗号文bz’を得る。
情報処理装置1(置換部23)は、ステップS214において、集約結果テーブル80において、暗号文azと暗号文az’、暗号文bzと暗号文bz’を置き換える。
【0113】
情報処理装置1は、ステップS216において、i=qか、すなわち、全ての行についてソート処理を終了したか否かを判定する。
i=qでなかった場合(ステップS216でNo)、情報処理装置1は、ステップS217で変数iにi+1を代入してインクリメントし、ステップS202に処理を戻す。
i=qであった場合(ステップS216でYes)、情報処理装置1は、ソート処理を終了する。
さらに、図14の処理を、集約結果テーブル80の行数(レコード数)-1分繰り返すことで、集約結果テーブル80のレコードを全てソートして、図15のような結果を得ることができる。
【0114】
図15は、ソート処理を完了後の集約結果テーブルの一例を示す図である。
図14の処理を必要回数行った結果、図8の集約結果テーブル80は、図15のように入れ替えがされた。
図8において、千代田区についての平均年齢は40歳、港区についての平均年齢は46.5歳、台東区についての平均年齢は58歳であった。
この平均年齢に基づいて、上記のバブルソートを行った結果、平均年齢の高い順に、集約結果テーブル80のレコードがソートされた。
【0115】
上記に説明したように、本実施形態の暗号処理装置1では、Gate Bootstrappingの回数を3回に減らすことが出来ている。演算時間のほぼ全てを占めるGate Bootstrappingには多くの処理時間がかかるため、この回数を削減することで、MUX演算を高速且つ短時間で行い得ることが見込まれる。
ただし図3に示すように、Gate Bootstrappingの回数は3回に減ったものの、Bootstrappingの段数は3段階に増えているので、マルチスレッディングを行った場合の図1に比べて図3の構成による処理が決定的に高速であるとは言い切れない。
下記に説明する変形例では、本実施形態の暗号処理装置1では、TLWE暗号文az、bz、czの平文が有する誤差を、例えば±1/40に削減する。これにより、MUX演算において、第1演算部12に2値の暗号文を3つ入力可能とし、Gate Bootstrappingを改良することにより、準同型演算処理の回数を全体で2回に減らす。その結果、暗号処理装置1では、準同型演算処理のほぼ全てを占めるGate Bootstrappingの回数を全体で2回に減らすことが出来る。Bootstrappingの段数は2段階としたまま準同型演算処理の回数を全体で2回に減らし、マルチスレッドで処理した場合の図1に比べてMUX演算を50%高速化することが出来る。また図3に示した構成の66%の時間でMUX演算を行うことが出来る。
【0116】
図16は、本実施形態の変形例に係る暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第4演算部31と、第5演算部32と、第4Bootstrapping部(第4算出部)33と、第5Bootstrapping部(第5算出部)34と、出力部18と、を備えている。また、制御部10は、集約部21と、比較部22と、置換部23とを備えている。
第4演算部31と、第5演算部32と、第4Bootstrapping部33と、第5Bootstrapping部34以外の構成については図2と同様であるので説明は省略する。
第4演算部31は、受付部11が受け付けた入力暗号に対して、第4準同型演算を行う。
第5演算部32は、第4Bootstrapping部33から出力される暗号文に対して、第5準同型演算を行う。
第4Bootstrapping部33は、第4演算部31の演算結果に対して下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
第5Bootstrapping部34は、第5演算部32の演算結果に対して下記に説明するGate Bootstrapping処理を行って、新たな暗号文を出力する。
【0117】
図17は、変形例に係る暗号処理装置の演算プロセスを詳しく説明する図である。
図17の説明において、暗号処理装置1に入力される暗号文az、cz、czは、いずれも上記論文に示されるTLWE暗号文である。TLWE暗号は、0又はμ(非0)の値を平文として有するBit-wise型の完全準同型暗号である。
論理ゲートを用いた論理演算によって様々な演算を行うことができる。
TLWE暗号文は、二進数のシンボル0又は1に対応する所定の値に所定の分散を持つ誤差を与えた値を平文として2値を有し、復号することなく論理演算が可能である。
これらの暗号文は、それぞれ特別に設定したシステムパラメータによるTLWE暗号文であり、Gate Bootstrappingにより生成された又は新規に暗号化されたものである。
TLWE暗号文az、cz、czは、何れも平文として0又は1/4を有し、平文に付加される誤差は±1/40の範囲に含まれる。
TLWE暗号文ca、cb、ccは、夫々0が二進数のシンボル0に対応し、1/4がシンボル1に対応する。
2値3入力とすることで誤差範囲が重なる可能性があり、平文に付加される誤差を上記論文の±1/16よりも小さく±1/40以内としている。
ただし後述するように、誤差が重なることによる問題が許容できる場合はその限りではなく、誤差として実施例の±1/40や上記論文の±1/16を採用してもよい。
【0118】
図17に示す構成では、非特許文献1の論文(上記論文)で提示された(2値)Gate Bootstrappingを使用する。
入力された暗号文az、bz、czを第4演算部31に入力して準同型演算(2×(az+cz)+bz-(0,1/8))を行い、その演算結果である暗号文を2値Gate Bootstrappingを行う第4Bootstrapping部33に入力する。
第4Bootstrapping部33の出力は、平文として2値(0,μ)の何れかを取り得る一時暗号文uzである。
暗号文uz、暗号文czを第5演算部32に入力して準同型演算((0,1/4)-uz+cz)を行い、その出力結果を第5Bootstrapping部34に入力し、2値Gate Bootstrappingが行われて新たな暗号文az’、新たな暗号文bz’が出力される。
第5演算部32、第5Bootstrapping部34の処理は、上記の第3演算部14、第3Bootstrapping部17の処理と同じである。
【0119】
暗号処理装置1(第4演算部31)は、2(az+cz)+bz-(0,1/8)を計算し、演算結果としてTLWE暗号文ctを得る。(0,1/8)は平文が1/8となる自明な暗号文である。
2(az+cz)+bz-(0,1/8)の演算結果の平文は、以下のとおりである。
azが0、bzが0、czが0(2(az+cz)+bzは二進数のシンボルで2×(0+0)+0=0)
⇒2×(0+0)+0-1/8=-1/8(7/8)
azが0、bzが0、czが1/4(2(az+cz)+bzは二進数のシンボルで2×(0+1)+0=0)
⇒2×(0+1/4)+0-1/8=3/8
azが0、bzが1/4、czが0(2(az+cz)+bzは二進数のシンボルで2×(0+0)+1=1)
⇒2×(0+0)+1/4-1/8=1/8
azが0、bzが1/4、czが1/4(2(az+cz)+bzは二進数のシンボルで2×(0+1)+1=3)
⇒2(0+1/4)+1/4-1/8=5/8
azが1/4、bzが0、czが0(2(az+cz)+bzは二進数のシンボルで2×(1+0)+0=2)
⇒2(1/4+0)+0-1/8=3/8
azが1/4、bzが0、czが1/4(2(az+cz)+bzは二進数のシンボルで2×(1+1)+0=4)
⇒2(1/4+1/4)+0-1/8=-1/8(7/8)
azが1/4、bzが1/4、czが0(2(az+cz)+bzは二進数のシンボルで2×(1+0)+1=3)
⇒2(1/4+0)+1/4-1/8=5/8
azが1/4、bzが1/4、czが1/4(2(az+cz)+bzは二進数のシンボルで2×(1+1)+1=5)
⇒2(1/4+1/4)+1/4-1/8=9/8⇒1/8
【0120】
TLWE暗号文ctは、平文として1/8、3/8、5/8、7/8の4つのいずれかを有し、平文に付加される誤差は±1/8の範囲に含まれる。
これはca+cbの誤差±1/40の和×2と、ccの誤差±1/40を足しているためである。
【0121】
次に暗号処理装置1(第4Bootstrapping部)33は、TLWE暗号文ctに対して上記論文どおりのGate Bootstrappingを行うと、上記の[第2のステップ]で算出したものと同じ、平文として1/8、3/8、5/8、7/8を有し、平文が有する誤差が±1/40である一時暗号文uzが得られる。
一時暗号文uzと暗号文czを用いた以降の処理は、上記[第3のステップ]と同じであるので説明を省略する。
【0122】
図18は、変形例に係る集約結果ソート処理の流れを説明するフローチャートである。
図18に示す処理は、暗号処理装置1(集約部21)が、暗号化データベースを集約してソートをするクエリに対して、暗号化データベースの集約を行った後に行われる処理である。
情報処理装置1は、ステップS201において、変数qに集約結果テーブル80の行数(レコード数)を代入し、変数iに2を代入する。
情報処理装置1(比較部22)は、ステップS202において暗号文bv-暗号文avを演算し、ボロービットの暗号文czを得る。
比較部22は、この演算を、例えば上記に説明した全加算器によって行わせることができる。
情報処理装置1(第4演算部31)は、ステップS203Aにおいて2(az+cz)++bz-(0,1/8)を計算する。
情報処理装置1(第4Bootstrapping部33)は、ステップS204Aにおいて1回目のGate Bootstrappingを行い、その結果、ステップS208において、暗号文uzを得る。この暗号文uzは、平文に付加される誤差以外は、図14のステップS208で得られる暗号文uzと同じである。
【0123】
次に、情報処理装置1(第5演算部32)は、ステップS209Aにおいて、(0,1/4)-uz+czを計算する。
次に、情報処理装置1(第5算出部33)は、ステップS210A~S214Aにおいて、3回目のGate Bootstrappingを行う。
情報処理装置1(第5Bootstrapping部32)は、ステップS210AでBlindRotateを行い、ステップS211において、SampleExtract(0)とキースイッチングを行い、その結果、ステップS212において暗号文az’を得る。
情報処理装置1(第5Bootstrapping部32)は、ステップS213AにおいてSampleExtract(n/2)とキースイッチングを行い、その結果ステップS214Aにおいて、暗号文bz’を得る。
第5算出部33によるステップS210A~S214Aの処理は、図14に示した第3算出部17によるステップS210~S214と同じ処理である。
情報処理装置1(置換部23)は、ステップS214において、集約結果テーブル80において、暗号文azと暗号文az’、暗号文bzと暗号文bz’を置き換える。
【0124】
情報処理装置1は、ステップS216において、i=qか、すなわち、全ての行についてソート処理を終了したか否かを判定する。
i=qでなかった場合(ステップS216でNo)、情報処理装置1は、ステップS217で変数iにi+1を代入してインクリメントし、ステップS202に処理を戻す。
i=qであった場合(ステップS216でYes)、情報処理装置1は、ソート処理を終了する。
さらに、図14の処理を、集約結果テーブル80の行数(レコード数)-1分繰り返すことで、集約結果テーブル80のレコードを全てソートして、図15のような結果を得ることができる。
【0125】
図19は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記では、図19(a)に示すように、BlindRotate、SampleExtract、キースイッチングの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図19(b)に示すように、Gate Bootstrappingにおいてキースイッチングを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図19(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、キースイッチングの結果、LEVEL0のTLWE暗号文が出力される。
それに対して図19(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にキースイッチングを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
【0126】
LEVEL0の暗号文は、N次の秘密鍵[s]で暗号化された円周群{T}上の要素のN次のベクトル[a]よりなっている。一方、SampleExtractの結果得られるLEVEL1の暗号文は、n次の秘密鍵[s’]で暗号化された円周群{T}上の要素のn次のベクトル[a']よりなっている。
LEVEL0の暗号文は、LWE問題の難易度となる係数の数(ベクトルの次数)がLEVEL1の暗号文よりも少ないので、LEVEL1と比較して準同型加算の計算量は少ない。
一方でLEVEL0の暗号文は、上記の変形例のように2値3入力の準同型演算を可能とするために平文に付加する許容誤差を小さくすると、セキュリティ強度が下がりやすい問題がある。LWE系暗号は、平文に付加する誤差によって安全性が担保されるからである。
TLWE暗号は、平文に付加する誤差が大きいほど、係数の数(ベクトルの次数)が多いほど計算(解読)が難しい。
裏を返すと、TLWE暗号は、平文に付加する誤差が小さいほど、係数の数(ベクトルの次数)が少ないほど、計算(解読)が容易となるのである。
誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
【0127】
変形例では、平文に付加する誤差を±1/40と小さくすることによって2値3入力の準同型演算によってBlindRotateの回数を減らし、MUX演算を高速化する。平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、キースイッチングをGate Bootstrappingの先頭に移動し、係数の数(ベクトルの次数)が多く誤差の範囲を小さくしやすいLEVEL1の暗号文をGate Bootstrappingの入出力とすることが望ましい。そして、Gate Bootstrappingの先頭でLEVEL0に変換してから、最後にLEVEL0に戻さないようにする。
BlindRotateの所要時間は、入力となるTLWE暗号文の係数の数(ベクトルの次数)に比例する。よって、LEVEL1の暗号文を入力とした場合は、LEVEL0の暗号文を入力とした場合よりも、係数の数(ベクトルの次数)に比例してBlindRotateの所要時間が長くなる。
暗号文のセキュリティを確保するためにLEVEL1の暗号文をGate Bootstrappingの入力としても、キースイッチングで変換したLEVEL0のTLWE暗号文を入力としてBlindRotateを行うことで、所要時間の増加を避けることが出来る。
Gate Bootstrappingの入出力をLEVEL1のTLWE暗号文とする方法は、変形例のような2値3入力の準同型演算を行う場合に限らず、図3の2値2入力の準同型演算の場合にも適用可能である。LEVEL0に戻さないことで、次段でのTLWE暗号文の計算でも同様に、安全に多値入力を行って高速に処理を行うことが出来る。
【0128】
また、平文に付加する誤差を±1/40などにすることには、上記のセキュリティ強度以外に復号時エラーの問題もある。
本実施形態の構成では、Gate Bootstrappingの処理時間の大半を占めるBlindRotateを1回で済ますことができるが、誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
例えば、平文に付加する誤差を±1/40以内と設定しても、その範囲外の誤差が付加される可能性が数パーセント存在する。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
【0129】
本実施形態では、平文に付加する誤差を±1/40と設定するようにシステムパラメータを変更することで、計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスよく解決することが出来る。
これらのバランスが最もとれるように、誤差範囲の重なりが一定値内に収まるように誤差となるようにシステムパラメータを設定することが必要である。
【0130】
なお、本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
演算の高速化を重視する場合には、平文に付加する誤差を±1/32の範囲内に設定することで2値4入力などの準同型演算も可能となる。
異なる計算結果が得られる可能性をある程度許容できるアプリケーションであれば、誤差範囲が重なる可能性はある程度許容しつつ、2値3入力として計算を高速化しながら、誤差を±1/16以内と大きくとってセキュリティを保つことも出来る。
例えば、平文に付加する誤差を±1/16以内と設定してある上記論文のパラメータを用いても、原理上、2値3入力の準同型演算で全加算器を高速化する本実施形態の構成は可能である。設定範囲から誤差がはみ出し、異なる計算結果が得られる確率が上がるのみである。
【0131】
図20は、コンピュータ装置の一実施例を示すブロック図である。
図20を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素はバス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
【0132】
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、図2図16における制御部10として機能する。
【0133】
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)などである。記憶装置102は、制御回路101を、図2図16における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、図2図16における記憶部20として機能する。
【0134】
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1演算処理、第2演算処理、第3演算処理、第4演算処理、第5演算処理、第1Bootstrapping処理、第2Bootstrapping処理、第3Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、出力処理、比較処理、集約処理、置換処理のいずれか1以上を含む処理を実行する。
なおプログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
【0135】
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行う。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0136】
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、図2において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、図2図16において、入力部26として機能する。
【0137】
表示装置108は、各種情報を表示する。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態をとることができる。
【符号の説明】
【0138】
1 暗号処理装置、10 制御部、11 受付部、12 第1演算部、13 第2演算部、14 第3演算部、15 第1算出部、16 第2算出部、17 第3算出部、21 集約部、22 比較部、23 置換部、18 出力部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク
【要約】
【課題】完全準同型暗号を実現する全加算器の演算を高速化する。
【解決手段】暗号文は、復号することなく論理演算が可能な完全準同型暗号文であり、所定の順序で配列される暗号文を所定の手法に従って入れ替えるソート処理を行い、ソート処理において、第1暗号文と第2暗号文とに基づく準同型演算を行い、該準同型演算の結果と所定の多項式とに基づいて得られる暗号文から新たな第1暗号文と新たな第2暗号文を算出し、第1暗号文及び第2暗号文と、新たな第1暗号文及び新たな第2暗号文と、が所定条件を満たすときに、第1暗号文及び第2暗号文を入れ替える。
【選択図】図14
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20