準同型暗号 TFHE 方式徹底解説 -3(TFHE 方式の流れ)
目次
- 完全準同型暗号と TFHE 方式
- TLWE と TRLWE
- TFHE 方式の流れ ← 本記事はココ
- TFHE 方式のブートストラッピング -1 (TRGSW と Blind Rotation)
- TFHE 方式のブートストラッピング -2 (Sample Extract Index と Key Switching)
はじめに
本記事では TFHE 方式の大きな流れについて解説します。
TFHE 方式では任意の論理演算を評価することができます。本記事では、その全ての演算に対し、どのように実現するのかについても解説します。
TFHE の流れ
まず最初に、TFHE における処理全体の流れを図で確認します。
以下は、TFHE において 1 回の論理演算がどのように処理されるかを示したものです。
この図が表しているように、TFHE の処理は大きく見ると前半の線形結合と後半のブートストラッピングに分かれます。これらの処理は以下のような役割を持ちます。
- 線形結合:複数の入力暗号文に対して線形演算(TLWEの加法準同型性によって実現可能)を行い、評価したい論理ゲートの出力を判定できる形に整えます。
- ブートストラッピング:増大したノイズを除去しながら、論理ゲートの出力値を持つ新しい暗号文を生成します。
以下では、それぞれの処理の詳細について掘り下げて説明します。
平文エンコーディング
TFHE では、論理値(ビット)をトーラス上の値として表現します。具体的には、次のエンコーディングを採用しています。
前の記事では、TLWE の復号について「ノイズ
上記のエンコードでは隣接する 2 つの平文値の距離が
線形結合
二つの入力暗号文に対する線形演算によって、出力暗号文の平文の符号と期待する論理ゲートの結果(0 / 1)を対応させます。
2 つの TLWE 暗号文
ここで、オフセット項
NAND を例として
NAND の場合、
エンコードで各入力の組み合わせに対する位相の符号を確認すると、次のようになります。
|
|
符号 | NAND の期待出力 | |
|---|---|---|---|
NAND の出力が
この段階で得られる TLWE 暗号文は、TLWE 暗号文の線形結合によってノイズが増大しています。そのため、このままでは正確に次の準同型演算を行えるとは言えません。
この問題を解決するために、ブートストラッピングを行います。
ブートストラッピング(Bootstrapping)
ブートストラッピングは、線形結合後によってノイズが増大した TLWE 暗号文を、次のゲート評価に使えるようにするために、ノイズの少ない TLWE 暗号文へと作り直す処理です。
具体的には、TLWE暗号文の平文の符号(正か負か)だけに着目し、
- 符号が正 → 平文
を持つ TLWE 暗号文+1/8 - 符号が負 → 平文
を持つ TLWE 暗号文-1/8
を生成します。重要なのは、この操作が暗号化されたまま行われるという点です。
ブートストラッピングは内部的に次の 3 ステップで構成されます。以下、内容がイメージしづらいかもしれませんが、雰囲気だけでもつかんでもらいたいです。
-
Blind Rotation:線形結合後の TLWE 暗号文を用いて、その位相の符号に対応した期待出力値(
)を平文の定数項に持つ TRLWE 暗号文を得る。\pm 1/8 -
Sample Extract Index:Blind Rotation の出力である TRLWE 暗号文から、平文多項式の定数項を暗号化した TLWE 暗号文を作成する。ただし、この時点で得られる TLWE 暗号文の秘密鍵は TRLWE 秘密鍵由来(TRLWE 秘密鍵の各係数を並べたベクトル)であるため、元の TLWE 秘密鍵
で暗号化された暗号文とそのまま準同型演算することはできません。\mathbf{s} -
Key Switching:前ステップで得た TLWE 暗号文の秘密鍵を、平文はそのままの状態のままで、TRLWE 秘密鍵由来のものから元の TLWE 秘密鍵
へと変換します。これにより出力暗号文が入力と同じ形式に揃い、ゲートを連続して評価できるようになります。\mathbf{s}
おわりに
本記事では TFHE 方式の大きな流れを確認しました。今後、今なんのための処理について書いているのかがわからなくなった時に参照して大きな流れをつかんでください。
次の記事では、ブートストラッピングの中核である Blind Rotation について解説します。
Discussion