LyMacSau
🐋Cá Voi Phake🐋
Ví dụ về ZKP
1. Ví dụ về người bạn bị mù màu
X và Y là đôi bạn thân, X bị mù màu. Y nói rằng mọi vật có màu sắc khác nhau, tất nhiên X không tin điều này, vì bạn nhìn đâu cũng thấy màu xám.Y đưa cho X 2 viên bi có 2 màu khác nhau, nói X 2 tay cầm 2 viên, giấu ra sau lưng, sau đó lựa chọn đổi vị trí 2 viên bi hoặc không đổi, sau đó giơ ra ra cho Y xem. Y sẽ nói cho X biết là X có đổi bi hay không.
Rõ ràng Y chỉ cần nhìn màu 2 viên bi là biết X có đổi hay không => chứng minh được cho X biết 2 viên bi có màu khác nhau, nhưng không cần nói cho X biết viên nào có màu nào.
Giả sử 2 viên bi không có màu khác nhau, Y sẽ phải đoán mò và xác suất đoán trúng là 50% (hay 1/2). X và Y chỉ việc thực hiện lại việc thí nghiệm n lần, n càng lớn thì xác suất Y đoán trúng càng nhỏ (1/2^n). Làm khoảng 20-30 lần thì xác suất về gần như bằng 0 rồi => X có thể tin là Y đúng. Ở đây xác xuất tiến dần tiệm cận về 0 chứ không thể bằng 0 => ZKP không thể 100% chứng minh rằng Y đúng, chỉ là kiểu 99.9999999999% nên làm tròn thành 100% thôi.
Đây là ví dụ về Interactive ZKP. Đặc điểm của nó là giờ Y đi gặp bạn Z cũng mù màu thì Y lại phải làm n lần thí nghiệm ở trên để chứng minh cho Z, chứ Z ko tin X => khó áp dụng Interactive ZKP cho hệ thống có nhiều nhân tố tham gia, mà blockchain sử dụng thuật toán đồng thuận POW là 1 ví dụ.
Nên, có 1 phương pháp khác tiết kiệm thời gian công sức hơn, chỉ cần làm 1 lần là được. Tên là Non-interactive ZKP
2. Ví dụ về giải sudoku
Sudoku cho ai chưa biết thì là trò chơi điền số. có 1 bảng 9x9 ô số, bên trong nó sẽ có 9 ô 3x3 nhỏ nữa. Việc của người chơi là điền các con số từ 1-9 vào các ô số, sao cho: 9 ô hàng ngang, 9 ô hàng dọc và 9 ô ở block 3x3, các số 1-9 chỉ xuất hiện đúng 1 lần. Trên bảng sẽ có sẵn những con số được điền vào những ô bất kỳ, gọi là đề bài. Từ đề bài này, có thể có 1-n đáp án khác nhau.Giờ mình có đáp án, muốn chứng minh rằng mình có đáp án nhưng không cho người khác biết đáp án là gì, thì mình sẽ làm như sau:
Mình lấy các thẻ có đánh số từ 1-9, đặt thẻ có số tương ứng vào ô tương ứng của đáp án, tất nhiên là đặt úp để ko ai thấy. Mỗi ô mình đặt 3 thẻ như vậy, ví dụ ô A1 đáp án là 7 thì mình đặt 3 thẻ số 7 chồng lên nhau
- Những ô của đề bài mình cũng đặt 3 thẻ cùng số để bài, nhưng để ngửa ra, ai cũng thấy được đề bài
- Có 9 hàng ngang, mỗi hàng mình sẽ lấy 9 thẻ của hàng ngang đó, úp hết lại, sau đó xáo trộn lên và lật ngửa ra
- Làm tương tự với 9 hàng dọc và 9 block nhỏ 3x3
- Nếu đúng là kết quả thì ở mỗi bộ 9 thẻ được lật lên, sẽ chứa các số lần lượt từ 1-9, không trùng. Tổng cộng có 27 bộ như vậy
Ứng dụng của ZKP trong blockchain và các ngành khác
Trong blockchain thì được ứng dụng để bảo mật thông tin người gửi, người nhận ở trong transaction, việc này được dự án ZCash áp dụng rất thành công.Ngoài ra ZKP còn có thể được áp dụng trong: gửi tin nhắn, xác thực người dùng, chia sẻ dữ liệu…
Hy vọng với những thông tin mình vừa chia sẻ, các bạn sẽ hiểu được ZKP là gì và sự quan trọng của nó trong blockchain. Nếu anh em thấy hay và bổ ích thì nhớ múc và chia sẻ cho mình nha.