完全同态加密

2009年IBM的Gentry提出的完全同态加密(FHE)方案是密码学上的一项重大突破,下面就做个小小的总结。

1、 定义

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

也可描述为:若一个加密方案同时满足加法同态和乘法同态,则称该方案为完全同态加密方案。

(1)同态性:代数系统{A,+},{B,*},f为A到B的映射,若f(a+b)=f(a)*f(b),则A、B同态。

可以列举一个简单的例子,两组对象分别为正实数域和对数域,实数的乘运算和对数的加运算就属于同态运算,即对于任何正实数x,y和z,

如果x*y = z,那么log(x)+log(y)=log(z)。正是这种同态性提供了以不同方式达到相同目的的两种选择,如果给出x和y,我们可以直接将它们相乘,

也可以取它们的对数相加,最后得到的结果是相同的,都是z。

(2)任意深度:进行任意深度的计算是完全同态加密的最重要的特性,之前已经有了一些同态加密方案,这些方案要么是满足加法同态,如Paillier、Benaloh算法,

要么是满足乘法同态的,如RSA、ElGamal算法,还有一些能够同时满足有限次加法与乘法的同态方案,但是在这些方案中没有一个是完全同态的。

2、 关键技术:同态解密

在加密过程添加的随机成分会形成噪音,这些噪音会随着计算的进行而迅速增强(大致来说,密文乘积的噪音是噪音之积,密文和的噪音是噪音之和),一旦超过阈值,就会使得解密结果不可靠。噪音问题是实现全同态加密方案的最大障碍,全同态的关键就是对噪音进行控制,使用的是同态解密技术。

在最早的版本中,Gentry首先提出一个基于理想格的部分同态加密方案(somwhatFHE或SWHE),该方案只支持密文上的低阶多项式运算。然后对该方案进行改进,使其成为完全同态加密方案。首先将要运算的函数分解为基本计算:加法和乘法(Gentry使用二进制电路来描述一个函数,这么做有两个好处:一、在电路模型下用电路深度和门电路个数衡量计算复杂度;二、将计算分解为基本步骤:二进制的加和乘),在进行每一步基本计算前都对密文进行“同态解密”或称为“重加密”操作,得到新密文并能控制新密文噪音在阈值内,相当于 “刷新”了一下密文,然后再进行下一步基本计算。用电路观点描述的话,就是在基本门电路前添加一个解密电路,形成增强版的基本门电路,如下图:

同态解密是指在密文空间执行解密函数,输入是加密后的解密密钥和加密后的密文,输出是一个新鲜密文且该新鲜密文具有更低的噪音。听起来有点绕,为了理解这一过程,可以联想到明文空间,若在明文空间执行解密函数,则输入应为解密密钥和密文,输出为明文。因为明文空间与密文空间存在同态关系,故映射到密文空间后,输入输出都为明文空间中内容的加密。

随之而来的一个问题是:在密文空间能否执行解密函数。存在这个问题的原因是解密函数也存在计算深度的问题,一旦解密函数的深度超过了SWHE的承受范围,密文空间就不能执行解密函数,不能执行解密函数就不能降低噪音,不能降低噪音就不能进行任意深度的计算,也即不能实现完全同态。很不幸,按照Gentry思路构造的解密函数被证明不能被SWHE计算。Gentry的解决方法是压缩解密函数,使其进入SWHE的能够接受的函数集合中去。压缩解密函数的基本思路是“预处理”,即在公钥中添加一部分私钥信息,加密的时候对密文进行预处理,提前计算出一些辅助信息添加到密文中,用来减轻解密函数的负担,降低解密函数的深度。顺便提一下,这种预处理的加密方法广泛应用于服务器辅助加密方案中,计算能力较弱的客户端将部分解密密钥信息泄露给服务器,借助服务器强大的计算能力进行部分解密,只留下少量工作给客户端运行。

由于同态解密开销非常大,所以后面又有人发明了密钥交换技术、模交换技术等来削减密文噪音。

3、 方案描述

(1)    KeyGen算法(密钥生成)

该算法生成加密公钥和解密私钥,还可能生成一个密文计算公钥,用于Evaluate中密文计算。

(2)    Enc算法(加密)

该算法生成密文,另外,通过Enc得到的密文的噪音最低,经过同态计算后的密文噪音将逐渐增强。

(3)    Dec算法(解密)

当密文噪音在阈值内时解密正确,超过阈值后解密不可靠。

(4)    Evaluate算法(密文计算)

这个算法是完全同态加密最重要的部分,通过Evaluate可以对任意功能函数进行计算,输入都是密文,特别重要的是该算法可以计算解密函数,这是形成完全同态加密方案的关键。

4、发展

(1)1978 年Rivest 等人于提出同态加密概念,推出了最早的公钥密码体系RSA,此方案满足乘法同态性。

(2)2009年Gentry提出了第一个完全同态加密方案[1],该方案是基于理想格构造的,困难性基于两个假设:格上的标准难题和稀疏子集和难题。

(3)2009年Dijk、Gentry等人提出了整数上的完全同态加密方案[2],困难性基于近似GCD难题。该方案主要贡献是将原来基于“理想格”的SWHE替换为一个非常简单的整数描述的SWHE。在概念上的进行了极大的化简,但依旧是使用Gentry的同态解密技术将SWHE其转化为FHE。故效率没有提高。

(4)2011年Brakerski、Gentry、Vaikuntanathan提出的完全同态加密方案[3],简称BGV方案,可以看做第二代FHE。困难性基于LWE(纠错学习)。利用密钥交换技术、模交换技术来降低密文维数和减弱噪音,使得效率大大提高。

5、案例分析

这里选择一个相对容易理解的方案分析,是2009年Dijk和Gentry等提出的整数上基于模运算的完全同态加密方案。

首先是一个对称的部分同态加密方案:

密钥生成:生成密钥p(奇数),公开参数q(大整数)

加密:c=m+2r+pq

解密:m=(cmod p )mod 2=(c-「c/p」) mod 2=LSB(c) XOR LSB(「c/p」)

密文计算:基本加法与乘法计算。

其中r是随机小整数;明文m∈{0,1};密文c;「」:四舍五入方式取整;LSB:最低有效位。

规定a mod p∈(-p/2,p/2),将m+2r看作“噪音”,明文空间是{0,1},密文空间是整数域。

正确性验证:若保证噪音m+2r<p/2,则能正确解密,(m+2r+pq) mod 2 =(m+2r) mod 2 =m,在方案的参数选择上可以保证新鲜密文的噪音m+2r一定小于p/2,故可解密成功。

同态性验证:假设 c1= m1+2r1+pq1,c2=m2+2r2+pq2,其中c1 是对密文m1 的加密,c2 是对密文m2 的加密。

c1+c2=(m1+m2)+2(r1+r2)+p(q1+q2) 若c1+c2的噪音2(r1+r2)+m1+m2<p/2

则((c1+c2) mod p) mod 2=((m1+m2)+2(r1+r2)) mod2=m1+m2,即加法同态;

c1*c2=(m1+2r1)(m2+2r2)+p(pq1q2+m1q2+m2q1+2r1q2+2r2q1),若c1*c2 的噪音( m1+2r1)(m2+2r2) <p/2

则(c1*c2 mod p)mod 2=( m1+2r1)(m2+2r2) mod 2=m1*m2,即乘法同态;

从上式还可以看出密文之和的噪音是各自密文的噪音之和;而密文乘积的噪音是噪音之积。

上述描述的方案是对称加密,改成非对称加密(公钥加密)也很方便。

密钥生成:私钥sk=p,公钥pk={x1,x2,…,xt},其中xi=pqi+2ri,即 xi是对0的加密。

加密:c=m+2r+sum(S),其中S是{x1,x2,…,xt}的一个随机子集,sum(S)为一些0加密之和,故对解密结果不影响。

解密:m=((cmod p) mod) 2=(c-「c/p」) mod 2=LSB(c) XOR LSB(「c/p」)

密文计算:基本加法与乘法计算。

补充一下,近似GCD难题在此处是指给出部分的xi=pqi+2ri,很难求出p。

对上述方案进行改进,使之成为完全同态加密方案。

密钥生成:私钥sk’=<s1,s2,…sm>是一个随机二进制向量,且设稀疏子集S={i:si=1},公钥pk’=<pk,y1,y2,...,ym>,其中有理数yi∈[0,2)且sum(yi)≈(1/p) mod 2,i∈S

加密:c’=<c,z1,z2,…zm>,其中zi=(c*yi)mod 2

解密:m=(c’-「sum(si*zi)」)mod 2=LSB(c’) XOR LSB(「sum(si*zi)」)

密文计算:由基本加法与乘法计算组成。

由上述改进可以看出,密钥与密文体积都增大了,以此为代价换来的是解密函数的化简,即将复杂的除法运算c/p替换为sum(si*zi),当然若要真正化简解密函数还要利用Hamming Weight的技术来简化二进制加法计算。

6、应用[4]

完全同态可以解决云计算的安全性问题,委托至云端的数据都是加密的,云端在不解密的前提下可以实现用户请求的操作。

例如,银行有许多交易数据需要进行分析,但若其本身的数据处理能力较弱,可以把交易数据加密后交给云端数据处理中心来进行处理分析。处理中心对数据进行分析,得出结果并返回。在这个过程中,数据处理中心接触到的都是密文,这样就可以充分保证银行数据的机密性。

再如,医疗机构可以将病人的医疗数据加密后存储至云端,云端对数据进行一些统计分析,可以对病情进行预测和给出治疗建议,这样既保证了病人的隐私有充分利用了云端的强大的计算能力。

同态加密还可用于垃圾邮件过滤。假如你发布了加密公钥,你的好友可以向你发送加密的电子邮件,但垃圾邮件发送者也可以利用公钥加密广告和其他垃圾邮件来填塞你的邮箱。利用完全同态加密技术,垃圾邮件过滤器在无法解密邮件的前提下也能过滤掉垃圾邮件。

参考

http://blog.sciencenet.cn/blog-411071-651836.html

http://www.doc88.com/p-8085463342065.html

[1] .Fully Homomorphic Encryption Using IdealLattices

[2]. Fully Homomorphic Encryption over theIntegers

[3]. Fully Homomorphic Encryption withoutBootstrapping

[4]. Can Homomorphic Encryption be Practical

时间: 2024-11-05 17:21:51

完全同态加密的相关文章

编程算法

前十个是来自圣经的十大算法: 发起人的描述:<来自圣经的证明>收集了数十个简洁而优雅的数学证明,迅速赢得了大批数学爱好者的追捧.如果还有一本<来自圣经的算法>,哪些算法会列入其中呢? 第一名:Union-find 严格地说,并查集是一种数据结构,它专门用来处理集合的合并操作和查询操作.并查集巧妙地借用了树结构,使得编程复杂度降低到了令人难以置信的地步:用上 一些递归技巧后,各种操作几乎都能用两行代码搞定.而路径压缩的好主意,更是整个数据结构的画龙点睛之笔.并查集的效率极高,单次操作

2019年7月12日实验室开展学术研讨

首先,由付俊俊同学介绍了同态加密的相关概念,介绍了加法同态加密.乘法同态加密和完全同态加密,并讲到了完全同态加密是抗量子攻击的.其次,由王利朋老师讲解了一篇论文“不使用双线性对映射的无证书签密方案的安全性分析及改造”.再次,由马威老师介绍了“TRUST MANAGEMENT IN IOT”.最后,由贾老师做了一下会议总结,并对实验室紧接下来的相关工作做了合理安排. 原文地址:https://www.cnblogs.com/zznuxxaq/p/11178109.html

php7实现基于openssl的加密解密方法

还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $publicKeyFilePath = '/www/ceshi/rsa_public_key.pem'; extension_loaded('openssl') or die('php需要openssl扩展支持'); file_exists($publicKeyFilePath) or die('公钥的文

python实现网页登录时的rsa加密流程

对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录,需要模拟这个加密过程. 网上搜了下关于rsa加密的最简明的解释: rsa加密是非对称加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己

人工智能PK透明加密,数据安全保护谁能技高一筹

人工智能一直是全球的一大热点话题,从很久之前谷歌研发的人工智能机器人击败柯洁.李世石等众多围棋高手,到最近特斯拉CEO埃隆o马斯克投资的人工智能研究机构OpenAI研发的机器人击败了国外顶尖Dota 2玩家之一的Danil Ishutin.而重磅消息却是美国电商巨头亚马逊,已准备将人工智能技术用于商业服务中,计划将其用于云存储方面,用于保护用户数据的安全. 亚马逊的这一计划,主要是通过机器学习技术,自动识别.分类和保护用户保存在亚马逊云计算平台上的敏感数据.但引入人工智能技术之后,亚马逊的云存储

Java DES 加密和解密源码

Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互作用性. 算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法的概念,而不用去关心如何实现这些概念.实现的独立性和相互作用性通过密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一个或多个程序包.软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */

关于数据传输中加密解密那点事儿(一)

随着互联网的兴起,越来越多的信息和资源要通过网络传输完成:然而在这些数据传输中总有一些"无关人员"做一些窃听.盗取.篡改等危害数据安全的行为,所以我们要对数据进行加密处理,以保证数据的安全传输: 所以有了一下几种加密方式: 一.对称加密: 这种算法简单来说就是 数据的发送方和接收方都必须要有同一种密钥(加密数据所用到的密钥),在数据的传输中 数据与密钥都通过加密的方式传送: 特性:在数据加密中,数据被分成固定大的块,逐个加密:加密和解密速度也快: 缺陷:因为加密和解密使用同一种密钥,所

如何有效的对PDF文件进行加密保护

PDF是办公中保存资料数据文件不可或缺的一类电子文件工具软件,它的优势在于清晰的位图显示形式和良好的阅读体验,所以很多合同报告.电子书.技术文档.设计图纸等都越来越倾向这种存储方式.和普通的电子文档一样,如Word.Excel,PDF文件也存在信息安全泄漏风险,因此加密保护也是必不可少的.下面就来分享下如何对PDF进行权限设置和PDF文件加密操作. PDF格式的官方编辑器Adobe acrobat 软件为我们提供的口令加密包含"打开文档的口令"和"限制文档编辑打印口令&quo