Bạn muốn chứng minh mình biết mật khẩu Wi-Fi nhà hàng xóm mà không cần tiết lộ mật khẩu đó. Nghe có vẻ vô lý? Đây chính xác là bài toán mà zero-knowledge proof (ZKP) giải quyết, và nó đang trở thành nền tảng cho hàng loạt hệ thống blockchain bảo mật hiện đại.

Câu chuyện hang động Ali Baba

Hãy tưởng tượng một hang động hình vòng tròn với lối vào ở một đầu và một cánh cửa ma thuật chặn giữa. Peggy biết mật mã mở cửa, còn Victor không tin điều đó. Victor đứng ngoài, Peggy đi vào và chọn ngẫu nhiên lối A hoặc B (Victor không thấy). Sau đó Victor hét lên tên một lối và yêu cầu Peggy quay ra từ đó. Nếu Peggy thật sự biết mật mã, cô ấy luôn mở được cửa và đi ra đúng lối. Nếu không biết mật mã, cô chỉ có 50% cơ hội đoán đúng ở mỗi lượt. Lặp lại 20 vòng, xác suất lừa thành công giảm xuống còn khoảng một phần triệu. Sau nhiều vòng lặp, Victor sẽ tin Peggy, nhưng không biết thêm gì về mật mã.

Ba tính chất cốt lõi

Mọi hệ thống ZKP đều phải thỏa mãn ba tính chất. Thứ nhất là completeness (tính đầy đủ): nếu phát biểu đúng và cả hai bên đều trung thực, bên xác minh sẽ luôn chấp nhận bằng chứng. Thứ hai là soundness (tính đúng đắn): nếu phát biểu sai, bên chứng minh gần như không thể đánh lừa bên xác minh, trừ với xác suất cực nhỏ. Thứ ba là zero-knowledge (tính không tiết lộ): bên xác minh không thu được bất kỳ thông tin nào ngoài việc phát biểu đó đúng hay sai. Ba tính chất này tạo thành bộ khung toán học đảm bảo ZKP vừa đáng tin cậy, vừa bảo vệ bí mật.

Tương tác và không tương tác

Ví dụ hang động ở trên là dạng tương tác: bên chứng minh và bên xác minh phải trao đổi qua nhiều vòng. Điều này bất tiện trên blockchain, nơi bạn muốn bất kỳ ai cũng có thể xác minh mà không cần "chat" qua lại. Giải pháp là ZKP không tương tác, sử dụng phép biến đổi Fiat-Shamir. Ý tưởng cốt lõi là thay vì bên xác minh gửi thử thách ngẫu nhiên, bên chứng minh sẽ tự tạo thử thách bằng cách băm dữ liệu của mình. Vì hàm băm không thể bị dự đoán trước, kết quả này tương đương một thử thách ngẫu nhiên do bên ngoài tạo ra. Toàn bộ bằng chứng được gói gọn trong một thông điệp duy nhất.

Giao thức Schnorr: ZKP trong thực tế

Giao thức nhận dạng Schnorr là ví dụ kinh điển nhất. Giả sử Alice muốn chứng minh cô biết khóa bí mật x sao cho y = g^x, trong đó g là điểm sinh trên đường cong elliptic. Alice chọn số ngẫu nhiên r, rồi gửi V = g^r cho Bob. Bob đưa ra thử thách c. Alice tính s = r + c·x và gửi lại. Bob kiểm tra g^s có bằng V · y^c hay không. Nếu đẳng thức đúng, Bob có thể tin rằng Alice biết x mà cô không cần tiết lộ khóa bí mật. Phiên bản không tương tác dùng c = Hash(g, V, y) thay cho thử thách do Bob gửi, nên chỉ cần một bước duy nhất.

Ứng dụng thực tế

ZKP là xương sống của nhiều hệ thống blockchain hiện đại. Zcash dùng zk-SNARK để giấu số dư và địa chỉ giao dịch. Các giải pháp Layer 2 như zkSync và StarkNet dùng ZKP để nén hàng nghìn giao dịch Ethereum thành một bằng chứng nhỏ gọn, giảm phí gas đáng kể. Ngoài lĩnh vực tiền mã hóa, ZKP còn được nghiên cứu cho các hệ thống bỏ phiếu điện tử, xác thực danh tính mà không cần chia sẻ dữ liệu cá nhân, và kiểm toán tài chính mà không phải công khai sổ sách. Đây là một trong những công cụ mạnh nhất của mật mã học hiện đại, cho phép chứng minh một điều là đúng mà không cần tiết lộ bí mật.