ElGamal的CCA攻击

Alice:

Bob:

Alice:

假设有一个解密机,Bob将本来要发给Alice的密文(c1,c2)输入到解密机,即可以获得明文m

如果有一组密文C*(c1,c2)无法输入到解密机,如何得到它的明文m*

正常来讲,传入解密机的数据时[gr,(gx)rm][g^r,(g^x)^r*m],解密机和Alice一样,拥有私钥x,它可以得到[(gr)x,(gx)rm][(g^r)^x,(g^x)^r*m],第二项除以第一项即可得到m

但是我们不能传入密文C*,于是构造传入数据[grgr,(gx)rm(gx)r]=[gr+r,(gx)r+rm][g^rg^{r'},(g^x)^r *m*(g^x)^{r'}]=[g^{r+r'},(g^x)^{r+r'}*m],解密机凭借私钥得到[(gr+r)x,(gx)r+rm][(g^{r+r'})^x,(g^x)^{r+r'}*m],第二项除以第一项即可得到m