We now modify the definition of CPA security to fit the setting of public-key encryption. As before, the adversary calls a CHALLENGE subroutine with two plaintexts — the difference between the two libraries is which plaintext is actually encrypted. Of course, the encryption operation now takes the public key.
Then the biggest change is that we would like to make the public key public. In other words, the calling program should have a way to learn the public key (otherwise the library cannot model a situation where the public key is known to the adversary). To do this, we simply add another subroutine that returns the public key.
Let Σ be a public-key encryption scheme. Then Σ is secure against chosen-plaintext attacks (CPA secure) if ℒΣpk-cpa-L ≋ ℒΣpk-cpa-R, where:
We can modify/adapt the definition of pseudorandom ciphertexts to public-key encryption in a similar way:
Let Σ be a public-key encryption scheme. Then Σ has pseudorandom ciphertexts in the presence of chosen-plaintext attacks (CPA$ security) if ℒΣpk-cpa$-real ≋ ℒΣpk-cpa$-rand, where:
As in the symmetric-key setting, CPA$ security (for public-key encryption) implies CPA security:
Let Σ be a public-key encryption scheme. If Σ has CPA$ security, then Σ has CPA security
The proof is extremely similar to the proof of the analogous statement for symmetric-key encryption (Theorem 8.3), and is left as an exercise.