Đ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
Tác giả: Nicholas Frisby
Người đóng góp: Neil Burgess
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ệ nút mạng khi nó mới hoặc quay trở lại sau khi vắng mặt.
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 đưa vào sử dụng 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à nút. Bởi vì không có cơ quan trung ương 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 nút 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 kỷ nguyên (epoch), được chia thành các slot. Các slot biểu thị khoảng thời gian ngắn khi các khối được tạo ra.
Ouroboros Classic được chứng minh là an toàn khi hầu hết các nút (node) đều trực tuyến và có các bản sao sổ cái (ledger) nhất quán. Đối thủ không thể dự đoán nút nào sẽ là nút dẫn đầu vị trí tiếp theo (nút sẽ thêm một khố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 người dẫn đầu vị trí 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 nút tham gia mạng lần đầu tiên (bắt đầu từ khối nguyên thủy (genesis block) ) hoặc tham gia lại sau một thời gian vắng mặt kéo dài. Các nút như vậy đang ở 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 tầm xa (long-range attach) xảy ra khi kẻ thù cố gắng viết lại lịch sử của chuỗi. Đối thủ 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 chuỗi chính. Sau đó, khi chuỗi lịch sử thay thế đã sẵn sàng, đối thủ sẽ cố gắng chuyển chuỗi chính sang chuỗi của đối thủ. Việc triển khai Genesis sẽ giảm thiểu các cuộc tấn công tầm xa, trừ khi nút đồng bộ hóa bị lu mờ . Một cuộc tấn công che khuất (eclipse attack) xảy ra khi kẻ thù cố gắng bao vây nút nạn nhân (the victim node) bằng các nút độc hại, che khuất mạng thực.
Những phát triển mới nhất
Genesis giới thiệu các khái niệm mới sau:
- Sổ cái ngang hàng (ledger peers)
- Điểm kiểm tra nhẹ (lightweight checkpointing) (như một phương án dự phòng/tạm thời thay thế)
- Giới hạn độ nhiệt tình (limit on eagerness - LoE)
- Ngắt kết nối mật độ genesis (genesis density disconnections - GDD)
- Giới hạn độ kiên nhẫn (limit on patience - LoP)
- Máy trạng thái Genesis (Genesis state machine).
Sổ cái ngang hàng (ledger peers)
Sự khác biệt sâu sắc nhất so với Genesis paper là một quyết định kiến trúc ban đầu nhằm duy trì giới hạn của nút Praos khi khôi phục. Theo Praos, nút Cardano sẽ không quay trở lại quá 2.160 khối nếu không có sự can thiệp thủ công. Như đã nêu trong Genesis paper, một nút bị tấn công nhật thực (eclipse attack) chỉ có thể chọn các phần mở rộng của chuỗi đối thủ trong nhiều năm và sau đó, khi cuối cùng nó kết nối với một nút phục vụ chuỗi trung thực (honest chain), sẽ đột ngột khôi phục bất kỳ số khối nào.
Vì trên thực tế, một nút không cần thiết phải có khả năng 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à nút Cardano Genesis đồng bộ hóa có quyền truy cập vào một nút ngang hàng trung thực lành mạnh, thì giống như nút Praos, nó sẽ không yêu cầu khôi phục hơn 2.160 khối.
Nhật thực (Eclipses) có khả năng là mối đe dọa đáng kể hơn đối với nút Genesis so với những gì được trình bày trong paper, paper 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ì nhật thực (Eclipses) kéo dài hơn vài giây là đủ để nút Genesis đồng bộ hóa có khả năng chọn 2.161 khối từ chuỗi đối thủ, mặc dù thực hiện trung thực các so sánh mật độ Genesis. Nếu không có kiến thức về chuỗi trung thực (honest chain), quy tắc Genesis sẽ chỉ chọn chuỗi dày đặc nhất hiện có. Trong tình huống nhật thực (Eclipses), đó có thể không nhất thiết phải là chuỗi trung thực (honest chain). Điều này trái ngược với bài báo của Genesis, trong đó một nút bị lu mờ 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 an toàn hoặc tính sống động, vì nút cuối cùng có thể kết nối một nút trung thực (honest peer) và do đó phục hồi.
Chỉ xem xét mạng Praos, trong đó về mặt lý thuyết, các nút không bao giờ bị tụt lại phía sau, nhật thực (Eclipses) vẫn có thể gây bất lợi. Điểm khác biệt chính với Genesis là nút Praos (vốn đã bị bắt kịp) có thể chịu được nhật thực 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 (adversarial chain). 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, nút Praos vẫn cần một số biện pháp bảo vệ chống lại nhật thực (Eclipses).
Một cách bảo vệ là đưa ra khái niệm về sổ cái ngang hàng (ledger peers) trong logic lựa chọn ngang hàng để ràng buộc đủ xác suất và thời gian xảy ra nhật thực. Trong khi đồng bộ hóa, nút Genesis sẽ điều chỉnh cấu hình ngang hàng của sổ cái của nó để giảm đáng kể khả năng bị lu mờ. Và nếu không có nhật thực, nút Genesis sẽ không bao giờ chọn được 2.161 khối từ chuỗi đối nghịch (adversarial chain).
Lựa chọn 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, nút Genesis sẽ chọn các nút 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 nút độc hại.
Phương án dự phòng: điểm kiểm tra nhẹ (lightweight checkpointing)
Genesis Paper 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ổ cố định ngay sau giao điểm của hai chuỗi. Ngoại trừ duy nhất trường hợp 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 ngoài chuỗi 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 nhóm cổ phần 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 chỉ 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.
Giới hạn độ nhiệt tình (limit on eagerness - LoE)
Vì các sổ cái ngang hàng ngăn chặn nhật thực (Eclipses) một cách hiệu quả, nên một nút đồng bộ hóa có thể cho rằng nó có ít nhất một nút hoạt động ổn định và hiệu quả (healthy peer) phục vụ tất cả một chuỗi trung thực (honest chain) nào đó. Do đó, thuộc tính an toàn được đảm bảo trực tiếp bằng cách cấm nút Genesis đồng bộ hóa không bao giờ chọn hơn 2.160 khối của chuỗi qua giao điểm của chuỗi sổ cái ngang hàng của nó. Nó sẽ chỉ chọn các khối mà tất cả các ledger peers đều đồng ý, gần như chắc chắn bao gồm một nút trung thực (honest peer). Ràng buộc này được đặt tên là giới hạn mức độ háo hức (LoE) , vì nút đồng bộ hóa không được cam kết háo hức với khối tốt nhất mà nó từng thấy cho đến nay. Một đối thủ ngang hàng có thể phục vụ các khối thay thế của nó nhanh hơn nhiều so với bất kỳ đối thủ trung thực nào có thể phục vụ các khối lịch sử.
Ngắt kết nối mật độ Genesis (Genesis density disconnection)
Kẻ tấn công có thể dễ dàng lạm dụng giới hạn độ nhiệt tình (LoE) để khiến nạn nhân ngừng đồng bộ hóa các khối, vi phạm tính liveness của nút đồng bộ hóa. Có ba cách để thực hiện điều này:
• Peer tấn công tuyên bố rằng nó không còn khối nào nữa
• Peer tấn công cung cấp một chuỗi thay thế
• Peer tấn công tuyên bố rằng nó có các khối thay thế nhưng cũng không cung cấp chúng.
Quy tắc cơ bản từ bài báo Genesis trực tiếp giảm thiểu hai cách đầu tiên. Nếu hai peer đang phục vụ các chuỗi khác nhau và ít nhất một trong số 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ổ cố định của các slot sau điểm giao nhau của hai chuỗi. (Một chuỗi trung thực sẽ luôn thắng trong so sánh đó. Hãy nhớ rằng một tiền tố chung phản ánh một điểm giao nhau của chuỗi, ngay cả khi một trong các chuỗi chỉ đơn giản là sự mở rộng của chuỗi kia.) Nút Genesis sẽ ưu tiên chuỗi trung thực bằng cách ngắt kết nối với peer khác. Hành động này được gọi là ngắt kết nối mật độ Genesis (GDD). Sau đủ số lần GDD, điểm giao nhau của các peer còn lại sẽ xa hơn trên chuỗi trung thực lịch sử.
Giới hạn độ kiên nhẫn (limit on patience - LoP)
Vector tấn công thứ ba là khó phân tích nhất. GDD bị vô hiệu hóa do peer tuyên bố rằng 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ụ thêm các khối. Một Peer trung thực luôn thực sự đưa ra tuyên bố đó, cho đến khi nút đồ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 ngang hàng (attacking peer) có thể đưa ra tuyên bố đó với ý đồ xấu. Giới hạn độ kiên nhẫn (LoP) đảm bảo rằng peer 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 peer 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 dưới dạng nhóm rò rỉ (leaky bucket) cho mỗi peer, trong đó rò rỉ là tốc độ xử lý các khối trong khi peer đã 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 tốc độ tối thiểu nào đó, nhưng dung lượng bộ chứa của mỗi peer trung thực sẽ đủ cao để hấp thụ các đợt trễ thường thấy từ các healthy ledger peers (sổ cái ổn định).
Máy trạng thái Genesis
Nút Genesis sẽ vô hiệu hóa LoE, GDD và LoP sau khi nó kết luận rằng nó đã bắt kịp, vì hai lý do quan trọng. Đầu tiên, một nút đã 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 nút 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 ngăn chặn 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 đó, nút Genesis sẽ hoạt động chính xác giống như nút Praos bất cứ khi nào nó không đồng bộ hóa.
Thứ hai, một nút bị bắt kịp không cần nhiều peer như một nút đồng bộ hóa, vì nó không dễ bị nhật thực. Do đó, tải thêm đáng kể trên mạng do tất cả các nút duy trì số lượng peer 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 nút giữa việc xem bản thân nó đã bắt kịp hay chưa?
• Khi đã bắt kịp, nút sẽ vô hiệu hóa LoE, GDD và LoP.
• Một nút 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 ngang hàng (ledger peers)
- tất cả các peer đề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)
- nút đã chọn chuỗi tốt nhất trong số các chuỗi của peer.
Đ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 peer tấn cô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 nút sẽ quay trở lại trạng thái đồng bộ hóa nếu đỉnh của 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 nút 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 tiếp tục phát triển 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ể sử dụng 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 peer tăng lên cần thiết để ngăn chặn các cuộc tấn công nhật thực.
Cho đến khi đó, thiết kế bootstrap peer ra mắt sắp tới sẽ đóng vai trò là bước tiến tới Genesis. Máy trạng thái bootstrap 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 nút chỉ giao tiếp với các peer khởi động, mỗi peer 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 nút đồng bộ hóa bao gồm các peer không đáng tin cậy một cách an toàn, miễn là nó không bị tấn công nhật thực (tức là miễn là một peer trung thực), điều này sẽ cho phép loại bỏ bootstrap peers, từ đó phân cấp cơ sở hạ tầng để đồng bộ hóa các nút và hoàn thành lời hứa của Ouroboros Genesis.
Original version: Ouroboros Genesis design update | Essential Cardano
*Hãy góp ý để bản dịch được hoàn hảo hơn nhé!