可否认加密技术研究与进展*
2022-09-07郝学轩曹艳梅张方国陈晓峰
郝学轩, 曹艳梅, 张方国, 陈晓峰
1. 西安电子科技大学 网络与信息安全学院, 西安 710071
2. 中山大学 计算机学院, 广州 510006
3. 广东省信息安全技术重点实验室, 广州 510006
通信作者: 郝学轩, E-mail: haoxuexuan@stu.xidian.edu.cn
1 引言
加密技术是保障数据机密性的最常用手段. 传统的加密技术提供了语义安全性,使得敌手(adversary)截获不安全信道上的密文时, 无法获得关于它所对应的明文消息的任何信息. 考虑一个能力更强的敌手,称为胁迫者(coercer), 他们有能力接近发送方和(或) 接收方, 并胁迫他们交出所有的私有信息: 明文、用于加密的随机值和私钥. 对于一般的加密方案而言, 一旦密文、明文和加密时的随机值(或私钥) 同时暴露给胁迫者, 胁迫者就可以通过自己运行一遍加密算法(或解密算法) 来验证当事人是否说谎. 为了能在上述场景中仍能够保障数据的机密性, Canetti 等人[1]在CRYPTO ’97 上给出了一个可行的解决方法, 称为可否认加密(deniable encryption). 可否认加密允许发送方和(或) 接收方, 对已经执行了的一些加密通信, 制造“假的” (但看起来合法的) 加密时的随机值或私钥, 打开(open) 密文到另一条明文消息, 以抵御胁迫攻击. 因此, 可否认加密技术对保护胁迫场景中的隐私数据和敏感信息不被泄露具有重要的意义. 具体来说, 可否认加密可以用于电子投票、电子拍卖、安全多方计算、云存储服务等可能存在胁迫者的场景中. 目前, 已有许多工作研究了可否认加密方案的构造方法, 但现有的可否认加密方案在效率和可否认性方面还存在不足, 或是难以实现. 如何设计一个高效、安全、实用的可否认加密方案仍是一个难题.
本文主要概述了可否认加密技术的研究进展. 第2 节介绍了可否认加密的不同分类方法, 给出了不同类别的可否认加密的安全性定义. 第3 节、第4 节、第5 节分别详细论述了可否认公钥加密、可否认对称加密和其他密码原语中的可否认技术的研究进展. 第6 节阐述了可否认加密的应用. 第7 节阐述了与可否认加密类似的工作. 第8 节对关键的研究工作和技术进行了总结和展望.
2 可否认加密的分类及安全性定义
Canetti 等人[1]在引入可否认加密概念的同时, 给出了可否认加密的不同分类方法和安全性定义, 后续的工作也对它们进行了补充[2-4]. 本节将对可否认加密的分类方法和不同类别的可否认加密的安全性定义进行概述.
2.1 可否认加密的分类
文献[1] 首先将可否认加密按照被胁迫对象分为发送方可否认加密(sender-deniable encryption)(敌手只胁迫发送方)、接收方可否认加密(receiver-deniable encryption)(敌手只胁迫接收方)以及发送方和接收方可否认加密(sender-and-receiver-deniable encryption)(敌手同时胁迫发送方和接收方). 他们还区分了共享密钥可否认加密(shared-key deniable encryption)(双方间需要预先共享一些信息) 和公钥可否认加密(public-key deniable encryption)(双方没有预先通信). 此外, 他们引入了一个稍微弱一些的可否认概念, 称为“灵活的可否认(flexible deniability)”(在该文的预备版本[5]中称为“多分布式可否认(multidistributional deniability)”), 区别于一般定义的可否认概念(又称为“完全可否认(full deniablility)”).
完全可否认和多分布式可否认可以看作是可否认加密系统的两种模型. 在完全可否认中, 只存在一套类似于普通公钥加密的方案, 包括密钥生成算法KeyGen、加密算法Enc 和解密算法Dec, 发送方和接收方只需通过各自的伪造算法FakeS和FakeR对于敌手已经截获到的密文和一个虚假的明文来分别产生加密时用到的随机值或者私钥. 而多分布式可否认中存在两套方案: 诚实的方案(KeyGen,Enc,Dec) 和可用于否认的方案(DKeyGen,DEnc,Dec), 其中诚实的方案不能用于可否认, 而可用于否认的方案为实现否认,不仅要通过伪造算法产生加密时用到的随机值或者私钥, 还需要当事人声称始终用的是诚实的方案.
随着可否认加密技术的不断发展, 可否认加密方案按照不同分类标准有着不同的分类方法, 如图1 所示.
图1 可否认加密方案分类Figure 1 Taxonomy of deniable encryption schemes
图1 中黑体部分的文字表示同一种分类方法下的最优类别. 也就是说一个最优的可否认加密方案应是双方可否认的、完全模型下的、自组织的、非交互式的, 且具有可忽略不计的可否认性. 然而, 已有研究表明, 不存在同时满足以上几种性质且安全的可否认加密方案[2]. 可否认加密的不同分类之间存在一定的制约关系, 请参考3.4 节.
2.2 可否认加密的安全性定义
一个(完全) 可否认公钥加密方案(假设消息空间为M) 由一套公钥加密方案(KeyGen,Enc,Dec)、发送方伪造算法FakeS和接收方伪造算法FakeR组成, 具体定义如下:
· KeyGen(1λ)→(pk,sk): 密钥生成算法. 输入安全参数λ, 输出公钥pk 和私钥sk.
· Enc(pk,m;r)→c: 加密算法. 输入公钥pk、明文m ∈M和随机值r, 输出密文c.
· Dec(sk,c)→{m,⊥}: 解密算法. 输入私钥sk 和密文c, 输出明文m ∈M或⊥.
· FakeS(pk,m,r,mf)→rf: 发送方伪造算法. 输入公钥pk、原始消息m、原始随机值r和虚假消息mf, 输出虚假随机值rf, 满足Enc(pk,m;r)=Enc(pk,mf;rf).
· FakeR(sk,c,mf)→skf: 接收方伪造算法. 输入私钥sk, 密文c和虚假消息mf, 输出虚假私钥skf, 满足Dec(c,skf)=mf.
具体来说, 发送方可否认加密方案ΠS= (KeyGen,Enc,Dec,FakeS), 接收方可否认加密方案ΠR=(KeyGen,Enc,Dec,FakeR), 双方可否认加密方案ΠB=(KeyGen,Enc,Dec,FakeS,FakeR).
下面分别介绍完全模型下的可否认加密方案的正确性、安全性和可否认性的定义.
正确性: 若对于(pk,sk)←KeyGen(1λ), 加密任意消息m ∈M得到密文c ←Enc(pk,m;r), 通过m′←Dec(sk,c) 得到的解密消息m′∈M,m′/=m的概率是可忽略不计的, 则该方案是正确的.
安全性2这里的“安全性” 指的是仅考虑存在非胁迫性敌手时加密方案所要保障的安全性.一般定义为选择明文攻击下的不可区分性(IND-CPA), 可以用如下敌手和挑战者之间的游戏来描述:
- 初始化. 挑战者运行(pk,sk)←KeyGen(1λ), 然后把pk 交给敌手A.
- 挑战. 敌手A输出m0,m1∈M交给挑战者. 挑战者随机选择b ∈{0,1}, 对于随机的r, 产生c ←Enc(pk,mb;r), 交给敌手A.
- 猜测. 敌手A输出猜测b′∈{0,1}.IND-CPA 安全性: 对于任意概率多项式时间的敌手A, 其在上述游戏中的优势AdvA=Pr[b′=b]-1/2 是可忽略不计的, 则该方案是IND-CPA 安全的.
发送方可否认性可以用如下敌手和挑战者之间的游戏来描述:
- 初始化. 挑战者运行(pk,sk)←KeyGen(1λ), 然后把pk 交给敌手A.
- 挑战. 敌手A输出m,m′∈M交给挑战者. 挑战者对于随机的r, 产生c ←Enc(pk,m;r) 和c′←Enc(pk,m′;r), 并计算rf ←FakeS(pk,m,r,m′). 挑战者随机选择b ∈{0,1}, 当b= 0 时,输出(c′,r); 当b=1 时, 输出(c,rf). 挑战者把输出结果交给敌手A.
- 猜测. 敌手A输出猜测b′∈{0,1}.
发送方可否认性: 对于任意概率多项式时间的敌手A, 其在上述游戏中的优势AdvA=Pr[b′=b]-1/2是可忽略不计的, 则该方案是发送方可否认的3. 如果存在δ(λ), 使得AdvA ≤δ(λ)+negl(λ), 则称该方案是δ(λ)-发送方可否认加密方案.
接收方可否认性可以用如下敌手和挑战者之间的游戏来描述:
- 初始化. 挑战者运行(pk,sk)←KeyGen(1λ), 然后把pk 交给敌手A.
- 挑战. 敌手A输出m,m′∈M交给挑战者. 挑战者对于随机的r, 产生c ←Enc(pk,m;r) 和c′←Enc(pk,m′;r), 并计算skf ←FakeR(sk,c,m′). 挑战者随机选择b ∈{0,1}, 当b= 0 时, 输出(c′,sk); 当b=1 时, 输出(c,skf). 挑战者把输出结果交给敌手A.
- 猜测. 敌手A输出猜测b′∈{0,1}.
接收方可否认性: 对于任意概率多项式时间的敌手A, 其在上述游戏中的优势AdvA=Pr[b′=b]-1/2是可忽略不计的, 则该方案是接收方可否认的. 如果存在δ(λ), 使得AdvA ≤δ(λ)+negl(λ), 则称该方案是δ(λ)-接收方可否认加密方案.
双方可否认不仅要求同时满足发送方可否认和接收方可否认, 还要求敌手无法从两者所提供的随机值之间的关联中获得额外信息, 其可以用如下游戏来描述:
- 初始化. 挑战者运行(pk,sk)←KeyGen(1λ), 然后把pk 交给敌手A.
- 挑战. 敌手A输出m,m′∈M交给挑战者. 挑战者对于随机的r, 产生c ←Enc(pk,m;r) 和c′←Enc(pk,m′;r), 并计算rf ←FakeS(pk,m,r,m′) 和skf ←FakeR(sk,c,m′). 挑战者随机选择b ∈{0,1}, 当b= 0 时, 输出(c′,r,sk); 当b= 1 时, 输出(c,rf,skf). 挑战者把输出结果交给敌手A.
- 猜测. 敌手A输出猜测b′∈{0,1}.
双方可否认性: 对于任意概率多项式时间的敌手A, 其在上述发送方可否认性定义的游戏和接收方可否认性定义的游戏中的优势都是可忽略不计的, 则该方案是双方可否认的.
下面介绍多分布式模型下的可否认加密方案与完全模型下的可否认加密方案的区别.
多分布式模型下的可否认加密方案相比于完全可否认加密方案, 增加了可用于否认的密钥生成算法DKeyGen 和可用于否认的加密算法DEnc, 它们的算法定义分别与KeyGen 和Enc 相同. 多分布式模型下的可否认加密方案中的正确性和IND-CPA 安全性要求诚实的方案(KeyGen,Enc,Dec) 和可用于否认的方案(DKeyGen,DEnc,Dec) 都满足正确性和IND-CPA 安全性. 此外, 为了保证(非胁迫性) 敌手无法判断当事人所使用的是诚实的算法还是可用于否认的算法, 还要求由KeyGen(1λ) 和DKeyGen(1λ) 所产生的pk, 以及由Enc(pk,m;·) 和DEnc(pk,m;·) 所产生的c是计算不可区分的.
多分布式模型下的可否认性要求依靠可用于否认的算法和伪造算法产生的通信与依靠诚实的算法产生的通信不可区分, 发送方可否认、接收方可否认和双方可否认分别可以用下游戏来表示:
发送方可否认接收方可否认双方可否认(pk,sk)←KeyGen(1λ)(pk,sk0)←DKeyGen(1λ)m,m′ ∈M ←A(pk)(pk,sk0)←DKeyGen(1λ)m,m′ ∈M ←A(pk)c0 ←Enc(pk,m′;r0)m,m′ ∈M ←A(pk)c0 ←Enc(pk,m′;r0)c1 ←DEnc(pk,m;r0)c0 ←Enc(pk,m′;r)c1 ←DEnc(pk,m;r0)r1 ←FakeS(pk,m,r0,m′)c1 ←Enc(pk,m;r)r1 ←FakeS(pk,m,r0,m′)sk1 ←FakeR(sk0,c,m′)b ←r {0,1}sk1 ←FakeR(sk0,c,m′)b ←r {0,1}b′ ←A(cb,rb)b ←r {0,1}b′ ←A(cb,skb)b′ ←A(cb,rb,skb)
如果对于任意概率多项式时间的敌手A, 其在上述游戏中的优势AdvA= Pr[b′=b]-1/2 分别是可忽略不计的, 则该方案是多分布式模型下的发送方可否认/接收方可否认/双方可否认的.
事先计划的可否认加密(plan-ahead deniable encryption) 是一种常见的对多比特消息加密的可否认加密方式. 相比于自组织的可否认加密(ad-hoc deniable encryption), 事先计划的可否认加密方案通常更容易设计, 且对密钥长度没有限制. 在事先计划的可否认加密中, 需要在加密前决定被敌手胁迫时可以交出的一个或多个虚假消息, 并在加密算法中做特殊处理. 具体来说, 事先计划的可否认加密方案的加密算法可以表示为Enc(pk,m;r,mf1,mf2,···,mft), 其中mf1,mf2,···,mft表示事先计划的虚假消息; 而在伪造算法Fake 中,mf只能从mf1,mf2,···,mft里选其一. 由于事先计划的虚假消息可以看做局部随机性的一部分, 其正确性、安全性和可否认性定义这里不再赘述.
3 可否认公钥加密技术
3.1 发送方可否认公钥加密方案
3.1.1 Canetti 等人的方案
在CRYPTO ’97 上, Canetti 等人[1]在给出可否认加密概念的同时, 设计了若干发送方可否认加密方案. 首先, 他们引入了“半透明集” 的概念: 假设存在一个集合家族{St}t∈N, 其中St ⊂{0,1}t, 连同“陷门信息(trapdoor information)”dt, 满足:
(1)St是小的: 对于足够大的k(t),|St|≤2t-k.
(2) 即使不知道陷门信息dt, 生成一个随机元素x ∈St也是容易的.
(3) 给定x ∈{0,1}t和dt, 确定是否x ∈St是容易的.
(4) 如果不知道dt, 从St中均匀选择的值与从{0,1}t中均匀选择的值是不可区分的.
半透明集可以通过陷门置换或基于格的公钥密码系统[6]来构造, 利用半透明集可以直接构造单一方向(从1 到0) 上的可否认加密方案. 为了实现0 和1 之间的双向伪造, 他们构造了“奇偶方案(parity scheme)”. 具体方案如下:
设St ⊂{0,1}t是一个半透明集. 分别称从St中均匀抽取的元素和从{0,1}t中均匀抽取的元素为S元素和R元素. 根据半透明集的性质, 打开加密时可以将S元素声明为R元素, 但不能把R元素声明为S元素.
· 加密: 加密0 时, 选择随机的偶数i ∈0,1,···,n; 加密1 时, 选择随机的奇数i ∈0,1,···,n. 构造一个密文包含i个S元素和n-i个R元素.
· 解密: 输出接收到的密文中S元素个数的奇偶性.
· 诚实地打开加密: 揭示用于生成密文的随机选择.
· 非诚实地打开加密: 设i是发送方选择的随机数. 发送方声明她选择的是i-1 而不是i(相当于翻转i的奇偶性). 为此, 她声称密文中的第i个元素(原本是S元素) 是R元素. 如果密文中没有S元素(即i=0), 则伪造失败.
他们证明了该方案是一个4/n-发送方可否认加密方案. 进一步, 他们提出了一种多分布式可否认加密方案(文中称为“灵活的可否认加密”), 该方案是可以看做奇偶方案中n=2 时的一个变种, 具体如下:
设T0={R,R},T1=C1={S,R},C0={S,S}.
· 加密: 加密b而不保留非诚实打开的能力时, 发送V ∈Tb. 加密b且保留非诚实打开的能力时, 发送V ∈Cb.
· 解密: 输出V中的S元素的个数的奇偶性.
· 打开从Tb的加密: 揭示真实的随机选择.
· 打开从C0的加密为v: 如果v= 0 则声明V选自{R,R}(将两个S元素都声明为R元素). 如果v=1 则声明V选自{S,R}(将其中任一S元素声明为R元素).
· 打开从C1的加密为v: 如果v=0 则声明V选自{R,R}(将S元素声明为R元素). 如果v=1
则揭示用于生成V的真实随机选择.
该方案具有较弱的可否认模型(胁迫者会质疑发送方为什么会使用诚实的算法), 但可否认性能达到可忽略不计.
尽管文献[1] 的方案中非常朴素, 但其思想仍被后续很多工作采用[3,7-9]. 可以说, Canetti 等人的工作不仅开创了可否认加密的先河, 也是整个可否认加密研究中的引领者.
3.1.2 基于不可区分混淆的方案
不可区分混淆(indistinguishability obfuscation, iO)[10-12]是一个强大的密码学技术, 它要求实现相同功能的任意两个不同(大小相同) 程序的混淆在计算上是不可区分的. 在STOC 2014 上, Sahai 和Waters[13]利用不可区分混淆技术给出了完全模型下的的发送方可否认加密方案. 他们提出了“可刺穿程序(punctured programs)” 这一技术作为不可区分混淆的应用支持. 该技术通过手术般地移除程序的一个关键元素来改变程序, 使得敌手不能在安全性游戏中获胜, 但不影响程序的功能. 凭借不可区分混淆和可刺穿的伪随机函数可以将私钥加密方案转化为公钥加密方案, 且可以构造包括可否认加密在内的多种密码原语. 此外, 他们引入了“公开可否认加密(publicly deniable encryption)” 的概念. 在公开可否认加密方案中, “伪造(Fake)” 算法被替换为了“解释(Explain)” 算法; 在“解释” 算法中, 任何人能够根据公钥、明文和密文生成加密算法中的随机值, 即使是虚假明文, 也无需知道原本的真实明文和随机值. 他们利用可刺穿的伪随机函数和伪随机生成器来构造“加密” 算法和“解释” 算法, 然后将它们的不可区分混淆作为公钥, 以构造可否认加密方案. 他们的方案是首个可否认性能达到可忽略不计的完全模型下的发送方可否认加密方案.
文献[14] 指出, 为了实现可忽略不计的可否认性, 一些强有力的假设是必要的. 事实上, 目前所有可否认性能达到可忽略不计的完全模型下的可否认加密方案都是基于不可区分混淆的[4,13,15]. 但不可区分混淆是一个非常强大的假设. 虽然最近的一项工作[16]表明不可区分混淆可以基于有充分根据的假设来构建, 但这种构建依赖于四个不同假设的亚指数硬度假设. 因此, 利用不可区分混淆所设计的可否认加密方案不是基于标准多项式困难假设的.
3.1.3 其他发送方可否认公钥加密方案
目前的完全模型下的发送方可否认公钥(或拓展密码原语) 加密方案中, 仅基于不可区分混淆的方案能达到可忽略不计的可否认性, 但却难以实现. 因此也有部分工作研究了相较而言容易实现的多分布式模型下或多项式安全的发送方可否认加密方案.
多分布式可否认加密方案的缺陷是它暗含着“当事人有极大概率会使用可用于否认的算法”, 不易令敌手信服. 2008 年, Klonowski 等人[7]通过扩展文献[1] 中的发送方多分布式可否认加密方案, 结合了“俄罗斯套娃(Russian doll)” 的思想, 使得真实明文被“隐藏” 得更深. 他们方案的动机如下: 如果胁迫者知道通信时所使用的是可否认加密方案, 当其获得虚假的明文后, 可能会继续胁迫发送方交出真实的明文; 此时发送方可以承认发送了一个“略微” 被禁止的内容而不是原本的内容. 该方案需要被胁迫者将外层“娃娃”(向敌手展示的加密算法) 声明为文献[1] 中的多分布式可否认加密方案中的加密算法, 也就是说需要隐藏内层“娃娃”(真正用于传输消息的加密算法) 的存在性, 并不符合传统密码体制的设计准则; 而且需要接收方预先告知发送方外层“娃娃” 的私钥, 相当于抹消了公钥加密的优势.
部分学者研究利用二次剩余假设(quadratic residuosity assumption) 构造可否认加密方案[8,17-19].2009 年, Ibrahim[17]基于二次剩余假设给出了若干发送方可否认加密方案. 他们的方案相比于文献[1]中的方案不存在解密错误的情况, 且通信带宽(即密文长度) 有所降低. 他们首先分别给出了两种对单比特的加密方案和一种对多比特的加密方案, 这三种方案都假设敌手不能胁迫发送方交出用于产生模二次非剩余的本地随机值(程序不会在系统的任何地方存储这个本地随机值, 因为它不会在随后的加密过程中用到), 而仅交出明文消息和加密过程中用到的信息; 其中多比特的方案在加密的比特数较少时相比于多次使用单比特方案所需带宽较低, 但运算量呈指数级增长, 故不实用. 此外, 他们给出了一种允许发送方伪造本地随机值的方案, 该方案还可以转换为利用任意陷门置换构造的发送方可否认加密方案. 同年, Howlader等人[8]同样基于二次剩余假设提出了新的单比特和多比特的可否认加密方案. 他们的方法实际上是利用二次剩余假设来构造半透明集, 其中单比特的方案可以看做是文献[1] 中奇偶方案的一个实例. 此外, 他们提出了一个事先计划(plan-ahead) 类型的多比特加密方案, 一定能够给出一个合法的伪造消息; 该方案实质上是多分布式模型下的, 且并不安全. 2010 年, 孙和王[18]基于二次剩余问题, 通过借助可信第三方,运用一比特可否认加密算法加密, 其余比特按照传统的加密算法加密, 实现了多比特的发送方可否认加密.2014 年, Barakat[19]在Ibrahim[17]方案的基础上进行了修改, 他们的方案相比于文献[17] 和文献[8]中方案的加密和解密速度更快.
在EUROCRYPT 2011 上, Dürmuth 和Freeman[20]引入了“可采样的公钥加密(samplable public key encryption)” 的概念用于设计可否认加密方案. 在可采样的公钥加密中, 任何人都可以“不经意地(obviously)” 生成加密一个随机比特的密文, 并且存在可以恢复真实加密或不经意加密中所使用的随机值的算法. 可采样的公钥加密可以通过二次剩余假设或陷门置换实现, 进一步可以用于构造交互式的发送方可否认加密方案. Dürmuth 和Freeman[20]声称他们的方案是首个检测概率能达到可忽略不计的完全模型下的发送方可否认加密方案, 但Peikert 和Water 发现了对该方案的一种攻击, 能以不可忽略的概率检测消息是否被伪造了[21].
此外, 还有一些发送方可否认公钥加密方案采用了不同的方法或设计理念. 如2012 年, Gao 等人[22]研究了能抵抗选择密文攻击(CCA) 的敌手的发送方可否认加密方案, 通过利用扩展的哈希证明系统、交叉认证代码等技术, 使得访问解密预言机(oracle) 对敌手毫无帮助; 文献[23] 对该工作进行了修正. 2017年, Hata 等人[24]将秘密共享的思想与可否认加密思想相结合, 利用门限加密隐藏加密方案中的真实密钥, 确保对手无法恢复真实密钥和秘密消息. 2020 年, 吴等人[25]利用LWE 问题中的不可区分性质, 在均匀空间中构建了一个密度很小的子集“模糊集”; 利用低密度的“模糊集” 构造比特0 和1 的密文, 实现了发送方可否认, 同时降低了解密时的误码率. 同年, Cao 等人[26]首先利用子群成员问题假设构造了一种由发送方决定接收方是否能够对密文进行解密的公钥加密方案(称为解密可控的公钥加密方案), 然后利用该方案和位置映射思想构造出一个事先计划的发送方可否认加密方案. 这些方案要么是多分布式模型下的, 要么仅具有多项式可否认性.
3.2 接收方可否认公钥加密方案
在某些情况下, 敌手可能会胁迫接收方而不是发送方, 这时候就需要接收方可否认加密方案. 在可否认加密的最初研究中, Canetti 等人[1]给出了一种通过一轮额外通信将发送方可否认转换为接收方可否认的方案, 具体如下: 用S表示(原本的) 发送方,R表示(原本的) 接收方. 设b表示要从S传送到R的比特. 首先,R选择一个随机的比特r, 调用发送方可否认加密方案将r加密后发送给S; 然后,S通过解密得到r, 发送b ⊕r给R. 这样, 当被胁迫时,R可以令人信服地声称r的值为0 或1, 进一步可以声称比特b的值为0 或1, 从而实现接收方可否认.
由于接收方可否认加密方案可以通过发送方可否认加密方案直接转化得到, 所以很多工作在设计出发送方可否认加密方案后声明同时也实现了接收方可否认方案[17,20]. 然而由于这样的转换需要一轮额外通信, 很多情况下不实用. 如何独立于发送方可否认加密方案设计接收方可否认加密方案是一个巨大挑战.
2009 年, Ibrahim[27]提出了首个独立的接收方可否认加密方案. 在他们的方案中, 发送方和接收方之间不需要预先共享信息, 且不存在解密错误的情况. 他们方案主要基于介导的RSA (mediated-RSA,mRSA)[28]和不经意传输(oblivious transfer)[29]. 在介导的RSA 中, 私钥被一分为二, 其中一份交给了Bob (接收方), 另一份交给了安全中介(security mediator, SEM). 为了解密接收到的密文C, 双方(Bob和SEM) 分别对C执行部分解密, 然后将它们组合以恢复明文消息M. 因此, Bob 和SEM 都不能在未经双方同意的情况下对消息进行解密或签名, 这样即使敌手胁迫Bob 交出他自己的私钥也没有意义. 此外, Bob 和SEM 之间需要通过n选1 (1-out-of-n) 的不经意传输传递信息, 这种技术较难实现, 故不实用.
2010 年, Gasti 等人[30]利用多分布式模型的性质, 提出了一种接收方可否认理念: 在可用于否认的密钥生成算法中, 私钥和公钥是通常生成的; 而在诚实的算法中, 公钥是不经意生成的, 没有对应的私钥.当接收方被胁迫时, 只需要声明自己使用的是诚实的密钥生成算法, 没有私钥, 因此无法解密. 这种接收方可否认能达到可忽略不计的可否认性, 但由于其高度依赖多分布式模型的特性, 难以使敌手信服.
3.3 双方可否认公钥加密方案
在很多场景下, 发送方和接收方都有可能受到敌手胁迫, 因此一个双方可否认加密方案更有应用价值.文献[1]给出了一种将发送方可否认方案和接收方可否认方案转化为同时满足发送方可否认和接收方可否认的方案的方法: 假设S和R可以在通信中借助其他的参与方I1,I2,···,In. 为了传送比特b给R,S首先选择n个比特b1b2···bn使得⊕ibi=b; 然后,S利用一个发送方可否认加密方案传送bi给每位中间人Ii; 接着, 每位中间人Ii利用一个接收方可否认加密方案传送bi给R. 最后,R计算⊕ibi=b. 这样, 即使某位中间人Ii被攻击并交出bi的真实值, 只要至少一位中间人Ij未被攻击,S和R就可以令人信服地声称bj的值为0 或1, 从而伪造b. 然而, 在该方案中, 如果敌手同时胁迫双方, 由于双方无法进行通信, 一旦双方选择了不同的bj进行伪造, 敌手就能很轻易地判断出双方都在说谎. 因此该方案仅是一个发送方或接收方可否认方案.
在CRYPTO 2011 上, O’Neill 等人[3]设计了非交互式的双方可否认加密方案. 他们给出了两种多分布式模型下的构造. 第一种构造是基于可模拟的公钥加密(simulatable PKE)[31]; 在可模拟的公钥加密中, 存在不经意的密钥生成算法和不经意的加密算法, 以及它们的逆采样算法. 他们的构造的主要思想是并行运行可模拟的公钥加密方案的若干个实例. 在诚实的密钥生成算法和加密算法中不经意地生成公钥或密文, 而在可用于否认的算法中利用普通的密钥生成算法或加密算法, 借助随机值来生成公钥或密文.在伪造算法中, 需要将一些借助随机值生成的公钥和密文声明为不经意生成的. 对于解密算法, 采用的是“多数派” 思想, 即解密后0 和1 的数量多的即为明文. 基于可模拟的公钥加密的构造是通用的, 但开销较大. 第二种构造中, 他们扩展了文献[1] 中的“半透明集” 的概念, 引入了“双向半透明集(bitranslucent set)”; 在双向半透明集中, 允许接收方生成一个新的密钥, 使得从原本密钥所对应的子集合中选择的元素看起来像是从大的集合中随机选择的元素. 利用双向半透明集和文献[1] 中的思想可以构造双方可否认加密方案. 接着, 他们利用LWE 假设构造出了这样的双向半透明集.
通常意义下的双方可否认要求发送方和接收方要事先协商好相同的虚假消息, 但这在很多场景下是难以实现的. 在CRYPTO 2020 上, Canetti 等人[4]扩展了双方可否认加密的范围, 引入了“不留记录的可否认(off-the-record deniability)” 的概念: 被胁迫的发送方和接收方可以宣言不同的明文, 而敌手无法确定双方中谁说的是实话(或者都没有说实话). 不留记录的双方可否认比标准的双方可否认条件更强,也更符合现实情况. 他们将标准的双方可否认和不留记录的双方可否认统称为“完全双方可否认(fully deniability)”. 他们利用了Sahai 和Waters[13]的将不可区分混淆和可刺穿程序相结合的思想, 并且结合了层次体系(level system) 和基于比较的解密(comparison-based decryption) 等技术, 给出了完全双方可否认加密方案的构造, 解决了长达20 年的难题.
3.4 可否认公钥加密的理论性成果
除了设计可否认加密的具体方案外, 部分工作也对可否认加密进行了一些相关理论研究. 在可否认加密最初的研究中, Canetti 等人[1]将他们所提出的奇偶方案划归为“可分离的(separable)” 方案, 同时指出, 如果一个发送方可否认加密方案是可分离的, 那么它一定不具有可忽略不计的可否认性. 他们还证明了对于任意的m-可分离、-发送方可否认公钥加密方案, 有2m ≥k.
在CRYPTO 2011 上, O’Neill 等人[3]指出, 实现一个多分布式模型下的双方可否认加密意味着同时实现了一个发送方可否认加密, 但并不意味着实现了接收方可否认加密. 这是因为在双方可否认加密中,发送方和接收方都必须执行各自的可用于否认的算法; 接收方可否认可能同时依赖于自己执行可用于否认的密钥生成算法和发送方执行可用于否认的加密算法, 但多分布式的接收方可否认加密算法中不存在可用于否认的加密算法. 同时, 他们指出, 即使一个方案同时是发送方可否认和接收方可否认的, 也不意味该方案是双方可否认的, 这是因为发送方和接收方利用各自的伪造算法产生的随机值可能是相关的, 同时暴露两者很容易被检测到, 而只暴露其一是安全的.
在ASIACRYPT 2011 上, Bendlin 等人[2]研究了可否认公钥加密的下界和上界. 对于下界, 他们首先证明了一个ϵ-接收方可否认加密方案的n次并行自合成系统是nϵ-接收方可否认的, 在此基础上证明了一个密钥长度为σ的公钥密码系统最多是(σ+1)-1-接收方可否认的, 从而不存在具有可忽略不计的可否认性的完全模型下的接收方可否认和双方可否认公钥加密方案. 对于上界, 他们通过用多分布式模型下的可否认加密方案来构造多项式可否认性的完全模型下的可否认加密方案, 证明了如果多分布式可否认加密方案中的发送方随机值(对于发送方可否认而言) 或密钥长度(对于接收方可否认和双方可否认而言)为κ, 则存在完全模型下的1/n-发送方/接收方/双方可否认加密方案, 其发送方随机值或密钥长度分别为O(nκ)、O(n2κ)、O(n4κ). 同时, 该文给出了可否认公钥加密方案中的“不可能结果”, 如表1 所示.
表1 可否认公钥加密中的“不可能结果”Table 1 Impossible results for deniable public-key encryption
4 可否认对称加密技术
对称加密虽然要求通信双方必须预先交换密钥, 但其相比于公钥加密效率较高, 因此也有学者研究了可否认的对称加密(又称为“共享密钥的可否认加密”).
Canetti 等人[1]指出, “一次一密(one-time pad)” 就是一个双方可否认加密方案: 假设发送方和接收方共享一个足够长的随机字符串(即密钥), 每条消息m都是用密钥中接下来的还未使用的|m| 比特按位异或所加密的. 设k表示用来加密m的那部分随机密钥, 设c=m ⊕k表示对应的密文. 这样一来, 为了声称c是由消息m′/=m加密而来的, 双方只需要声称所使用的共享密钥是k′=c ⊕m′. 然而, 使用一次一密通常是不切实际的, 因为密钥必须与双方之间的所有通信一样长.
在文献[1] 中, Canetti 等人还给出了一种事先计划的共享密钥可否认加密思想: 给定l个要加密的替代消息, 使用l个不同的密钥, 并构造密文作为所有消息加密的串联, 其中第i个消息使用第i个密钥加密. 当被胁迫时, 当事人只需声称他使用的密钥与他想要打开的消息相对应. 这个简单方案的一个问题是密文的大小随着要加密的不同消息的数量呈线性增长. 此外, 他们在该文的预备版本[5]中给出了一种基于伪随机数生成器的方案, 这种方案的密文长度是固定的(与要加密的消息数量无关), 该方案具体如下:
假设发送方想要发送消息m1给接收方, 在通信之前, 他们共享一个胁迫者不知道的随机密钥k1. 为了实现可否认, 发送方选择一些假密钥k2,k3,···,kl和假消息m2,m3,···,ml. 当被胁迫时, 发送方可以借助任何一个假密钥将密文打开为任何一个假消息. 具体如下:
2008 年, Klonowski 等人[7]提出了两种共享密钥的可否认加密方案. 其中第一种方案可以看做是“一次一密” 的扩展, 利用分组密码和伪随机数生成器来生成一次一密中的密钥. 第二种共享密钥可否认加密方案是基于ElGamal 方案的: 他们将虚假明文作为通常的ElGamal 加密算法中的明文, 而将真实明文“隐藏” 在了加密时用到的随机数中. 当接收方被胁迫时, 只需要声明所使用的加密方案为通常的ElGamal 方案并展示他的ElGamal 私钥和虚假明文就可以实现否认.
2017 年, Goldwasser 等人[32]引入了“可否认编辑加密(encryption with deniable edits)” 概念. 在可否认编辑加密中, 可以使用一个较短的秘密密钥sk 加密一个较长的消息m, 得到密文c; 之后可以产生一个看起来合法的秘密密钥sk(c,e)(敌手无法区分其与真实密钥), 将密文c解密为一个编辑过的消息m′=Edit(m,e), 其中Edit 是该方案指定的某个“编辑函数”,e是使用的特定编辑的描述. 可否认的编辑加密可以看作是一种特殊的共享密钥的接收方可否认加密. 他们的方案中, 密钥长度只与编辑描述的大小|e| 有关, 而与消息长度|m| 无关, 在大部分情况下|e|<|m|, 因此他们的方案比通常的可否认加密方案中所使用的密钥长度较小. 同时, 当|e|=|m| 时, 该方案就相当于一个可以将密文解密为任何明文的接收方可否认加密方案.
2018 年, Moldovyan 等人[33]提出了共享密钥可否认加密的一种高级理解, 即由可否认加密算法产生的密文, 与某些概率加密产生的密文在计算上不可区分. 他们将发送方可否认加密方案中的加密过程构造为使用秘密密钥和虚假密钥同时加密秘密消息和虚假消息的过程, 该过程与某种只使用单一密钥对单一消息加密的概率加密算法相关联. 这种方法允许用固定大小的密钥构造发送方可否认加密算法, 这为加密任意长度的消息提供了可能. 然后, 他们以具体的发送方可否认加密方案为例进行了说明, 该方案将哈希函数和分组密码转换为概率可否认加密算法, 与一个一般的概率加密算法不可区分. Berezin 等人[34]利用类似的思想, 提出了一种可否认的流加密方案, 该方案与一个概率计算的流加密方案是不可区分的. 这种思想实际上可以划归为多分布式模型下的事先计划的可否认加密方案.
5 其他密码原语中的可否认技术
传统的公钥加密可能难以适用于某些特殊场景, 这时就要用到更高级的加密原语, 如函数加密(functional encryption)、全同态加密(fully homomorphic encryption) 等. 这些密码原语也可能遭受胁迫攻击, 如何在这些密码原语中实现可否认也是一个挑战性工作.
可否认的函数加密允许组织中某位拥有私钥SKk的成员被胁迫时, 允许为胁迫者提供虚假的私钥, 该密钥可以将密文Ctx打开为任何看起来像是F(k,x) 的值. 在PKC 2016 上, De Caro 等人[35]给出了可否认函数加密的多种构造. 首先, 他们提出了一种将通用电路下的任意不可区分安全(INDsecurtity) 的函数加密方案转化为具有相同函数性的完全模型下接收方可否认的函数加密方案的方法, 且不需要引入任何额外的假设. 该方法利用了De Caro 等人[36]介绍的“陷门电路(trapdoor circuit)” 技术, 提出了一个直接黑盒转换, 使电路下的不可区分安全能够达到更强的模拟安全(SIM-security). 陷门机制的思想是用一个陷门电路Trap[C] 取代原来的电路C, 然后接收方伪造算法可以用某种方式对输出进行编程. 其次, 他们给出了一种基于双线性对的布尔公式下的接收方可否认函数加密的构造. 然而, 上述完全模型下的方案中需要接收方得到主授权中心(master authority) 的协助以实现可否认性, 这在大多数情况下是不切实际的. 因此, 文献[35] 中又提出了一种多分布模型下的接收方可否认的函数加密方案. 该方案是非交互式的, 但需要不同输入混淆(different-inputs obfuscation) 这一较强的额外假设, 并依赖于一种称为“延迟陷门电路(delayed trapdoor circuit)” 的新技术. 2018 年, De Caro 等人[15]又借助不可区分混淆给出了首个发送方的可否认函数加密方案(在完全模型下), 其中利用了Sahai 和Waters[13]所提出的公开可否认技术. 该方案能完美嵌入他们所给出的接收方可否认函数加密方案, 因此也可以实现双向的可否认函数加密.
基于属性的加密是函数加密的一个子类. 在TCC 2016 上, Apon 等人[37]在标准假设下构造出了任意多项式分支程序下双向可否认的基于属性的加密方案, 而没有使用混淆作为黑盒原语, 但该方案是多分布模型下的. 他们引入了“基于属性的双向半透明集(attribute based bitranslucent set)” 概念, 然后利用扩展的容错学习(extended learning with errors, eLWE) 假设, 并提出了一种操纵高斯噪声的新方法, 从而构造基于属性的双向半透明集, 进一步构造双向可否认的基于属性的加密方案. 此外, 在2015 年,Apon 等人的工作[38]给出了多分布模型下的双向可否认的内积加密的构造, 其中所用到的方法都涵盖在了文献[37] 中.
可否认的全同态加密允许在不解密的情况下进行运算, 同时能抵御胁迫攻击, 更适合电子投票等应用场景. 在2020 年底, Agrawal 等人[9]引入了可否认的全同态加密的概念, 并给出了基于符合循环安全的LWE 多项式假设的发送方(公钥) 可否认全同态加密的构造方法. 他们分别在多分布式模型和完全模型下给出了单比特和大消息空间下的加密方可否认函数加密方案. 他们声明他们的构造具有可否认紧凑性(deniability compactness), 即他们方案中公钥大小和密文大小都可以用一个固定的多项式来限定, 这个多项式与可否认性(或伪造概率) 无关. 具体来说, 他们首先引入了一种特殊的全同态加密结构, 该结构可以通过修改Brakerski 等人[39]所给出的基于LWE 假设的全同态加密方案(BGV 方案) 来实现, 然后利用类似于Canetti 等人[1]所介绍的奇偶方案的思想来构造可否认加密方案. 由于全同态加密固有的可参与运算的特性, 为了增强方案的可否认性, 仅需要增加运算时间, 而无需增加公钥和密文长度. 此外, 它们的方案适合在线-离线加密模型, 其中大量运算独立于消息, 因此可以在离线预处理阶段执行. 这使得该方案的在线阶段非常高效, 其运行时间与伪造概率无关, 而离线加密运行时间与伪造概率成反比.
6 可否认加密的应用
可否认加密中所考虑到的胁迫性敌手在现实中是存在的, 如2010 年, FBI 向Google 发出了搜查令,要求Google 将用户的数据文件等信息提供给FBI. 具体来说, 可否认加密可以用于安全多方计算、电子投票、电子拍卖、云存储服务、可搜索加密等胁迫者可能存在的场景中, 以保护数据的隐私性.
安全多方计算(secure multi-party computation) 中要同时考虑参与方被破坏和被胁迫的场景. 1996年,Canetti 等人[40]将自适应安全多方计算与抵御胁迫攻击的思想相结合,提出了利用可否认加密实现不可胁迫的多方计算的方案: 第一步, 各参与方执行密钥生成算法, 利用标准的安全多方计算协议获得公钥和门限加密的共享私钥; 第二步, 利用可否认加密对自身的输入进行加密并进行广播; 第三步, 利用标准的安全多方计算协议计算函数值. 为了抵御胁迫攻击, 只需要伪造第二步中的输入, 并利用伪造算法产生新的加密时用到的随机值. 该协议中, 最多允许敌手破坏或胁迫至多为总数一半的参与者. 此外, 如果上述协议中可否认加密方案的可否认性能达到可忽略不计, 协议本身也具有可忽略不计的可否认性. 文献[41,42]对该协议进行了进一步扩展.
电子投票和电子拍卖可以看做安全多方计算的实例. 对于用于选举的电子投票来说, 能够抵御胁迫攻击是有必要的. 1997 年, Cramer 等人[43]指出, 可以利用文献[40] 中的不可胁迫的多方计算协议来实现能抵抗胁迫攻击的电子投票. 在这个模型中, 所有的选民都具有抵抗胁迫攻击的能力, 且最多有一半的参与者可以完全被胁迫. 电子投票中另一个概念是“无收据(receipt-free)”, 它能够阻止选民证明它的票, 从而阻止贿选和胁迫. 具体如图2 所示. 然而, 2000 年, Hirt 和Sako[44]指出, 不可胁迫的概念比无收据的概念弱, 它允许选民对自己的选票撒谎, 但它无法帮助反对那些想让自己的加密不可否认的选民, 因此无法阻止贿选. 具体来说, 选民只需要展示自己加密时所用的随机值无法通过伪造算法产生, 就可以证明他们没有用过伪造算法, 而多分布式可否认方案或多项式可否认性的完全模型下的可否认加密方案中都存在这样的随机值. 2011 年, Howlader 等人[45]提出了利用可否认加密代替电子投票和电子拍卖协议中不可访问的信道的技术. 由于电子选举和拍卖中的有效明文数量较少, 所以适合采用事先计划的可否认加密.他们采用了文献[8] 中事先计划的可否认加密, 并对其进行了改进: 通过将有效明文映射到两两之间比特差异不大的明文空间, 使得伪造后的随机值符合均匀分布. 2013 年, Howlader 等人[46]利用事先计划的可否认加密、抗胁迫的MIX, 以及分布式密钥生成中心三个组件构建了密封式投标拍卖中的无收据机制.
图2 可否认加密在电子投票中的应用[43]Figure 2 Deniable encryption applied in E-voting
在云存储中使用加密可以保护通信和存储的数据不受未经授权的访问, 包括云服务提供商在内. 而很多情况下需要考虑敌手可以胁迫用户打开他们的加密内容, 因此需要考虑可否认的云存储. 云存储可以看作是通信的一个变种: 可以将云存储空间看作是公开信道, 将数据拥有者和用户(可能相同或不同) 分别看作是通信的发送方和接收方, 将恶意的云服务提供商看作是敌手. 这样, 实现了双向可否认加密也就意味着实现了可否认的云存储. 2010 年, Gasti 等人[30]研究了可否认的云存储, 他们基于他们所提出的双向可否认加密方案设计了一个可否认的共享文件系统(DenFS). 他们的方案中密文分为不可否认和可否认两个部分. DenFS 可以以两种操作模式之一挂载: 可否认和不可否认. 当以不可否认模式挂载文件系统时, 使用随机数据填充密文的可否认部分. 在可否认模式下, 不可否认部分由不可否认池中选择的文件的加密填充. 2018 年, Chi 和Lei[47]基于他们所提出的可否认的密文策略的基于属性的加密方案构建了一个新的可否认的云存储服务方案, 基于属性的加密的特性通过细粒度的访问控制机制确保了云数据的安全共享.
可搜索加密(searchable encryption, SE) 是云计算领域研究的热点之一. 在通常的可搜索加密中, 如果对敌手胁迫用户公开搜索令牌, 敌手就会看到搜索的是哪个关键字, 从而导致用户数据的隐私泄露, 因此需要在可搜索加密中引入可否认性. 2017 年, Li 等人[48]考虑可搜索对称加密中存在胁迫者的场景, 基于文献[1] 中的共享密钥的发送方事先计划的可否认加密, 给出了可否认的可搜索对称加密(searchable symmetric encryption, SSE) 的构造. 他们分别考虑了内部胁迫者(服务器) 和外部胁迫者(数据拥有者、用户和服务器之外的人) 存在的场景, 给出了三种不同构造. 他们的方案在搜索时间上与其他SSE 方案相同,但空间复杂度较高. 2021 年,Chi 和Wang[49]构建了可否认的属性搜索加密方案. 相比于Li 等人[48]的方案, 他们的方案中数据所有者不需要参与否认过程, 因此密文大小只与搜索条件有关. 同年, Chi 和Change[50]将Bloom 过滤器和CP-ABE 技术相结合, 构建了一个索引可否认加密方案, 该方案中密文大小不会随着事件计划的虚假明文的个数而增长.
7 可否认加密的相关工作
可否认加密的主要目标是产生虚假的随机值, 打开密文到另一个消息, 以抵御胁迫攻击. 除了可否认加密外, 也有一些工作致力于在通信中抵御胁迫攻击, 或是将密文打开为与原本明文不同的消息, 如非承诺加密[51]、抗选择打开攻击安全性[52]、“加糠与簸扬”[53]、不留记录的通信[54]等.
为了实现安全多方协议中的适应性安全, Canetti 等人[51]在1996 年引入了非承诺加密(noncommitting encryption). 在安全多方计算模型中, 根据选择腐败对象的自适应性, 可以将敌手分为静态敌手(在协议执行之前就选定了腐败的参与方, 但是未腐败方并不知道腐败方的身份)和适应性敌手(可以在协议执行的任何时候腐败任何可以腐败的参与者), 后者能更精确的反映现实世界中的情况. 如果在每对参与方之间提供私有信道, 则多方计算对于自适应的对手是安全的. 非承诺加密就是能够模拟这种私有信道的密码原语. 在非承诺加密中, 可以生成一个与真实密文难以区分的特殊的密文, 之后可以通过生成密钥和加密时用到的随机值将该密文“打开” 成任何明文. 总的来说, 非承诺加密和(双方) 可否认加密概念类似, 但相较而言模型较弱: 非承诺加密和可否认加密都存在能以两种方式打开的密文, 但在非承诺加密中加密方却无法产生这样的密文, 这种密文只能在协议的模拟执行中由模拟者产生, 且这个模拟器允许使用与协议中正常加密时不同分布的公钥; 此外, 非承诺加密中的解密是不需要有意义的.
抗选择打开攻击安全性由 Bellare 等人[52]在 EUROCRYPT 2009 上首次提出. 选择打开攻击(selective-opening attack, SOA) 考虑如下场景: 假设一个公钥为pk 的接收方收到一个密文向量c= (c[1],c[2],···,c[n]), 其中密文c[i](1≤i ≤n) 是发送方i利用pk 和随机值r[i] 加密消息m[i] 所产生的. 注意消息m[1],m[2],···,m[n] 可能是相关的, 但加密时用到的随机值r[1],r[2],···,r[n] 都是随机且相互独立的. 现在敌手不仅仅能获得密文c, 也能腐败至多t=n/2 个发送方I ⊂{1,2,···,n}, 使他们交出明文消息和加密时用到的随机值, 也就是获得所有的m[i] 和c[i], 对于i ∈I. 抗选择打开攻击安全性的要求是, 那些未被打开的消息依然是保密的, 即对于{i1,i2,···,in-t}={1,2,···,n}I, 消息m[i1],m[i2],···,m[in-t] 被保护. 由于在可否认加密中, 密文可以以不止一种方式打开, 被腐败的发送方所交出的明文消息和加密时的随机值不一定是真实的, 所以可否认加密可以作为具有抗选择打开攻击安全性的加密算法的一种解决方案.
加糠与簸扬(chaffing and winnowing) 由Rivest[53]在1998 年提出, 它的特点是不通过加密来保障通信的机密性, 具体方案如下: 假设发送方和接收方预先共享一个用于生成消息认证码(message authentication code, MAC) 的秘密认证密钥(secret authentication key). 首先, 发送方将消息分成若干个数据包(packet), 为每个包添加序号, 然后根据序号、消息和认证密钥计算MAC, 每个包由(序号, 消息, MAC) 组成, 这些包称为“好包”; 然后, 发送方(或任意第三方) 添加一些虚假的包, 这些包中包含序号(可以和好包相同)、无关的消息和随机的MAC, 称为“糠包(chaffpacket)”, 将糠包与好包任意混合后形成传输数据包序列, 这一步称为“加糠(chaffing)”; 接收方收到数据包序列后, 通过验证包中的MAC 是否匹配来判断一个包是好包还是糠包, 然后舍弃所有糠包, 根据序号对包排序后恢复出真实消息, 这一步称为“簸扬(winnowing)”. 加糠与簸扬可以有效地抵御胁迫攻击: 一方面, 整个方案中不涉及加密, 没有加密密钥或解密密钥, 只有秘密认证密钥, 而认证本身并不提供机密性, 它的机密性是通过认证和加糠共同来实现的, 然而加糠这一步不需要任何密钥, 甚至可以完全由一个无关第三方来完成; 也就是说, 通信双方可能本来不想在通信中获得机密性, 仅仅是想在通信中加入认证(加糠不是他们的意愿), 要求其交出秘密认证密钥是不合理的. 另一方面, 如果发送方有意地生成一些包, 这些包中包含事先计划的虚假消息和利用一个虚假的认证密钥产生的MAC, 将这些包和包含真实消息的包以及若干糠包混合; 当被敌手胁迫时,发送方可以交出虚假认证密钥和包含虚假消息的包, 并声称其他包都是糠包; 这样这个方案就类似于一个事先计划的可否认加密方案, 但它通常情况下不满足语义安全性, 也算不上是一个加密方案.
不留记录的通信(off-the-record messaging) 由Borisov 等人[54]在2003 年提出, 它致力于在网络环境中提供与面对面交谈相同的安全. 不留记录的通信提供了“看似合理的可否认性(plausible deniability)”: 任何人都可以在通信结束后伪造消息, 让它们看起来像是来自发送方; 而在通信时, 接收方仍可以认证消息确实来源于真实的发送方且未经篡改. 具体来说, 为实现看似合理的可否认主要采用了以下手段:第一, 在该协议中利用“可延展加密(malleable encryption)”(如流密码) 对消息加密, 使得任何人在猜出一部分明文的前提下, 很容易地对密文进行有意义的修改; 第二, 用消息认证码来代替数字签名, 使得在获得认证的同时确保发送方身份不被暴露; 第三, 当MAC 的认证密钥作废后, 主动揭示该密钥, 使任何人都可以伪造过去消息的MAC. 利用这三点可以保证通信中的任何一条消息都可以由接收方或任意第三方来伪造, 从而无法作为证据. 此外, 在该协议中为了实现完全前向保密(perfect forward secrecy), 需要不断更新加密密钥并丢弃旧密钥, 这样当被胁迫时就简单地声称用于产生过去密文的密钥已被遗忘.
8 总结与展望
尽管对可否认加密的研究从1997 年就开始了, 但目前还没有真正投入实际使用的可否认加密方案,因此可以说对于可否认加密的研究仍在起步阶段. 对可否认加密技术研究的展望如下:
· 完全模型下的可否认加密方案的构造. 目前大部分的可否认加密方案是多分布式模型下的. 然而,多分布式模型存在以下缺点: 首先, 当事人必须事先决定他们之后是否要否认; 其次, 当事人声称他们使用了诚实的方案时, 为什么胁迫者应该相信他们[2]. 因此, 研究完全模型下的可否认加密方案意义更大. 然而, 目前大多数完全模型下的可否认加密方案, 主要思想都是利用半透明集和奇偶方案来构造[1,2,8,9]. 但这样构造出的加密方案密文扩展严重, 且只能达到多项式可否认性, 故不实用. 而目前可否认性能达到可忽略不计的完全模型下的可否认加密方案都是基于不可区分混淆的[4,13,35], 这是一个非常强的假设. 尽管文献[14] 指出, 为设计可否认性能达到可忽略不计的完全模型下的可否认加密方案, 一些强有力的假设是有必要的, 但是否存在不可区分混淆以外的假设也可以用于构造符合上述条件的可否认加密方案, 目前仍然是一个开放性问题.
· 探索可否认加密设计新理念. 尽管Canetti 等人最初给出的可否认加密定义是伪造随机值, 使得诚实通信和利用伪造算法产生的通信不可区分. 但也有部分文章“跳出” 这个设计理念, 特别是在多分布式模型下, 如文献[7,30] 将可否认性定义为隐藏真实消息的能力; 文献[17,47] 巧妙利用多分布式模型的性质, 打开时将密文中的原本通过可用于否认的算法加密真实消息时所产生的参数声明为通过诚实算法随机产生的; 文献[26] 利用了解密可控的公钥加密方案, 打开时将真实消息对应的密文声明为不可解密. 利用这些理念所设计的可否认加密方案, 通常情况下更容易实现, 或是在密钥或密文长度上有优势. 这些理念拓宽了可否认加密的设计, 探索新的可否认加密的理念也是一个重要且有趣的研究方向.
· 可否认的其他加密原语研究. 将可否认性与其他加密原语结合是一个有趣的研究问题, 目前已有可否认的函数加密[15,35]、可否认的基于属性的加密[37,47]、可否认的内积加密[38]和可否认的全同态加密[9]等方面的研究. 如何设计可否认的其他高级加密原语, 如可否认的群加密、可否认的广播加密等, 也是一个具有挑战性的工作.
· 可否认加密的应用研究. 目前可否认加密的应用研究有安全多方计算[40-42]、电子投票[43-45]、电子签名[45,46]、云存储[30,47]、可搜索加密[48]等. 将可否认加密应用于其他领域也是一个非常有意义的研究方向, 如可否认的外包计算等. 此外, 如前文所述, 目前还无法实现可否认性能达到可忽略不计的完全模型下的可否认加密方案. 因此, 考虑现有的多项式可否认性的方案, 或是多分布式模型下的可否认加密方案能否应用到实际中(如通信次数较少的情况下) 也十分具有现实意义.