Về tính ẩn danh trong blockchain dựa trên tài khoản

Chúng tôi đã quan tâm đến chủ đề ẩn danh trong tiền điện tử từ lâu và cố gắng theo dõi sự phát triển của công nghệ trong lĩnh vực này. Trong các bài viết của chúng tôi, chúng tôi đã thảo luận chi tiết về các nguyên tắc hoạt động giao dịch bí mật bằng Monero và cũng được thực hiện đánh giá so sánh công nghệ hiện có trong lĩnh vực này. Tuy nhiên, tất cả các loại tiền điện tử ẩn danh ngày nay đều được xây dựng trên mô hình dữ liệu do Bitcoin - Đầu ra giao dịch chưa chi tiêu (sau đây gọi là UTXO) đề xuất. Đối với các chuỗi khối dựa trên tài khoản như Ethereum, các giải pháp hiện có để triển khai tính ẩn danh và bảo mật (ví dụ: Mobius hoặc Aztec) đã cố gắng tái tạo mô hình UTXO trong hợp đồng thông minh.

Vào tháng 2019 năm XNUMX, một nhóm các nhà nghiên cứu từ Đại học Stanford và Visa Research phát hành bản in trước "Zether: Hướng tới sự riêng tư trong thế giới hợp đồng thông minh." Các tác giả là những người đầu tiên đề xuất phương pháp đảm bảo tính ẩn danh trong chuỗi khối dựa trên tài khoản và trình bày hai phiên bản của hợp đồng thông minh: dành cho các giao dịch bí mật (ẩn số dư và số tiền chuyển) và ẩn danh (ẩn người nhận và người gửi). Chúng tôi thấy công nghệ được đề xuất rất thú vị và muốn chia sẻ thiết kế của nó, cũng như nói về lý do tại sao vấn đề ẩn danh trong chuỗi khối dựa trên tài khoản được coi là rất khó khăn và liệu các tác giả có giải quyết được nó một cách đầy đủ hay không.

Về cấu trúc của các mô hình dữ liệu này

Trong mô hình UTXO, một giao dịch bao gồm “đầu vào” và “đầu ra”. Tương tự trực tiếp với “đầu ra” là các tờ tiền trong ví của bạn: mỗi “đầu ra” có một số mệnh giá. Khi bạn thanh toán cho ai đó (hình thành một giao dịch), bạn chi tiêu một hoặc nhiều “đầu ra”, trong trường hợp đó chúng trở thành “đầu vào” của giao dịch và blockchain đánh dấu chúng là đã chi tiêu. Trong trường hợp này, người nhận khoản thanh toán của bạn (hoặc chính bạn, nếu bạn cần thay đổi) sẽ nhận được “đầu ra” mới được tạo. Điều này có thể được biểu diễn dưới dạng sơ đồ như thế này:

Về tính ẩn danh trong blockchain dựa trên tài khoản

Chuỗi khối dựa trên tài khoản có cấu trúc giống như tài khoản ngân hàng của bạn. Họ chỉ xử lý số tiền trong tài khoản của bạn và số tiền chuyển khoản. Khi bạn chuyển một số tiền từ tài khoản của mình, bạn không ghi bất kỳ “đầu ra” nào, mạng không cần phải nhớ đồng tiền nào đã được chi tiêu và đồng tiền nào chưa. Trong trường hợp đơn giản nhất, xác minh giao dịch bao gồm việc kiểm tra chữ ký của người gửi và số tiền trên số dư của người đó:

Về tính ẩn danh trong blockchain dựa trên tài khoản

Phân tích công nghệ

Tiếp theo, chúng ta sẽ nói về cách Zether ẩn số tiền giao dịch, người nhận và người gửi. Khi mô tả các nguyên tắc hoạt động của nó, chúng tôi sẽ lưu ý sự khác biệt giữa phiên bản bí mật và ẩn danh. Vì việc đảm bảo tính bảo mật trong các chuỗi khối dựa trên tài khoản dễ dàng hơn nhiều nên một số hạn chế do ẩn danh áp đặt sẽ không liên quan đến phiên bản bí mật của công nghệ.

Ẩn số dư và số tiền chuyển

Một sơ đồ mã hóa được sử dụng để mã hóa số dư và số tiền chuyển trong Zether El Gamal. Nó hoạt động như sau. Khi Alice muốn gửi Bob b tiền theo địa chỉ (khóa công khai của nó) Y, cô ấy chọn một số ngẫu nhiên r và mã hóa số tiền:

Về tính ẩn danh trong blockchain dựa trên tài khoản
đâu C - số tiền được mã hóa, D - giá trị phụ trợ cần thiết để giải mã số tiền này, G - một điểm cố định trên đường cong elip, khi nhân với khóa bí mật sẽ thu được khóa chung.

Khi Bob nhận được những giá trị này, anh ấy chỉ cần thêm chúng vào số dư được mã hóa của mình theo cách tương tự, đó là lý do tại sao kế hoạch này lại thuận tiện.

Tương tự, Alice trừ các giá trị tương tự khỏi số dư của mình, chỉ khi Y sử dụng khóa công khai của bạn.

Ẩn người nhận và người gửi

Việc xáo trộn “đầu ra” trong UTXO có từ những ngày đầu của tiền điện tử và giúp ẩn người gửi. Để làm điều này, chính người gửi khi thực hiện chuyển khoản sẽ thu thập các “đầu ra” ngẫu nhiên trong chuỗi khối và trộn chúng với đầu ra của chính mình. Tiếp theo, anh ta ký “đầu ra” bằng chữ ký vòng—một cơ chế mã hóa cho phép anh ta thuyết phục người xác minh rằng tiền của người gửi có trong số “đầu ra” liên quan. Tất nhiên, bản thân các đồng tiền hỗn hợp sẽ không được sử dụng.

Tuy nhiên, chúng tôi sẽ không thể tạo đầu ra giả để ẩn người nhận. Do đó, trong UTXO, mỗi “đầu ra” có địa chỉ duy nhất của riêng nó và được liên kết bằng mật mã với địa chỉ của người nhận những đồng tiền này. Hiện tại, không có cách nào để xác định mối quan hệ giữa địa chỉ đầu ra duy nhất và địa chỉ người nhận mà không biết khóa bí mật của nó.

Trong mô hình dựa trên tài khoản, chúng tôi không thể sử dụng địa chỉ một lần (nếu không nó sẽ là mô hình “thoát”). Do đó, người nhận và người gửi phải được trộn lẫn giữa các tài khoản khác trong blockchain. Trong trường hợp này, một đồng xu 0 được mã hóa sẽ được ghi nợ từ các tài khoản hỗn hợp (hoặc 0 được thêm vào nếu người nhận là hỗn hợp) mà không thực sự thay đổi số dư thực của họ.

Vì cả người gửi và người nhận luôn có một địa chỉ cố định nên việc sử dụng cùng một nhóm để trộn khi chuyển đến cùng một địa chỉ là cần thiết. Sẽ dễ dàng hơn để xem xét điều này bằng một ví dụ.

Giả sử Alice quyết định đóng góp cho tổ chức từ thiện của Bob, nhưng muốn việc chuyển nhượng được giữ kín với người quan sát bên ngoài. Sau đó, để cải trang trong trường người gửi, cô cũng nhập vào tài khoản của Adam và Adele. Và để ẩn Bob, hãy thêm tài khoản của Ben và Bill vào trường người nhận. Đóng góp tiếp theo, Alice quyết định viết Alex và Amanda bên cạnh cô, và Bruce và Benjen bên cạnh Bob. Trong trường hợp này, khi phân tích chuỗi khối, trong hai giao dịch này chỉ có một cặp người tham gia giao nhau - Alice và Bob, điều này sẽ hủy tính ẩn danh của các giao dịch này.

Về tính ẩn danh trong blockchain dựa trên tài khoản

Cuộc đua giao dịch

Như chúng tôi đã đề cập, để ẩn số dư của bạn trong hệ thống dựa trên tài khoản, người dùng sẽ mã hóa số dư của mình và số tiền chuyển. Đồng thời, anh ta phải chứng minh số dư trên tài khoản của mình không âm. Vấn đề là khi tạo giao dịch, người dùng sẽ đưa ra bằng chứng về trạng thái tài khoản hiện tại của mình. Điều gì xảy ra nếu Bob gửi một giao dịch cho Alice và nó được chấp nhận trước giao dịch do Alice gửi? Khi đó giao dịch của Alice sẽ bị coi là không hợp lệ vì bằng chứng về số dư đã được xây dựng trước khi giao dịch của Bob được chấp nhận.

Về tính ẩn danh trong blockchain dựa trên tài khoản

Quyết định đầu tiên được đưa ra trong tình huống như vậy là đóng băng tài khoản cho đến khi giao dịch được thực hiện. Nhưng cách tiếp cận này không phù hợp, vì ngoài sự phức tạp của việc giải quyết vấn đề như vậy trong một hệ thống phân tán, trong một sơ đồ ẩn danh, sẽ không rõ tài khoản của ai sẽ bị chặn.

Để giải quyết vấn đề này, công nghệ tách biệt các giao dịch đến và đi: chi tiêu có tác động ngay lập tức đến bảng cân đối kế toán, trong khi các khoản thu có tác dụng chậm. Để làm được điều này, khái niệm “kỷ nguyên” được giới thiệu - một nhóm các khối có kích thước cố định. "Kỷ nguyên" hiện tại được xác định bằng cách chia chiều cao khối cho kích thước nhóm. Khi xử lý giao dịch, mạng sẽ cập nhật ngay số dư của người gửi và lưu trữ tiền của người nhận vào bể chứa. Số tiền tích lũy chỉ được cung cấp cho người nhận thanh toán khi một “kỷ nguyên” mới bắt đầu.

Do đó, người dùng có thể gửi giao dịch bất kể tần suất nhận tiền (tất nhiên là trong mức số dư của anh ta cho phép). Kích thước kỷ nguyên được xác định dựa trên tốc độ các khối lan truyền qua mạng và tốc độ giao dịch đi vào một khối.

Giải pháp này hoạt động tốt đối với các giao dịch chuyển tiền bí mật, nhưng với các giao dịch ẩn danh, như chúng ta sẽ thấy sau, nó sẽ tạo ra những vấn đề nghiêm trọng.

Bảo vệ chống lại các cuộc tấn công lặp lại

Trong các chuỗi khối dựa trên tài khoản, mỗi giao dịch được ký bằng khóa riêng của người gửi, điều này thuyết phục người xác minh rằng giao dịch chưa bị sửa đổi và được tạo bởi chủ sở hữu khóa này. Nhưng điều gì sẽ xảy ra nếu kẻ tấn công đang nghe kênh truyền chặn tin nhắn này và gửi chính xác tin nhắn thứ hai? Người xác minh sẽ xác minh chữ ký của giao dịch và sẽ bị thuyết phục về quyền tác giả của nó, đồng thời mạng sẽ xóa số tiền tương tự khỏi số dư của người gửi một lần nữa.

Cuộc tấn công này được gọi là tấn công lặp lại. Trong mô hình UTXO, các cuộc tấn công như vậy không liên quan vì kẻ tấn công sẽ cố gắng sử dụng các đầu ra đã qua sử dụng, bản thân nó không hợp lệ và bị mạng từ chối.

Để ngăn điều này xảy ra, một trường có dữ liệu ngẫu nhiên được tích hợp vào giao dịch, trường này được gọi là nonce hoặc đơn giản là “muối”. Khi gửi lại một giao dịch bằng muối, người xác minh sẽ xem liệu nonce đã được sử dụng trước đó chưa và nếu không, sẽ coi giao dịch đó là hợp lệ. Để không lưu trữ toàn bộ lịch sử nonces của người dùng trong blockchain, thông thường trong giao dịch đầu tiên, nó được đặt bằng XNUMX và sau đó tăng thêm một. Mạng chỉ có thể kiểm tra xem nonce của giao dịch mới có khác với giao dịch trước đó hay không.

Trong sơ đồ chuyển tiền ẩn danh, vấn đề xác thực số lần giao dịch sẽ phát sinh. Chúng tôi không thể ràng buộc rõ ràng số nonce với địa chỉ của người gửi, vì rõ ràng điều này làm mất tính ẩn danh của việc chuyển tiền. Chúng tôi cũng không thể thêm một khoản vào số nonce của tất cả các tài khoản tham gia vì điều này có thể xung đột với các giao dịch chuyển tiền khác đang được xử lý.

Các tác giả của Zether đề xuất tạo nonce bằng mật mã, tùy thuộc vào “kỷ nguyên”. Ví dụ:

Về tính ẩn danh trong blockchain dựa trên tài khoản
Здесь x là khóa bí mật của người gửi và Gepoch — một trình tạo bổ sung cho kỷ nguyên, thu được bằng cách băm một chuỗi có dạng 'Zether + '. Bây giờ, vấn đề dường như đã được giải quyết - chúng tôi không tiết lộ số nonce của người gửi và không can thiệp vào số nonce của những người tham gia không liên quan. Nhưng cách tiếp cận này đặt ra một hạn chế nghiêm trọng: một tài khoản có thể gửi không quá một giao dịch trong mỗi “kỷ nguyên”. Thật không may, vấn đề này vẫn chưa được giải quyết và hiện tại, theo ý kiến ​​​​của chúng tôi, phiên bản ẩn danh của Zether khó có thể phù hợp để sử dụng.

Sự phức tạp của việc không có bằng chứng kiến ​​thức

Trong UTXO, người gửi phải chứng minh với mạng rằng anh ta không chi tiêu số tiền âm, nếu không, có thể tạo ra tiền mới một cách bất ngờ (tại sao điều này lại có thể xảy ra, chúng tôi đã viết ở một trong những phần trước). Điều). Đồng thời ký vào các “đầu vào” bằng chữ ký vòng để chứng minh rằng trong số tiền được trộn lẫn có số tiền thuộc về mình.

Trong phiên bản ẩn danh của blockchain dựa trên tài khoản, các biểu thức chứng minh phức tạp hơn nhiều. Người gửi chứng minh rằng:

  1. Số tiền gửi là dương;
  2. Số dư không âm;
  3. Người gửi đã mã hóa chính xác số tiền chuyển (bao gồm cả số XNUMX);
  4. Số dư trên số dư chỉ thay đổi đối với người gửi và người nhận;
  5. Người gửi sở hữu khóa riêng cho tài khoản của mình và anh ta thực sự có tên trong danh sách người gửi (trong số những người có liên quan);
  6. Nonce được sử dụng trong giao dịch được soạn thảo chính xác.

Để chứng minh phức tạp như vậy, tác giả sử dụng hỗn hợp Báo cáo dự kiện (nhân tiện, một trong những tác giả đã tham gia vào việc tạo ra nó) và Giao thức Sigma, được gọi là đạn Sigma. Bằng chứng chính thức cho tuyên bố như vậy là một nhiệm vụ khá khó khăn và nó hạn chế đáng kể số lượng người sẵn sàng triển khai công nghệ.

Kết quả ra sao?

Theo quan điểm của chúng tôi, phần Zether mang lại quyền riêng tư cho các chuỗi khối dựa trên tài khoản có thể được sử dụng ngay bây giờ. Nhưng hiện tại, phiên bản ẩn danh của công nghệ này đặt ra những hạn chế nghiêm trọng đối với việc sử dụng nó cũng như sự phức tạp trong việc triển khai nó. Tuy nhiên, không nên giảm giá vì các tác giả chỉ phát hành nó cách đây vài tháng và có lẽ ai đó sẽ tìm ra giải pháp cho những vấn đề tồn tại ngày nay. Rốt cuộc, đây là cách khoa học được thực hiện.

Nguồn: www.habr.com

Thêm một lời nhận xét