JP2024012928A - 暗号処理装置、暗号処理方法、暗号処理プログラム - Google Patents

暗号処理装置、暗号処理方法、暗号処理プログラム Download PDF

Info

Publication number
JP2024012928A
JP2024012928A JP2022114760A JP2022114760A JP2024012928A JP 2024012928 A JP2024012928 A JP 2024012928A JP 2022114760 A JP2022114760 A JP 2022114760A JP 2022114760 A JP2022114760 A JP 2022114760A JP 2024012928 A JP2024012928 A JP 2024012928A
Authority
JP
Japan
Prior art keywords
ciphertext
processing device
tlwe
cryptographic processing
plaintext
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022114760A
Other languages
English (en)
Inventor
優佑 星月
Yusuke Hoshizuki
航太郎 松岡
kotaro Matsuoka
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Axell Corp
Original Assignee
Axell Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Axell Corp filed Critical Axell Corp
Priority to JP2022114760A priority Critical patent/JP2024012928A/ja
Priority to US18/352,178 priority patent/US20240048353A1/en
Publication of JP2024012928A publication Critical patent/JP2024012928A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/008Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3093Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving Lattices or polynomial equations, e.g. NTRU scheme

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computational Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)

Abstract

Figure 2024012928000001
【課題】Integer-wise型TFHEの四則演算を実現する。
【解決手段】暗号文を処理する暗号処理装置であって、暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、所定の演算は、被除数である第1暗号文caと除数である第2暗号文cbとの除算であり、第2暗号文cbに対して第1の多項式を用いることにより、除数の逆数に対応する第3暗号文を算出し、第1暗号文caと第3暗号文とに基づく乗算を行い、乗算結果の暗号文に対して所定の多項式を用いることにより、除算結果に対応する第4暗号文czを算出する。
【選択図】図3

Description

本発明は、暗号文を処理する暗号処理装置、暗号処理方法、暗号処理プログラムに関する。
準同型暗号(Homomorphic Encryption)は、暗号化したデータを復号せず、暗号化したままデータ処理を行うことが出来る暗号方式である。
平文同士での加算に対応する暗号文同士の演算が存在する暗号が加法準同型暗号であり、平文同士での乗算に対応する暗号文同士の演算が存在する暗号が乗法準同型暗号である。
有限巡回群を整数に見立てて、加法演算(加算、減算)のみを行う加法準同型暗号と、乗法演算(乗算)のみを行う乗法準同型暗号とが以前から知られていた。
有限巡回群は、加算を繰り返せば整数倍が出来るので、平文の整数倍ができ、乗算を繰り返せば平文のべき乗計算をすることも出来る。
また、加法演算と乗法演算の両方を暗号化したまま処理する完全準同型暗号(Fully Homomorphic Encryption,FHE)がある。
完全準同型暗号の一つとして、暗号化時に復号には問題のない程度の小さな誤差を平文に加えることで構成される、LWE(Learning with Errors)問題に基づく完全準同型暗号が知られている。
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参照)。
Integer-wiseでの四則演算が可能な準同型暗号としてTFHEを利用することができれば、1ビットずつ計算するよりも効率的に処理を行うことができる。
なおTFHEで用いるTLWE暗号文は、円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。
除算に関しては、任意の2変数関数の評価技法を用いて暗号文同士の除算を行う手法(非特許文献2)や、Tree PBSと呼ばれる手法でルックアップテーブルの評価を行って暗号文同士の除算を行う手法(非特許文献3)が提案されている。
TFHE:Fast Fully Homomorphic Encryption over the Torus. Journal of Cryptology, 33:34-91, 2020, I.Chillotti, N.Gama, M.Georgieva, and M.Izabachene Integerwise Functional Bootstrapping on TFHE, 2020, Hiroki Okada, Shinsaku Kiyomoto, and Carlos Cid Improved Programmable Bootstrapping with Larger Precision and Efficient Arithmetic Circuits for TFHE, 2021, I.Chillotti, D.Ligier, J.B. Orfila, and S. Tap
非特許文献2に開示の手法では、一つの暗号文に含まれる平文の種類の二乗回のBlindRotateが必要であり、膨大な計算量によって計算に時間を要するという問題がある。また非特許文献3に開示の手法では比較的高速に除算を計算することが出来るが、さらなる高速化が必要である。
本発明は、一側面として、暗号文同士のより高速な除算を可能とし、Integer-wise型TFHEの四則演算をより完全に実現することを目的とする。
本発明は、暗号文を処理する暗号処理装置であって、前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、前記所定の演算は、被除数である第1暗号文と除数である第2暗号文との除算であり、前記第2暗号文に対して第1の多項式を用いることにより、前記除数の逆数に対応する第3暗号文を算出し、前記第1暗号文と前記第3暗号文とに基づく乗算を行い、乗算結果として、前記第1暗号文と前記第2暗号文との除算結果に対応する第4暗号文を算出する、暗号処理装置を特徴とする。
本発明によれば、一側面として、Integer-wise型TFHEの四則演算をより完全に実現することが出来る。
本実施形態の暗号処理装置の機能構成を説明する図である。 乗算部の機能構成を説明する図である。 図1の機能構成に基づく演算プロセスを説明する図である。 図2の機能構成に基づく乗算の演算プロセスを詳しく説明する図である。 TLWE暗号が平文として有する円周群を説明するイメージ図である。 2値Gate Bootstrappingの動作イメージ図である。 Integer-wise型に適用したTFHEを説明する図である。 本実施形態のInteger-wise型TFHEを説明する図である。 本実施形態のInteger-wise型TFHEを説明する図である。 3bitの暗号文の除算を高速化する暗号処理装置の機能構成を説明する図である。 図10の機能構成に基づく演算プロセスを説明する図である。 4bitの暗号文の除算を高速化する暗号処理装置の機能構成を説明する図である。 図12の機能構成に基づく演算プロセスを説明する図である。 除算処理を説明するフローチャートである。 乗算処理を説明するフローチャートである。 本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。 コンピュータ装置の一実施例を示すブロック図である。
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
なお、以下の説明において、[]で囲まれた英数字はそれがベクトルであることを示す。{}で囲まれた英数字はそれが集合であることを示す。
また、本明細書において、「論理演算」と記す場合は2値もしくは多値の論理演算のことを指すものとする。
図1は、本実施形態の暗号処理装置の機能構成を説明する図である。
暗号処理装置1は、制御部10と、記憶部20と、通信部25と、入力部26と、を備える。
制御部10は、受付部11と、第1Bootstrapping部(算出部)12と、第2Bootstrapping部(算出部)13と、乗算部14と、出力部16と、を備えている。
受付部11は、通信部25や入力部26を介した、演算の対象となる暗号文の入力を受け付ける。あるいは、受付部11は、暗号処理装置1が実行する他のプロセスから暗号文の入力を受け付ける。
第1Bootstrapping部12は、受付部11が受け付けた入力暗号文に対して、第1Gate Bootstrappingを行う。
第2Bootstrapping部13は、受付部11が受け付けた入力暗号文に対して、第2Gate Bootstrappingを行う。
乗算部14は、被乗数の暗号文に対して除数の逆数の暗号文を乗算することにより除算の演算を行う。
出力部16は、最終的な演算結果を暗号処理装置1の外部、あるいは、暗号処理装置1で実行される別の処理プロセスに対して出力する。
記憶部20は、入力暗号文や、暗号文に対する演算で用いられる一時ファイルや一時データ、出力暗号文を格納することが出来る。
また、記憶部20には、暗号化された暗号化データベース60を格納することが出来る。
通信部25は、暗号処理装置1をネットワークに接続し、外部装置との通信を可能にする。
記憶部20に暗号化された暗号化データベース60を格納し、通信部25を備えることにより、暗号処理装置1は、データベースサーバとして機能することが出来る。
この場合、暗号処理装置1は、外部装置としての端末装置から、暗号化されたクエリを受け付け、暗号化された暗号化データベース60に対する検索を行い、暗号化された検索結果を端末装置に応答することが出来る。
入力部26は、暗号処理装置1に対して、演算処理対象の暗号文や、暗号化データベース60に対するクエリを入力する。
図2は、図1における乗算部の機能構成を説明する図である。
乗算部14は、第1演算部30と、第2演算部31と、第3演算部32と、第4演算部33と、第3Bootstrapping部(算出部)34と、第4Bootstrapping(算出部)35と、第5Bootstrapping部(算出部)36と、鍵交換部38、を備えている。
第1演算部30は、第3Bootstrapping部34から出力される暗号文に対して、第1準同型演算を行う。
第2演算部31は、第1演算部30から出力される暗号文に対して、第2準同型演算を行う。
第3演算部32は、第4Bootstrapping部35による処理の途中で出力される暗号文に対して、第3準同型演算を行う。
第4演算部33は、第5Bootstrapping部36による処理の途中で出力される暗号文に対して、第4準同型演算を行う。
第3Bootstrapping部34は、鍵交換部38から出力された暗号文と入力暗号文に対して第3Bootstrappingを行う。
第4Bootstrapping部35は、第2演算部31から出力される暗号文に対して第4Bootstrappingを行う。
第5Bootstrapping部36は、第4Bootstrapping部35から出力される暗号文に対して第5Bootstrappingを行う。
鍵交換部38は、入力された暗号文の秘密鍵を交換する後述のPrivate Key Switchingを行う。なお、Private Key Switchingは、本質的には、乗数のTLWE暗号文から階段状の多項式を平文として有するTRLWE暗号文を得るために行うのであり、暗号文の秘密鍵を交換すること自体が目的ではない。階段状の多項式を平文(平文多項式)として有するTRLWE暗号文を得られれば、別の方法を用いてもよい。
図1、図2において、第1演算部30、第2演算部31、第3演算部32、第4演算部33は、下記に説明する準同型演算をソフトウェアで実現する演算処理部である。
第1Bootstrapping部12、第2Bootstrapping部13、第3Bootstrapping部34、第4Bootstrapping部35、第5Bootstrapping部36は、下記に説明するGate Bootstrapping処理をソフトウェアで実現する演算処理部である。
鍵交換部38は、Private Key Switchingをソフトウェアで実現する演算処理部である。
第1演算部30、第2演算部31、第3演算部32、第4演算部33、第1Bootstrapping部12、第2Bootstrapping部13、第3Bootstrapping部34、第4Bootstrapping部35、第5Bootstrapping部36、鍵交換部38の少なくとも一つが、ハードウェアで実現されてもよい。
図3は、図1の機能構成に基づく演算プロセスを説明する図である。
図3及び後述の図4に示す構成では、上記論文で提示されたGate Bootstrappingを使用する。上記論文で提示されているTFHEのGate Bootstrappingについては下記に詳述する。
以下の説明で、TLWE暗号文caは、非除数となる平文整数aの暗号文であり、TLWE暗号文cbは除数となる平文整数bの暗号文である。
図3(a)において、暗号処理装置1は、TLWE暗号文cbを第1Bootstrapping部12に入力して第1Bootstrappingを行い、TLWE暗号文cfを得る。
図3(b)において、暗号処理装置1は、TLWE暗号文cbを第2Bootstrapping部13に入力して第2Bootstrappingを行い、TLWE暗号文cgを得る。
図3(c)において、暗号処理装置1は、TLWE暗号文caとTLWE暗号文cgを乗算部14に入力して乗算処理を行い、TLWE暗号文chを得る。
図3(d)において、暗号処理装置1は、TLWE暗号文caとTLWE暗号文cfを乗算部14に入力して乗算処理を行い、TLWE暗号文chと1との準同型演算を行い、除算結果のTLWE暗号文czを得る。
図4は、図2の機能構成に基づく乗算の演算プロセスを詳しく説明する図である。
暗号処理装置1は、乗数としてのTLWE暗号文cBを鍵交換部38に入力し、キースイッチングキーKSを用いて、暗号文cBに対してPrivate Key Switchingを行い、階段状の多項式を平文として有するTRLWE暗号文ccを得る。
暗号処理装置1は、TRLWE暗号文ccを第3Bootstrapping部34に入力して第3Bootstrappingを行い、TLWE暗号文cc’を得る。詳しくは、第3Bootstrapping部34が階段状の多項式を平文として有するTRLWE暗号文ccとTLWE暗号文caを用いてBlindRotate、さらにSampleExtractを行い暗号文cc’を得る。
Private Key Switchingを行う処理を鍵交換部38が実行するように説明しているが、Private Key Switchingを第3Bootstrappingの一部と考えることも出来る。その場合、第3Bootstrapping部34がPrivate Key Switchingを実行し、暗号処理装置1は鍵交換部38を有さずともよい。
得られた暗号文cc’は、平文aと平文Bの乗算結果aBに対応する暗号文である。しかし暗号文cc’の平文は、後述するように分母がtであるため、次以降の乗算に用いることが出来ない。従って、暗号処理装置1は、平文の分母をtとするための処理を引き続き行う。
暗号処理装置1は、暗号文cc’を第1演算部30に入力して誤差調整値の暗号文Yを準同型加算して新たな暗号文cc’とする演算を行う。誤差調整値の加算が必要ない場合は0を加算する。
暗号処理装置1は、暗号文cc’を第2演算部31に入力して暗号文cc’をt倍する演算を行う。暗号処理装置1は、t倍した暗号文cc’を第4Bootstrapping部35に入力して第4Bootstrappingを行い、暗号文clを得る。詳しくは、第4Bootstrapping部35は、t倍した暗号文cc’に対してBlindRotate、SampleExtractを行い、暗号文cdを得る。暗号処理装置1は、暗号文cdを第3演算部32に入力して、t倍した暗号文cc’に暗号文cdを加算する演算cc’×t+cd-(0,1/4)を行う。その結果に対して、暗号処理装置1(第4Bootstrapping部35)は、Public Key Switchingを行い、乗算結果の下位ビットに対応するTLWE暗号文clを得る。
乗算結果の上位ビットを得るために、暗号処理装置1は、乗算結果の下位ビットに対応する暗号文clを第5Bootstrapping部36に入力して第5Bootstrappingを行い、TLWE暗号文cu’を得る。詳しくは、第5Bootstrapping部36は、暗号文clに対して、BlindRotate、SampleExtractを行い、暗号文cl’を得る。暗号処理装置1は、暗号文cl’と暗号文cc’を第4演算部33に入力し、cc’からcl’を減算する演算cc’-cl’を行う。暗号処理装置1(第5Bootstrapping部36)は、第3演算部14の演算結果に対してPublic Key Switchingを行い、乗算結果の上位ビットに対応するTLWE暗号文cu’を得る。
乗算結果の上位ビット、あるいは下位ビットとは、乗算結果を二進数で表したときの下位の所定数ビットと残りのビットである。なお、これはtを2のべき数にした場合の表現であり、異なる値の場合でも表現が変わるのみで、本質的に意味するものは変わらない。
TFHEで説明されるGate Bootstrappingについて詳述する。
Gate Bootstrappingは、膨大なデータ量や演算時間のために実用的とは言えなかった完全準同型暗号を実用的にするための手法である。
上記論文のTFHEでは、LWE(Learning with Errors)暗号を円周群上で構成したTLWE暗号と呼ばれる暗号を用い、演算時の誤差を小さくしながら高速かつ小さなデータサイズでTLWE暗号文同士の各種準同型論理演算(ひいては加算・乗算などの任意の演算)を実現する。
TFHEにおけるGate Bootstrappingの入力は、秘密鍵で暗号化されたTLWE暗号文である。
TFHEでは、TLWE暗号文を基本として完全準同型暗号(FHE)を実現する。
TLWE暗号は、格子暗号の一種であるLWE暗号の特殊な場合(LWE暗号を円周群上で定義したもの)である。
TLWE暗号は加法準同型であり、TLWE暗号化された平文同士の加法演算を、暗号文を復号することなく行うことができることが知られている。
図5は、TLWE暗号が平文として有する円周群を説明するイメージ図である。
TLWE暗号は、0から実数の精度で進み1になると0に戻る、図5に示す円周群{T}の任意の点を平文とし、0近辺(誤差含む)とμ近辺(誤差含む)を平文として使用する。
円周群{T}上の点は、本明細書において「要素」ともいう。
TFHEを扱う暗号処理装置は、このようなTLWE暗号文同士の演算として加法演算など一般的な準同型演算を実行し、その演算結果の誤差をGate Bootstrappingによって適切な範囲内に収めることによって、再度(後段での)論理演算が可能な完全準同型暗号(FHE)を実現する。
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回繰り返してかけるという表現を用いることもある。
[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暗号文の平文同士の加法演算を、暗号文を復号することなく行うことができる。
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で誤差を削減する」ことを繰り返していくことで、様々な演算を実現する。
なお、下記において、([0],μ)などの「自明な暗号文(trivial)」は、あらゆる秘密鍵で復号が可能なTLWE暗号文であり、すなわち、どのような秘密鍵を用いても同じ平文を復号できる暗号文である。
([0],μ)において、[0]は、ゼロベクトルを表す。
「自明な暗号文」は、TLWE暗号文として扱えるが、実質的に平文がそのまま入っている状態と言える。
TLWE暗号文([0],μ)は、復号関数φにかけると、φ(([0],μ))=μ-[s]・0=μとなり、秘密鍵[s]がゼロベクトル[0]と掛け合わされて消えるため、容易に平文μが得られる。このような暗号文は、平文μに対して自明な暗号文に他ならない。
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)
従って、多項式を要素として多項式同士の和・積を定義すると「環」をなし、これを多項式環と呼ぶ。
TFHEでは、円周群{T}を係数とする多項式環を用い、このような多項式環をT[X]と表記する。
多項式環である多項式T(X)をT[X](X+1)+T[X]のかたちに分解し、剰余部分だけを取り出して集めると、これもまた「環」であるため多項式環の剰余環が得られる。
TFHEでは、多項式環の剰余環をT[X]/(X+1)と表す。
多項式環の剰余環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-μとなって全ての項の係数がマイナスとなる。
さらに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回繰り返して掛けると全ての項の符号が元に戻る。
[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)とする。
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は除算の余りを意味する。
[Gadget Decomposition]
Gadget Decompositionについて説明する。
TRLWE暗号文で用いている多項式の係数は、図5の円周群{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のべき乗の和の形に分解する。
円周群{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]
というベクトルになる。
ベクトルから暗号文に逆変換する作用素Hも定義する。
上記の例に基づいて説明すると、

Figure 2024012928000002

という行列が、逆変換の作用素Hとなる。Dec(d)・Hを演算することで、TRLWE暗号文dが得られる。下位ビットは四捨五入をしてまるめられている。
TRLWE暗号文dに対して、||d-[v]・H||が最小値となる[v]を得る操作が、Gadget Decompositionであるとも言える。ここで||はベクトルのノルム(長さ)である。
e(X)の係数全てが平均値0となり、分散はαとなる多項式でできた暗号文Zi=(a(X),b(X))を2l(エル)個生成する。
そして、平文μを以下のように暗号化し、以下の暗号文kを得る。

Figure 2024012928000003

この暗号文kをTRGSW暗号文BKとして定義する。
TRGSW暗号文BKは、下記に用いるBootstrapping Keyを構成する。
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暗号文の構成どおり、

Figure 2024012928000004

とする。
このTRGSW暗号文を、秘密鍵[s]の次数と同じN個用意したセットを、Bootstrapping Keyと呼ぶ。
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

Figure 2024012928000005

となる。
左半分は内積を計算し、右半分には[v]・H=d+(ε(X),ε(X))を代入すると、

Figure 2024012928000006

となり、下記の3つの暗号文c1、c2、c3の和の計算と同じとなる。

Figure 2024012928000007

TRLWE暗号は加法準同型暗号であるため、暗号文同士の和をとると平文同士の和をとったことと同じである。
は、Zを何倍かして足したものなので、平文φs’(c)の期待値は0となる。
また復号したφs’(c)は、平文の絶対値の大きさをシステムパラメータで制約することができるので、この後の演算も含めて十分小さくなるように設定する。
そうするとφ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関数は、平文μもしくは平文μの暗号文を計算することができるが、どちらを選択したかは分からない。
TFHEの2値Gate Bootstrappingは、上記に説明した様々な情報を用いて行われる。
2値Gate Bootstrappingは、以下に説明する3つのステップ、(1)BlindRotate、(2)SampleExtract、(3)Public Key Switchingから構成される。
図6は、2値Gate Bootstrappingの動作イメージ図である。
2値Gate Bootstrappingは、下記に説明する3つのステップによってTLWE暗号文同士の準同型演算結果が有する平文に対する誤差の削減を行う。
以下の説明で、特に説明をしない場合、平文とは、TLWE暗号文同士で演算した結果の平文同士の演算結果を意味するものとする。
図5の円周群{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の範囲のいずれかである。
(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
を用意する。
平文μ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の累乗が自然に定義できる。
そうすると、sが0の時は、平文はそのまま変わらず、sが1の時は、Xa’iが順番に乗算されていく。
従って、

Figure 2024012928000008

と繰り返すと、

Figure 2024012928000009

となる。
ここで、

Figure 2024012928000010

は、復号関数φs(c’)の符号を反転したものに等しいので、

Figure 2024012928000011

となる。ここでφs’(A)は、多項式T(X)にX-1をμ1’回乗算した多項式の暗号文である。
BlindRotateに係るTLWE暗号文cの平文μ1に対応して、多項式T(X)にXをかける回数μ1’(=2nμ1)に応じたユニークな値(n個の係数とその符号反転で最大2n個)が平文多項式の定数項の係数として得られるので、これは、一種のルックアップテーブル(Look Up Table)とみなすことが出来る。
(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暗号文csを得るための処理を説明する。
全てのTRLWE暗号文は、次数をnとして、

Figure 2024012928000012

と多項式をおいて、(A(X),B(X))と表現することができる。
これを秘密鍵[s’]で復号したとき、秘密鍵の多項式を

Figure 2024012928000013
とおいて、

Figure 2024012928000014

と展開することができる。
これに対して下記の演算を行い、

Figure 2024012928000015

を得る。
「多項式環の剰余環」であるので(X+1)で割った余りを求めると、

Figure 2024012928000016

が得られる。
さらに、

Figure 2024012928000017

とおくと、

Figure 2024012928000018

となり、

Figure 2024012928000019

から、平文多項式の各項の係数が求まる。
そのうち必要なのは定数項の係数であるので、j=0の場合の係数を取り出すと、

Figure 2024012928000020

が得られる。

Figure 2024012928000021

とおくと、

Figure 2024012928000022

のように、TLWE暗号の復号関数に変形することができる。
つまり、(1)のBlindRotateで得たTRLWE暗号文A=(A(X),B(X))から、係数を

Figure 2024012928000023

として取り出すと、元の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が得られた。
(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’]を暗号化する。
すなわち、

Figure 2024012928000024

と、円周群{T}の要素、0から1の実数を二進数で表現したときの各桁にずらした値として暗号化する。秘密鍵は[s]である。「桁数」tはシステムパラメータである。
秘密鍵[s]で復号すると、

Figure 2024012928000025

となる。これが「キースイッチングキー」である。
上記したように(2)で得られたTLWE暗号文cs=([a],b)は秘密鍵[s’]で暗号化された0又は1/4の値である。[a]の要素数は、秘密鍵[s’]と同じくn個である。
これを一つずつ、夫々tビットの固定小数に変換すると、

Figure 2024012928000026

の形式で書くことができる。
この段階で誤差が増えるが、システムパラメータで絶対値の最大値を制約することができる。
Public Key Switching本体の処理として、以下のTLWE暗号文cxを計算する。

Figure 2024012928000027

([0],b)の項は自明な暗号文なので、復号するとbであり、TLWE暗号文cxを復号した結果を計算すると、

Figure 2024012928000028

である。
s’は、jに対して定数なのでくくりだして

Figure 2024012928000029

とし、上記で固定小数に分解したときの式を代入する。

Figure 2024012928000030

その結果、

Figure 2024012928000031

となって鍵の切り替えが成功したことになる。
ここで得られた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演算ができるようになり、加算、乗算をはじめとしてあらゆる演算が可能となる。
Gate Bootstrappingから出力されるTLWE暗号の「平文」に乗っている誤差は、TLWE暗号文の整数化で加わる誤差、CMuxで加わる誤差、Public Key Switchingで固定小数化した時の誤差等である。これらの誤差は全てシステムパラメータで制約でき、全てを考慮した誤差が±1/16となるようにシステムパラメータを調整することができる。
以上が、TFHEのGate Bootstrappingの処理である。
上記したように、TFHEは0もしくは非0を平文として持ち、論理演算を行うBit-wise型の準同型暗号である。ただし図3で説明したように平文は円周群{T}に対応づけられた0~1の実数である。従って、円周群{T}を区切った区間を順番に整数と対応付けることにより、整数を平文として持つInteger-wise型の準同型暗号として応用することが出来る。
TFHEで用いるTLWE暗号文は円周群の平文に対して加法準同型であることが上記論文によって示されており、加算(減算)の演算ができることは自明である。
図7は、Integer-wise型に適用したTFHEを説明する図である。
図7に示すように、円周群{T}に対応づけた0~1の値域をt個に分割する。TLWE暗号文において、平文が取り得る値は、値域0~1を分割したt個の値-(t/2)から(t/2)-1であり、(t/2)-1が1つのTLWE暗号文に記録できる整数の最大値である。
図7に例示するように、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の区間に割り当てられている。
このようにすることで、1/2が含まれる領域から反時計回りに連続して整数を割り当てることが出来る。
図7に示すように、円周群{T}上の0(1)は、-1/2t~1/2tの領域の範囲内にある。円周群{T}上における暗号文の平文は、必要に応じて例えば1/2tに基づいたオフセットを、図7の状態に加算あるいは減算して領域内の位置(円周群{T}上の位置)を調整することが出来る。
なお、本質的に変わることはないが、下記に説明する実施形態では、図7の説明とは円周群の分割数tの意味が異なっている。
図8、図9は、本実施形態のInteger-wise型TFHEを説明する図である。
図8に示すように、本実施形態の除数、被除数夫々の暗号文は、円周群{T}の値域全体(0~1)を2t個に分割している。
tの値を大きくして円周群{T}を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできるが、細かく分割しすぎると平文に付加する誤差範囲が小さくなりすぎ、暗号の強度が低下するという問題がある。この点については後に説明する。
円周群{T}を分割した1/(2t)の区間毎に、整数値が割り当てられTLWE暗号文が取り得る平文整数の値は-tからt-1である。t-1が1つのTLWE暗号文に記録できる整数の最大値であり、-tが1つのTLWE暗号文に記録できる整数の最小値である。
図5の場合と同様に平文に対してオフセットを付加していない(平文に対するオフセットが0)状態を図8(b)に示している。図8(a)は、図8(b)に示す暗号文の平文に対して、例えば+1/(4t)のオフセットを付加した状態を示している。オフセットを付加することによって、円周群{T}のスライス割りを変更することが出来る。
なお、下記の説明では、円周群の右半面、左半面とは、オフセットを1/(4t)だけ付与した図8(a)の状態に準拠するものとする。
図8(b)に示すオフセット未付加の状態では、円周群{T}上の0(1)が-1/(4t)~1/(4t)のスライス内にある。オフセットを付加することによって、図8(a)に示すように、円周群{T}上の0から始まるスライス(0/2t)に整数0を対応付けることが出来る。他のスライスはX/2t(Xは平文整数)から始まる。
図8(a)において、オフセットを付加された平文は、各スライス(例えば、3/(2t)から始まるスライス)の中央に、±1/4tの誤差範囲内で位置する。このとき、正規分布の平均が例えば3/(2t)+1/4tとなり、±1/4tの誤差範囲内に分布することで、3/(2t)から始まるスライスの中央に平文が分布する。
オフセットを付加した平文は、図8(a)において、3/(2t)のスライスにのみ図示しているが、あくまで例示であり、全てのスライスに始点となる値にオフセットを付した平文が存在する。図7についても同様である。
図8の暗号文は、円周群{T}の右半面をt個に分割し、左半面をt個に分割している。円周群{T}の右半面は0及び正の平文整数(0~t-1)に対応している。
整数値は、円周群{T}の0~1(-1/2~2/1)の値域を2t個に区切った、夫々-t/(2t)~(t-1)/(2t)から始まるスライスに割り当てられる。
これらのスライスは、夫々始点となる値に+1/(4t)のオフセットを付加した値を中心とするスライスである。1/(4t)のオフセットは、1/(2t)のスライス幅の半分に相当する。1/4tのオフセットを整数表現に含めて表すと、便宜上+0.5のオフセットと表現することが出来る。
図8(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から始まる領域から反時計回りに連続して整数を割り当てている。
暗号処理装置1は、TFHEのシステムパラメータを設定する。このとき、暗号処理装置1は、Gate Bootstrapping後に得られる暗号文において、平文に付加される誤差の範囲が±1/(8t)未満となるようにシステムパラメータを設定する。
被除数(割られる数)のTLWE暗号文caと、除数(割る数)のTLWE暗号文cbがあるとする。
乗数、被乗数のTLWE暗号文ca、cbは、図8(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と対応付けながら平文をスライスの中央に位置させる。
図8(a)について説明したように、TLWE暗号文ca、TLWE暗号文cbにおいても、a/(2t)+1/(4t)、b/(2t)+1/(4t)と平文にオフセットを付加している。
オフセットの値1/(4t)は例でありこれに限定されるものではないが、オフセットの値に応じて、多項式やパラメータを調整する必要がある。
図8(a)において、0と正の数(非負の数)を扱う円周群{T}の右半面では、下から反時計回りに、0/(2t)から始まるスライス~t-1/(2t)から始まるスライスを用いて、整数0~t-1を表現する。
以下に、図2及び図4を参照して、暗号文同士の除算を行う方法を説明する。除算が可能となることで、すでに公知である加算と一部の乗算と併せてTFHEをInteger-wise型での四則演算がより完全なかたちで可能な準同型暗号として利用することができる。Bit-wise型のTFHEによって1ビットずつ計算するよりも効率的に処理を行うことができる。
下記に説明する本実施形態の方法では、基本的に被除数に除数の逆数を乗じ、下位ビットを切り捨てることによって除算を行う(商を求める)。
暗号処理装置1は暗号文同士の除算の過程において下位ビットの切り捨てを伴う特定の乗算を行うため、除算方法の説明に先立って、特定の乗算方法を説明する。
特定の乗算方法において、暗号処理装置1は、階段状の多項式を用いたBlindRotateを実行すると同時にInteger-wise暗号文同士の乗算を行う。BlindRotateのための階段状の多項式を得るために、本実施形態では、一例として、上記論文(非特許文献1)に記載のPrivate Key Switchingを使用する。まず、Private Ky 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を生成することが出来る。

Figure 2024012928000032

Private Key Switchingを行う者、例えば暗号処理装置1は、秘密鍵[s]および[s’]を知らなくても、キースイッチングキーKS1を用いて、TLWE暗号文c([a],b)から以下の計算を行うことが出来る。
また、キースイッチングキーKS1は、本質的にTRLWE暗号文の集合であるため、キースイッチングキーKS1から秘密鍵[s]および[s’]を得ることはできない。
暗号処理装置1は、上記のPublic Key Switchingの場合と類似して、TLWE暗号文の要素を、

Figure 2024012928000033

と夫々分解する。
i,jおよびbは、aもしくはbを2進数で表現した時の各桁の値であり0又は1の値を取り得る。
その後、暗号処理装置1は、

Figure 2024012928000034

を演算する。
これが、秘密鍵無しで何を計算したことになるか確認するため、式を変形すると、
Figure 2024012928000035

となる。
以上の演算結果から、最初のTLWE暗号文cを復号することなく、TLWE暗号文の平文をf’に代入したTRLWE暗号文c’が得られている。関数f’は、暗号化処理・復号処理と、関数f’の評価処理の順序を入れ替えても問題ない関数である必要がある。
本実施形態では、f’(x)として、以下の階段状の多項式を得る関数を設定し、キースイッチングキーKS1を事前に計算する。

Figure 2024012928000036
暗号処理装置1は、このPrivate Key Switchingを用いて、乗数のTLWE暗号文から階段状の多項式を平文として有するTRLWE暗号文を生成する。そして、暗号処理装置1は、得られたTRLWE暗号文に対して、被乗数のTLWE暗号文によるBlindRotateを行うことによって乗算を実現する。
乗算処理を行うための(1)~(6)の処理を説明する。
なお、下記の説明において、TLWE暗号文cBは、本実施形態の第1実施例、第2実施例、第3実施例で行われる乗算において被乗数のTLWE暗号文caに対して乗ぜられるTLWE暗号文cg、cf、cs、cpに対応する。各実施例において、TLWE暗号文cg、cf、cs、cpは、適宜TLWE暗号文cBと読み替えられる。TLWE暗号文cg、cf、cs、cpの平文g、f、s、pも平文Bと読み替えられる。
また、乗算過程で得られる暗号文cc、cc’、cd、cl、cu、cu’などは、同じ符号が付されていても、乗数となるTLWE暗号文cg、cf、cs、cpによって異なる値を有する暗号文である。
(1)暗号文cBは、円周群の右半面(0~0.5)をt=8分割した暗号文であり、t=8分割した円周群の右半面に0~(t-1)までの整数を対応させている。円周群全体としては2t分割である。
一方、暗号文cB’は、平文に対応付けている整数の値自体は暗号文cBの平文Bと変わっていないが、暗号文cBの分割数を変換した暗号文である。
暗号文cB’は、t=64分割した円周群の右半面(0~0.5)のさらに下半面に0~(t-1)までの整数を対応させている。円周群全体としては2t個に分割していることになる。
テストベクタ多項式T(X)

Figure 2024012928000037

を用いて、TLWE暗号文cBに対するBlindRotateを行うことで、TLWE暗号文cB’(LEVEL1)を得るという方法もある。
それに対して、本実施形態では、円周群上の1/(2t)のスケールで整数を対応づけて格納したルックアップテーブルを用意しておく。このようなルックアップテーブルを参照することでTLWE暗号文cB’を得るために、暗号文cBに対するBootstrappingを省略することが出来る。
乗算に要するBootstrappingの回数は、後述するPrivate Key Switchingで得られた暗号文ccに対する1回(第3bootstrapping)と、上下ビットの分解のための2回(第4bootstrapping、第5bootstrapping)との計3回とすることが出来る。
暗号処理装置1(鍵交換部38)は、暗号文cB’に対してキースイッチングキーKSを用いてPrivate Key Switchingを行い、TRLWE暗号文ccを得る。暗号文ccの秘密鍵は[s’]である。
TRLWE暗号文ccを秘密鍵[s’]で復号した結果は、以下の通りであり、

Figure 2024012928000038

暗号文ccの平文は、平文多項式

Figure 2024012928000039

であり、円周群の右半面をt分割(0、1、2、3…)して、暗号文cBの平文の値ずつ階段状に係数が増加する多項式という結果が得られている。暗号文cBが平文として3の値を有していたとき、Private Key Switchingの結果、円周群の右半面と対応する次数の項の係数には、暗号文cBの平文(3)の倍数である0、3、6、9、12と並んだ平文多項式が得られる。
(2)暗号処理装置1(第3Bootstrapping部34)は、第3Bootstrappingとして、TRLWE暗号文cc(LEVEL1)を、TLWE暗号文ca(LEVEL0)を用いてBlindRotateし、SampleExtractを行って暗号文cc’(LEVEL1)を得る。暗号文cc’の秘密鍵は[s’]である。
TLWE暗号文caを2n倍したTLWE暗号文ca’は{a/(2t)}×2nから、平文としてan/tを有する。
従って、φs’(cc)の平文多項式のうち、指数がan/t+n/(2t)近傍である項が、定数項として得られる。
つまり、φs’(cc’)=aB/(2t)となり、暗号文cc’は、平文としてaB/(2t)を有する。平文aと平文Bの積が得られており、暗号文cc’は平文aと平文Bの積に対応する暗号文である。
図9に示す途中で得られる乗算結果の暗号文cc’は、t=8の例では0~1の値域全体を2t=128個に分割し、暗号文は-64、-63・・・、-4、-3、-2、-1、0、1、2、3、4・・・62、63の整数を表現することが出来る。
円周群の右半面ではt=64個の整数、0、1、2、3、4、5、6、7・・・63を表現することが出来る。これらの整数値は、円周群の0~1の値域全体を2t個に区切った1/2tずつの区間に割り当てられる。
乗算結果に対応する暗号文では、円周群の右半面をt個に分割し、円周群全体では、2t個に分割している。
t=8の場合、円周群の右半面をt=64分割し、0~63の整数を表現することが出来る。円周群全体では2t=128分割である。
t=8の場合、2=8から、乗数、被乗数のTLWE暗号文ca、cBは、円周群(右半面)に3ビットの整数を記録する。3ビットの整数同士の乗算結果は6ビットの整数であり、これを記録するTLWE暗号文は、円周群(右半面)を2=64分割すなわちt個に分割する。
このように、乗算結果の暗号文は、乗数、被乗数の暗号文とは円周群の分割数が異なっている。
そして、本実施形態では、乗算結果から商に該当する部分のみが必要であるので、暗号処理装置1は、暗号文の乗算前後で円周群の分割数を合わせるための、除算結果の商を得るための変換を行う。
暗号処理装置1は、例えば6ビット(2t分割)となっている乗算結果から、下位3ビット(2t分割)、上位3ビット(2t分割)を抽出し、乗算前と同じ2t分割の暗号文を得る。上位3ビットが商である。
例えば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の誤差しか許されない。これでは計算エラー率が高すぎるという問題がある。
多項式の次数nを増やす、あるいはベクトルの次数Nを小さくするという選択肢もあるが、そうした場合、暗号の強度や計算速度が犠牲になる。多項式の次数を増やすと、CMuxで行う乗算の計算量がO(n)で増える一方、ベクトルの次数を小さくすると解析の際の自由度が下がり、暗号として容易に解けるようになる。
従って本実施形態では、以下に示す方法によってエラー率を十分に抑えつつ、平文の分母が2tからの平文の分母が2tである暗号文(商の暗号文、剰余の暗号文)の計算を行う。
(3)暗号処理装置1(第2演算部31)は、暗号文cc’を平文の分母がtである暗号文に変換する。まずは暗号文cc’をt倍する。暗号文cc’のt倍は整数倍であり、上記に説明したように暗号文の整数倍は円周群上に定義されている。従って、暗号文cc’のt倍は従来知られる方法から得られる。t倍した暗号文cc’の平文はaB/(2t)×t=aB/2tとなり分母がtになる。
暗号処理装置1(第4Bootstrapping部35)は、t倍した暗号文cc’に対して、係数μ=1/4としたテストベクタ多項式によってBlindRotate、さらにSampleExtractを行い、TLWE暗号文cd(秘密鍵は[s’])を得る。この時点では、Public Key Switchingを行っていないため、TLWE暗号文cdの秘密鍵は[s’]である。
分割された状態のTLWE暗号文cc’にBlindRotateを単純に行うと、四捨五入の誤差によって暗号文が壊れてしまうため、上記に説明したように暗号文cc’をt倍している。
分割されたTLWE暗号文cc’をt倍し、t分割の暗号文とみなして処理を行うことで、整数シンボルに対応する値の円周群上の幅が、図9の1/2tの範囲から図6(a)の1/2tにt倍広がっている。
よって、円周群上の平文同士の間隔(誤差範囲)を十分に広くすることができ、四捨五入による誤差を許容可能な範囲に抑え、BlindRotate時のエラー率を十分に下げることができる。
なお暗号文cc’をt倍した結果、円周群上の0~0.5(右半面)の区間を用いていた平文が、TLWE暗号文cdでは0.5~1の区間にも分布することになる。TLWE暗号文cdは、円周群上の0~0.5(右半面)の区間では平文として1/4を有し、0.5~1(左半面)の区間では平文として-1/4を有する。
(4)暗号処理装置1(第3演算部32)は、cc’×t+cd-(0,1/4)を計算する。暗号処理装置1(第4Bootstrapping部35)は、計算結果に対してPublic Key Switchingを行い、秘密鍵を[s]としたTLWE暗号文clを得る。これにより、乗算結果の下位ビットが得られる。
TLWE暗号文clは、復号するとφ(cl)=(aB mod t)/(2t)+1/(4t)となる暗号文である。
剰余が常に正であると考えると、暗号文cc’の平文が負であっても、暗号文clの平文は正になる。商まで計算すると、t×商+剰余=abが正負問わず成立するため、数学的に矛盾はない。乗算結果が1変数に格納されている状態から、コンピュータで除算剰余算命令を用いて求める場合、言語処理系やCPUアーキテクチャによって様々だが、tを2のべき数としてシフト演算とAND演算で分解する、つまり2進数表記にして単純にビットを分けるという処理とは完全に一致する結果となる。
t倍したTLWE暗号文で計算しているため、整数シンボル1つに対応する値の幅がt倍に広がっており、相対的に四捨五入による誤差を許容できるようになっている。また、加算乗算を秘密鍵[s’]によるTLWE暗号文で行うことにより、比較的大きな誤差を付与するPublic Key Switchingの影響を小さくすることができる。
乗算結果の上位ビットを得るために、以下の演算を行う。
(5)情報処理装置1(第5Bootstrapping部36)は、下位ビットのTLWE暗号文clに対して、下記のテストベクタ多項式

Figure 2024012928000040

を用いてBlindRotate、SampleExtractを行い、TLWE暗号文cl’(LEVEL1)を得る。TLWE暗号文cl’は、秘密鍵が[s’]である。
TLWE暗号文cl’は、平文の分母が1/2tの暗号文であって、乗算結果の下位ビット(aB mod t)を、0~1/(2t)の区間を使用して保持する暗号文である。剰余は負の数ではないとの前提であるため、円周群の右半面のみを使っているものと考えられる。
(6)暗号処理装置1(第4演算部33)は、cu=cc’-cl’+(0,1/4t)を計算して暗号文cuを得る。
暗号文cuに対してPublic Key Switchingを行い、秘密鍵を[s’]から[s]に戻して暗号文cu’を得る。つまり、aB/2tから(aB mod t)/2tを引くことで分子をtの倍数とし、分子と分母をtで約分する。
すると、

Figure 2024012928000041

が得られる。
この時、暗号文cc’、暗号文cl’の平文に付加される誤差成分は正規分布に従っているため、再生性によって暗号文cuの平文に付加される誤差も正規分布に従う。よって、暗号文cu’はそのまま次の演算に使用することができる。
つまり、右半面を64分割した暗号文から、8の剰余となる暗号文を引くことで、必ず8の倍数を平文とする暗号文となる。つまり8個置きにブロックを使用している。これを、右半面を8分割した暗号文を比較すると、分割の仕方が同じで、与えられている誤差の分散が異なるのみであるとみなすことができるため、暗号文cuは実質右半面を8分割した暗号文として扱うことができる。
なぜならば暗号文cc’、暗号文cl’において平文に付加される誤差成分は正規分布に従っている。暗号文cc’-暗号文cl’で得られる暗号文cuにおいて平文に付加される誤差も、再生性と呼ばれる性質によって正規分布に従う。よって、乗算の上位桁(ビット)の暗号文cu’はBootstrappingを行うことなく、そのまま次の演算に使用することができる。
暗号文cu’も暗号文clも、最後にPublic Key Switchingで秘密鍵を[s]に戻したLEVEL0になっている。この処理をなくして、事前処理の時に暗号文ca、暗号文cbそれぞれに対してPublic Key Switchingを行うことで、LEVEL1を入出力とすることができる。
<第1実施例>
図1乃至図4を参照して、第1実施例として被除数としての整数aのTLWE暗号文caと除数としての整数bの暗号文cbとの除算方法を説明する。この第1実施例は、図3の構成に対応する。
図8で説明したように、TLWE暗号文が含み得る整数の最大値はt-1であり、被除数aは0からt-1までの値を取り得、除数bは1からt-1までの値を取り得る。除数は0を取り得ない。
暗号処理装置1は、被除数の暗号文に対して除数の逆数の暗号文の乗算を行い、乗算結果から上位ビットのみを残して除算結果(商)を得ることにより、暗号文の除算を行う。
被除数aと除数bの除算結果(商)zは、

Figure 2024012928000042

によって求められる。図8で説明したように、TLWE暗号文で表現できる除算結果zは、最大値がt-1の整数である。
zを求める式は、右辺

Figure 2024012928000043

を上記の整数の最大値(t-1)を用いて変形し、

(式1)
Figure 2024012928000044

と表すことが出来る。
ここで、(式1)における除数bについての関数

Figure 2024012928000045

の夫々を
Figure 2024012928000046

とおく。
暗号文の分割数であるtの値はシステムパラメータで決定されており、関数f(x)及びg(x)の引数である除数bは、0~t-1の間の限られた数の整数(tが8の場合、0、1、3、4、5、6、7)である。ただし、除数は0を取り得ないため、実際には除数bの値は0を除外する。
暗号処理装置1は、xの値(除数bの値)が1からt-1までの夫々の場合における

Figure 2024012928000047

を予め計算し、下記のように夫々の計算結果をxの値に関連付けたテーブルを作成する。
〈テーブル1〉
Figure 2024012928000048

〈テーブル2〉
Figure 2024012928000049

f(x)の計算結果fは除数bの逆数に対応し、g(x)の計算結果gは、除算結果に対する誤差調整値に対応する。
(式1)は、上記f(x)、g(x)を用いて、
(式2)

Figure 2024012928000050

と変形することができる。
-1までの整数を保持できる乗算途中の暗号文cc’に対しては、準同型加算を行うことができる。従って、図4に従った暗号文caと暗号文cbとの乗算結果の上位ビットの暗号文cu’を数式で書くと、以下の関数m、

Figure 2024012928000051

を評価したものとなる。
関数mを利用すると、上記の(式2)は、
(式3)
z=m(a,f(b),m(a,g(b),0)+1)
と表すことが出来る。
上記のように、f(b)、g(b)の値は、除数bの値に対応付けてテーブル化されている。暗号処理装置1は、これらのテーブルに基づいて作成したテストベクタを用いてGate Bootstrappingを行い、商zを求める除算を実行する。
具体的に、暗号処理装置1は、図3(a)に示すように、TLWE暗号文cbを第1Bootstrapping部12に入力して、上記<テーブル1>から作られるテストベクタによる第1Bootstrappingを行い、除数bの逆数fを平文として有する暗号文cfを得る。
また暗号処理装置1は、図3(b)に示すように、TLWE暗号文cbを第2Bootstrapping部13に入力して、関数g(b)についての上記<テーブル2>から作られるテストベクタによる第2Bootstrappingを行い、誤差調整値gを平文として有する暗号文cgを得る。
上記の結果、(式3)は、
z=m(a,f,m(a,g,0)+1)
と表せる。
暗号処理装置1は、ここまででTLWE暗号文cbについてBlindRotateを2回行っている。
次に暗号処理装置1は、(式3)の関数m(a,g,0)を計算する。

Figure 2024012928000052

から、暗号処理装置1は、図3(c)に示すように、

Figure 2024012928000053

を計算する。暗号処理装置1は、図4に従って、暗号文caと暗号文cgとの乗算を行う。暗号処理装置1は、暗号文cc’に0を準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが誤差調整値hを平文として有する暗号文chである。
暗号処理装置1は、暗号文chの演算にBlindRotateを3回行う。
上記の結果、(式3)は、
(式3’)
z=m(a,f,h+1)
となる。

Figure 2024012928000054

から、図3(d)に示すように、暗号処理装置1は、

Figure 2024012928000055

を計算する。
暗号処理装置1は、図4に従って、暗号文caと暗号文cfとの乗算を行う。暗号処理装置1は、暗号文cc’に暗号文chと1を準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが、除算結果(商)zを平文として有する暗号文czである。
暗号処理装置1は、暗号文czの演算にBlindRotateを3回行う。
この方法によれば、暗号処理装置1は、3bit、4bit、5bitのInteger-wise暗号文の場合で、計8回のBlindRotateで除算を実行することが出来た。所要時間は概ね365ms程度である。上述のTree PBS(非特許文献3)によるテーブルルックアップを行う場合の719msと比較して、大幅な高速化を実現できた。
下位ビットを切り捨てる乗算を利用し(乗算の後に上位下位ビットに分解することをシフト演算として活用し)、且つ乗算処理を2回行うことで、nbit(上記の説明では3ビット)幅の平文に対して2nbit(上記の説明では6ビット)幅の精度で逆数乗算を行っている。これにより、整数精度で正確に一致する除算結果が得られる。
<第2実施例(3bit)>
図10は、特に3bitの暗号文の除算を高速化する暗号処理装置の機能構成を説明する図である。
図1と同じ構成には同じ符号を付して説明は省略している。
図10に示す暗号処理装置の制御部10は、受付部11と、第7Bootstrapping部41と、第8Bootstrapping42と、乗算部14と、出力部16と、を備えている。
図11は、図10の機能構成に基づく演算プロセスを説明する図である。
図11(a)に示すように、暗号処理装置1は、TLWE暗号文cbを第7Bootstrapping部41に入力して第7Bootstrappingを行い、除数bの逆数sを平文として有するTLWE暗号文csを得る。第7Bootstrappingは、後述のテーブルから作られるテストベクタを用いて行う。
図11(b)に示すように、暗号処理装置1は、TLWE暗号文cbを第8Bootstrapping部42に入力して第8Bootstrappingを行い、除数bの誤差調整値wを平文として有するTLWE暗号文cwを得る。第8Bootstrappingは、後述のテーブルから作られるテストベクタを用いて行う。
図11(c)に示すように、暗号処理装置1は、TLWE暗号文caとTLWE暗号文csを乗算部14に入力して乗算を行う。暗号処理装置1は、暗号文cc’に誤差調整値の暗号文cwを準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが除算結果(商)zを平文として有するTLWE暗号文czである。
図2、図4、図10、図11を用いて第2実施例を詳しく説明する。
図8で説明したように、TLWE暗号文が含み得る整数の最大値はt-1である。被除数aは0からt-1までの値を取り得、除数bは1からt-1までの値を取り得る(除数は0を取り得ない)。
ここでt=8であり、被除数は3bitで表現可能な0~7の整数である。除数は0を取り得ないため、実際には除数bの値は0を除外する。除数bは1~7の整数である。
上記の

Figure 2024012928000056

から、商zを表す数式を、
(式4)
z=m(a,s[b],w[b])
とおく。
s[b]、w[b]は、除数bが1~7の何れかの整数である場合の逆数sと誤差調整値wとを予め演算して、除数bの値と関連付けたテーブルである。この3ビットの場合、誤差調整値は、w[b]のテーブルで表しうる。除数bのみによって誤差調整値を決定しても、整数精度で演算を行うことができるのである。
<テーブルs[b]>
Figure 2024012928000057

<テーブルw[b]>
Figure 2024012928000058

第2実施例において、暗号処理装置1は、これらのテーブルs[b]、w[b]を用いて除算を行う。
非特許文献3のTree PBSとは異なり、3ビットの除算を行うときに、6ビットのテーブルを用意するのではなく、3ビットのテーブルを2個用意するようにしたことで、テーブルの容量を削減し、且つBlindRotateの回数を削減することが出来る。
具体的に、暗号処理装置1は、図11(a)に示すように、TLWE暗号文cbに対してテーブルs[b]から作られるテストベクタT(X)による第7Bootstrappingを行い、除数bの逆数sを平文として有するTLWE暗号文csを得る。s/tは、除数bの逆数に近似した値である。
次に暗号処理装置1は、図11(b)に示すように、テーブルw[b]から作られるテストベクタT(X)による第8Bootstrappingを行い、除数bの逆数を乗算することによる誤差調整値wに対応するTLWE暗号文cwを得る。
その結果、(式4)は、
z=m(a,s,w)
と表せる。
ここまでで、暗号処理装置1は、TLWE暗号文cbに対するBlindRotateを2回行っている。
(3)
Figure 2024012928000059

から、暗号処理装置1は、

Figure 2024012928000060

を計算し、商zを得ることが出来る。
暗号処理装置1は、図4に従って、TLWE暗号文caとTLWE暗号文csとの乗算を行う。暗号処理装置1は、暗号文cc’にTLWE暗号文cwを準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが除算結果(商)zを平文として有するTLWE暗号文czである。
as+wの形で正確に除算結果が得られたので、これを利用することが出来る。
暗号処理装置1は、TLWE暗号文czの演算にBlindRotateを3回行う。
以上により、BlindRotateを計5回行い所要時間は概ね227ms程度となっている。除数、被除数が3bitの整数である場合に限定されるが、1回の除算の所要時間を第1実施例に比べてもさらに削減することが出来た。
<第3実施例(4bit)>
図12は、特に4bitの暗号文の除算を高速化する暗号処理装置の機能構成を説明する図である。
図1と同じ構成には同じ符号を付して説明を省略する。
暗号処理装置1の制御部10は、受付部11と、第9Bootstrapping部51と、第10Bootstrapping部52と、第11Bootstrapping部53と、第12Bootstrapping部54と、第5演算部55と、乗算部14と、出力部16と、を備えている。
図13は、図12の機能構成に基づく演算プロセスを説明する図である。
図13(a)に示すように、暗号処理装置1は、TLWE暗号文caを第9Bootstrapping部51に入力して第9Bootstrappingを行い、平文としてa’’を有するTLWE暗号文ca’’を得る。
図13(b)に示すように、暗号処理装置1は、TLWE暗号文ca’’とTLWE暗号文cbを第5演算部55に入力して準同型演算を行い、平文としてb’を有するTLWE暗号文cb’を得る。
図13(c)に示すように、暗号処理装置1は、TLWE暗号文cb’を第10Bootstrapping部52に入力し、後述のテーブルから作られるテストベクタを用いて第10Bootstrappingを行い、その結果に対してTLWE暗号文ca’’を乗算して、平文としてpを有するTLWE暗号文cpを得る。
図13(d)に示すように、暗号処理装置1は、TLWE暗号文cbを第11Bootstrapping部53に入力し、後述のテーブルから作られるテストベクタを用いて第11Bootstrappingを行い、平文としてqを有するTLWE暗号文cqを得る。
図13(e)に示すように、暗号処理装置1は、TLWE暗号文cbを第12Bootstrapping部54に入力し、後述のテーブルから作られるテストベクタを用いて第7Bootstrappingを行い、平文としてrを有するTLWE暗号文crを得る。
図13(f)に示すように、暗号処理装置1は、TLWE暗号文caとTLWE暗号文csを乗算部14に入力して乗算を行う。暗号処理装置1は、暗号文cc’に、誤差調整値としてのTLWE暗号文cpとTLWE暗号文crの準同型演算結果を準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが除算結果(商)zを平文として有するTLWE暗号文czである。
図2、図4、図12、図13を用いて第3実施例を詳しく説明する。
図8で説明したように、TLWE暗号文が含み得る整数の最大値はt-1である。被除数aは0からt-1までの値を取り得るが、除数は0を取り得ないため、実際には除数bの値は0を除外する。除数bは1からt-1までの値を取り得る。
ここでt=16であり、被除数aは4bitで表現可能な0~15の範囲の整数である。除数bは1~15の範囲の整数である。
第2実施例と同じ手順では、誤差が大きく完全一致するテーブルを作ることはできない。暗号処理装置1は、
テーブルt[a]=[1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1]
に基づくテストベクタを用いてTLWE暗号文caに対してGate Bootstrappingを行い、被除数aが8以下の場合は平文a’’が-1となり、そうでない場合は平文a’’が1となるTLWE暗号文ca’’を用意する。
暗号処理装置1は、(式3)を
(式5)
z=m(a,p[b],a’’×q[b’]+r[b]+1)
と変形する。
(式5)において、p[b]、q[b]、r[b]は、除数bが0~15の夫々の場合におけるp、q、rを予め演算して除数bの値と関連付けたテーブルである。
<テーブルt[a]>
Figure 2024012928000061

<テーブルp[b]>
Figure 2024012928000062


<テーブルq[b’]>
Figure 2024012928000063

<テーブルr[b]>
Figure 2024012928000064

第3実施例において、暗号処理装置1は、これらのテーブルp[b]、q[b’]、r[b]を用いて除算を行う。
4ビットの除算を行うときに、8ビットのテーブルを用意するのではなく、4ビットのテーブルを3個用意するようにしたことで、テーブルの容量を削減し、BlindRotateの回数を削減することが出来る。
具体的に、暗号処理装置1は、TLWE暗号文caに対して、上記のテーブルt[a]に基づくテストベクタT(X)による第9Gate Bootstrappingを行い、TLWE暗号文ca’’を得る。
TLWE暗号文ca’’は、被除数aが8以下の場合に平文a’’として-1を有し、そうでない場合は平文a’として1を有する暗号文である。
暗号処理装置1は、b+a’’×8-4に対応する準同型演算を行い、TLWE暗号文cb’を得る。a’’×8は円周群上で1/4又は-1/4となり、これを1/4周回転させてbに足した値を平文として有するのがTLWE暗号文cb’である。TLWE暗号文cb’において、被除数aが8以下の場合には平文b’が円周群上の右半面に留まり、被除数aが9以上の場合には、平文b’が左半面に半周回転する。
暗号処理装置1は、暗号文cb’に対してテーブルq[b]から作られるテストベクタT(X)による第11Bootstrappingを行うことにより、TLWE暗号文ca’’(平文a’’が-1又は1)を乗算した、誤差調整値qを平文として有するTLWE暗号文cqを得る。
本実施形態の特徴として、第11Bootstrappingにおいて暗号文cbに0又は1/2を加算した暗号文cb’を用いてBlindRotateを行う。これにより、BlindRotateと同時にTLWE暗号文ca’’(平文a’’が-1又は1)の乗算を行うことができる。
テーブルルックアップを行う第11Bootstrapping後に暗号文ca’’を乗算する方法では、BlindRotateがさらに必要になる。
その場合、暗号文cqの平文が円周群の左半分に位置することを考慮してTLWE暗号文ca’’(平文a’’が-1又は1)を乗ずる必要がある。
上記の手法によれば、その乗算を第11Bootstrapping後に行うことなく第11Bootstrappingにまとめ、BlindRotateの回数を減らして演算を高速化することが出来る。
暗号処理装置1は、p[b]から作られるテストベクタT(X)による第10Bootstrappingを行い、除数bの逆数に対応するpを平文として有するTLWE暗号文cpを得る。
暗号処理装置1は、テーブルr[b]から作られるテストベクタT(X)による第12Bootstrappingを行い、誤差調整値rを平文として有するTLWE暗号文crを得る。
その結果、(式5)は、z=m(a,p,q+r+1)と表せる。

Figure 2024012928000065

から

Figure 2024012928000066

を計算して商zを得ることが出来る。
暗号処理装置1は、図4に従って、TLWE暗号文caとTLWE暗号文cpの乗算を行う。暗号処理装置1は、暗号文cc’にTLWE暗号文cpとTLWE暗号文crと1とを準同型加算し、その結果の上位ビットの暗号文cu’を得る。これが、除算結果zを平文として有するTLWE暗号文czである。ここで1を加える代わりに、テーブルrの値を夫々1ずつ増やしてもよい。
暗号処理装置1は、暗号文czの演算でBlindRotateを3回行う。
暗号処理装置1はBlindRotateを計7回行い、所要時間は概ね300ms程度となっている。
除数、被除数が4bitの整数である場合に限定されるが、1回の除算の所要時間を第1実施例に比べて削減することが出来た。
Tree PBSと呼ばれる手法でも、ルックアップテーブル(LUT)の評価を行うことできた。しかしTree PBSでは、例えば、3ビットの暗号文の除算を行う場合には、3ビット(8ワード)のテーブルが8つ必要であった。その結果、9回のBlindRotateが必要であり、除算1回につき719msほど必要であった。8つのテーブルそれぞれをbでルックアップして、その結果から、2段階目として1つのテーブルを作成してaでルックアップする。2段階目のテーブルを作成する時間と、全部の9回のテーブルルックアップを行うための時間が必要である。
本実施形態の方法では、テーブルのビット数を減らし、BlindRotateの回数を減らし、下位ビットの逆数乗算を行うことにより、従来よりも大幅に所要時間を削減することが出来た。
なお、被除数と除数の乗算結果から、除算の剰余を取得することも出来る。乗算結果の暗号文cc’を用いて、暗号文cからcc’を準同型減算して、下位ビットのみを取り出す処理を行う。その手順を数式で書くと、
m’(a、b、c)=(c-a×b)mod t
の関数を評価したものとみなすことが出来る。
第1乃至第3実施例の乗算結果zの暗号文czと、被除数aの暗号文caと、除数bの暗号文cbを用いて、m’(z、b、a)を計算することによって、剰余を得ることが出来る。
暗号処理装置1は、図4に従って、TLWE暗号文czとTLWE暗号文cbの乗算を行い、乗算結果の暗号文cc’をTLWE暗号文caから準同型減算し、その結果の下位ビットを剰余の暗号文として得る。
図14は、本実施形態の除算処理を説明するフローチャートである。
図14(a)は、第1実施例に係る除算処理を説明するフローチャートである。
暗号処理装置1は、ステップS11において、除数のTLWE暗号文cbに対して第1Bootstrappingを実行し、除数の逆数のTLWE暗号文cfを得る。
暗号処理装置1は、ステップS12において、除数のTLWE暗号文cbに対して第2Bootstrappingを実行し、誤差調整値の暗号文cgを得る。
暗号処理装置1は、ステップS13において、被除数のTLWE暗号文caとTLWE暗号文cgの乗算処理を実行し、誤差のTLWE暗号文chを得る。
暗号処理装置1は、ステップS14において、TLWE暗号文caとTLWE暗号文cfの乗算処理(下位ビット切り捨て)を行い、除算結果を得る。
図14(b)は、第2実施例に係る除算処理を説明するフローチャートである。
暗号処理装置1は、ステップS21において、除数のTLWE暗号文cbに対して第7Bootstrappingを実行し、除数の逆数のTLWE暗号文csを得る。
暗号処理装置1は、ステップS22において、第8Bootstrappingを実行し、誤差調整値のTLWE暗号文cwを得る。
暗号処理装置1は、ステップS23において、TLWE暗号文caとステップS21で得た除数の逆数の暗号文csとの乗算処理を実行し、除算結果を得る。
図14(c)は、第3実施例に係る除算処理を説明するフローチャートである。
暗号処理装置1は、ステップS31において、被除数のTLWE暗号文caに対して第9Bootstrappingを実行し、TLWE暗号文ca’’を得る。
暗号処理装置1は、ステップS32において、除数のTLWE暗号文cbとTLWE暗号文ca’’との準同型演算を行い、TLWE暗号文cb’を得る。準同型演算では、TLWE暗号文ca’’をスカラ倍(8倍)した結果にTLWE暗号文cbを準同型加算し、4を減算する。
暗号処理装置1は、ステップS33において、TLWE暗号文cb’に対して第10Bootstrappingを実行し、TLWE暗号文cpを得る。
暗号処理装置1は、ステップS34において、TLWE暗号文cbに対して第11Bootstrappingを実行し、TLWE暗号文cqを得る。
暗号処理装置1は、ステップS35において、TLWE暗号文cbに対して第12Bootstrappingを実行し、TLWE暗号文crを得る。
暗号処理装置1は、ステップS36において、TLWE暗号文caとTLWE暗号文cpとの乗算処理を行い、除算結果を得る。
図15は、乗算処理を説明するフローチャートである。
暗号処理装置1は、ステップS101において、乗数のTLWE暗号文cBに対してPrivate Key Switchingを行い、TRLWE暗号文ccを得る。
暗号処理装置1は、ステップS102において、TRLWE暗号文ccに対してTLWE暗号文caを用いてBlindRotateを行い、ステップS103において、SampleExtractを行い、暗号文cc’を得る。
暗号処理装置1は、ステップS104において、cc’に誤算調整値となる暗号文Yを準同型加算して新たな暗号文cc’を得て、ステップS105でcc’×tを行う。
暗号処理装置1は、t倍後の暗号文cc’に対して、ステップS106でBlindRotate、ステップS107でSampleExtractを行って暗号文cdを得る。
暗号処理装置1は、ステップS108において、cc’×t+cd(0,1/4)を行い、ステップS109においてPublic Key Switchingを行って暗号文cu’を得る。
以上の処理によって、Integer-wise型のTLWE暗号文同士の乗算結果の下位ビット(3ビット)を得ることが出来た。
さらに、暗号処理装置1は、ステップS110において、暗号文clに対して、TLWE暗号文caを用いてBlindRotateを行い、ステップS111においてSampleExtractを行って暗号文cl’を得る。
暗号処理装置1は、ステップS112において、cc’-cl’を行い、暗号文cuを得る。
暗号処理装置1は、ステップS113において、暗号文cuに対してPublic Key Switchingを行って暗号文cu’を得る。
以上の処理によって、Integer-wise型のTLWE暗号文同士の乗算結果の上位ビットを得ることが出来た。
図16は、本実施形態のGate Bootstrappingに入出力される暗号文を示す図である。
上記の説明では、特に第1Bootstrappingなど、図16(a)に示すように、BlindRotate、SampleExtract、Public Key Switchingの順番でGate Bootstrappingを行うように説明をしていた。
それに限らず、図16(b)に示すように、Gate BootstrappingにおいてPublic Key Switchingを最初に実行し、その後で、BlindRotateとSampleExtractを行うことが出来る。
TLWE暗号文にはセキュリティ強度に応じたレベルの概念がある。
図16(a)のGate Bootstrappingでは入出力となるTLWE暗号文はLEVEL0である。LEVEL0のTLWE暗号文に対してBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractによって得られるTLWE暗号文はLEVEL1となるが、Public Key Switchingの結果、LEVEL0のTLWE暗号文が出力される。
それに対して図16(b)に示す方法では、Gate Bootstrappingの入出力となるTLWE暗号文をLEVEL1とし、最初にPublic Key Switchingを行ってLEVEL0に下げた状態でBlindRotateを行い、その出力のTRLWE暗号文に対するSampleExtractを行うとLEVEL1のTLWE暗号文が出力される。
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の値域を細かく分割する必要があり、後述する復号時エラーの問題もあって誤差を小さくする必要がある。その場合、セキュリティ強度が下がりやすいのは上記の通りであるため、誤差を小さくする場合には暗号文の係数の数(ベクトルの次数)を上げてセキュリティを確保する必要がある。
平文に付加する誤差を小さくすることで計算(解読)が容易となった暗号文のセキュリティを確保するために、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を行うことで、所要時間の増加を避けることが出来る。
また、平文に付加する誤差を小さくすることには、上記のセキュリティ強度の以外に復号時エラーの問題もある。
上記したように、Integer-wise型に適用したTFHEでは、円周群{T}に対応づけた0~1の値域をt個に分割する。tの値を大きくして円周群を細かく分割するとTLWE暗号文に記録可能な整数値をより大きくできる。円周群を分割した個数tで格納できる値の最大値が決まるが、大きな値を格納しようとすると誤差範囲をより小さくとる必要があるため、セキュリティ強度が低下したり、復号エラー率が上がったりする問題もある。
TFHE含めLWE系の準同型暗号では平文に付加する誤差は正規分布で分布しており、厳密に「誤差の範囲」を設定することはできない。
0付近に集中することに変わりはないが、原理的には、誤差を指定範囲により多く集中させることが出来るのみである。
設定した範囲から誤差がはみ出した場合、その平文は別の平文として解釈されるため、予期せぬ計算結果が得られる可能性がある。
計算自体ができなくなるのではなく異なる結果が得られるのみである。異なる計算結果が得られる確率をどの程度許容できるかは、準同型暗号を応用するアプリケーション次第である。
計算にエラーが発生する確率を抑える、BlindRotateの数を減らして計算を高速化する、セキュリティを高く保つ、という3つの目標をバランスが最もとれるよう、誤差範囲の重なりが一定値内に収まるようにシステムパラメータを設定することが必要である。
本実施形態を適用するシステムや装置に応じて、特に重視する条件を満たすように誤差を設定してもよい。
[応用例]
暗号処理装置1が行う処理は、以下のように応用することが出来る。
例えば、フィールドやレコードがTLWE暗号で暗号化されているデータベースから、特定のフィールドが一定の範囲内のものを集約したい場合(例えば、30~39歳の平均年収を求めたい場合など)を考える。
このとき、暗号処理装置1は暗号化されたデータベースを管理するデータベースサーバであり、ネットワーク等を介して接続された端末装置から、TLWE暗号で暗号化されたクエリを受け付け、クエリに対する応答を、TLWE暗号で暗号化した状態で端末装置に返却する。
暗号化されたデータベースでは平均値を求めたい場合などで、除算が必要である。
暗号処理装置10は、第1演算部12、第2演算部13、第3演算部14、第1Bootstrapping部15、第2Bootstrapping部16、第3Bootstrapping部17、第4Bootstrapping部18、鍵交換部38の機能によって、暗号化されたデータベースの全てのレコードをクエリと比較する比較演算を行う。
比較演算は、レコードとクエリの暗号文同士で減算を行うことであり、減算結果の正負が比較演算の等価となる。
暗号処理装置1はさらに、比較演算でクエリと一致したレコードに対する集約演算を行うことが出来る。
集約演算において、暗号処理装置1は、比較演算でクエリと一致したレコードを加算して合計を演算し、さらに除算を用いて平均値を求める。
このように、暗号化されたデータベースに対するクエリの処理には、暗号文を構成する整数同士の加算、減算、乗算、除算などの四則演算、や比較(比較は減算結果の正負と等価である)を行う必要がある。
特に、重み付け平均値を求める場合には、レコードと重み付け係数との乗算値をレコード数で割る際などに除算が必要となる。そして、Bit-wise型の暗号文を用いる場合、処理には全加算器演算が多用されることが考えられる。そして、扱う整数のビット長が大きくなれば必要となる全加算器の数も増加する。四則演算とは、入力された暗号文を用いた順列を二進数で表記した際の各ビットの暗号文とみなした暗号化された数値同士に対して準同型な四則演算である。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、クエリの実行時間を著しく低減することが可能となる。
このようなデータベースの集約に限らず、整数同士の四則演算や比較は、暗号文を用いた様々なデータ処理で多用される。
他の例として、ファジー認証やファジー検索が挙げられる。
ファジー認証は、例えば生体認証データを使った生体認証であり、生涯不変の生体認証データは暗号化して秘匿するのが絶対条件である。
ファジー認証は、認証要求として提示された生体認証データとデータベースに登録された生体認証データとの対応に基づいて認証をするものであるが、両者の完全な一致ではなく、閾値付きで一致するか否かを判定する。
ファジー検索は、クエリとレコードが完全に一致しなくても、クエリに近しいデータをデータベースから検索結果として提示する、曖昧な検索方法である。
ファジー認証やファジー検索では、上記の暗号化されたデータベースにおける比較演算・集約演算と同様に、暗号化されたデータベースとクエリとの比較を行い、その際には、準同型暗号により暗号化されたデータで比較演算を行う必要がある。また、センサ値や評価値のノーマライズのために平均を求める必要があり、この際にはセンサ値や評価値の加算値を値の数で割る除算を行う。
またファジー認証やファジー検索において比較を行う際、ユークリッド距離が用いられることが多い。ユークリッド距離を演算する際には2乗の演算が必要となる。従って、Bit-wise型の準同型暗号では、乗算を行う際にデータのビット長に対して、O(N)の全加算器を演算しなければならない。また単純な減算による比較演算でも、O(N)の全加算器を演算する必要がある。
本実施形態の暗号処理装置1は、Bit-wise型の暗号文に対して全加算器を用いてビット単位で四則演算を行うのではなく、整数を平文として有するInteger-wise型の暗号文同士で四則演算や比較を行うことにより、ファジー認証やファジー検索に要する処理時間を大幅に低減することが出来る。
図17は、コンピュータ装置の一実施例を示すブロック図である。
図17を参照して、コンピュータ装置100の構成について説明する。
コンピュータ装置100は、例えば、各種情報を処理する暗号処理装置である。そして、コンピュータ装置100は、制御回路101と、記憶装置102と、読書装置103と、記録媒体104と、通信インターフェイス105と、入出力インターフェイス106と、入力装置107と、表示装置108とを含む。また、通信インターフェイス105は、ネットワーク200と接続される。そして、各構成要素は、バス110により接続される。
暗号処理装置1は、コンピュータ装置100に記載の構成要素の一部又は全てを適宜選択して構成することができる。
制御回路101は、コンピュータ装置100全体の制御をする。制御回路101は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路101は、例えば、図1における制御部10として機能する。
記憶装置102は、各種データを記憶する。そして、記憶装置102は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)、Solid State Drive(SSD)などである。記憶装置102は、制御回路101を、図1における制御部10として機能させる情報処理プログラムを記憶してもよい。記憶装置102は、例えば、図1における記憶部20として機能する。
暗号処理装置1は、情報処理を行うとき、記憶装置102に記憶されたプログラムをRAMに読み出す。
暗号処理装置1(第1実施例)は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第1Bootstrapping処理、第2Bootstrapping処理、乗算処理(第1演算処理、第2演算処理、第3演算処理、第4演算処理、第3Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、鍵交換処理)、出力処理のいずれか1以上を含む処理を実行する。
また暗号処理装置1(第2実施例)は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第7Bootstrapping処理、第8Bootstrapping処理、乗算処理(第1演算処理、第2演算処理、第3演算処理、第4演算処理、第3Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、鍵交換処理)、出力処理のいずれか1以上を含む処理を実行する。
また暗号処理装置1(第3実施例)は、RAMに読み出されたプログラムを制御回路101で実行することにより、受付処理、第5演算処理、第9Bootstrapping処理、第10Bootstrapping処理、第11Bootstrapping処理、第12Bootstrapping処理、乗算処理(第1演算処理、第2演算処理、第3演算処理、第4演算処理、第3Bootstrapping処理、第4Bootstrapping処理、第5Bootstrapping処理、鍵交換処理)、出力処理のいずれか1以上を含む処理を実行する。
なお、プログラムは、制御回路101が通信インターフェイス105を介してアクセス可能であれば、ネットワーク200上のサーバが有する記憶装置に記憶されていても良い。
読書装置103は、制御回路101に制御され、着脱可能な記録媒体104のデータのリード/ライトを行なう。
記録媒体104は、各種データを保存する。記録媒体104は、例えば、情報処理プログラムを記憶する。記録媒体104は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
通信インターフェイス105は、ネットワーク200を介してコンピュータ装置100と他の装置とを通信可能に接続する。通信インターフェイス105は、例えば、図1において、通信部25として機能する。
入出力インターフェイス106は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス106と接続される入力装置107には、例えば、キーボード、及びマウスなどがある。入出力インターフェイス106は、接続された各種入力装置とコンピュータ装置100とを通信可能に接続する。そして、入出力インターフェイス106は、接続された各種入力装置から入力された信号を、バス110を介して制御回路101に出力する。また、入出力インターフェイス106は、制御回路101から出力された信号を、バス110を介して入出力装置に出力する。入出力インターフェイス106は、例えば、図1において、入力部26として機能する。
表示装置108は、各種情報を表示する。表示装置108は、例えば、例えばCRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、およびOELD(Organic Electroluminescence Display)などである。ネットワーク200は、例えば、LAN、無線通信、P2Pネットワーク、又はインターネットなどであり、コンピュータ装置100と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成又は実施形態を取ることができる。
1 暗号処理装置、10 制御部、20 記憶部、25 通信部、26 入力部、100 コンピュータ装置、101 制御回路、102 記憶装置、103 読書装置、104 記録媒体、105 通信インターフェイス、106 入出力インターフェイス、107 入力装置、108 表示装置、110 バス、200 ネットワーク

Claims (11)

  1. 暗号文を処理する暗号処理装置であって、
    前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
    前記所定の演算は、被除数である第1暗号文と除数である第2暗号文との除算であり、
    前記第2暗号文に対して第1の多項式を用いることにより、前記除数の逆数に対応する第3暗号文を算出し、
    前記第1暗号文と前記第3暗号文とに基づく乗算を行い、乗算結果として、前記第1暗号文と前記第2暗号文との除算結果に対応する第4暗号文を算出する、
    ことを特徴とする暗号処理装置。
  2. 請求項1に記載の暗号処理装置において、
    前記第2暗号文に対して第2の多項式を用いることにより、前記乗算による誤差を調整する値に対応する第5暗号文を算出し、
    前記第4暗号文を算出するときに、前記第1暗号文と前記第3暗号文とに基づく乗算結果の暗号文に対して前記第5暗号文を準同型演算した演算結果を出力する、
    ことを特徴とする暗号処理装置。
  3. 請求項2に記載の暗号処理装置において、
    第3の多項式を用いて前記被除数の値に応じて二値を有する暗号文を算出し、当該暗号文を前記第2暗号文に乗じた第2暗号文に対して、前記第2の多項式を用いる、
    ことを特徴とする暗号処理装置。
  4. 請求項2に記載の暗号処理装置において、
    前記第2暗号文に対して所定の加算を行ったあとで前記第2の多項式を用いることにより、前記第2の多項式を用いると同時に前記第2暗号文に対する前記二値を有する暗号文の乗算を行う
    ことを特徴とする暗号処理装置。
  5. 請求項1に記載の暗号処理装置において、
    前記第1の多項式は、予め算出した除数である前記第2暗号文の平文の逆数を用いて作成される、
    ことを特徴とする情報処理装置。
  6. 請求項1に記載の暗号処理装置において、
    前記第3暗号文に基づいて、階段状の多項式を平文に持つ第6暗号文を生成し、前記第6暗号文と被除数である第1暗号文とに基づく所定の演算を行うことにより、前記第1暗号文と前記第3暗号文との乗算を行う、
    ことを特徴とする暗号処理装置。
  7. 請求項1に記載の暗号処理装置において、
    暗号文に対して所定の多項式を用いて新たな暗号文を算出する算出部を備え、前記算出部は、入力となる暗号文に対して、所定の多項式を用いて新たな暗号文を算出するまえに係数の数を削減する処理を行う、
    ことを特徴とする暗号処理装置。
  8. 請求項1に記載の暗号処理装置において、
    前記所定の演算を行うことにより、入力された前記暗号文を用いたファジー認証又はファジー検索に係る処理を行う、
    ことを特徴とする暗号処理装置。
  9. 請求項1に記載の暗号処理装置において、
    前記所定の演算を行うことによって、入力された前記暗号文に基づく暗号化データベースに対するクエリを処理する、
    ことを特徴とする暗号処理装置。
  10. プロセッサによって実行される、暗号文を処理する暗号処理方法であって、
    前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
    前記所定の演算は、被除数である第1暗号文と除数である第2暗号文との除算であり、
    前記第2暗号文に対して第1の多項式を用いることにより、前記除数の逆数に対応する第3暗号文を算出し、
    前記第1暗号文と前記第3暗号文とに基づく乗算を行い、乗算結果として、前記第1暗号文と前記第2暗号文との除算結果に対応する第4暗号文を算出する、
    ことを特徴とする暗号処理方法。
  11. 暗号文を処理する暗号処理方法をプロセッサに実行させる暗号処理プログラムであって、
    前記暗号文は、所定の値に所定の分散を持つ誤差を与えた値を、整数に対応付けた平文として有し、復号することなく整数同士の所定の演算が可能な完全準同型暗号文であり、
    前記所定の演算は、被除数である第1暗号文と除数である第2暗号文との除算であり、
    前記第2暗号文に対して第1の多項式を用いることにより、前記除数の逆数に対応する第3暗号文を算出し、
    前記第1暗号文と前記第3暗号文とに基づく乗算を行い、乗算結果として、前記第1暗号文と前記第2暗号文との除算結果に対応する第4暗号文を算出する、
    ことを特徴とする暗号処理プログラム。
JP2022114760A 2022-07-19 2022-07-19 暗号処理装置、暗号処理方法、暗号処理プログラム Pending JP2024012928A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2022114760A JP2024012928A (ja) 2022-07-19 2022-07-19 暗号処理装置、暗号処理方法、暗号処理プログラム
US18/352,178 US20240048353A1 (en) 2022-07-19 2023-07-13 Encryption processing device and encryption processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022114760A JP2024012928A (ja) 2022-07-19 2022-07-19 暗号処理装置、暗号処理方法、暗号処理プログラム

Publications (1)

Publication Number Publication Date
JP2024012928A true JP2024012928A (ja) 2024-01-31

Family

ID=89714297

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022114760A Pending JP2024012928A (ja) 2022-07-19 2022-07-19 暗号処理装置、暗号処理方法、暗号処理プログラム

Country Status (2)

Country Link
US (1) US20240048353A1 (ja)
JP (1) JP2024012928A (ja)

Also Published As

Publication number Publication date
US20240048353A1 (en) 2024-02-08

Similar Documents

Publication Publication Date Title
Norouzi et al. A novel image encryption based on row-column, masking and main diffusion processes with hyper chaos
Aguilar Melchor et al. A comparison of the homomorphic encryption libraries helib, seal and fv-nfllib
JP7146724B2 (ja) 秘匿演算装置、秘匿演算方法及び秘匿演算プログラム
WO2023074133A1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
WO2023067928A1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP7069460B2 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP2024012928A (ja) 暗号処理装置、暗号処理方法、暗号処理プログラム
WO2022201791A1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP7187076B1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP7146725B2 (ja) 秘匿演算装置、秘匿演算方法及び秘匿演算プログラム
JP7228287B1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP7261502B2 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
WO2022270080A1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP2024013184A (ja) 暗号処理装置、暗号処理方法、暗号処理プログラム
JP7185346B1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
JP7096214B2 (ja) 秘匿計算装置、秘匿計算方法及び秘匿計算プログラム
WO2022044464A1 (ja) 暗号処理装置、暗号処理方法、及び暗号処理プログラム
US20240039698A1 (en) Encryption processing device and encryption processing method
JP7179788B2 (ja) 秘匿演算装置、秘匿演算方法及び秘匿演算プログラム
JP2024053392A (ja) 暗号処理装置、暗号処理方法、暗号処理プログラム
KR102522393B1 (ko) 동형암호로 암호화된 데이터 연산 방법
US20240187210A1 (en) Encryption processing apparatus and encryption processing method
US20240214201A1 (en) Encryption processing apparatus and encryption processing method
KR20230087983A (ko) Dghv 기반 완전 동형암호 시스템 및 이를 이용한 연산 방법
Durbha Cryptography and factorization methods in cryptography

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230403

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240417

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240528