Trang chủ
Bài viết
Cải thiện tính minh bạch của tiền mã hóa với bằng chứng Zero-Knowledge

Cải thiện tính minh bạch của tiền mã hóa với bằng chứng Zero-Knowledge

Trung cấp
Đã đăng Feb 10, 2023Đã cập nhật Jan 5, 2024
10m

Tóm lược

Bằng chứng zero-knowledge 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 bất kỳ hiểu biết nào về nội dung của tuyên bố. Ví dụ: Binance có thể muốn chứng minh rằng họ đã đảm bảo đầy đủ tiền của người dùng trong khoản dự trữ mà không tiết lộ tất cả số dư của người dùng cá nhân.

“Bằng chứng dự trữ (Proof of Reserves)” được xây dựng bằng cây Merkle có thể chống lại việc làm sai lệch dữ liệu nội bộ, trong trường hợp dữ liệu là tổng số dư ròng của khách hàng, đó là nghĩa vụ của sàn giao dịch đối với người dùng. Mô hình này sau đó có thể được kết hợp với zk-SNARK (một giao thức bằng chứng zero-knowledge) để đả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 mã hóa đ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 hỗ trợ quyền riêng tư và bảo mật. Điều này tạo ra một tình thế tiến thoái lưỡng nan khi bằng chứng dự trữ tiền do bên lưu ký 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, đây không phải là điều không thể giải quyết. Bằng cách kết hợp các giao thức bằng chứng zero-knowledge như zk-SNARK và cây Merkle, chúng ta có thể tìm ra giải pháp hiệu quả cho tất cả các bên.

Bằng chứng Zero-Knowledge là gì?

Bằng chứng Zero-Knowledge 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 bất kỳ hiểu biết nào về nội dung của tuyên bố. Hãy cùng tìm hiểu một ví dụ.

Bạn có một chiếc két sắt bị khóa mà chỉ bạn mới biết cách mở. Giả định, két an toàn và không thể được mở theo bất kỳ cách nào khác ngoài việc biết tổ hợp mã số. Thực tế này đã được thiết lập, xác minh và được biết bởi người bạn tham gia thử nghiệm của bạn.

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

Bạn có thể chứng minh với bạn mình rằng bạn biết mã số, bằng cách mở két sắt và nói cho họ biết nội dung ghi trên ghi chú rồi đóng két sắt lại. Thực tế, trong suốt quá trình, bạn không cần tiết lộ mã số với bạn của mình để chứng minh bạn biết được mã số.

Để tìm hiểu qua ví dụ nâng cao hơn, hãy đọc bài viết Bằng chứng Zero-Knowledge là gì và nó tác động đến blockchain như thế nào?.

Tại sao cần sử dụng Bằng chứng Zero-knowledge?

Bằng chứng Zero-Knowledge phù hợp để chứng minh một điều gì đó mà không tiết lộ thông tin hoặc chi tiết nhạy cảm. Đó có thể là các trường hợp 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, để tránh các thông tin này có thể bị sử dụng không phù hợp.

Trong lĩnh vực tiền mã hóa, bạn có thể chứng minh mình sở hữu khóa riêng tư 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 mã hoá 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. 

Bằng chứng Zero-Knowledge trong thuật ngữ kỹ thuật

Bằng chứng Zero-Knowledge, 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 ta đã đề 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 zero-knowledge nên đề cập:

  1. Tính đầy đủ. 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. Tính hợp lý. Nếu tuyên bố là sai, người xác minh sẽ không bị thuyết phục về sự thật của tuyên bố bằng bằng chứng được cung cấp.

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

zk-SNARK là gì?

Một zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) là một giao thức bằng chứng tuân theo các nguyên tắc không cần hiểu biết đã vạch ra trước đó. Với zk-SNARK, bạn có thể chứng minh rằng bạn biết giá trị băm ban đầu (thảo luận thêm bên dưới) mà không 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ể có liên quan.

zk-SNARK thường được sử dụng và thảo luận trong thế giới blockchaintiền mã hoá. 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 pháp ghép khóa công khai và khóa riêng tư đơn giản để bảo mật thông tin. Tuy nhiên, chúng ta sẽ không thể triển khai chứng minh 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 một sàn giao dịch, chúng ta 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 số 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 trình bày tổng số tiền trong tài khoản của người dùng Binance yêu cầu 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ữ hiệu quả bên trong nó và bản chất mã hóa của nó làm cho tính toàn vẹn của nó có thể dễ dàng kiểm chứng.

Các hàm băm

Để mã hóa ngắn gọn một đầu vào, một cây Merkle phụ thuộc vào việc sử dụng các 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 không đổi, đầu ra cũng vậy. Điều này có nghĩa là chúng ta 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 bất kỳ thông tin nào bị thay đổi trong đầ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. Nó có thể cung cấp đầu ra như sau:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Nếu sau đó chúng ta thay đổi một ký tự của đầ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 quá 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ư đầ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 sự khác biệt giữa các yếu tố đầu vào, vốn có thể tốn nhiều công sức.

Cây Merkle trong lĩnh vực tiền mã hoá

Khi lưu trữ dữ liệu giao dịch trên một blockchain, mỗi giao dịch mới đượ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 tôi có tám giao dịch (A đến H) mà chúng ta băm riêng lẻ để nhận kết quả băm của chúng. Đây là những thứ chúng ta gọi là các nút lá Merkle. Trong hì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 được đầ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ả đầu ra được băm mới của hAB được gọi là nhánh Merkle. Lưu ý, mỗi khi một đầu ra mới được tạo, 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 tôi có dữ liệu của hai giao dịch (ví dụ: A và B) được kết hợp trong một hàm băm (hAB). Lưu ý, 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, hAB đầu ra được băm của chúng ta sẽ hoàn toàn khác.

Quá trình tiếp tục khi chúng ta 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 ta băm hAB với hCD để có được một chuỗi băm hABCD duy nhất và làm tương tự với hEF và hGH để có được hEFGH. Cuối cùng, chúng ta nhận được một hàm băm duy nhất đại diện cho đầu ra được băm của tất cả các hàm băm của các giao dịch trước đó. Nói cách khác, đầu ra được băm hABCDEFGH đại diện cho tất cả thông tin xuất hiện trước nó.

Biểu đồ hiển thị ở trên được gọi là cây Merkle và đầu ra được băm hABCDEFGH là gốc Merkle. Chúng ta 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 ta cũng có thể nhanh chóng xác minh xem có bất kỳ 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ụ về dự trữ của sàn giao dịch tập trung (CEX). Một sàn giao dịch tập trung muốn chứng minh mình đã đảm bảo 1:1 đối với tất cả tài sản của khách hàng và xây dựng một cây Merkle để băm các UID của khách hàng cùng với các tài sản ròng mà họ nắm giữ (trừ tài sản và nợ) ở 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), một 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ả các đầu vào của nó.

Một sàn giao dịch có thể đã bỏ qua một số đầu vào. Nó cũng có thể tạo các tài khoản giả có số dư âm để thay đổi tổng trách nhiệm pháp lý. Ví dụ: mặc dù tổng tài sản của khách hàng có thể là 1.000.000 USD, tài khoản giả mạo có thể được thêm vào với số dư là -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 chứng minh dự trữ khác với gốc Merkle của một khối, vì người dùng có thể thấy tất cả các giao dịch mà một khối chứa trên trình khám phá blockchain. Tuy nhiên, một sàn giao dịch tập trung 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 số dư tài khoản của họ được công khai. Trong trường hợp này, sàn giao dịch không thể chứng minh rằng số dư của người dùng cộng lại thành 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 và khoản dự trữ riêng lẻ 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 sử 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 cuộc 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.

Sự kết hợp của zk-SNARK với cây Merkle

Vấn đề trên là một trường hợp hoàn hảo để sử dụng các zk-SNARK. Chúng ta muốn chứng minh rằng khoản dự trữ bao gồm đầy đủ các khoản nợ của người dùng và không bị làm giả. Tuy nhiên, vì lý do riêng tư và bảo mật, chúng ta không muốn hiển thị cho người xác minh cấu trúc chính xác của số dư và 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 mã hóa có thể chứng minh rằng tất cả các bộ số dư của nút lá cây Merkle (nghĩa là số dư tài khoản người dùng) đóng góp vào tổng số dư tài sản người dùng được yêu cầu 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ọ như đã được đưa vào quy trình. zk-SNARK cũng đảm bảo bất kỳ cây Merkle nào đượ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). Binance cũng sử dụng cách này để tính toán trạng thái toàn cầu, tức là danh sách tổng số dư ròng của mỗi tài sản mà mỗi khách hàng Binance nắm giữ.

Hãy cùng 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 tính toán mà sàn muốn chứng minh và định nghĩa chúng là một mạchcó thể 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ộ số dư 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 bao gồm trong phép tính tổng số dư ròng của người dùng với Binance.

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

  3. Việc thay đổi gốc cây Merkle là hợp lệ (nghĩa 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ề mã băm và số dư của người dùng trong khi đảm bảo bằng chứng vượt qua các ràng buộc.

Một 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 chắc rằng phép tính đượ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 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 (hàm băm của danh sách tổng số dư ròng của từng nội dung 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ọ được đó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 đọc blog Cách zk-SNARK cải thiện hệ thống Bằng chứng dự trữ của chúng tôi.

Tổng kết

zk-SNARK cung cấp công nghệ cần thiết để đảm bảo đồng thời cả tính toàn vẹn và quyền riêng tư của dữ liệu. Ứng dụng của nó trong việc chứng minh dự trữ và tăng tính minh bạch của các sàn giao dịch tập trung sẽ giúp xây dựng lòng 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 quan trọng đối với các sàn giao dịch tập trung .

Đây là phiên bản đầu tiên của zk-SNARK của Binance 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: