Cập nhật thiết kế Ouroboros Genesis
Ngày 20 tháng 05 năm 2024 - Chia sẻ bài viết này trên Twitter | Facebook | Telegram
Đi sâu vào thiết kế và triển khai Ouroboros Genesis, phiên bản mới nhất của giao thức đồng thuận chịu trách nhiệm về độ tin cậy và bảo mật của Cardano
Ouroboros Genesis là một loạt các cải tiến cho giao thức Ouroboros vốn đã mạnh mẽ, với các biện pháp đối phó để bảo vệ node mạng khi nó mới hoặc quay trở lại sau một thời gian offline.
Ouroboros là giao thức đồng thuận ở trung tâm của blockchain Cardano. Với sự phát triển liên tục và mức độ sử dụng ngày càng tăng của Cardano, Ouroboros đã tiến triển theo lộ trình nâng cấp theo kế hoạch của mình. Ouroboros Classic là giao thức proof-of-stake đầu tiên được chứng minh là an toàn. Ouroboros BFT là giải pháp tạm thời cho phép cập nhật Byron. Ouroboros Praos tiếp tục phát triển Ouroboros Classic. Sự phát triển của Ouroboros sẽ tiến thêm một bước nữa với Ouroboros Genesis, hiện đang được lên kế hoạch phân phối vào quý 3 năm 2024.
Bài viết này mô tả các cập nhật gần đây về quá trình phát triển và triển khai giao thức Ouroboros Genesis.
Câu chuyện Ouroboros cho đến nay
Blockchain là một sổ cái phân tán được sao chép trên các máy được gọi là Node. Bởi vì không có thể chế trung tâm duy nhất nên phải tồn tại một cơ chế để đảm bảo tính nhất quán và bất biến của tất cả các bản sao sổ cái. Cơ chế đó là giao thức đồng thuận. Giao thức cũng đặt ra các ưu đãi để các node xác thực các khối mới và thêm chúng vào chuỗi.
Ouroboros chia thời gian của Cardano thành các epoch và các slot. Các slot biểu thị khoảng thời gian ngắn nhất khi các khối có thể được tạo.
Ouroboros Classic được chứng minh là an toàn khi hầu hết các node đều trực tuyến và có các bản sao sổ cái nhất quán. Kẻ tấn công không thể dự đoán node nào sẽ là node leader ở slot tiếp theo (Slot leader - node sẽ thêm một khối mới vào chuỗi), khiến các cuộc tấn công trở nên rất tốn kém.
Ouroboros Praos đã tăng tính ngẫu nhiên trong việc lựa chọn Slot leader tiếp theo và bổ sung các biện pháp đối phó với các cuộc tấn công có thể xảy ra khác.
Ouroboros Genesis sẽ giải quyết tình huống node tham gia mạng lần đầu tiên (bắt đầu từ khối khởi nguồn) hoặc tham gia lại sau một thời gian offline kéo dài. Các node như vậy sẽ ở trong tình trạng dễ bị tổn thương cho đến khi chúng bắt kịp. Ví dụ: một cuộc tấn công chuỗi dài xảy ra khi kẻ tấn công cố gắng viết lại lịch sử của chuỗi. Kẻ tấn công tích lũy một lượng cổ phần lớn, cho phép họ bí mật tạo các khối nhanh hơn mainnet. Sau đó, khi chuỗi lịch sử thay thế đã sẵn sàng, kẻ tấn công cố gắng chuyển mainnet sang chuỗi của chúng. Việc triển khai Genesis sẽ giảm thiểu các cuộc tấn công chuỗi dài, trừ khi node đồng bộ hóa bị che khuất. Một cuộc tấn công "che dấu" xảy ra khi kẻ tấn công cố gắng bao vây node nạn nhân bằng các node độc hại, che dấu mạng thực.
Diễn biến mới nhất Genesis giới thiệu các khái niệm mới sau:
- Sổ cái mạng ngang hàng
- Điểm kiểm tra nhẹ (dưới dạng dự phòng/ghi đè tạm thời)
- Giới hạn về mức độ nhiệt thành (LoE)
- Ngắt mật độ kết nối Genesis (GDD)
- Giới hạn sự kiên nhẫn (LoP)
- Máy trạng thái Genesis.
Sổ cái mạng ngang hàng
Sự khác biệt sâu sắc nhất so với bài nghiên cứu của Genesis là một quyết định kiến trúc ban đầu nhằm duy trì giới hạn của node Praos khi khôi phục. Theo Praos, node Cardano sẽ không quay ngược lại quá 2.160 khối nếu không có sự can thiệp thủ công. Như đã nêu trong bài nghiên cứu Genesis, một node bị tấn công Eclipse chỉ có thể chọn các phần mở rộng của chuỗi của kẻ tấn công trong nhiều năm và sau đó, khi cuối cùng nó kết nối với một node phục vụ chuỗi trung thực, sẽ đột ngột khôi phục bất kỳ số khối nào.
Vì trên thực tế, node chưa chắc phải có thể khôi phục không giới hạn nên thay vào đó, các kiến trúc sư đã ưu tiên giới hạn khôi phục, đây là chìa khóa cho nhiều giới hạn trong việc sử dụng tài nguyên. Việc bỏ nó cho Genesis sẽ loại bỏ một bất biến chủ yếu được viện dẫn bởi một phần đáng kể của công việc kỹ thuật trước đó. Hơn nữa, miễn là node Cardano Genesis đồng bộ hóa có quyền truy cập vào một node mạng ngang hàng trung thực lành mạnh, thì giống như node Praos, nó sẽ không yêu cầu khôi phục hơn 2.160 khối.
Tấn công Eclipse có thể là mối đe dọa đáng kể hơn đối với node Genesis so với những gì được trình bày trong bài nghiên cứu, bài nghiên cứu không đề cập trực tiếp đến chúng. Các cuộc tấn công này gây nguy hiểm cho thuộc tính an toàn của Genesis, vì Eclipse kéo dài hơn vài giây là đủ để node Genesis đồng bộ hóa có thể chọn 2.161 khối từ chuỗi của kẻ tấn công, mặc dù thực hiện trung thực các so sánh mật độ Genesis. Nếu không biết về chuỗi trung thực, quy tắc Genesis sẽ chỉ chọn chuỗi có mật độ cao nhất hiện có. Trong tình huống tấn công Eclipse, đó có thể chưa chắc phải là chuỗi trung thực. Điều này trái ngược với bài nghiên cứu của Genesis, trong đó một node bị che khuất và người dùng của nó chỉ bị trì hoãn, nhầm lẫn, thông tin sai, v.v. Điều đó mang đến những rủi ro liên quan, nhưng không ảnh hưởng đến các thuộc tính bảo mật hoặc tính hoạt động, vì node cuối cùng có thể kết nối một node khác trung thực và do đó phục hồi.
Chỉ xem xét mạng Praos, trong đó về mặt lý thuyết, các node không bao giờ bị tụt lại phía sau, Eclipse vẫn có thể gây bất lợi. Điểm khác biệt chính với Genesis là node Praos (vốn đã bị bắt kịp) có thể chịu được Eclipse lâu hơn nhiều trước khi có xác suất đáng kể rằng nó có thể phạm phải một chuỗi đối nghịch. Tuy nhiên, ngay cả khi không xem xét lỗ hổng bảo mật bổ sung trong quá trình đồng bộ hóa, node Praos vẫn cần một số biện pháp bảo vệ chống lại Eclipse.
Một cách bảo vệ là đưa ra khái niệm về sổ cái mạng ngang hàng trong logic lựa chọn mạng ngang hàng để ràng buộc đủ xác suất và thời gian xảy ra Eclipse. Trong khi đồng bộ hóa, node Genesis sẽ điều chỉnh cấu hình mạng ngang hàng của sổ cái của nó để giảm đáng kể khả năng bị che khuất. Và nếu không có Eclipse, node Genesis sẽ không bao giờ chọn được 2.161 khối từ chuỗi đối nghịch.
Lựa chọn mạng ngang hàng đã thay đổi hoạt động như thế này. Bằng cách kiểm tra mức phân phối cổ phần gần đây, node Genesis sẽ chọn các node mạng ngang hàng mẫu đã tham gia duy trì mạng, giúp giảm đáng kể xác suất chọn các node độc hại.
Một dự phòng: điểm kiểm tra nhẹ
Bài nghiên cứu Genesis chứng minh rằng chuỗi tốt nhất trong mạng Praos hoạt động tốt sẽ có nhiều khối hơn bất kỳ chuỗi nào khác trong một cửa sổ slot cố định ngay sau điểm giao nhau của hai chuỗi. Ngoại lệ duy nhất là nếu mạng Praos không hoạt động tốt.
Một sự cố ngừng hoạt động mạng nghiêm trọng sẽ biện minh cho việc thực hiện kế hoạch khắc phục thảm họa, một kế hoạch đòi hỏi sự hợp tác off-chain giữa các bên liên quan để viết lại chuỗi trong khoảng thời gian ngừng hoạt động nhằm sửa chữa chuỗi trung thực. Sau khi điều đó xảy ra, quy tắc của Genesis sẽ lại ủng hộ chuỗi trung thực.
Tuy nhiên, việc thực hiện kế hoạch khắc phục thảm họa vốn đã khó khăn và tốn kém. Ít nhất trong thời gian chờ đợi, một cơ chế kiểm tra đơn giản sẽ cho phép một tập hợp con hợp tác đủ lớn gồm những người vận hành stake pool thận trọng nhanh chóng và dễ dàng duy trì quyền kiểm soát mạng trong hoặc ngay sau khi ngừng sản xuất khối.
Logic đơn giản và nhất quán với phần còn lại của giao thức: một tệp cấu hình chỉ định danh sách số khối và cặp băm, mỗi cặp khiến bất kỳ khối nào khác có cùng số khối bị coi là không hợp lệ. Dữ liệu cấu hình của điểm kiểm tra đó phải được sử dụng cẩn thận và chỉ được lấy từ các nguồn đáng tin cậy. Lý tưởng nhất là việc thực hiện cuối cùng của kế hoạch khôi phục sẽ cho phép (và thậm chí yêu cầu) những bổ sung phản ứng vào danh sách điểm kiểm tra là tạm thời. Các điểm kiểm tra vĩnh viễn duy nhất sẽ là bộ đảm bảo các khóa khởi nguồn của kỷ nguyên Byron không còn liên quan đến chuỗi Cardano.
Limit on eagerness
Vì các sổ cái mạng ngang hàng ngăn chặn tấn công eclipses một cách hiệu quả, nên một node đồng bộ hóa có thể cho rằng nó có ít nhất một mạng ngang hàng lành mạnh phục vụ một chuỗi trung thực nào đó. Do đó, thuộc tính an toàn được đảm bảo trực tiếp bằng cách cấm node Genesis đồng bộ hóa không bao giờ chọn hơn 2.160 khối của chuỗi qua điểm giao nhau của chuỗi sổ cái mạng ngang hàng của nó. Nó sẽ chỉ chọn các khối mà tất cả các node khác trong sổ cái đều đồng ý, gần như chắc chắn bao gồm một node khác trung thực. Ràng buộc này được đặt tên là Giới hạn mức độ nhiệt thành (Limit on eagerness - LoE), vì node đang đồng bộ hóa không được tin tưởng quá mức với khối tốt nhất mà nó từng thấy. Một kẻ tấn công mạng ngang hàng có thể cung cấp các khối thay thế của nó nhanh hơn nhiều so với bất kỳ node trung thực nào khác để cung cấp các khối lịch sử.
Genesis density disconnection (Ngắt mật độ kết nối Genesis)
Việc kẻ tấn công lạm dụng LoE để khiến nạn nhân ngừng đồng bộ hóa các khối là chuyện bình thường, vi phạm thuộc tính tồn tại của node đồng bộ hóa. Có ba cách để làm như vậy:
• Máy mạng ngang hàng tấn công tuyên bố nó không còn khối nào nữa
• Máy mạng ngang hàng tấn công phục vụ một chuỗi thay thế
• Máy mạng ngang hàng tấn công tuyên bố nó có các khối thay thế nhưng cũng không phục vụ chúng.
Quy tắc cơ bản từ bài nghiên cứu Genesis trực tiếp giảm thiểu hai quy tắc đầu tiên. Nếu hai mạng ngang hàng đang phục vụ các chuỗi khác nhau và ít nhất một trong các chuỗi có không ít hơn 2.161 khối sau điểm giao nhau, Genesis sẽ ưu tiên chuỗi có nhiều khối hơn trong cửa sổ slot cố định sau điểm giao nhau của hai chuỗi. (Một chuỗi trung thực sẽ luôn giành chiến thắng trong sự so sánh đó. Hãy nhớ rằng tiền tố chung phản ánh sự giao nhau của chuỗi, ngay cả khi một trong các chuỗi chỉ đơn giản là phần mở rộng của một chuỗi khác.) node Genesis sẽ ưu tiên chuỗi trung thực bằng cách ngắt kết nối với chuỗi mạng ngang hàng khác. Hành động này được gọi là ngắt kết nối mật độ Genesis (Genesis density disconnection - GDD). Sau khi có đủ GDD, điểm giao nhau của các node còn lại sẽ xa hơn dọc theo lịch sử của chuỗi trung thực.
Limit on patience (Giới hạn sự kiên nhẫn)
Vector tấn công thứ ba là khó phân tích nhất. GDD bị vô hiệu hóa do thiết bị mạng ngang hàng tuyên bố có nhiều khối hơn. Nghĩa là, nó tuyên bố rằng số khối của nó trong cửa sổ cố định đó sẽ tăng lên nếu được phép có thêm thời gian để phục vụ nhiều khối hơn. Một người mạng ngang hàng trung thực luôn thực sự đưa ra tuyên bố đó cho đến khi node đồng bộ hóa thực sự có tất cả các khối trung thực. Nhưng một kẻ tấn công mạng ngang hàng có thể đưa ra tuyên bố đó một cách thiếu thiện ý. Giới hạn về sự kiên nhẫn (LoP) đảm bảo rằng một người mạng ngang hàng tuyên bố có nhiều khối hơn phải thực sự gửi chúng và thực hiện việc đó một cách nhanh chóng. Điều phức tạp chính là ngay cả các node khác trung thực cũng không thể duy trì khả năng phản hồi hoàn hảo trong nhiều giờ liên tục, đôi khi chúng sẽ có các đợt trễ, v.v. Vì lý do này, LoP được triển khai như một leaky bucket cho mỗi node khác, trong đó rò rỉ là tốc độ xử lý chặn trong khi đối tác mạng ngang hàng đã xác nhận quyền sở hữu các khối và đang phục vụ chúng chậm hơn so với một số tốc độ tối thiểu hào phóng nào đó, nhưng dung lượng bộ chứa của mỗi đối tác trung thực sẽ đủ cao để hấp thụ các đợt trễ thường được mong đợi từ các đối tác có sổ cái lành mạnh.
Máy trạng thái Genesis
Node Genesis sẽ vô hiệu hóa LoE, GDD và LoP sau khi kết thúc, vì hai lý do quan trọng. Đầu tiên, một node bị bắt kịp trong mạng Praos về cơ bản phải tạo ra khối tốt nhất có thể vào một slot mà nó được chọn. Ví dụ: nếu một node như vậy vẫn đang sử dụng quy tắc Genesis, một kẻ tấn công mạnh có thể lạm dụng LoE để tạm thời cấm nạn nhân chọn khối mà nó vừa tạo ra, do đó ngăn chặn nó lan truyền vào mạng. Rất khó để hạn chế ảnh hưởng của vectơ như vậy trên toàn hệ thống và do đó, node Genesis sẽ hoạt động chính xác giống như node Praos bất cứ khi nào nó không đồng bộ hóa.
Thứ hai, một node bị bắt kịp không cần nhiều node mạng ngang hàng như một node đồng bộ hóa, vì nó không dễ bị Eclipse. Do đó, tải tăng thêm đáng kể trên mạng do tất cả các node duy trì số lượng mạng ngang hàng trong sổ cái tăng cao là không cần thiết và không mong muốn. Máy trạng thái Genesis quản lý các quá trình chuyển đổi của node giữa việc xem bản thân nó có bị bắt kịp hay không:
Khi bắt kịp, node sẽ vô hiệu hóa LoE, GDD và LoP.
Một node kết luận rằng nó đã bị bắt kịp nếu các điều kiện này được đáp ứng:
- Nó có đủ sổ cái mạng ngang hàng
- Tất cả các node khác đều tuyên bố không có khối bổ sung nào (điều mà LoP được điều chỉnh tốt đảm bảo phải xảy ra đủ sớm)
- Node đã chọn chuỗi tốt nhất trong số các chuỗi mạng ngang hàng. Điều này mạnh mẽ hơn việc tin tưởng vào độ tuổi của lựa chọn cục bộ, v.v. Vì một kẻ tấn công mạng ngang hàng có thể kích hoạt các ngưỡng như vậy, khiến nạn nhân sớm hạ thấp khả năng phòng thủ của mình.
Một node sẽ quay trở lại trạng thái đồng bộ hóa nếu đầu chuỗi của nó quá cũ (ví dụ: 20 phút hoặc lâu hơn). Đáng chú ý, điều này sẽ xảy ra trong suốt thời gian tồn tại của quá trình hệ điều hành của node nếu máy ngủ đủ lâu (ví dụ: người dùng đóng nắp máy tính xách tay của họ một lúc).
Bước tiếp theo
Thiết kế trên đã ổn định trong khoảng một năm trở lại đây. Mặc dù nó vẫn đang phát triển một chút nhưng không có thay đổi lớn nào. IOG đã hợp tác với Tweag trong nhiều tháng qua để triển khai và thử nghiệm nó.
Quá trình triển khai đầu tiên có thể của Genesis dự kiến phát hành vào quý 3 năm 2024. Ở giai đoạn này, điều chưa biết lớn nhất còn lại là mức độ tối ưu hóa cần thiết để bù đắp cho số lượng mạng ngang hàng tăng lên cần thiết để ngăn chặn Eclipse.
Cho đến lúc đó, thiết kế mạng ngang hàng khởi động sắp ra mắt đóng vai trò là bước tăng trưởng cho Genesis. Máy trạng thái khởi động là một biến thể đơn giản hơn của máy trạng thái Genesis. Trong khi đồng bộ hóa, một node chỉ giao tiếp với các node khởi động mạng ngang hàng, mỗi node trong số đó đều đáng tin cậy và do đó LoE, GDD và LoP là không cần thiết. Ngược lại, Genesis sẽ cho phép một node đồng bộ hóa bao gồm các node mạng ngang hàng không cần tin cậy một cách an toàn, miễn là nó không bị che khuất (tức là miễn là một node mạng ngang hàng trung thực), điều này sẽ cho phép gỡ bỏ các node mạng ngang hàng khởi động, từ đó Phi tập trung cơ sở hạ tầng để đồng bộ hóa các node và hoàn thành nhiệm vụ. lời hứa của Ouroboros Genesis.
Neil Burgess đã đóng góp cho tác phẩm này.
Nguồn bài viết tại đây
Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới