多密钥TFHE学习笔记3-基于MKTFHE库的8位加法器实现实验
基于MKTFHE库的8位加法器实现实验整体思路
MKTFHE 是基于 TFHE 的多密钥版本,提供了一个自举的与非门 (NAND gate) 的实现。本实验基于 MKTFHE 库构造一个多密钥同态加密的 8位 (原码) 加法器,能够对 8 位不同密钥加密下的密文进行加法操作。整体思路如下:
- 通过更改自举的逻辑实现除了与非门之外的其他常用的基础门电路(如 AND/OR/XOR 等) - 基于MKTFHE库的各类门实现实验
- 通过拼接 (1) 中的基础门电路,实现一个 naive 的 多密钥同态加密 8 位原码加法器 - 基于MKTFHE库的8位加法器实现实验
实验环境
-
操作系统:Ubuntu 18.04 bionic
-
内核:x86_64 Linux 4.15.0-108-generic
-
CPU:Intel Xeon Gold 5220 @ 72x 2.201GHz
-
内存:46512MiB / 257600MiB
-
语言:C++
实验对应论文
- MKTFHE库对应论文:Chen H, Chillotti I, Song Y. Multi-key homomorphic encryption from TFHE[C]//International Conference on the Theory and Application of Cryptology and Information Security. Springer, Cham, 2019: 446-472.
- TFHE方案中各门电路的实现公式:Chillotti I, Gama N, Georgieva M, et al. TFHE: fast fully homomorphic encryption over the torus[J]. Journal of Cryptology, 2020, 33(1): 34-91.
- TFHE方案中各门电路的实现公式:Ilaria Chillotti; Nicolas Gama; Mariya Georgieva; Malika Izabachene. Faster Fully Homomorphic Encryption: Bootstrapping in less than 0.1 Seconds. ASIACRYPT 2016.
基于MKTFHE库的各类门实现实验
整体思路分析
以 MKTFHE 库中 FFT 自举与非门函数间调用关系简略示意图为例,图中红色框部分为自举门中需要修改逻辑的部分,更改后可实现其他基础门电路:
具体实现表达式与所需的算法:
- 多密钥 LWE sample 之间的加法: MKlweAddTo()
- 多密钥 LWE sample 之间的乘法和累加:MKlweMulAddTo()
- 多密钥自举非门:MKlweNegate()
- 多密钥自举与门:MKbootsAND_FFT_v2m2()
- 多密钥自举或门:MKbootsOR_FFT_v2m2()
以异或门为例,异或门中自举的逻辑如下:
- 计算 2 ⋅ c i 2 \sdot c_i 2⋅ci ,可能的结果有 2 种 : c i c_i ci 为真或为假
- 计算 2 ⋅ ( c 1 + c 2 ) 2 \sdot (c_1 + c_2) 2⋅(c1+c2) ,可能的结果有 3 种 : c 1 , c 2 c_1, c_2 c1,c2 全为真、全为假或一真一假
- 计算 1 8 + 2 ⋅ ( c 1 + c 2 ) \frac{1}{8} + 2 \sdot (c_1 + c_2) 81+2⋅(c1+c2) ,可能的结果有 3 种 (与 2 中相同) ,对得到的结果进行划分,如果结果为负则返回 false (对应 c 1 , c 2 c_1, c_2 c1,c2 全为真或全为假的情况 ) ,否则返回 true (对应 c 1 , c 2 c_1, c_2 c1,c