云安全:从全同态加密到函数加密

云安全:从全同态加密到函数加密 精选

已有 10188 次阅读 2013-7-12 18:57 |个人分类:信息安全|系统分类:科研笔记|关键词:云安全 加密

   小小一片云,搅动大世界。云计算已经成为产业界、学术界、政府等各界均十分关注的焦点。云计算虽好,其安全性却令人担忧。


  人们希望云平台能够保证用户数据的机密性与完整性。很自然的一个方法就是:用户对自己的数据加密,然后将加密的数据外包到云端,云端使用全同态加密技术,就可以对密文进行计算。上述方法只是保证了数据的机密性,因为云端看不到用户真实的数据,看到的只是密文。数据的完整性可以通过校验技术等来保证。这里我们只对数据的机密性来讨论。


  全同态加密,这一不可思议的技术,无疑是现代密码学最重要的成果之一,当然也是计算机科学界一项重大的成果。


  千万不要以为有了云计算才有了全同态加密,事实上全同态加密早在云计算前就有了,这可以追述到1978年,Rivest, Adleman  Dertouzos就提出:是否无需密钥就能够对密文做任意功能的计算呢?从代数角度看这就是同态性。当时称为隐私同态。


  历史有时有惊人的巧合。2007年当人们大力追捧云计算时,云计算的安全也就显得尤为重要,全同态加密的实现更加显得迫切。尽管在这之前,人们已经有了一些同态加密方案,这些方案要么是满足加法同态,要么是满足乘法同态的,还有一些能够同时满足有限次加法与乘法的同态方案,但是在这些方案中没有一个是全同态的。 


     2009年Gentry的全同态加密方案如一道惊雷,炸响了学术界与工业界。学术界忙着探讨与改造Gentry的方案,工业界争论着全同态是否可以实践。


     我认为,Gentry实现全同态的理论框架,至今都没有被打破。可以说目前所有安全的全同态加密方案都是基于Gentry架构的。这种架构的出发点就是对密文计算中不断增长的噪音进行消减。消减的技术就是同态解密,即对一个密文同态解密后得到一个新的密文,新的密文与原密文对应的是同一个明文,只是这个新密文的噪音如果比原密文小的话,就达到消减密文噪音的目的了。由于同态解密开销非常大,所以后面的人们又发明了密钥交换技术、模交换技术等来消减密文噪音。可能有人会问:是否可以构造出密文计算过程中噪音不增加的方案?如果这样的方案有,那么将会是一个大的突破。然而没有,所以现在的全同态加密方案还是在Gentry的大框架下进行构造。


     Gentry的构造方法是一种非自然的方法,得到的不是一个天然的方案,是一个经过了人为的、拼凑的、工程性质的构造方法。这样说不是贬义,而是给我们了一种启示,要想达到某种目的,就要使用各种手段。所以你看到的全同态加密方案不是普通上的一个加密方案,而是一个需要若干步才能得到,而且还有各种限制的一个方案。最近在EPRINT上有一篇论文:An efficient FHE based on the hardness of solving systems of non-linear multivariate equations。这篇论文是我目前看到得唯一一个非Gentry框架的全同态加密方案,但是这个方案的安全性有缺陷,所以还不成气候。但是有一点我可以肯定的,直觉告诉我:非Gentry的构造方法应该是存在的,使用的方法依然是拼凑法。


      全同态加密用于解决云安全有个问题,就是密文及密文计算的结果对于云平台完全是“不懂的”,这种“不懂”看似是完全安全的,但是实际用起来却做不了很多事情。例如,邮件服务器的垃圾邮件过滤,按道理用户把邮件加密后发出去,邮件服务器收到加密的邮件,可以通过全同态技术,运行垃圾邮件检测算法对加密邮件进行垃圾邮件检测,然而得到的检测结果是密文,邮件服务器“读不懂”检测结果,所以无法判断是否为垃圾邮件。还有很多其他例子,例如数据库的检索,由于要对密文进行比较,而比较的结果是密文,服务器无法判断是否找到了匹配的记录。


     那么有没有一种方法,例如能让服务器只知道检测结果是否为垃圾邮件,而不知道邮件的内容呢?包括数据库的检索也一样。


     有的,这就是所谓的函数加密。例如,任何人可以使用公钥PK对明文m进行加密得到密文Enc(m),密钥的持有者对某个函数 F 颁发一个KEY, 任何拥有KEY和密文Enc(m)的一方,都可以计算F(m), 但是除了F(m)外不能获得关于m的任何信息。


    这样上述垃圾邮件检测的例子就可以通过函数加密来解决。例如,Alice公开自己的公钥以及给邮件服务器一个KEY,这个KEY用于邮件服务器的垃圾邮件检测函数。当有人要发邮件给Allice的时候,先用Alice的公钥加密邮件,然后发出。邮件服务器收到邮件后,就可以通过垃圾邮件检测算法判断出邮件是否为垃圾邮件,然后做出相应的操作。


    所以,一个支持所有函数的函数加密方案是非常有用的。这样的函数加密方案存在么?


    Agrawal, Gorbunov, Vaikuntanathan and Wee [AGVW12] 的结果说明:对多个通用函数能够提供任意多数量KEY的函数加密方案是不可能的。目前最好的结果就是:对任意一个通用函数提供一个KEY的函数加密方案。这个方案来自于今年STOC会议的论文:Succinct Functional Encryption and Applications Reusable Garbled Circuits and Beyond。是函数加密的一个最大进展。

你可能感兴趣的:(计算机安全)