同态加密方案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

若一个加密方案对密文进行任意深度的操作后解密,结果与对明文做相应操作的结果相同,则该方案为完全同态加密方案。

通常一个公钥加密方案有三个算法:KeyGen 算法(密钥生成),Enc 算法(加密),Dec 算法(解密)。但是在全同态加密中,除了上述三个算法之外,还包含第四个算法:Evaluate 算法(密文计算),这个算法的功能是对输入的密文进行计算。

KeyGen 算法(密钥生成)用于生成公钥和密钥,公钥用于加密,私钥用于解密。还可能生成另外一种公钥,即密文计算公钥,我们把它称之为Evk 。

密文计算公钥Evk 的作用是在执行Evaluate 算法时用到,而且Evk 的形式与使用的全同态方案直接相关。例如,如果是通过启动技术(Bootstrapple)获得全同态加密,即每次密文计算前要用同态解密约减密文的噪音,这时Evk 就是对密钥的每一位加密后生成的密文,即密钥有多少位,Evk 里包含的公钥就有多少个。Evk 中每个公钥的大小就是使用Enc 加密后产生密文的大小。

当然还有其他情况,例如,如果使用密钥交换与模交换技术获得全同态加密,典型代表就是BGV 方案。这时Evk 中包含的就是L–1 个矩阵,L 是方案中电路的深度,该矩阵用于密钥转换。每次密文计算后,都需要使用Evk 中的公钥将维数扩张的密文向量转换成正常维数的密文向量。

当然还有一种情况就是不需要Evk,例如在Crypto13 会议的论文GSW13 中,Gentry 使用的密文是矩阵(方阵),所以密文乘积或相加不会产生密文维数改变的事情,所以在密文计算时没有用到公钥,这也是该论文可以产生基于身份或基于属性全同态加密方案的根本原因。

Enc 算法(加密)和我们平常意义的加密是一样的,但是在全同态加密的语境里,使用Enc 算法加密的密文,一般称之为新鲜密文,即该密文是一个初始密文,没有和其他密文计算过。所以新鲜密文的噪音称之为初始噪音。

Dec 算法(解密)不仅能对初始密文解密,还能对计算后的密文解密。但由于部分同态加密方案中密文存在噪音,例如在整数上的全同态加密方案里,密文乘积的噪音是噪音之积,密文加法的噪音是噪音之和。所以当密文计算到一定程度,其噪音将超过上限,所以对这样的密文解密将可能失败。全同态加密的关键就是对噪音的控制,使之能对任何密文解密。

最后一个算Evaluate算法(密文计算),这个算法是整个

的地基,后面这个Evaluate 算法就是大楼。这个比喻在后面会体会到它

态加密四个算法中的核心。可以做个这样的比喻:前面三个算法是大楼的地基,后面这个Evaluate 算法就是大楼。这个比喻在后面会体会到它

的用意。密文的计算是在电路里进行的,电路是分层的,电路深度越

深,层数越多,密文就能够进行更多次的计算。随便提一句,密文计算

的次数等于电路深度的对数。什么是计算次数?例如c1*c2,就是进行

了一

次计算,次数为2,c1*c2*c3 就是进行了两次计算,次数为3。在全

同态加密中,我们一般用乘法次数来衡量计算次数,这是因为乘法的噪

音比加法噪音增长的快很多。

Evaluate 算法有三个输入,第一个输入是计算公钥Evk。Evk

可以没有。第二个输入是函数f,就是Evaluate 算法所要执行的函

数,可以是任意函数,因为全同态加密的目标就是对密文能够进行任

意计算。当然这个函数也可以是“解密函数”,Gentry 通过观察发

现了一个秘密,等会我们说。第三个输入是密文,理论上可以有无穷多

个密文,但是这是不可能的。

Evaluate 算法就是将密文输入到函数f 里进行计算。我们知道在

全同态加密的方案里,密文都是含有噪音的,密文的计算会导致噪音的

增长,如果把函数f 表示成电路,那么Evaluate 算法实际上只能够

对有限深度L 的电路进行计算,超过这个深度L 的电路就不行了。

所以我们把这样的方案称之为部分同态加密方案。由此可见Evaluate

算法的重要性,全同态加密就靠它了。还记得刚才的比喻么?

噪音问题导致了Evaluate算法不能够对任意电路(函数)进行计算。

Evaluate 算法相当于大楼,这个大楼的层数是有限的,而全同态加密

的目标是无限高!

噪音问题导致了Evaluate算法不能够对任意电路(函数)进行计算。

全同态加密(Fully Homomorphic Encryption )方案中,有一个非常重要技术:同态解密。

为什么要同态解密,前面说过噪音问题是实现全同态加密方案的最大障碍。Gentry 在实现全同态加密方案时,注意到可以在Evaluate算法中执行自己的解密函数,那么输入的数据是什么呢?

解密函数当然输入的是密钥sk 和密文c。但是不要忘了Evaluate 算法是如何定义的。Evaluate 算法是对输入的密文

c1,c2,, 执行函数f 的操作,也就是对密文进行计算,本质是对密文做同态计算,即计算后的密文解密后要等于对明文做同样的计算,如果这点做不到,那么Evaluate 算法即使能对密文做很多次运算,也是没有意义的,

这就是两种形态,明文态和密文态,两种形态对应的是同一个计算电路。在明文态,输入电路的是明文,而这些明文都是位(因为是布尔电路)。在密文态,输入电路的就是把每一个明文变成密文就可以了(算术电路)。

而现在如果f 是解密函数,那么输入的密文是什么呢?在明文态,对于解密电路,输入的肯定是密钥sk 的每一位二进制位,以及密文c 的每一位二进制位,因为是布尔电路,所以输入的数据都要化成二进制位的形式。

在密文态,相应的把明文位变成密文就可以了,原来是一个位的地

方现在变成了一个密文,那么将这些密文输入到解密电路中,结果是一个密文,这个密文解密后等于在明文态对明文做同样计算的结果。

相关文档
最新文档