文章目录

  • 1. 提出背景
  • 2. 方案原理
  • 3. 算法描述
  • 4.方案改进
  • 4.1 自举方案
  • 4.2 RNS变体


1. 提出背景

1978年,Rivest、Adleman和Dertouzos在文献[1]中就贷款公司数据库的保密问题与计算问题进行了讨论,并首次提出了同态加密的加密方式。后来,随着云计算、大数据、人工智能、机器学习等新兴技术不断兴起,人们越来越发现同态加密对于现阶段信息安全的重要性。2009年,Gentry首次提出自举技术[2],实现了第一个全同态加密方案。2010年,Dijk又首次实现了基于整数环上FHE的DGHV方案[4]。2012年,Kipnis等人给出了基于矩阵和多项式的无噪声FHE方案[5]。2016年,Jaschke等人通过将有理数近似表示为整数[6],实现了明文空间为实数的FHE方案。2017年,Cheon等人实现了可进行浮点数近似计算的层次型FHE方案[3](下文称CKKS方案),一年后,Cheon等人又通过自举技术,将CKKS方案扩展为全同态加密方案[7],同年,也通过RNS实现了CKKS方案的RNS变体[8]

2. 方案原理

同态加密就是在数据仍处于密文的状态下,对密文数据信息进行各种计算,从而使得其结果在变回明文后和对明文进行相应运算时的结果等值。

对于函数同态加密算法 java样例_同态加密,若同态加密算法 java样例_同态加密满足同态加密算法 java样例_密码学_03同态加密算法 java样例_学习_04其一,则称其为半同态,若对于加法与乘法均满足,则称该函数为全同态。我们在这里将加密操作 看作是一个满足同态性质的函数,那么,其密文同态加密算法 java样例_同态加密_05就有
同态加密算法 java样例_浮点数_06的性质,而且加密函数没有变化,故仍可以用相同的解密函数同态加密算法 java样例_同态加密算法 java样例_07进行解密,并且解密后的明文与对明文直接进行运算的结果相等:
同态加密算法 java样例_同态加密算法 java样例_08
同理,若加法与乘法均满足,则称该方案为全同态加密方案。

Cheon等人给出的CKKS方案,实现了明文为浮点数的近似计算。该方案首先通过编码技术将明文槽上的同态加密算法 java样例_同态加密_09维复向量变换为同态加密算法 java样例_同态加密算法 java样例_10次整系数多项式;接着假设其具有循环安全性,引入同态乘密钥同态加密算法 java样例_学习_11,将同态乘法带来的密文维数扩张加以控制;最后在同态乘法结束后进行“重缩放”,有效地控制噪声对明文的影响。

3. 算法描述

设CKKS方案的安全系数为同态加密算法 java样例_同态加密算法 java样例_12,明文空间同态加密算法 java样例_浮点数_13,映射同态加密算法 java样例_浮点数_14为:同态加密算法 java样例_同态加密_15同态加密算法 java样例_密码学_16,具体关系为同态加密算法 java样例_学习_17,其中同态加密算法 java样例_浮点数_18。方案详细描述如下:

  1. 同态加密算法 java样例_学习_19
  • 选择一个2的方幂的整数同态加密算法 java样例_同态加密_20, 一个整数同态加密算法 java样例_同态加密_21, 一个大整数同态加密算法 java样例_密码学_22,和一个实数同态加密算法 java样例_密码学_23
  • 采样同态加密算法 java样例_同态加密算法 java样例_24同态加密算法 java样例_密码学_25同态加密算法 java样例_密码学_26,设私钥同态加密算法 java样例_密码学_27,公钥为同态加密算法 java样例_同态加密_28,其中同态加密算法 java样例_浮点数_29
  • 采样同态加密算法 java样例_学习_30同态加密算法 java样例_同态加密算法 java样例_31,设同态乘密钥同态加密算法 java样例_同态加密算法 java样例_32,其中同态加密算法 java样例_同态加密_33
  1. 同态加密算法 java样例_学习_34
  • 对于明文向量同态加密算法 java样例_学习_35,首先对其等比放大同态加密算法 java样例_同态加密算法 java样例_36
  • 接着通过同态加密算法 java样例_学习_37映射的逆同态加密算法 java样例_浮点数_38同态加密算法 java样例_同态加密算法 java样例_36转化为多项式同态加密算法 java样例_同态加密算法 java样例_40
  1. 同态加密算法 java样例_同态加密算法 java样例_41
  • 对于明文多项式同态加密算法 java样例_同态加密_42,使用同态加密算法 java样例_学习_37映射还原为向量同态加密算法 java样例_学习_35并等比缩小同态加密算法 java样例_学习_45
  1. 同态加密算法 java样例_浮点数_46
  • 采样同态加密算法 java样例_学习_47同态加密算法 java样例_学习_48,输出密文:同态加密算法 java样例_同态加密_49
  1. 同态加密算法 java样例_同态加密算法 java样例_50
  • 对于同态加密算法 java样例_浮点数_51,解密算法为同态加密算法 java样例_学习_52,即同态加密算法 java样例_同态加密_53

由于CKKS方案在加密时引入了噪声,所以其解密函数生成的明文与原始明文是不同的,但误差的数量级是远远小于明文的,所以该误差是完全可以忽略的。

  1. 同态加密算法 java样例_学习_54
  • 对于同态加密算法 java样例_浮点数_55同态加密算法 java样例_密码学_56,密文的同态加法为相应位直接相加同态加密算法 java样例_同态加密算法 java样例_57

由于密文的同态乘法会导致密文规模扩大,这将影响到解密算法的执行,从而使得密钥规模随乘法深度的增加而增大。故Cheon等人在方案设计时引入同态乘密钥(同态加密算法 java样例_学习_11)实现对乘法密文的缩放,使其规模保持在同态加密算法 java样例_同态加密_59中。

  1. 同态加密算法 java样例_同态加密算法 java样例_60
  • 对于同态加密算法 java样例_浮点数_55同态加密算法 java样例_密码学_56,我们记同态加密算法 java样例_学习_63
  • 同态加密算法 java样例_学习_64同态加密算法 java样例_学习_65的同态乘法表示为同态加密算法 java样例_密码学_66

但乘法操作会导致噪声增大,从而出现无法正确解密的情况,这时就需要在每次乘法之后进行一个“重缩放”的操作。

  1. 同态加密算法 java样例_同态加密算法 java样例_67
  • 对于密文同态加密算法 java样例_同态加密算法 java样例_68,我们对其进行“重缩放”同态加密算法 java样例_密码学_69经“重缩放”后,其密文模数降低为同态加密算法 java样例_浮点数_70

4.方案改进

在之后的研究中,人们又对该方案进行了不同程度的改进,如下图:

同态加密算法 java样例_浮点数_71


欧密18[7] 给出了CKKS方案的自举方案,欧密19[9] 对其进行了改进;而SAC18[8] 则是提出了CKKS方案的RNS变体,但是其使用的是欧密18中的自举方案,自举精度远达不到实际需求;故在RSA20[10] 中,又结合欧密19中的自举改进对RNS-CKKS方案的自举进行了改进;21年的欧密会上,又有两个方案被相继提出,一个是在RSA20的基础上对自举精度进行了提升[11] ,另一个则是提出了一种新的自举方案[12],相较之前的方案,精度、效率和安全性上都有了明显的提升。

4.1 自举方案

这里只对欧密18中提到的自举方案进行说明。

同态加密算法 java样例_密码学_72


由于明文槽上的任意线性变换都可表示为同态加密算法 java样例_浮点数_73,即对于任意线性变换,我们都可以使用两个同态加密算法 java样例_同态加密_09维的矩阵表示。故我们在同态计算编解码操作时需要用到同态加密算法 java样例_同态加密_75函数以实现同态计算矩阵乘法,其中同态加密算法 java样例_同态加密_76并且同态加密算法 java样例_同态加密_77,这个函数相当于对同态加密算法 java样例_密码学_78加密的向量同态加密算法 java样例_同态加密_79进行了如下的操作:同态加密算法 java样例_浮点数_80其中,同态加密算法 java样例_同态加密算法 java样例_81为向量按位乘法,同态加密算法 java样例_浮点数_82为循环向左移位。而对于模运算,Cheon等人首先模运算近似为正弦函数上的运算:同态加密算法 java样例_浮点数_83

同态加密算法 java样例_浮点数_84


接着,再通过欧拉公式,同态加密算法 java样例_同态加密算法 java样例_85将正弦函数上的运算转换到指数函数上的运算:同态加密算法 java样例_学习_86最后利用文献[4]给出的计算指数函数的算法进行运算即可:同态加密算法 java样例_同态加密算法 java样例_87

4.2 RNS变体

为了有效地实现多项式运算,Gentry等人基于CRT提出了一种双CRT表示的分圆多项式表示方案[13]。第一层CRT层通过使用RNS将多项式分解成具有较小模的多项式分量。第二层则是通过NTT的方法,将每个小多项式转换为整数向量。在双CRT表示中,任意多项式都可以用由小整数组成的矩阵来识别,并且可以通过执行不同分量的模操作来实现有效的多项式运算。

Cheon等人提出了CKKS方案的RNS变体[9],实现了在RNS上的近似全同态加密方案,具体算法如下:

  1. 同态加密算法 java样例_学习_88
  • 输入基本整数同态加密算法 java样例_学习_89,深度同态加密算法 java样例_浮点数_90,比特精度同态加密算法 java样例_浮点数_91
  • 选择一个基同态加密算法 java样例_密码学_92,满足同态加密算法 java样例_浮点数_93,并且对于乘法深度为同态加密算法 java样例_同态加密算法 java样例_94的密文模数同态加密算法 java样例_同态加密算法 java样例_95,其相邻模数模数具有相同的比率同态加密算法 java样例_同态加密算法 java样例_96
  • 选择一个同态加密算法 java样例_学习_97算法需要的模数同态加密算法 java样例_同态加密_98
  • 生成基同态加密算法 java样例_同态加密_99同态加密算法 java样例_密码学_100同态加密算法 java样例_学习_101
  • 选择一个2的幂整数同态加密算法 java样例_同态加密算法 java样例_102同态加密算法 java样例_同态加密算法 java样例_103上的私钥分布同态加密算法 java样例_学习_104,加密参数分布同态加密算法 java样例_同态加密_105和误差分布同态加密算法 java样例_浮点数_106
  1. 同态加密算法 java样例_学习_107
  • 采样同态加密算法 java样例_同态加密算法 java样例_108同态加密算法 java样例_同态加密_109
  • 对于给定的秘密多项式同态加密算法 java样例_同态加密算法 java样例_110,计算
    同态加密算法 java样例_密码学_111时,同态加密算法 java样例_浮点数_112同态加密算法 java样例_密码学_113时,同态加密算法 java样例_同态加密算法 java样例_114
  • 输出转换密钥同态加密算法 java样例_同态加密算法 java样例_115为:同态加密算法 java样例_同态加密算法 java样例_116其中,同态加密算法 java样例_同态加密算法 java样例_117
  1. 同态加密算法 java样例_同态加密算法 java样例_118
  • 采样同态加密算法 java样例_密码学_119同态加密算法 java样例_学习_120同态加密算法 java样例_同态加密_121,并记私钥为同态加密算法 java样例_浮点数_122
  • 计算同态加密算法 java样例_浮点数_123同态加密算法 java样例_密码学_113
  • 生成同态乘密钥同态加密算法 java样例_浮点数_125
  1. 同态加密算法 java样例_同态加密算法 java样例_126
  • 对于明文向量同态加密算法 java样例_学习_35,首先对其等比放大同态加密算法 java样例_同态加密算法 java样例_36
  • 接着通过同态加密算法 java样例_学习_37映射的逆同态加密算法 java样例_浮点数_38同态加密算法 java样例_同态加密算法 java样例_36转化为多项式同态加密算法 java样例_同态加密算法 java样例_40
  1. 同态加密算法 java样例_密码学_133
  • 对于明文多项式同态加密算法 java样例_同态加密_42,使用同态加密算法 java样例_学习_37映射还原为向量同态加密算法 java样例_学习_35并等比缩小同态加密算法 java样例_学习_45
  1. 同态加密算法 java样例_同态加密算法 java样例_138
  • 采样同态加密算法 java样例_同态加密_139同态加密算法 java样例_浮点数_140
  • 输出密文同态加密算法 java样例_学习_141其中,同态加密算法 java样例_同态加密_142
  1. 同态加密算法 java样例_同态加密_143
  • 对于密文同态加密算法 java样例_同态加密_144,输出同态加密算法 java样例_密码学_145,即同态加密算法 java样例_浮点数_146

之后便是运算部分,由于RNS的特性,在该表征系统上的运算均可分解为各个基上的运算,并且相互独立。故RNS上运算的具体算法展示如下:

  1. 同态加密算法 java样例_浮点数_147
  • 给定两个密文同态加密算法 java样例_学习_148,分别表示为同态加密算法 java样例_学习_149同态加密算法 java样例_同态加密算法 java样例_150,RNS上的同态加法是对应位的元素分别相加,即同态加密算法 java样例_学习_151其中,同态加密算法 java样例_密码学_152
  1. 同态加密算法 java样例_同态加密_153
  • 给定两个密文同态加密算法 java样例_学习_148,分别表示为同态加密算法 java样例_学习_149同态加密算法 java样例_同态加密算法 java样例_150
  • 计算同态加密算法 java样例_学习_157
  • 使用近似模提升,将同态加密算法 java样例_同态加密_158的基由同态加密算法 java样例_同态加密_159提升到同态加密算法 java样例_学习_160 同态加密算法 java样例_浮点数_161
  • 重线性化同态加密算法 java样例_浮点数_162其中同态加密算法 java样例_同态加密_163
  • 再通过近似模降低,将同态加密算法 java样例_同态加密_164的基由同态加密算法 java样例_学习_160降低到同态加密算法 java样例_同态加密_159 同态加密算法 java样例_同态加密_167
  • 输出同态加密算法 java样例_浮点数_168其中,同态加密算法 java样例_学习_169
  1. 同态加密算法 java样例_浮点数_170
  • 对于同态加密算法 java样例_同态加密算法 java样例_94级密文同态加密算法 java样例_同态加密算法 java样例_172,输出同态加密算法 java样例_学习_173其中,同态加密算法 java样例_密码学_174

系列论文我会在下载资源中给出。

参考文献
[1] Rivest R L , Adleman L M , Dertouzos M L . On Data Banks and Privacy Homomorphisms[J]. Foundations of Secure Compuation, 1978.
[2] Gentry C . Fully homomorphic encryption using ideal lattices[J]. Stoc, 2009.
[3] Cheon J H , Kim A , Kim M , et al. Homomorphic Encryption for Arithmetic of Approximate Numbers[C]// International Conference on the Theory and Application of Cryptology and Information Security. Springer, Cham, 2017.-1
[4] Dijk M V , Gentry C , Halevi S , et al. Fully Homomorphic Encryption over the Integers[C]// International Conference on Theory & Applications of Cryptographic Techniques. Springer, Berlin, Heidelberg, 2010.
[5] Aviad Kipnis E H . 1 Efficient Methods for Practical Fully-Homomorphic Symmetric-key Encryption, Randomization, and Verification[J]. Urban Research & Practice, 2012, 7(3):255-257.
[6] Jschke A , Armknecht F . Accelerating Homomorphic Computations on Rational Numbers[J]. Springer, Cham, 2016.
[7] Cheon J H , Han K , Kim A , et al. Bootstrapping for Approximate Homomorphic Encryption[J]. Annual International Conference on the Theory and Applications of Cryptographic Techniques, 2018.-2
[8] Cheon J H , Han K , Kim A , et al. A Full RNS Variant of Approximate Homomorphic Encryption[J]. Selected areas in cryptography :. annual international workshop, SAC. proceedings. SAC (Conference), 11349:347-368.-2
[9] Chen H , Chillotti I , Song Y . Improved Bootstrapping for Approximate Homomorphic Encryption[C]// International Conference on the Theory & Applications of Cryptographic Techniques. Springer, Cham, 2019.-3
[10] Han K , D Ki. Better Bootstrapping for Approximate Homomorphic Encryption[C]// Cryptographers’ Track at the RSA Conference. Springer, Cham, 2020.-4
[11] Lee J W , Lee E , Lee Y , et al. High-Precision Bootstrapping of RNS-CKKS Homomorphic Encryption Using Optimal Minimax Polynomial Approximation and Inverse Sine Function[M]. 2021.-5
[12] Bossuat J P , Mouchet C , Troncoso-Pastoriza J , et al. Efficient Bootstrapping for Approximate Homomorphic Encryption with Non-sparse Keys[M]. 2021.-5
[13] Gentry C , Halevi S , Smart N P . Homomorphic Evaluation of the AES Circuit[C]// Annual Cryptology Conference. Springer, Berlin, Heidelberg, 2012.