Cafe sáng blockchain số 5

 Bài toán các vị tướng Byzantine - Giao thức đồng thuận BFT

----
Có lẽ mọi người hay nghe đến các giao thức đồng thuận PoS,DPoS nhiều hơn rất nhiều so với BFT, và có vẻ nó cũng dễ hiểu hơn.
Nhưng có 1 thực tế là BFT phổ biến thứ 2 chỉ sau PoW (Hiện tại có thể đã vượt lên cả PoW), vì BFT thường được sử dụng kết hợp với các giao thức khác như PoS, PoW,POA,... hay chỉ sử dụng mỗi BFT. Vậy BFT là gì và nó hoạt động như thế nào?
BFT là viết tắt của Byzantine Fault Tolerance. Nghĩa là “Khả năng chịu lỗi Byzantine”
Để hiểu được BFT, trước hết, mình sẽ nói về nguồn gốc của cái tên này.
----
Bài toán các vị tướng Byzantine được đưa ra bởi 3 nhà khoa học máy tính Leslie Lamport, Robert Shostak và Marshall Pease vào năm 1982.
Bài toán các vị tướng Byzantine miêu tả về một nhóm các vị tướng trong đội quân Byzantine (quân đội đế quốc Đông La Mã), tiến hành vây hãm 1 thành phố, mỗi tướng đóng quân tại 1 điểm khác nhau xung quanh thành phố này.
Các vị tướng cần trao đổi để đạt được đến 1 thỏa thuận về kế hoạch tác chiến.
Trong trường hợp đơn giản nhất, các vị tướng cần đạt được sự đồng thuận về việc nên tấn công hay rút lui. Nếu tấn công và để giành thắng lợi thì cần phần lớn các tướng cùng tấn công, nếu chỉ có 1 bộ phận nhỏ tấn tông thì họ sẽ thất bại vì lực lượng mỏng.
Các vấn đề chính của bài toán này là:
  • Nếu có 1 số tướng làm phản, gửi thông tin nhiễu loạn, không thống nhất đến các tướng khác.
    Ví dụ có 3 vị tướng, A muốn tấn công, B muốn rút lui. C làm phản, gửi thông điệp tấn công đến A, nhưng lại gửi thông điệp rút lui đến B
    ==>A tưởng là đa số (⅔) tấn công, có thể ăn chắc phần thắng⇒ tấn công
    Không ngờ khi ra trận thì có mỗi A⇒ Thất bại vì yếu thế hơn.
  • Người đưa tin bị bắt, nội dung thư bị sửa đổi.
  • Tướng này mạo danh tướng kia để gửi thông tin sai.
  • 1 vị tướng, 1 cánh quân bị tiêu diệt mà các bên còn lại không biết, nên cứ chờ.
Đó là vấn đề được đưa ra, và nó rất giống với các vấn đề về sự giao tiếp để đạt được sự đồng thuận giữa các node trong mạng lưới blockchain.
Trong các hệ thống blockchain, may mắn thay, có thể sử dụng chữ ký điện tử, nên sẽ không gặp phải vấn đề mạo danh, hay nội dung thông điệp bị sửa đổi. Vấn đề lớn nhất sẽ nằm ở vấn đề “gian lận”, hay “làm phản", hay bị lỗi
-----
Để giải quyết vấn đề của các vị tướng Byzantine, PoW cũng là 1 giải pháp.
Nakamoto Satoshi cũng từng trực tiếp giải thích về cách Bitcoin dùng PoW để giải quyết bài toán các vị tướng Byzantine trong một email gửi đi ngày 14/11/2008. Xem tại đây https://satoshi.nakamotoinstitute.org/.../cryptogr.../11/...
-----
Ngoài ra thì có rất nhiều cách khác nữa để giải quyết bài toán này, trong đó có 1 phương pháp gọi là BFT (Byzantine Fault Tolerance).
BFT có rất nhiều biến thể, như PBFTrBFT,IBFT,,... vân vân và mây mây.
Trong phạm vi bài này, mình xin phép tóm gọi lại mindset của giao thức đồng thuận BFT như sau:
  • Trong số các node blockchain, có những node đặc biệt tham gia vào việc tạo block và bỏ phiếu cho các block, gọi là các validator.
  • Các validator thay phiên nhau tạo các block (khi đến lượt thì tạo, và tạo phát ăn luôn, không có độ khó như PoW). Tạo xong thì đề xuất cho hội đồng các validator để vote.
  • Mục tiêu là hệ thống vẫn có thể tiếp tục hoạt động bình thường nếu có tối đa 1/3 validator bị lỗi,hoặc gian lận
    (cụ thể là f validator trong tổng số 3f+1 validator, hoặc có 1 số biến thể như 5f+1,7f+1)
  • Toàn mạng lưới sẽ chấp nhận khi có tối thiểu ⅔ tổng số node đồng ý
    (cụ thể là >= 2f+1 trong tổng số 3f+1 validator). Có 1 số biến thể như 5f+1, 7f+1,..)
  • Nếu 1 block không đạt được đồng thuận( không đạt , hay 2f+1) thì bỏ qua và chuyển sang node khác tạo block mới
  • Thông thường BFT sẽ chia làm 3 round:
  • 1: Propose (Đề xuất): 1 validator khi đến lượt sẽ đề xuất 1 khối mới, và gửi nó đến tất cả các validator còn lại.
  • 2: Pre-vote: Các validator cùng bỏ phiếu về việc chuẩn bị commit cho block (vote lần 1).
  • 3. Pre-commit: Các validator cùng bỏ phiếu về việc đồng ý cho block này được đưa vào chain (commit). Nếu bước này OK thì block sẽ được phát tán ra toàn mạng lưới(commit) cho các node bình thường. Và các validator bắt đầu quy trình tạo block mới.
Chắc sẽ có nhiều bạn thắc mắc, tại sao lại phải vote 2 lần? Câu trả lời là đối với các hệ thống 3f+1 node(chịu được tối đa f node lỗi) thì 1 vòng là không đủ an toàn. Nếu ở các dung sai thấp hơn(như 5f+1 chẳng hạn) thì có thể chỉ cần 1 lần đề xuất và 1 lần vote, Chi tiết có thể mình sẽ viết 1 bài chuyên sâu khác.
Ưu điểm của BFT:
  • Đó là tiết kiệm năng lượng, không cần đào, và khả năng chịu lỗi cao.
Nhược điểm:
  • Với mỗi block mới thì hội đồng các validator cần đến 3 vòng giao tiếp ⇒ Giao tiếp quá nhiều==> khi số lượng validator quá nhiều thì quá trình tạo 1 block sẽ bị chậm đi.
  • Nhưng nếu số lượng validator quá ít thì lại không đảm bảo về tính phi tập trung.
BFT kết hợp với các giao thức đồng thuận khác như thế nào:
Ví dụ kết hợp với PoS:
  • Tỷ lệ số block được phép đề xuất dựa trên tỷ lệ cổ phần
  • Trọng số của phiếu cầu dựa trên tỷ lệ cổ phần. thay vì ⅔ số validator thì là ⅔ tổng số cổ phần.


Nhận xét

Bài đăng phổ biến từ blog này

Tấn công thao túng giá trong DeFi - đơn giản, hay gặp nhưng khó nhận diện

Cafe sáng blockchain - tập 1. PHI TẬP TRUNG (decentralized)

Ai bảo bitcoin là hữu hạn

Tổng số lượt xem trang