Cải thiện sharding với các mô hình bảo mật tốt hơn

Một biện pháp phổ biến trong giới Bitcoin, và tôi hoàn toàn đồng ý, đó là các blockchain như Bitcoin (hoặc Ethereum) KHÔNG hoàn toàn dựa vào giả định đa số trung thực. Nếu có một cuộc tấn công 51% vào một blockchain như vậy, thì kẻ tấn công có thể làm một số việc khó chịu, như hoàn nguyên hoặc kiểm duyệt các giao dịch, nhưng chúng không thể chèn các giao dịch không hợp lệ. Và ngay cả khi họ thực hiện hoàn nguyên hoặc kiểm duyệt các giao dịch, người dùng chạy các node thông thường có thể dễ dàng phát hiện ra hành vi đó, vì vậy nếu cộng đồng muốn phối hợp để giải quyết cuộc tấn công bằng một folk làm mất đi sức mạnh của kẻ tấn công thì họ có thể thực hiện một cách nhanh chóng.

Việc thiếu bảo mật bổ sung này là điểm yếu chính của các chuỗi TPS tập trung hơn. Các chuỗi như vậy không và không thể có văn hóa người dùng thường xuyên chạy các node, và do đó, các node chính và những người chơi trong hệ sinh thái có thể dễ dàng kết hợp với nhau hơn và áp đặt một sự thay đổi giao thức mà cộng đồng rất không thích. Thậm chí tệ hơn, các node của người dùng theo mặc định sẽ chấp nhận nó. Sau một thời gian, người dùng sẽ nhận thấy, nhưng khi đó việc thay đổi giao thức bắt buộc sẽ là một lỗi lầm: gánh nặng điều phối sẽ thuộc về người dùng để từ chối thay đổi và họ sẽ phải đưa ra quyết định khó khăn là hoàn nguyên giá trị của một ngày hoặc một tuần hoạt động mà mọi người nghĩ đã được hoàn thành.

Lý tưởng nhất là chúng tôi muốn có một hình thức sharding tránh các giả định tin cậy 51% về tính hợp lệ và duy trì nền tảng bảo mật mạnh mẽ mà các blockchain truyền thống có được từ quá trình xác minh đầy đủ. Và đây chính xác là những gì chúng tôi đã nghiên cứu trong vài năm qua.

1. Xác minh tính toán có thể mở rộng

Chúng ta có thể chia vấn đề xác thực khả năng mở rộng chống được tấn công 51% thành hai trường hợp:

  • Xác thực tính toán: kiểm tra xem một số tính toán (computation) đã được thực hiện chính xác hay chưa, giả sử bạn có tất cả các đầu vào cho tính toán
  • Xác thực tính khả dụng của dữ liệu: kiểm tra xem bản thân các đầu vào cho phép tính có được lưu trữ ở một số dạng mà bạn có thể tải xuống nếu bạn thực sự cần; việc kiểm tra này nên được thực hiện mà không cần tải xuống toàn bộ dữ liệu đầu vào (vì dữ liệu có thể quá lớn để tải xuống cho mọi khối)

Xác thực một khối trong blockchain liên quan đến cả tính toán và kiểm tra tính khả dụng của dữ liệu: bạn cần phải tin rằng các giao dịch trong khối là hợp lệ và root hash ở trạng thái mới được yêu cầu trong khối là kết quả chính xác của việc thực hiện các giao dịch đó, nhưng bạn cũng cần phải tin rằng đủ dữ liệu từ khối đã thực sự được xuất bản để người dùng tải xuống dữ liệu đó có thể tính toán trạng thái và tiếp tục xử lý chuỗi khối. Phần thứ hai này là một khái niệm khá khó hiểu nhưng quan trọng được gọi là vấn đề về tính khả dụng của dữ liệu; tôi sẽ nói thêm về điều này sau.

Tính toán xác thực theo quy mô tương đối dễ dàng; có hai nhóm kỹ thuật: fraud proofs (bằng chứng gian lận)ZK-SNARK .

Bằng chứng gian lận là một cách để xác minh tính toán một cách có thể mở rộng.

Hai công nghệ này có thể được mô tả đơn giản như sau:

  • Fraud proofs là một hệ thống chấp nhận kết quả tính toán, bạn yêu cầu ai đó có tiền đặt cọc ký vào một thông báo có dạng "Tôi xác nhận rằng nếu bạn thực hiện tính toán Cvới đầu vào X, bạn sẽ nhận được đầu ra Y". Bạn tin tưởng những tin nhắn này theo mặc định, nhưng bạn để ngỏ cơ hội cho người khác có tiền đặt cọc thực hiện một thách thức (một tin nhắn có chữ ký nói rằng "Tôi không đồng ý, đầu ra là Z"). Chỉ khi có một thử thách, tất cả các node mới chạy tính toán. Bất kỳ bên nào sai trong hai bên sẽ mất tiền đặt cọc và tất cả các phép tính phụ thuộc vào kết quả của phép tính đó sẽ được tính lại.
  • ZK-SNARK là một dạng bằng chứng mật mã trực tiếp chứng minh tuyên bố "thực hiện tính toán C trên đầu vào X cho ra đầu ra Y". Bằng chứng là mã hóa "sound": nếu C(x)không bằng Y, đó là tính toán để làm một bằng chứng hợp lệ. Bằng chứng cũng nhanh chóng được xác minh, ngay cả khi việc chạy C chính nó mất rất nhiều thời gian.

Tính toán dựa trên fraud proofs có thể mở rộng vì "trong trường hợp thông thường" bạn thay thế việc chạy một phép tính phức tạp bằng việc xác minh một chữ ký. Có một trường hợp ngoại lệ, trong đó bạn phải xác minh tính toán trên chuỗi vì có một thử thách, nhưng trường hợp đặc biệt là rất hiếm vì việc kích hoạt nó rất tốn kém (người yêu cầu ban đầu hoặc người thách thức mất một khoản tiền gửi lớn). ZK-SNARK đơn giản hơn về mặt khái niệm - chúng chỉ thay thế một phép tính bằng một xác minh bằng chứng rẻ hơn nhiều - nhưng phép toán đằng sau cách chúng hoạt động phức tạp hơn đáng kể.

Có một lớp hệ thống bán mở rộng chỉ xác minh tính toán theo quy mô, trong khi vẫn yêu cầu mọi node xác minh tất cả dữ liệu. Điều này có thể được thực hiện khá hiệu quả bằng cách sử dụng một tập hợp các thủ thuật nén để thay thế hầu hết dữ liệu bằng tính toán. Đây là lĩnh vực của Roll Up.

2. Mở rộng xác thực tính khả dụng của dữ liệu trở nên khó hơn

Không thể sử dụng fraud proof để xác minh tính khả dụng của dữ liệu. Các fraud proof để tính toán dựa trên thực tế là các đầu vào cho phép tính được xuất bản trực tuyến tại thời điểm yêu cầu ban đầu được gửi và vì vậy nếu ai đó thách thức, việc thực hiện thử thách sẽ diễn ra trong cùng một "môi trường" mà lần thực thi ban đầu là đang xảy ra. Trong trường hợp kiểm tra tính khả dụng của dữ liệu, bạn không thể làm điều này, vì vấn đề chính xác là có quá nhiều dữ liệu cần kiểm tra để xuất bản nó trên chuỗi. Do đó, một kế hoạch fraud proof để cung cấp dữ liệu gặp phải một vấn đề chính: ai đó có thể tuyên bố "dữ liệu X khả dụng" mà không xuất bản nó, đợi để được thử thách và chỉ sau đó xuất bản dữ liệu X và làm cho kẻ thách thức xuất hiện với phần còn lại của mạng không chính xác.

Điều này được mở rộng trong tình thế tiến thoái lưỡng nan của ngư dân:

Ý tưởng cốt lõi là hai "thế giới", một thế giới trong đó V1 là một nhà phát hành gian ác và V2 là một kẻ thách thức trung thực và một nơi mà V1 là một nhà xuất bản trung thực và V2 là một kẻ thách thức gian ác, không thể phân biệt được với bất kỳ ai không cố gắng tải xuống phần dữ liệu cụ thể đó vào thời điểm đó. Và tất nhiên, trong một blockchain phi tập trung có thể mở rộng, mỗi node riêng lẻ chỉ có thể tải xuống một phần nhỏ dữ liệu, vì vậy chỉ một phần nhỏ các node sẽ thấy bất cứ điều gì về những gì đã xảy ra ngoại trừ thực tế là có bất đồng.

Thực tế là không thể phân biệt được ai đúng ai sai khiến không thể có một kế hoạch fraud proof hoạt động để cung cấp dữ liệu.

2.1 Vậy nếu một số dữ liệu không có sẵn thì sao? Với ZK-SNARK, bạn có thể chắc chắn rằng mọi thứ đều hợp lệ, nhưng như vậy vẫn chưa đủ?

Thật không may, tính hợp lệ đơn thuần là không đủ để đảm bảo một blockchain chạy chính xác. Điều này là do nếu blockchain hợp lệ nhưng tất cả dữ liệu không có sẵn, thì người dùng không có cách nào cập nhật dữ liệu mà họ cần để tạo ra bằng chứng rằng bất kỳ khối nào trong tương lai là hợp lệ. Kẻ tấn công tạo ra một khối hợp lệ nhưng không khả dụng nhưng sau đó biến mất có thể làm ngưng trệ blockchain một cách dễ dàng. Ai đó cũng có thể giữ lại dữ liệu tài khoản của một người dùng cụ thể cho đến khi người dùng trả tiền chuộc, do đó, vấn đề không hoàn toàn là vấn đề tồn tại.

Có một số lập luận lý thuyết-thông tin mạnh mẽ cho rằng vấn đề này là điều phải chấp nhận và không có phương pháp hiệu quả nào giải quyết được vấn đề này. Xem bài báo này để biết chi tiết.

2.2 Vì vậy, làm thế nào để bạn kiểm tra xem 1 MB dữ liệu có sẵn mà không thực sự tải xuống đống dữ liệu đó? Điều đó nghe có vẻ không thể!

Bí quyết là một công nghệ được gọi là lấy mẫu tính khả dụng của dữ liệu (data availability sampling). Lấy mẫu tính khả dụng của dữ liệu hoạt động như sau:

  1. Sử dụng một công cụ được gọi là erasure coding để mở rộng một phần dữ liệu có N phần thành một phần dữ liệu có 2N phần sao cho N bất kỳ phần nào trong số đó có thể khôi phục toàn bộ dữ liệu.
  2. Để kiểm tra tính sẵn sàng, thay vì cố gắng để tải toàn bộ dữ liệu, người dùng chỉ đơn giản là chọn ngẫu nhiên một hằng số của các vị trí trong khối (ví dụ là vị trí thứ 30), và chấp nhận khối chỉ khi họ đã thành công tìm thấy các khối trong khối tại tất cả vị trí đã chọn của họ.

Erasure coding chuyển đổi vấn đề "kiểm tra 100% tính khả dụng" (mọi phần dữ liệu đều có sẵn) thành vấn đề "kiểm tra tính khả dụng 50%" (ít nhất một nửa số dữ liệu có sẵn). Lấy mẫu ngẫu nhiên giải quyết vấn đề 50% tính khả dụng. Nếu ít hơn 50% dữ liệu có sẵn, thì ít nhất một trong các lần kiểm tra gần như chắc chắn sẽ không thành công và nếu ít nhất 50% dữ liệu có sẵn sau đó, trong khi một số node có thể không nhận ra một khối là có sẵn, thì phải chỉ có một node trung thực để chạy quy trình xây dựng lại erasure coding để khôi phục 50% khối còn lại. Và do đó, thay vì cần tải xuống 1 MB để kiểm tra tính khả dụng của khối 1 MB, bạn chỉ cần tải xuống một vài kb. Điều này làm cho việc chạy kiểm tra tính khả dụng của dữ liệu trên mọi khối trở nên khả thi.

Một ZK-SNARK có thể được sử dụng để xác minh rằng erasure coding trên một phần dữ liệu được thực hiện chính xác và sau đó các nhánh Merkle có thể được sử dụng để xác minh các phần riêng lẻ. Ngoài ra, bạn có thể sử dụng các cam kết đa thức (ví dụ: cam kết Kate), về cơ bản thực hiện erasure coding chứng minh các yếu tố riêng lẻ và xác minh tính đúng đắn tất cả trong một thành phần đơn giản - và đó là những gì Ethereum sharding đang sử dụng.

2.3 Tóm tắt lại: làm thế nào chúng ta đảm bảo mọi thứ đều chính xác một lần nữa?

Giả sử rằng bạn có 100 khối và bạn muốn xác minh tính đúng đắn một cách hiệu quả cho tất cả chúng mà không cần dựa vào các ủy ban. Chúng ta cần làm như sau:

  • Mỗi máy khách thực hiện lấy mẫu tính khả dụng của dữ liệu trên mỗi khối, xác minh rằng dữ liệu trong mỗi khối có sẵn, trong khi chỉ tải xuống một vài kilobyte cho mỗi khối ngay cả khi toàn bộ khối có kích thước là megabyte hoặc lớn hơn. Khách hàng chỉ chấp nhận một khối khi tất cả dữ liệu về các thách thức về tính khả dụng của họ đã được phản hồi chính xác.
  • Bây giờ chúng tôi đã xác minh tính khả dụng của dữ liệu, việc xác minh tính đúng đắn trở nên dễ dàng hơn. Có hai kỹ thuật:
  1. Chúng ta có thể sử dụng fraud proofs: một số người tham gia với số tiền đặt cọc có thể đăng ký về tính đúng đắn của mỗi khối. Các node khác, được gọi là challenger (hoặc fishermen) kiểm tra ngẫu nhiên và cố gắng xử lý đầy đủ các khối. Vì chúng ta đã kiểm tra tính khả dụng của dữ liệu nên sẽ luôn có thể tải xuống dữ liệu và xử lý đầy đủ bất kỳ khối cụ thể nào. Nếu họ tìm thấy một khối không hợp lệ, họ sẽ đăng một thách thức mà mọi người xác minh. Nếu khối bị lỗi, thì khối đó và tất cả các khối trong tương lai phụ thuộc vào khối đó cần được tính toán lại.
  2. Chúng ta có thể sử dụng ZK-SNARK. Mỗi khối sẽ đi kèm với một ZK-SNARK chứng minh tính đúng đắn.
  • Trong một trong hai trường hợp trên, mỗi khách hàng chỉ cần thực hiện một lượng nhỏ công việc xác minh cho mỗi khối, bất kể khối đó lớn đến mức nào. Trong trường hợp của fraud proofs, đôi khi các khối sẽ cần được xác minh đầy đủ trên chuỗi, nhưng điều này cực kỳ hiếm vì việc kích hoạt dù chỉ một thử thách cũng rất tốn kém.

Và đó là tất cả những gì cần làm! Trong trường hợp của Ethereum sharding, kế hoạch ngắn hạn là chỉ làm dữ liệu các khối phân mảnh; nghĩa là, các phân đoạn hoàn toàn là một "công cụ cung cấp dữ liệu" và nhiệm vụ của các layer-2 rollups là sử dụng không gian dữ liệu an toàn đó, cộng với fraud proofs hoặc ZK-SNARK, để triển khai các khả năng xử lý giao dịch an toàn thông lượng cao. Tuy nhiên, bạn hoàn toàn có thể tạo một hệ thống tích hợp như vậy để thêm thực thi thông lượng cao "native".


Đây là dự án cá nhân của người viết với mục đích tổng hợp lại suy nghĩ về công nghệ từ nhiều lập trình viên xuất sắc và biên soạn lại thành những bài viết của riêng mình về công nghệ blockchain. Mỗi một bài viết sẽ là một bài luận riêng về các chủ đề khác nhau trong công nghệ blockchain. Đây là cách học tốt nhất mà mình biết trong việc củng cố khả năng ghi nhớ cũng như độ hiểu biết về bất kì một chủ đề nào đó.

Tất cả credit của bài viết này xin gửi tới Vitalik Buterin - nhà sáng lập Ethereum.

Đừng quên đăng ký Otis Report - Nơi cung cấp và cập nhật nhanh nhất mọi thông tin vĩ mô và phương pháp đầu tư tăng trưởng với giá trị vượt thời gian.

Hãy đăng ký và tham gia các nhóm, channel của Otis Report dưới đây để được thảo luận cùng các chuyên gia và nhiều Otiser khác:

Bạn đã đăng ký thành công Otis Report
Xác minh thành công! Giờ đây, bạn đã có toàn quyền truy cập vào tất cả nội dung cao cấp của Otis Report.
Lỗi! Không thể đăng ký. Liên kết không hợp lệ.
Chào mừng trở lại! Bạn đã đăng nhập thành công.
Lỗi! Không thể đăng nhập. Vui lòng thử lại.
Thành công! Tài khoản của bạn đã được kích hoạt hoàn toàn, bây giờ bạn có quyền truy cập vào tất cả nội dung.
Lỗi! Kiểm tra Stripe thất bại.
Thành công! Thông tin thanh toán của bạn đã được cập nhật.
Lỗi! Cập nhật thông tin thanh toán không thành công.