Witness Encryption(证据加密)在 [STOC:GGSW13] 首次提出。传统加密里解密的条件是知道私钥,保密的条件是完全不知道私钥;证据加密里解密的条件是知道证据,保密的条件是没有证据。下文考察 WE 的定义。
令 为字符串上的二元关系,为了方便起见,关系中的第一个串叫做“命题”,第二个串叫做“证据”。适用于 的 WE 是指两个概率多项式时间算法:
这 WE(完美)正确,是指对任意 和 有
这 WE(计算意义下非一致)安全,是指对任意命题和电路组成的序列 ,若 且 ,则
其中 是指使坏者 (adversary), 叫做挑战命题 (challenge statement)。电路的规模可以以电线根数计。
通常考虑 ,此时它诱导的语言 ,下文只考虑这种关系。
习题 1. 证明若 ,则对任意 ,存在着适用于 的正确、安全的 WE。
注意习题 1 蕴含着一个重要推论:在现有的技巧下,WE 不蕴含困难性,这一点和不可区分混淆 (indistinguishability obfuscation) 很像。扩展阅读 [FOCS:WicZir17]:在 LWE 假设下,适用于 3SAT 的 WE 蕴含 niO。
习题 2. 回顾哈希证明系统 [EC:CraSho02] 的定义,你能找到一个具有统计意义下安全性(请自行定义)的 WE 吗?它适用于什么关系?
习题 2 的反方向很有趣,[STOC:GGSW13] 证明了:若 WE 统计意义下安全,则 。
习题 3. 证明上面提到的这个命题。提示:。
[STOC:GGSW13] 里也给出了第一个适用于任意 的 WE 的构造:先构造了一个 WE,用于某带有 Levin 归约的 NP-完全关系(具体来说是精确覆盖问题),然后利用 Levin 归约扩展到任意 NP 关系。
事后诸葛亮来说,这个构造其实并不是很有趣,因为它就是假设这个构造是安全的,并且也没有在一般多重线性群模型 (generic multilinear group model) 里证明假设成立。(注:一般多重线性群和一般线性群没关系。)
更有趣一些的构造可见于 [C:GenLewWat14],也可以直接用 niO 或者 iO 构造。前者的证明方法和主流标准模型 iO 的证明方法是差不多的,需要通过一系列过渡分布枚举所有的证据。
一个最近的工作是 [C:BIOW20],不过我还没细看。
非常朴素的用法是按照想当然的直觉使用,但通常事与愿违。
一个错误用法如下:
这个直觉的错误之处在于 WE 安全性不谈论“有证据,但不知道证据”的情况,只有“没有证据”的情况才具有安全性。
习题 4. 构造适用于上述关系且正确、安全的 WE,使上面的用法完全不安全。提示:不要看 ,看 。
扩展阅读:“有证据,但不知道证据”情况下安全的那种叫做可提取证据加密 (extractable witness encryption),见 [C:GKPVZ13] 和 [C:GGHW14]。
[STOC:GGSW13] 里一个例子是如何通过 WE + 单向函数 (one-way function) 构造公钥加密 (public-key encryption):令 为一个输出长度是输入长度两倍的伪随机发生器 (pseudorandom generator),令 ,令 为适用于 的 WE,定义
可以验证这是正确的算法。IND-CPA 安全性分两步走:
注意第一步把公钥切换为“损坏版本”很重要,因为公钥就是 WE 的命题,这样做可以让 WE 的命题以几乎总是没有证据,从而利用 WE 之安全性。
WE 也可以用来构造 IBE、ABE [STOC:GGSW13]。目前还不知道如何用 WE 构造 FE,这实际上是个很有趣的问题:如果 WE 蕴含着(有趣的)FE,则 WE 蕴含着 iO。