公钥加密方案在选择明文攻击(Chosen Plaintext Attack,CPA)下的IDA(Indistinguishability)游戏称为IND-CPA游戏如下:
(1) 初始化。挑战者产生系统Π,敌手A获得系统的公开钥。
(2) 敌手产生明文消息,得到系统加密后的密文(可多项式有界次)。
(3) 挑战。敌手输出出两个长度相同的消息M0和M1。挑战者随机选择β←R{0,1},将Mβ加密,并将密文C∗(称为目标密文)给敌手。
(4) 猜测。敌手输出β′,如果β=β′,则敌手攻击成功。
敌手的优势可定义为参数K的函数:
AdvΠ,ACPA(K)=∣Pr[β′=β]−21∣
其中,K是安全参数,用来确定加密方案密钥的长度。因为任一个不作为(仅做监听)的敌手A,都能通过对β做随即猜测,而以21的概率赢得IND-CPA游戏。而∣Pr[β′=β]−21∣是敌手通过努力得到的,故称为敌手的优势。
因为
∣Pr[β′=β]−21∣=∣Pr[β=0]Pr[β′=β∣β=0]+Pr[β=1]Pr[β′=β∣β=1]−21∣=∣Pr[β=0]Pr[β′=0∣β=0]+Pr[β=1]Pr[β′=1∣β=1]−21∣=∣21[1−Pr[β′=1∣β=0]]+21Pr[β′=1∣β=1]−21∣=21∣Pr[β′=1∣β=1]−Pr[β′=1∣β=0]∣
敌手的优势也可定义为
AdvΠ,ACPA(K)=∣Pr[β′=1∣β=1]−Pr[β′=1∣β=0]∣
只不过这种定义的优势是之前的2倍。
上述的IND-CPA游戏可形式化地描述如下,其中公钥加密方案是三元组Π=(KeyGen,ε,D),游戏的主体是挑战者。
ExpΠ,ACPA(K):(pk,sk)←KeyGen(K);(M0,M1)←A(pk) , when∣M0∣=∣M1∣;β←R{0,1},C∗=εpk(Mβ);β′←A(pk,C∗);if β′=β , return 1 , else return 0;
敌手的优势定义为
AdvΠ,ACPA(K)=∣Pr[ExpΠ,ACPA(K)=1]−21∣
如果在任何多项式时间的敌手A,存在一个可忽略的函数ϵ(K),使得AdvΠ,ACPA(K)≤ϵ(K),那么就称这个加密算法Π是语义安全的,或者称为在选择明文攻击下具有不可区分性,简称为IND-CPA安全。
如果敌手通过Mβ的密文能得到Mβ的一个比特,就有可能区分Mβ是M0还是M1,因此,IND游戏刻画了语义安全的概念。
定义中需要注意以下几点:
(1)定义中敌手是多项式时间的,否则因为它有系统的公开钥,可得到M0和M1的任意多个密文,再和目标密文逐一进行比较,即可赢得游戏。
(2)M0,M1应该是等长的,否则由密文,有可能区分Mβ是M0还是M1。
(3)如果加密方案是确定的,每个明文对应的密文只有一个,敌手只需重新对M0和M1加密后与目标密文进行比较,即赢得游戏。因此,语义安全性不适用于确定性的加密方案。