TL;DR

Bằng chứng không có kiến ​​thức cho phép một bên (người xác minh) xác định tính hợp lệ của một tuyên bố do một bên khác (người chứng minh) đưa ra mà không cần biết gì về nội dung của tuyên bố đó. Ví dụ: Binance có thể muốn chứng minh rằng họ đã hỗ trợ toàn bộ số tiền của người dùng dưới dạng dự trữ mà không tiết lộ tất cả số dư của từng người dùng.

“Bằng chứng dự trữ” có thể được xây dựng bằng cây Merkle để bảo vệ khỏi việc làm sai lệch dữ liệu nội bộ của nó, trong trường hợp này là tổng số dư ròng của khách hàng, là trách nhiệm pháp lý của sàn giao dịch đối với người dùng. Sau đó, điều này có thể được kết hợp với zk-SNARK (giao thức chứng minh không có kiến ​​thức) để đảm bảo người dùng có thể kiểm tra số dư của họ, tạo thành một phần của tổng số dư tài sản ròng của người dùng mà không cần biết số dư riêng lẻ.

Giới thiệu

Trước các sự kiện thị trường, tính bảo mật của tài sản tiền điện tử đang được lưu ký đã trở thành một chủ đề quan trọng. Người dùng blockchain đánh giá cao tính minh bạch và cởi mở nhưng cũng ủng hộ quyền riêng tư và bảo mật. Điều này tạo ra tình thế tiến thoái lưỡng nan khi chứng minh dự trữ tiền do người giám sát nắm giữ. Thông thường, có sự đánh đổi giữa tính minh bạch, độ tin cậy và bảo mật dữ liệu.

Tuy nhiên, điều này không nhất thiết phải như vậy. Bằng cách kết hợp các giao thức chứng minh không có kiến ​​thức như zk-SNARK với cây Merkle, chúng tôi có thể tìm ra giải pháp hiệu quả cho tất cả các bên.

Bằng chứng không có kiến ​​thức là gì?

Bằng chứng không có kiến ​​thức cho phép một bên (người xác minh) xác định tính hợp lệ của một tuyên bố do một bên khác (người chứng minh) đưa ra mà không cần biết gì về nội dung của tuyên bố đó. Hãy xem một ví dụ đơn giản.

Bạn có một chiếc két sắt bị khóa mà chỉ có bạn mới biết cách giải quyết. Ví dụ, két sắt không thể được chọn, ép hoặc mở theo bất kỳ cách nào khác ngoài việc biết sự kết hợp. Sự thật này cũng được người bạn của bạn tham gia thí nghiệm xác lập, xác minh và biết đến.

Bạn nói rằng bạn biết mã số đó với bạn mình, nhưng bạn không muốn đưa nó đi hoặc mở hộp trước mặt họ. Trên đầu hộp có một lỗ để bạn của bạn có thể ghi chú vào đó. Để biến điều này thành bằng chứng không có kiến ​​thức, bạn của bạn không nên có thêm bất kỳ thông tin nào về quy trình ngoài tuyên bố đã cho.

Bạn có thể chứng minh cho bạn mình rằng bạn biết tổ hợp này bằng cách mở hộp, nói cho họ biết nội dung ghi trên tờ giấy và đóng lại. Tuy nhiên, bạn chưa bao giờ tiết lộ sự kết hợp.

Để biết ví dụ nâng cao hơn, hãy xem Bằng chứng không có kiến ​​thức là gì và nó tác động đến Blockchain như thế nào? bài báo.

Tại sao chúng tôi sử dụng Bằng chứng kiến ​​thức Zero?

Bằng chứng không có kiến ​​thức phù hợp để chứng minh điều gì đó mà không tiết lộ thông tin hoặc chi tiết nhạy cảm. Điều này có thể xảy ra nếu bạn không muốn cung cấp thông tin tài chính hoặc thông tin cá nhân có thể bị sử dụng không thích hợp.

Trong tiền điện tử, bạn có thể chứng minh mình sở hữu khóa riêng mà không cần tiết lộ hoặc ký điện tử thứ gì đó. Một sàn giao dịch tiền điện tử cũng có thể muốn chứng minh trạng thái dự trữ của mình mà không tiết lộ thông tin bí mật về người dùng, bao gồm cả số dư tài khoản cá nhân của họ.

Đối với những ví dụ này (và nhiều ví dụ khác), bằng chứng không có kiến ​​thức sẽ sử dụng các thuật toán lấy dữ liệu đầu vào và trả về “true” hoặc “false” làm đầu ra.

Xác định bằng chứng không có kiến ​​thức trong thuật ngữ kỹ thuật

Bằng chứng không có kiến ​​thức, về mặt kỹ thuật, tuân theo một cấu trúc cụ thể với các tiêu chí nhất định. Chúng tôi đã đề cập đến vai trò của người chứng minh và người xác minh, nhưng cũng có ba tiêu chí mà bằng chứng không có kiến ​​thức phải đáp ứng:

  1. Sự hoàn thiện. Nếu tuyên bố là đúng, người xác minh sẽ bị thuyết phục bởi bằng chứng được cung cấp mà không cần bất kỳ thông tin hoặc xác minh nào khác.

  2. Sự vững chắc. Nếu tuyên bố sai, người xác minh sẽ không bị thuyết phục về tính xác thực của tuyên bố bằng bằng chứng được cung cấp.

  3. Không có kiến ​​thức. Nếu tuyên bố là đúng, người xác minh sẽ không tìm hiểu bất kỳ thông tin nào ngoài tuyên bố đó là đúng.

Zk-SNARK là gì?

Zk-SNARK (Đối số kiến ​​thức không tương tác ngắn gọn về kiến ​​thức bằng không) là một giao thức chứng minh tuân theo các nguyên tắc không có kiến ​​thức đã nêu trước đây. Với zk-SNARK, bạn có thể chứng minh rằng bạn biết giá trị băm ban đầu (được thảo luận thêm bên dưới) mà không cần tiết lộ giá trị đó là gì. Bạn cũng có thể chứng minh tính hợp lệ của giao dịch mà không tiết lộ bất kỳ thông tin nào về số tiền, giá trị hoặc địa chỉ cụ thể liên quan.

zk-SNARK thường được sử dụng và thảo luận trong thế giới blockchain và tiền điện tử. Nhưng bạn có thể thắc mắc tại sao ai đó lại bận tâm sử dụng zk-SNARK khi họ có thể sử dụng phương thức cặp khóa công khai và riêng tư đơn giản để bảo mật thông tin. Tuy nhiên, chúng tôi sẽ không thể triển khai bằng chứng toán học để đảm bảo không bao gồm số dư âm và tổng của cây Merkle.

Trong trường hợp dự trữ của sàn giao dịch, chúng tôi muốn chứng minh sự hỗ trợ 1:1 cho số dư của khách hàng mà không công khai thông tin nhận dạng và số dư của từng tài khoản. Ngoài ra, công nghệ zk-SNARK khiến việc làm sai lệch dữ liệu càng khó xảy ra hơn.

Cây Merkle là gì?

Việc hiển thị tổng số tiền trong tài khoản của người dùng Binance yêu cầu phải làm việc với một tập dữ liệu lớn. Một cách để trình bày lượng lớn dữ liệu này bằng mật mã là sử dụng cây Merkle. Một lượng lớn thông tin có thể được lưu trữ một cách hiệu quả bên trong nó và bản chất mật mã của nó làm cho tính toàn vẹn của nó có thể được kiểm chứng dễ dàng.

Hàm băm

Để mã hóa ngắn gọn đầu vào, cây Merkle phụ thuộc vào việc sử dụng hàm băm. Nói tóm lại, băm là quá trình tạo đầu ra có kích thước cố định từ đầu vào có kích thước thay đổi. Nói cách khác, khi đầu vào có độ dài bất kỳ được băm thông qua một thuật toán, nó sẽ tạo ra đầu ra có độ dài cố định được mã hóa.

Miễn là đầu vào vẫn giữ nguyên thì đầu ra cũng vậy. Điều này có nghĩa là chúng tôi có thể lấy một lượng lớn dữ liệu giao dịch và băm nó thành đầu ra có thể quản lý được. Đầu ra sẽ hoàn toàn khác nếu có bất kỳ thông tin nào được thay đổi ở đầu vào.

Ví dụ: chúng ta có thể lấy nội dung của 100 cuốn sách và nhập chúng vào hàm băm SHA-256. Sau đó nó sẽ cung cấp một cái gì đó như thế này như là một đầu ra:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Sau đó, nếu chúng tôi thay đổi một ký tự của dữ liệu đầu vào (100 cuốn sách đó), hàm băm sẽ hoàn toàn khác, như sau:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Đó là một thuộc tính quan trọng của hàm băm vì nó cho phép dễ dàng xác minh độ chính xác của dữ liệu. Nếu bất kỳ ai sao chép quy trình băm 100 cuốn sách đó bằng thuật toán SHA-256, họ sẽ nhận được hàm băm chính xác như kết quả đầu ra. Nếu đầu ra khác, chúng ta có thể khẳng định chắc chắn rằng đầu vào đã bị thay đổi. Điều này có nghĩa là không cần phải kiểm tra riêng lẻ hoặc thủ công để phát hiện sự khác biệt giữa các đầu vào, việc này có thể tốn nhiều công sức.

Cây Merkle trong thế giới tiền điện tử

Khi lưu trữ dữ liệu giao dịch trên blockchain, mỗi giao dịch mới sẽ được gửi thông qua hàm băm, hàm này tạo ra các giá trị băm duy nhất. Hãy tưởng tượng chúng ta có tám giao dịch (A đến H) mà chúng ta băm riêng lẻ để có kết quả băm của chúng. Đây là những gì chúng tôi gọi là nút lá Merkle. Trong hình ảnh bên dưới, bạn có thể thấy giá trị băm duy nhất của mỗi chữ cái: hA cho A, hB cho B, hC cho C, v.v.

Sau đó, chúng ta có thể lấy các cặp đầu ra được băm, kết hợp chúng và nhận đầu ra được băm mới. Ví dụ: giá trị băm của hA và hB được băm cùng nhau sẽ cho chúng ta kết quả băm mới của hAB được gọi là nhánh Merkle. Lưu ý rằng mỗi khi một đầu ra mới được tạo ra, nó sẽ có độ dài và kích thước cố định, tùy theo hàm băm được sử dụng.

Bây giờ, chúng ta có dữ liệu của hai giao dịch (ví dụ: A và B) được kết hợp thành một hàm băm (hAB). Lưu ý rằng nếu chúng ta thay đổi bất kỳ thông tin nào từ A hoặc B và lặp lại quy trình, kết quả băm hAB của chúng ta sẽ hoàn toàn khác.

Quá trình tiếp tục khi chúng tôi kết hợp các cặp băm mới để băm lại chúng (xem hình ảnh bên dưới). Chúng tôi băm hAB với hCD để có được hàm băm hABCD duy nhất và thực hiện tương tự với hEF và hGH để có hEFGH. Cuối cùng, chúng tôi nhận được một hàm băm duy nhất đại diện cho kết quả đầu ra được băm của tất cả các hàm băm của giao dịch trước đó. Nói cách khác, kết quả băm hABCDEFGH đại diện cho tất cả thông tin có trước nó.

Biểu đồ hiển thị ở trên được gọi là cây Merkle và kết quả băm hABCDEFGH là gốc Merkle. Chúng tôi sử dụng gốc Merkle trong tiêu đề khối vì chúng tóm tắt bằng mật mã tất cả dữ liệu giao dịch trong một khối một cách ngắn gọn. Chúng tôi cũng có thể nhanh chóng xác minh xem có dữ liệu nào bị giả mạo hoặc thay đổi trong khối hay không.

Những hạn chế của cây Merkle

Hãy quay lại ví dụ dự trữ CEX của chúng tôi. CEX muốn chứng minh khả năng hỗ trợ 1:1 cho tất cả tài sản của khách hàng và xây dựng cây Merkle để băm các UID khách hàng của mình với tài sản ròng nắm giữ của họ (trừ tài sản và nợ phải trả) ở cấp độ token. Sau khi được phát hành (và được ký để chứng minh quyền sở hữu đối với gốc Merkle được cung cấp), người dùng cá nhân sẽ không có cách nào kiểm tra xem cây Merkle có hợp lệ hay không nếu không truy cập vào tất cả thông tin đầu vào của nó.

Một cuộc trao đổi có thể đã bỏ sót việc bao gồm một số đầu vào. Nó cũng có thể tạo các tài khoản giả với số dư âm để thay đổi tổng trách nhiệm pháp lý. Ví dụ: mặc dù tài sản của khách hàng có thể có tổng trị giá là 1.000.000 USD nhưng một tài khoản giả có thể được thêm vào với số dư -500.000 USD. Điều này sẽ tạo ra mục tiêu dự trữ chỉ là 500.000 USD.

Trường hợp bằng chứng dự trữ khác với gốc Merkle của khối, vì người dùng có thể xem tất cả các giao dịch trong khối trên trình khám phá blockchain. Tuy nhiên, CEX sẽ không muốn tiết lộ từng số dư tài khoản vì lý do bảo mật và quyền riêng tư dữ liệu. Khách hàng cũng sẽ không hài lòng với việc số dư tài khoản của họ bị công khai. Trong trường hợp này, CEX không thể chứng minh rằng số dư của người dùng cộng lại bằng tổng số chính xác mà không hiển thị số dư của người dùng khác.

Một giải pháp mà các sàn giao dịch có thể cân nhắc sử dụng là sử dụng kiểm toán viên bên thứ ba đáng tin cậy. Kiểm toán viên có thể kiểm tra các tài khoản cá nhân và khoản dự trữ trước khi chứng thực tính hợp lệ của gốc Merkle được cung cấp. Tuy nhiên, đối với người dùng, phương pháp này đòi hỏi sự tin tưởng vào kiểm toán viên và dữ liệu được sử dụng cho kiểm toán. Bạn không cần phải dựa vào bên thứ ba khi bạn có thể tin tưởng vào dữ liệu.

Kết hợp zk-SNARK với cây Merkle

Vấn đề trên là trường hợp hoàn hảo để sử dụng zk-SNARK. Chúng tôi muốn chứng minh rằng khoản dự trữ có thể chi trả đầy đủ cho các khoản nợ của người dùng và không bị làm sai lệch. Tuy nhiên, vì lý do riêng tư và bảo mật, chúng tôi không muốn hiển thị cho người xác minh thông tin chính xác về số dư và khoản dự trữ của người dùng.

Bằng cách sử dụng zk-SNARK, một sàn giao dịch tiền điện tử có thể chứng minh rằng tất cả các bộ số dư của nút lá cây Merkle (tức là số dư tài khoản người dùng) đều góp phần vào tổng số dư tài sản mà người dùng đã xác nhận của sàn giao dịch. Mỗi người dùng có thể dễ dàng truy cập nút lá của họ khi được đưa vào quy trình. Zk-SNARK cũng đảm bảo mọi cây Merkle được tạo không chứa người dùng có tổng số dư tài sản ròng âm (điều này có nghĩa là làm sai lệch dữ liệu vì tất cả các khoản vay đều được thế chấp quá mức). Công cụ tính toán trạng thái toàn cầu của Binance cũng được sử dụng, tức là danh sách tổng số dư ròng của từng tài sản mà mỗi khách hàng Binance nắm giữ.

Chúng ta hãy xem cách Binance tiếp cận tình huống này. Để bắt đầu, Binance xác định các ràng buộc của tính toán mà nó muốn chứng minh và định nghĩa chúng như một mạch lập trình được. Dưới đây là bộ ba ràng buộc mà Binance sử dụng trong mô hình của mình.

Đối với bộ cân bằng của mỗi người dùng (nút lá cây Merkle), mạch của chúng tôi đảm bảo rằng:

  1. Số dư tài sản của người dùng được tính vào tổng số dư ròng của người dùng trên Binance.

  2. Tổng số dư ròng của người dùng lớn hơn hoặc bằng 0.

  3. Thay đổi gốc cây Merkle là hợp lệ (tức là không sử dụng thông tin giả mạo) sau khi cập nhật thông tin của người dùng vào hàm băm nút lá.

Sau đó, Binance có thể tạo bằng chứng zk-SNARK cho việc xây dựng cây Merkle theo mạch. Điều này đòi hỏi sàn giao dịch phải thực hiện tính toán nặng nề về ID và số dư của người dùng băm trong khi vẫn đảm bảo bằng chứng vượt qua các ràng buộc.

Người xác minh sẽ kiểm tra bằng chứng (và mã nguồn mở được phát hành công khai của nó) để tin rằng việc tính toán được thực hiện với tất cả các ràng buộc được đáp ứng. Việc tính toán xác minh mất thời gian cực kỳ ngắn so với thời gian chứng minh.

Tại mỗi lần phát hành Bằng chứng dự trữ, sàn giao dịch sẽ công bố:

1. Bằng chứng Merkle cho mỗi người dùng.

2. Bằng chứng zk-SNARK và đầu vào công khai (băm của danh sách tổng số dư ròng của từng tài sản và gốc Merkle) của mạch cho tất cả người dùng.

Các bên quan tâm có thể xác minh bằng chứng Merkle, đảm bảo số dư cá nhân của họ đã đóng góp vào gốc cây Merkle. Họ cũng có thể xác minh bằng chứng zk-SNARK để đảm bảo việc xây dựng cây Merkle đáp ứng các ràng buộc được xác định trong mạch. Để biết giải thích chi tiết hơn về giải pháp zk-SNARK và hiệu suất của nó, hãy tham khảo Cách zk-SNARK cải thiện blog Hệ thống Bằng chứng Dự trữ của Binance.

Bớt tư tưởng

zk-SNARK cung cấp công nghệ cần thiết để đảm bảo tính toàn vẹn và quyền riêng tư của dữ liệu cùng một lúc. Ứng dụng của nó để chứng minh dự trữ và tăng tính minh bạch của CEX sẽ giúp tạo dựng niềm tin trong ngành công nghiệp blockchain. Đối với nhiều người, sự phát triển như thế này đã được chờ đợi từ lâu và đến vào thời điểm then chốt đối với CEX.

Đây là phiên bản đầu tiên của zk-SNARK của chúng tôi và chúng tôi rất mong nhận được phản hồi của cộng đồng để có thể tiếp tục cải thiện hệ thống.

Đọc thêm

  • (Blog) Cách zk-SNARK cải thiện hệ thống Bằng chứng dự trữ của Binance

  • (Học ​​viện) Bằng chứng dự trữ (PoR)

  • (Học ​​viện) Bằng chứng dự trữ là gì và nó hoạt động như thế nào trên Binance

  • (Thông báo)Binance phát hành hệ thống bằng chứng dự trữ