Chứng minh không mất (ZKP) là một kỹ thuật mật mã được đề xuất lần đầu tiên bởi S. Goldwasser, S. Micali, và C. Rackoff vào đầu những năm 1980 trong một bài báo có tựa đề “Sự Phức Tạp Của Kiến Thức Của Hệ Thống Chứng Minh Tương TácTrong bài báo, nó được khái niệm hóa như một mô hình lý thuyết để giải quyết vấn đề xác minh các câu lệnh toán học mà không tiết lộ bằng chứng. Khái niệm này đã thu hút sự chú ý rộng rãi trong giới học thuật vì nó thách thức ranh giới của các kỹ thuật mật mã truyền thống và cung cấp phương pháp mới cho việc xử lý thông tin nhạy cảm.
Với thời gian, ZKP đã phát triển từ một khái niệm lý thuyết trừu tượng thành các giao thức cụ thể có thể được tích hợp vào các ứng dụng khác nhau. Năm 2010, Groth đã công bố một bài báo mang tựa đề “Chứng minh không tương tác dựa trên cặp khóa ngắn không được tiết lộ “, mà đã trở thành cột mốc lý thuyết cho zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge), một giải pháp quan trọng trong ZKP. Tiến triển quan trọng nhất trong việc áp dụng chứng minh không biết là hệ thống chứng minh không biết được sử dụng bởi Z-cash vào năm 2015, cung cấp bảo vệ sự riêng tư cho các giao dịch và số tiền. Sau đó, zk-SNARK kết hợp với hợp đồng thông minh, mở rộng ứng dụng của nó sang một loạt các kịch bản ứng dụng rộng lớn hơn.
ZKP truyền thống tuân theo ba nguyên tắc:
Nguyên lý của ZKP có thể được hiểu thông qua một ví dụ đơn giản: Nếu tôi cần chứng minh với A rằng tôi có số điện thoại của B, tôi không cần phải tiết lộ trực tiếp số điện thoại của B. Thay vào đó, tôi có thể gọi trực tiếp số điện thoại của B và chứng minh rằng tôi thực sự có số điện thoại của B sau khi gọi thành công. Quá trình này sẽ không làm lộ số điện thoại của B.
zk-SNARK tiếp tục tăng cường những nguyên tắc này với những đặc điểm sau:
Trong bài báo của Groth, ông đã đề xuất một phương pháp chứng minh không có kiến thức không tương tác dựa trên các cặp để chuyển đổi một vấn đề tính toán thành Chương trình số học bậc hai (QAP). Phương pháp này sử dụng mật mã đường cong elip và hàm băm để xây dựng một bằng chứng hiệu quả. Các thiết kế zk-SNARK tiếp theo thường bao gồm bốn bước.
Để minh họa bằng một ví dụ đơn giản, giả sử bạn có một bản đồ kho báu có thể dẫn bạn đến vị trí chính xác của một kho báu đã chôn. Bạn muốn chứng minh cho ai đó rằng bạn biết vị trí của kho báu, nhưng bạn không muốn tiết lộ nội dung của bản đồ kho báu hoặc vị trí thực tế của kho báu. Nếu bạn sử dụng công nghệ zk-SNARK, bạn cần tạo ra một câu đố phức tạp từ bản đồ kho báu. Bạn chọn một phần nhỏ của câu đố quan trọng (một bằng chứng) và hiển thị nó cho người khác, thuyết phục họ rằng bạn biết cách ghép cả một câu đố lớn, tức là vị trí của kho báu, mà không tiết lộ toàn bộ câu đố. Tuy nhiên, để làm điều này, bạn cần có được một số dấu hiệu đặc biệt từ một nhà in uy tín, dùng để chứng minh tính xác thực của mảnh ghép câu đố của bạn.
Cuộc thảo luận trước đã đề cập đến việc zk-SNARK cho phép thiết lập một chuỗi tham chiếu chung, điều này có nghĩa là có thể áp đặt ràng buộc trên mạch đang chạy. Lấy dự trữ Gate.io làm ví dụ, nó thiết lập năm ràng buộc cốt lõi trong mạch, như được thể hiện dưới đây:
① Trước khi chèn tài sản ròng của người dùng vào cây Merkle, nút tương ứng với ID người dùng là trống.
② Tính toán tổng tài sản / nợ của người dùng dựa trên danh sách tài sản của người dùng và giá của mỗi tài sản. Tổng tài sản phải lớn hơn tổng nợ.
③ Thêm tài sản/nợ của người dùng vào tài sản/nợ của sàn giao dịch.
④ Tính toán hash trạng thái của người dùng bằng cách sử dụng ID người dùng, tổng tài sản/nợ và danh sách tài sản. Chèn trạng thái của người dùng vào cây Merkle để có được một Merkle Root mới.
⑤ Giá trị băm của nút gốc của cây trước khi người dùng trước tạo một hoạt động người dùng phải bằng với giá trị băm sau khi người dùng tiếp theo tạo một hoạt động người dùng.
(Hoạt động ① có thể tránh dữ liệu nút bị sai, hoạt động ② có thể tránh tài khoản số dư âm, và hoạt động ⑤ có thể đảm bảo rằng dữ liệu người dùng không bị thay đổi trước và sau khi thực hiện.)
Điều này đảm bảo việc giải quyết vấn đề số dư âm. Dữ liệu trao đổi chỉ cần đi qua mạch để tự động thực hiện kiểm tra ràng buộc và lấy số tài sản. Tuy nhiên, giải pháp này yêu cầu một số lực lượng tính toán và điều kiện phần cứng nhất định. Việc tính toán bằng chứng dự trữ của 10 triệu người dùng trên một máy 32 nhân với 128GB RAM mất 15 ngày. Việc tính toán Bằng chứng dự trữ có thể được song song hóa. Nếu có 10 máy, chỉ mất 1.5 ngày.
Bằng cách thiết lập các ràng buộc liên quan, zk-SNARK có thể tránh sự xuất hiện của các vấn đề giá trị âm và bảo vệ tốt hơn quyền riêng tư và an ninh của người dùng. Bằng chứng dự trữ của Gate.io hiện có thể chứng minh tỷ lệ dự trữ cho hơn 100 đồng tiền, và người dùng có thể xem nó chỉ bằng cách nhấp chuột liên kếtTrong bài học tiếp theo, chúng tôi sẽ hướng dẫn bạn xác minh an ninh tài sản của bạn trong vòng 3 phút.
Chứng minh không mất (ZKP) là một kỹ thuật mật mã được đề xuất lần đầu tiên bởi S. Goldwasser, S. Micali, và C. Rackoff vào đầu những năm 1980 trong một bài báo có tựa đề “Sự Phức Tạp Của Kiến Thức Của Hệ Thống Chứng Minh Tương TácTrong bài báo, nó được khái niệm hóa như một mô hình lý thuyết để giải quyết vấn đề xác minh các câu lệnh toán học mà không tiết lộ bằng chứng. Khái niệm này đã thu hút sự chú ý rộng rãi trong giới học thuật vì nó thách thức ranh giới của các kỹ thuật mật mã truyền thống và cung cấp phương pháp mới cho việc xử lý thông tin nhạy cảm.
Với thời gian, ZKP đã phát triển từ một khái niệm lý thuyết trừu tượng thành các giao thức cụ thể có thể được tích hợp vào các ứng dụng khác nhau. Năm 2010, Groth đã công bố một bài báo mang tựa đề “Chứng minh không tương tác dựa trên cặp khóa ngắn không được tiết lộ “, mà đã trở thành cột mốc lý thuyết cho zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge), một giải pháp quan trọng trong ZKP. Tiến triển quan trọng nhất trong việc áp dụng chứng minh không biết là hệ thống chứng minh không biết được sử dụng bởi Z-cash vào năm 2015, cung cấp bảo vệ sự riêng tư cho các giao dịch và số tiền. Sau đó, zk-SNARK kết hợp với hợp đồng thông minh, mở rộng ứng dụng của nó sang một loạt các kịch bản ứng dụng rộng lớn hơn.
ZKP truyền thống tuân theo ba nguyên tắc:
Nguyên lý của ZKP có thể được hiểu thông qua một ví dụ đơn giản: Nếu tôi cần chứng minh với A rằng tôi có số điện thoại của B, tôi không cần phải tiết lộ trực tiếp số điện thoại của B. Thay vào đó, tôi có thể gọi trực tiếp số điện thoại của B và chứng minh rằng tôi thực sự có số điện thoại của B sau khi gọi thành công. Quá trình này sẽ không làm lộ số điện thoại của B.
zk-SNARK tiếp tục tăng cường những nguyên tắc này với những đặc điểm sau:
Trong bài báo của Groth, ông đã đề xuất một phương pháp chứng minh không có kiến thức không tương tác dựa trên các cặp để chuyển đổi một vấn đề tính toán thành Chương trình số học bậc hai (QAP). Phương pháp này sử dụng mật mã đường cong elip và hàm băm để xây dựng một bằng chứng hiệu quả. Các thiết kế zk-SNARK tiếp theo thường bao gồm bốn bước.
Để minh họa bằng một ví dụ đơn giản, giả sử bạn có một bản đồ kho báu có thể dẫn bạn đến vị trí chính xác của một kho báu đã chôn. Bạn muốn chứng minh cho ai đó rằng bạn biết vị trí của kho báu, nhưng bạn không muốn tiết lộ nội dung của bản đồ kho báu hoặc vị trí thực tế của kho báu. Nếu bạn sử dụng công nghệ zk-SNARK, bạn cần tạo ra một câu đố phức tạp từ bản đồ kho báu. Bạn chọn một phần nhỏ của câu đố quan trọng (một bằng chứng) và hiển thị nó cho người khác, thuyết phục họ rằng bạn biết cách ghép cả một câu đố lớn, tức là vị trí của kho báu, mà không tiết lộ toàn bộ câu đố. Tuy nhiên, để làm điều này, bạn cần có được một số dấu hiệu đặc biệt từ một nhà in uy tín, dùng để chứng minh tính xác thực của mảnh ghép câu đố của bạn.
Cuộc thảo luận trước đã đề cập đến việc zk-SNARK cho phép thiết lập một chuỗi tham chiếu chung, điều này có nghĩa là có thể áp đặt ràng buộc trên mạch đang chạy. Lấy dự trữ Gate.io làm ví dụ, nó thiết lập năm ràng buộc cốt lõi trong mạch, như được thể hiện dưới đây:
① Trước khi chèn tài sản ròng của người dùng vào cây Merkle, nút tương ứng với ID người dùng là trống.
② Tính toán tổng tài sản / nợ của người dùng dựa trên danh sách tài sản của người dùng và giá của mỗi tài sản. Tổng tài sản phải lớn hơn tổng nợ.
③ Thêm tài sản/nợ của người dùng vào tài sản/nợ của sàn giao dịch.
④ Tính toán hash trạng thái của người dùng bằng cách sử dụng ID người dùng, tổng tài sản/nợ và danh sách tài sản. Chèn trạng thái của người dùng vào cây Merkle để có được một Merkle Root mới.
⑤ Giá trị băm của nút gốc của cây trước khi người dùng trước tạo một hoạt động người dùng phải bằng với giá trị băm sau khi người dùng tiếp theo tạo một hoạt động người dùng.
(Hoạt động ① có thể tránh dữ liệu nút bị sai, hoạt động ② có thể tránh tài khoản số dư âm, và hoạt động ⑤ có thể đảm bảo rằng dữ liệu người dùng không bị thay đổi trước và sau khi thực hiện.)
Điều này đảm bảo việc giải quyết vấn đề số dư âm. Dữ liệu trao đổi chỉ cần đi qua mạch để tự động thực hiện kiểm tra ràng buộc và lấy số tài sản. Tuy nhiên, giải pháp này yêu cầu một số lực lượng tính toán và điều kiện phần cứng nhất định. Việc tính toán bằng chứng dự trữ của 10 triệu người dùng trên một máy 32 nhân với 128GB RAM mất 15 ngày. Việc tính toán Bằng chứng dự trữ có thể được song song hóa. Nếu có 10 máy, chỉ mất 1.5 ngày.
Bằng cách thiết lập các ràng buộc liên quan, zk-SNARK có thể tránh sự xuất hiện của các vấn đề giá trị âm và bảo vệ tốt hơn quyền riêng tư và an ninh của người dùng. Bằng chứng dự trữ của Gate.io hiện có thể chứng minh tỷ lệ dự trữ cho hơn 100 đồng tiền, và người dùng có thể xem nó chỉ bằng cách nhấp chuột liên kếtTrong bài học tiếp theo, chúng tôi sẽ hướng dẫn bạn xác minh an ninh tài sản của bạn trong vòng 3 phút.