Các lược đồ mã hóa không chỉ có thể có tính ngẫu nhiên, mà trong một số trường hợp (ví dụ: mã hóa khóa công khai ), chúng phải được chọn ngẫu nhiên. Đây không phải là vấn đề vì chúng tôi yêu cầu một sơ đồ mã hóa là chính xác , nghĩa là, đối với mọi thông báo và bất kỳ khóa nào giữ nó
qua tính ngẫu nhiên .mk
Pr[ DEC( ENC(k,m,R) )=m]=1
R
Lý do các lược đồ khóa công khai phải xuất phát ngẫu nhiên từ cách chúng tôi xác định bảo mật: chúng tôi không muốn bản mã bị rò rỉ bất kỳ thông tin nào về tin nhắn được mã hóa. Ví dụ cổ điển là như sau. Giả sử rằng lần lượt là khóa chung và khóa bí mật và đối thủ chặn tin nhắn được mã hóa gửi đến một số đơn vị trong trường. Kẻ thù biết rằng tin nhắn là "ATTACK" hoặc "RETREAT", nhưng không biết tin nhắn nào. Một điều mà đối thủ có thể làm là mã hóa cả hai tin nhắn bằng cách sử dụng công khai . hãy để và . Nếu(pk,sk)cpkcA=ENCpk("ATTACK ")cR=ENCpk("RETREAT")ENCmang tính quyết định, đối thủ có thể tìm ra thông điệp một cách chắc chắn bằng cách so sánh với và .ccAcR
Cách khái niệm này được định nghĩa chính thức được gọi là bảo mật ngữ nghĩa :
Lược đồ mã hóa được bảo mật về mặt ngữ nghĩa nếu bất kỳ đối thủ nào không thể thắng trò chơi sau với xác suất lớn hơn đáng kể là :A1/2
- Một kẻ thách thức tạo các khóa và gửi khóa công khai cho đối thủ.C(pk,sk)pk
- A chọn hai tin nhắn có độ dài bằng nhau và và gửi cả hai cho .m0m1C
- C chọn một bit và gửi lại .b∈{0,1}ENC(mb)
- A cần cho biết tin nhắn nào đã được mã hóa: hoặc , nghĩa là anh ta cần xuất bit .m0m1b
(Tôi đang bỏ qua tham số bảo mật , điều rất quan trọng để xác định "không đáng kể" hoặc "đáng chú ý"; Chúng tôi cần giả định rằng việc tạo các khóa phụ thuộc vào và lợi thế có ở trên không đáng kể trong , tức là nhỏ hơn )
κκA1/2κκ−ω(1)