1基础知识同态加密算法的简单定义如下:
同态加密的一个经典的应用是外包计算(或者说云计算)。有一个客户端计算能力很弱,而服务器计算能力很强。客户端希望云服务器执行计算任务,但又不想泄露隐私数据。此时可以考虑使用同态加密进行加密计算。这是一个非常经典的应用场景。
为了保证更强的安全性,GoldWasser和Micali在1984年提出了概率加密,引入更强的安全目标:语义安全。理论上已证明,语义安全(Semantic Security,SS)等价于密文不可区分性。semantic security 语义安全:一个密文不会泄露除了长度之外的任何明文信息。我们很少用semantic security的形式来说明算法的安全性,因为他形式化的描述比较晦涩。IND-CPA 、IND-CCA1、IND-CCA2是常见的对于公钥加密安全性的定义。这里对三者进行简单介绍。参考了下面链接的文章。
[https://blog.csdn.net/m0_47659650/article/details/125223197]
IND-CPA是选择明文攻击下的不可区分性。敌手和挑战者商定目标密码体制,选定加密密钥pk,然后进行以下各阶段:寻找阶段:敌手选择两个等长的明文,
猜测阶段:敌手被挑战者告知其中一个明文和随机数r的加密结果, 判断是还是, 其中b是保密的。
敌手的目标是以大于二分之一的概率猜对b的值。下面定义敌手的优势。
如果可以忽略,那么可以认为和不可区分。
IND-CCA1是选择密文攻击下的不可区分性。相对前者,增加敌手可以在收到之前,调用一次加密或解密能力,下面是具体流程:
训练: 敌手向挑战者请求任意密文的解密(多项式有界次数),即选取密文C给挑战者,挑战者返回解密结果给敌手。
挑战:敌手A选择两个等长的明文,, 再从挑战者接受加密后的密文, b是随机的;猜测:敌手输出, 若=, 则敌手成功。敌手的目标是以大于二分之一的概率猜对b的值。下面定义敌手的优势:
敌手
如果敌手可以忽略,那么认为此密码体制在非适应性选择密文攻击下具有不可区分性,称为IND-CCA1安全。
IND-CCA2是自适应选择密文攻击下的不可区分性。
相对前者,不限制敌手调用解密的时间。下面是具体流程:
训练1:敌手向挑战者请求任意密文的解密(多项式有界次数),即选取密文C给挑战者,挑战者返回解密结果给敌手。挑战:敌手A选择两个等长的明文,, 再从挑战者接受加密后的密文, b是随机的;训练2:敌手继续向挑战者请求任意密文的解密(多项式有界次数),即选取密文C(C不能是)给挑战者,挑战者返回解密结果给敌手。猜测:敌手输出, 若=, 则敌手成功。
同态算法是不能做到IND-CCA2的。IND-CCA1能做到但是比较复杂。在这个课程,只专注于IND-CPA这个级别的语义安全。
在同态加密暑期班郁昱老师的课程笔记中我们也提到过,可以从一个对称同态加密算法来构造一个非对称的同态加密算法。我们接下来再简单回顾一下。假设是一个对称同态加密算法。
定义:
其中B是密文的规模上限。
假设我们要加密, 定义
Choose, such that.
Define.
Let定义则得到的是一个公钥加密的同态加密算法。因此,在不考虑效率的情况下,对称的全同态算法和非对称的全同态算法是等价的。
2Gentry's Bootstrapping 理论
假设是一个非对称同态加密方案。我们定义一个Decryption Circuit如下:
这个公式可以理解为用对密文进行解密。在这里是输入,是公开的。
若=,则:
Augmented Decryption Circuit:
NAND是一个通用电路,我们可以使用NAND来构造任何逻辑电路。NAND可用如下式表达,
这个定义也有一个很好的性质,
NANDNAND
对于一个同态加密算法,如果他对密文计算支持Augmented Decryption Circuit,那么它是bootstrappable。
如果存在一个bootstrappable公钥同态加密机制,那么就一定存在全同态加密机制。
remark: 这里是对定理的一个简化版本的描述,完整版还需要加上更多的限制。但是这并不影响我们对课程的理解。
假设是一个bootstrappable的同态加密算法。我们根据以下步骤来进行构造。
1 密钥生成
这里生成了一个BK, 方法是用PK加密SK.
2 加密
3 解密
4 Eval
这里Eval的计算,其实就是将加密后的放到AGC电路里面进行计算,得到的就是两个密文对应的明文的NAND。也就是,NAND如下图,这个过程是可以一直做下去的。理论上就实现了一个全同态算法了!
注意
1 刚才的计算定义的明文空间是,我们需要按比特拆开来计算
2 这里用自己的公钥加密自己的私钥,这个操作是否是安全的。到目前为止,这仍是一个开放的问题。
Leveled FHE方案的定义:给定一个整数, 我们可以对电路深度不超过的电路执行同态加密操作。假设是一个bootstrappable的同态加密算法。它的构造方法如下。1 密钥生成这个方案先生成对公私钥,然后的生成跟刚才不一样。是使用加密,用加密,以此类推。
2 加密
注意这里是使用来做加密
3 解密
4 Eval
对于第层,当进行Eval计算时,将放入ADC电路中,得到的结果是用加密的明文。同理,层得到的是的密文。以此类推,最终得到的密文。
可以将这个方案理解为一个链式的拓展。这样的链式方案就避免了用自己的公钥来加密私钥的问题。
作者简介:
庄智廉,重庆大学大数据与软件学院研究生。主要研究兴趣包括隐私保护机器学习、差分隐私、联邦学习。知乎:acai
关注开放隐私计算公众号,了解更多内容
留言与评论(共有 0 条评论) “” |