LoginSignup
1
1

More than 1 year has passed since last update.

この記事は EAGLYS Advent Calendar 2022 の1日目の記事です

はじめに

TFHEに触れ始めてから1年弱経ったこともあり,人に聞かれることも増え始めてきたこの頃,今回のアドカレでTFHE関連の話題を予備知識なしの状態から始めて,詳細までまとめようと思います

突貫で書いてしまった部分もあるので,大いに誤りを含む可能性があります.誤字・脱字レベルでも構いませんので,ご指摘ください.
また,予告なしに内容の加筆や構成の変更を行うことがありますが,読みやすくするためのものですので,ご容赦ください

今回のアドカレの関連記事(気になるところから読んでください)

TFHEの概要

1日目(イマココ):Torus・TLWEの概要
5日目(TRLWE・TFHEの概要):
10日目(プログラマブルブートストラップの概要):

TFHEの詳細

11日目(TFHEの暗号化方式の詳細(前半)):
12日目(TFHEの暗号化方式の詳細(後半)):
18日目(プログラマブルブートストラップの詳細(前半)):
19日目(プログラマブルブートストラップの詳細(後半)):

multi-key TFHEの概要

15日目(multi-key TFHEの概要):

TFHEの最新動向

20日目(TFHEの最新動向(理論編)):
25日目(TFHEの最新動向(実装編)):

TFHEについて

まずは1・5日目でTFHEの概要を整理します
TFHE は,Torus上のRLWE問題を安全性の根拠とする暗号化方式です
これらを理解するには

  • Torus
  • TLWE
  • 多項式環
  • TRLWE

の順で理解すると良いと思います

今回は上2つのTorusとTLWEについて扱います

Torus

*Torusは $\mathbb{R}/\mathbb{Z}$ のこと,と書いて分かる方や剰余類をご存知の方は,ここは飛ばしていただいて構いません
*Torusの幾何的な性質には触れません

実用上はTorusは「0以上1未満の実数全体の集合で,足し算とスカラー倍が定義されている」ぐらいの理解で十分です

Torusについて

*数学的に厳密でない箇所もあるのでご了承ください

例えば,整数に対して,2で割ったときの余りは0か1しかありません
もう少し深く考えてみると,整数を2で割った余りが0ならその整数はいわゆる偶数ですし,余りが1なら奇数です
逆に,偶数を2で割った余りは0であり,奇数を2で割った余りは1です

すると,「2で割ったときの余りは0か1」といったとき,この0を整数の0ではなく,偶数全体を表す集合の記号だと思うことができます
つまり,その集合を分かりやすく$\overline{0}$と表記すると,$\overline{0}$は0, 2, -6, 10 などの元をもつ集合であり,これは偶数全体を含む(偶数を尽くしている)ので,$\overline{0}$を偶数全体の集合だと思えます
また,$\overline{1}$で奇数全体の集合と表します

このように考えると,整数全体の集合は$\overline{0}$と$\overline{1}$に分割することができます
整数は偶数か奇数のどちらかですので,$\overline{0}$か$\overline{1}$に属さない整数は存在しません
また,偶数かつ奇数という整数は存在しないため,$\overline{0}$と$\overline{1}$の共に属する整数も存在しません

以上をまとめると,「整数に対して,2で割ったときの余りは0か1」という事実から,「整数全体を2で割ったときの余りが0か1になる集合に分割できる」ことがわかります
整数全体を2で割ったときの余りが0になる集合の要素,つまり,2で割ったときの余りが0になる整数を普段は偶数と呼んでいるわけです

このとき,実数全体の集合のうち,1で割ったときの余り全体の集合を考えます
例えば,0とか0.2とか0.99とかですね

整数のときと同様に考えると,$\overline{0.2}$ で実数を1で割ったときに0.2余る実数の集合だと思うと,「実数全体を1で割ったときの余りが1未満になる集合に分割できる」ことになります
そのような集合をTorusといい,$\mathbb{T}$と書きます
*つまり,$\displaystyle \mathbb{T} = \cup_{x \in [0, 1)} \overline{x}$ です

言ってしまえば,Torusは「集合の集合」なわけです
つまり,Torusの元は厳密には集合となります

Torusの演算

上記で与えられるTorusに入る演算について考えてみます
足し算や掛け算がどう定義されるかについてで,例えば「集合と集合を足し算する」というのは非自明な演算ですから,しっかりと定義する必要があります

足し算

と言っても難しいことを考える必要はなく,実は,0以上1未満の実数 $x, y$ に対して,$\overline{x}, \overline{y} \in \mathbb{T}$ を取ると,$\overline{x} + \overline{y} = \overline{(x + y) \ \mathrm{mod} \ 1}$ となります(集合として等しい,という意味の等号)
$\overline{x}, \overline{y}$ はともに集合なので,集合の足し算は次のように定めています:
まず,$\overline{x}$ と $\overline{y}$ から任意に元を取り,それぞれ $\tilde{x}, \tilde{y}$ とします
つまり,$\tilde{x}, \tilde{y}$ は,共に1で割ると余りが $x, y$ それぞれを1で割ったときの余りと同じ実数です
そして,これら $\tilde{x}, \tilde{y}$ を動かした際の $\tilde{x} + \tilde{y}$ 全体の集合が $\overline{x}$ と $\overline{y}$ になります

まとめると,$\overline{x} + \overline{y} = ${$\tilde{x} + \tilde{y} \ | \ \tilde{x} \in \overline{x}, \tilde{y} \in \overline{y}$} です
この集合が $\overline{(x + y) \ \mathrm{mod} \ 1}$ と一致する,ということです
*$\overline{x} + \overline{y} \subseteq \overline{(x + y) \ \mathrm{mod} \ 1}$ とその逆を確かめればOKですが,今回は省略

大雑把には,「普通に足して1で割った余りをとる」で実用上は十分でしょう

掛け算

足し算と同様に考えて,0以上1未満の実数 $x, y$ に対して,,$\overline{x}, \overline{y} \in \mathbb{T}$ を取ると,$\overline{x} \cdot \overline{y} = \overline{(x \cdot y) \ \mathrm{mod} \ 1}$ になるかを考えます
*$x, y$ は0以上1未満なので,右辺は $\overline{x \cdot y}$ でもいいのですが,本質じゃない

しかし,実は一般にこれは成り立ちません
$\overline{x} \cdot \overline{y} \subseteq \overline{(x \cdot y) \ \mathrm{mod} \ 1}$ も $\overline{(x \cdot y) \ \mathrm{mod} \ 1} \subseteq \overline{x} \cdot \overline{y}$ も一般には成り立たないためです

なんですが,掛け算が定義できない,というのとは少し違います
まあこの辺はあんまり深く悩んでもしょうがない(本当はしょうがなくない)ので,掛け算については考えないこととします
*ill-defiendってやつです,not defiend とは異なります

スカラー倍

ここでいうスカラーは実数全体のことです
$r$ を任意の実数としたとき,$r \cdot \overline{x} = \overline{(r \cdot x) \ \mathrm{mod} \ 1}$ と定義します

集合に対するスカラー倍は次のように定義します:
まず,$\overline{x}$ から任意に元を取り,$\tilde{x}$ とします
つまり,$\tilde{x}$ は,1で割ると余りが $x$ を1で割ったときの余りと同じ実数です
そして,この $\tilde{x}$ を動かした際の $r \cdot \tilde{x}$ 全体の集合が $r \cdot \overline{x}$ になります

まとめると,$r \cdot \overline{x} = ${$r \cdot \tilde{x} \ | \ \tilde{x} \in \overline{x}$} です
この集合が $\overline{(r \cdot x) \ \mathrm{mod} \ 1}$ と一致する,ということです
*$r \cdot \overline{x} \subseteq \overline{(r \cdot x) \ \mathrm{mod} \ 1}$ とその逆を確かめればOKですが,今回は省略

大雑把には,「普通に実数を掛けて1で割った余りをとる」で実用上は十分でしょう

Torus のまとめ

色々書きました(剰余類とかwell-definedとか)が,よく分からんって方は初めの「0以上1未満の実数全体の集合で,足し算とスカラー倍が定義されている」だけ押さえてください
掛け算云々の話をしたいときぐらいしか,Torusの元は本当は集合,というのを意識しないと思います

TLWE

TLWE とは,Torus上のLWE問題のことです

TLWE1.png

分布の識別の形だと扱いづらいので,次のように変形します

TLWE2.png

この問題はNP完全なので,とても難しい(こなみかん)です
どのぐらい難しいのかのイメージは 「プログラマブルブートストラップの原著論文を理解する回」を理解する回 2/4「TLWEとTRLWE」 をご参照ください

まとめ

今回はTFHEの準備のためにTorusとTLWEを扱いました
Torusは色々書きましたが,Torusのまとめの箇所を押さえていれば,実装上とかは困らないのかなと思っています

次回はTRLWEとTFHEの暗号化方式を扱います

今回の内容はここまでです.ここまでご覧になってくださった方々ありがとうございます!

参考文献

縫田 光司 : 耐量子計算機暗号, 森北出版, 2020.
I. Chillotti, M. Joye, P. Paillier: ``Programmable bootstrapping enables efficient homomorphic inference of deep neural networks'', In: International Symposium on Cyber Security Cryptography and Machine Learning. Springer, Cham, pp. 1-19, 2021.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1