Bối cảnh :
Alice có một số nội dung (C) và xuất bản hàm băm của nó (Cbăm) một cách công khai. Cô ấy muốn gửi C cho Bob theo cách mà nó chỉ hiển thị với Bob. Điều này có thể được thực hiện bằng cách mã hóa (Cenc) khi sử dụng Khóa công khai của anh ấy (PubKeyBob). Và Bob có thể giải mã nó bằng khóa riêng của anh ấy và tính toán hàm băm để xem nó khớp với Cbăm.
Chúng tôi có Eve, người đóng vai trò của một Người ký quỹ. Bob trả tiền cho C do Eve nắm giữ. Bây giờ Alice cần chứng minh cho Eve thấy rằng Cenc có thể được giải mã bởi Bob và khi được giải mã, sẽ mang lại C. Eve không nên biết C tại bất kỳ thời điểm nào.
Ý tưởng hiện tại:
Chúng tôi giả sử Alice gửi đúng Cenc , được mã hóa bằng PubKeyBob (là cặp khóa sử dụng một lần, chỉ được sử dụng cho giao dịch này). Bob rất vui khi thấy hàm băm của nội dung được giải mã giống với hàm băm của Cbăm và như vậy là cùng một nội dung. Nếu Alice đã gửi sai nội dung hoặc chưa mã hóa C đúng cách, Bob sẽ tiết lộ Khóa riêng của mình (PriKeyBob) đến giao thừa. Giờ đây, Eve có thể xác minh khiếu nại tranh chấp bằng cách giải mã Cenc sử dụng PriKeyBob và xác minh xem có khớp với C khôngbăm. Nếu không khớp, Eve sẽ hoàn lại tiền cho Bob.
Vấn đề :
Điều này hiệu quả nếu Bob trung thực và chỉ đưa ra tranh chấp nếu điều đó thực sự đúng. Nhưng nếu Bob đưa ra một tranh chấp sai lầm, Eve sẽ biết C. Điều này có thể chấp nhận được vì Bob luôn có thể chia sẻ C với Eve bất kể. Nhưng có chiến lược nào tốt hơn để giao dịch này diễn ra không? Alice có thể chứng minh cho Eve rằng Cenc là hợp lệ (theo cách không có kiến thức) mà không bao giờ yêu cầu Bob đưa ra tranh chấp?