Gee Law的回答
这种类型的对象通称可抵赖 (deniable) 加密,风格多种多样,其中一些是适应性安全多方安全计算的重要工具之一。风格的维度包括公钥/私钥、公开/非公开抵赖、发送者/接收者/二者之一/二者协调/完全抵赖、有准备/无准备、多重算法/单一算法、交互/非交互,这个回答里不可能完全介绍每一种,我就挑其中一个简单说说。
公钥、公开抵赖、非交互、发送者、单一算法可抵赖加密. 是指这样一组概率多项式时间算法:
(指数误差)正确性是说对任意 和
都有
IND-CPA 安全性取通常定义。解释不可区分性是指 ,其中
是这样的:
下面是使用方法:已经传输了密文之后,如果被要求公开加密时曾经使用的随机数,可以找另一条相同长度的消息,用 算法编造随机数。当然,由于使坏者已经知道我们在使用这个算法,要求交出随机数是无意义行为——它自己也可以编造出随机数的。
我挑这个版本主要是它的定义简单且不平凡,研究这个对象的重要文章之一就是 How to Use Indistinguishability Obfuscation: Deniable Encryption, and More。
现在说说各个维度的含义:
考虑接收者、无准备、单一算法、非交互可抵赖加密,可以证明此时算法必然是私钥、非公开抵赖,而且密钥长度和明文长度一样长,也就是说只有一次一密。
考虑接收者、有准备、单一算法、非交互可抵赖加密,此时算法依然需要私钥和明文一样长,但是可以用任何(定长消息、单密文)模拟安全的加密算法,这类算法很多,例如用 ALS IPFE 就可以(这里打个广告 Succinct and Adaptively Secure ABE for ABP from k-Lin)。
在多方安全计算里,参与者互相通信的时候通常会用加密算法,在适应性安全里,使坏者可以动态(在查看了一些加密过的消息之后)查看参与方的内部状态(包括它使用的所有的随机数),这样就会揭示之前发的密文里面包含了什么消息。如果从模拟算法的角度考虑,模拟算法需要先给出密文,然后使坏者会选择消息,然后模拟算法需要给出随机数,让这些密文看起来是使坏者所选择的消息加密而来的,这个需求正好就是可抵赖加密的功能(模拟算法需要编造随机数)。当然,在这里可以用交互式加密。