@nindanaotoによる TFHEの解説に基づいたC++20によるTFHEライブラリ。
- 0.Introduction
- 1.TLWE
- 2.TRLWE and Sample ExtractIndex
- 3.TRGSW and CMUX
- 4.Blind Rotate
- 5.Identity Key Switch
- 6.HomNAND
- 7.Polynomial Multiplication By FFT
- FFTにはGamaらのTFHEライブラリに付属するspqliosをXbyakを用いてC++上に移植したものを使用しています。JITであることを活かした最適化は今後の課題です。
これらのコミットは、開発を終えた後に新しくgit treeを作成し整理したものです。 関係のないコード片が混ざっているコミットがあった場合は、 IssueやPull Requestなどでお知らせください。
$ make # ビルド
Ubuntu 20.04 LTSにおいて動作確認しています。
C++20に対応したコンパイラ(GCC 10やClang 10など)が必要です。
必要に応じてMakefile
内で起動されるC++コンパイラを変更してください。
$ make test # テスト及びベンチマーク
デフォルトでは128-bit securityのパラメタ[CGGI19]を使用します。 Intel i7-8700(最大周波数4.6GHz)で実行すると、例えば次のように出力されます。
Generating secret key (0) (SEED: 659303009)
==============================
0 (SEED: 1507937980)
test_tlwe:
986510248 == 986510248
0 == 0
test_trlwe:
[0] 0 == 0
[0] 0 == 0
test_cmux:
[0] 0 ? 0 : 1 == 1
test_blind_rotate:
0 == 0
test_identity_key_switch:
1 == 1
test_hom_nand:
nand(1, 0) = 1
==============================
Test passed. (1464 ms)
Benchmark started...
done.
Benchmark result: 12.642 ms/gate
LICENSEファイルを参照してください。