Sự đồng thuận trong công nghệ Blockchain
1.
Công nghệ blockchain
1.
1 Khái niệm
Blockchain là một công nghệ phi tập trung cho phép người dùng thực hiện các giao dịch (ví dụ: tài sản kỹ thuật số).
Về mặt kỹ thuật,
nó là một sổ cái phân tán được sao chép qua một mạng các nút ngang hàng,
trong đó các nút đều lưu trữ cục bộ một bản sao của sổ cái.
Dữ liệu trên sổ cái đó có thể được đọc và ghi bởi mọi nút,
nhưng việc sửa đổi lịch sử các giao dịch đã được xác thực là rất khó về mặt tính toán.
Do đó,
dữ liệu đã được lưu trên blockchain là không thể bị xóa hay bị thay đổi.
Như tên gọi của nó,
“blockchain” tức là chuỗi các khối,
mỗi khối lưu trữ một phần thông tin của toàn bộ hệ thống và nó được liên kết với khối tiếp theo tạo thành một chuỗi.
1.
2 Đặc điểm
Khía cạnh đáng chú ý nhất của blockchain là sự tin tưởng.
Tất cả các phát minh vĩ đại được sinh ra để lấp một “lỗ hổng” nào đó và với trường hợp của blockchain là lỗ hổng về sự tin tưởng.
Bình thường để 2 bên giao dịch không quen biết có thể tin tưởng lẫn nhau thì cần một bên thứ 3 có đủ độ tin cậy giúp đỡ.
Nhờ có blockchain với các thủ tục phi tập trung (hợp đồng thông minh) của mình giúp cho 2 bên giao dịch không cần bên trung gian nào cả từ đó là đơn giản hóa quá trình giao dịch.
Blockchain cũng đảm bảo tính giả ẩn danh.
Các nút trên mạng blockchain đều được xác định bằng một địa chỉ độc nhất.
Địa chỉ này được hiển thị cho mọi nút trên mạng nhưng danh tính thực sự của người sở hữu địa chỉ thì được ẩn.
Để cả thiện tính ẩn danh,
những địa chỉ có thể được tạo mới liên tục để tránh bị theo dõi.
Như vậy Blockchain có 3 đặc tính quan trọng: không cần sự cho phép,
phi tập trung,
sự tin cậy.
Các nút trong mạng blockchain có thể quyền: ghi,
đọc và xác nhận block (giao dịch).
Dựa vào các quyền này blcokchain chia ra làm:
Chuỗi riêng tư (private blockchainchain): chỉ có các nút được định trước có thể truy cập vào blockchain để xác nhận và ghi các block mới.
Ưu điểm là các block được thêm vào nhanh hơn.
Tuy nhiên điểm yếu là nhân tố con người vì các nút cần có cơ chế xác nhận có thể bị tấn công.
Ví dụ về các dự án dùng chuỗi riêng tư: IBM Fabric,
Hyperledger.
Chuỗi công khai (public blockchain): các nút được tự do tham gia vào mạng,
dữ liệu được lưu trữ trên tất cả các nút,
các nút đều có thể trở thành nút có quyền ghi và xác thực block.
Chuỗi liên hợp (Consortium blockchain): sự kết hợp giữa private blockchainchain và public blockchain.
Ví dụ: các công ty hợp tác với nhau và họ cần chia sẻ chung một sổ cái.
Mạng blockchain có bộ ba bất khả thi được gọi là Trilemma đó là: Tính phi tập trung,
tính bảo mật,
tính mở rộng.
Tức là để phát triển được ít nhất một đặc tính thì phải giảm một hoặc 2 đặc tính còn lại.
1.
3 Cách thức hoạt động
Khi một dữ liệu mới được tạo và cần đưa lên mạng blockchain,
nút sẽ thông báo nó qua toàn bộ mạng.
Các nút trong mạng sẽ xác thực cả dữ liệu và trạng thái của người tham gia,
sử dụng các thủ tục đã quy định trước (sự đồng thuận).
Theo định kỳ,
thủ tục này sẽ chọn ra block đúng tiếp theo được tạo ra bởi một nút đã hoàn thành được nhiệm vụ theo yêu cầu của thủ tục.
Sau khi block mới được tạo ra nó sẽ được đồng bộ cho toàn mạng.
Một nút sau khi nhận được block mới nó có thể chấp nhận hoặc không chấp nhận block mới này.
Từ đó có thể xảy ra sự phân nhánh,
tuy nhiên các nút sẽ làm việc theo cơ chế “chuỗi dài nhất” (the longest chain).
2.
Sự đồng thuận trong blockchain (consensus in blockchain)
2.
1 Mục đích của sự đồng thuận trong blockchain
Mục đích chính của sự đồng thuận là cho phép các nút đồng ý về một trạng thái duy nhất của sổ cái và để tránh hai vấn đề: chi tiêu kép (double-spending) và tạo sự phân nhánh (fork).
Chi tiêu kép: cho phép kẻ tấn công gửi cùng một giao dịch hai lần nhưng đến người nhận khác nhau,
nếu không có cơ chế phát hiện thì nó cho blockchain không nhất quán và không an toàn.
Chống lại sự phân nhánh (fork): ta cần xem xét hai vấn đề tạo nên sự phân nhánh đó là:
Độ trễ trong việc truyền dữ liệu trong mạng của khối và các giao dịch
Cùng một lúc xuất hiện nhiều block đúng trong mạng.
Một thuận toán đồng thuận tốt nên chỉ cho phép xuất hiện 1 block đúng một lúc.
Nếu không thì sẽ xảy ra trường hợp bị phân nhánh tức là trong 1 thời điểm các nút nhận được 2 block đúng,
thì nó sẽ phải lưu cả 2 lại và chờ,
trong bitcoin ít nhất sau 6 blocks khác thêm vào,
thì mới bỏ đi nhánh mồ côi (orphan branch),
theo luật chuỗi dài nhất (the longest chain).
Tuy nhiên điều này có thể làm cho mạng bị tấn công double spending.
2.
2 Tính chất cần có của sự đồng thuận trong blockchain
a.
safety: đảm bảo sự phân nhánh không xảy ra
b.
liveness: đảm bảo các nút trung thực làm việc và đưa ra các block mà không có sự can thiệp từ bên ngoài.
Tuy nhiên với một hệ thống phân tán không đồng bộ,
thì không có thuật thoán đồng thuận xác định nào có thể giải quyết được cả 2 vấn đề trong khi duy trì khả năng chịu lỗi -> có sự đánh đổi (bitcoin thì ưu tiên liveness hơn).
Để đạt được cả 2 thì mạng cần thêm năng lượng tính toán cho hệ thống,
vd ngẫu nhiên hóa,
phát hiện lỗi,
chọn các sổ cái,
các giả định thời gian khác nhau…
2.
3 Phân loại sự đồng thuận trong blockchain
Về cách thức tham gia của thành viên
không cần sự cho phép (permissionless): sự tham gia của các thành viên là hoàn toàn mở.
Bitcoin,
Etherium.
Không cần sự cho phép công khai (public permissionless): bất kỳ ai tham gia mạng,
tham gia vào quá trình đồng thuận và các chuỗi khối được phép công khai,
trong đó chỉ có một nhóm nút cụ thể chịu trách nhiệm chạy quy trình đồng thuận.
Không cần sự cho phép riêng tư (private-permissionless): Chạy bên trong một tổ chức,
các thành viên đều tham gia và chạy quá trình đống thuận
Cần sự cho phép (permissioned): thành viên điều hành đồng thuận thì được chọn trước bởi thành viên có thẩm quyền.
Cần sự cho phép riêng tư (private (or consortium) permissioned) được cấp phép thường chạy bên trong mạng nội bộ của tổ chức.
Chỉ một nhóm thành viên cụ thể tham gia vào mạng lưới và tham gia vào sự đồng thuận.
Hyperledger
Về cách thức đồng thuận:
Public: bất kỳ ai cũng có thể trở thành thành viên và phát hành các giao dịch qua mạng mà không cần đăng ký trước đó.
Private: có một danh sách xác định trước các thành viên có quyền truy cập trực tiếp vào blockchain (đọc) và phát hành các giao dịch thông qua mạng (ghi).
Consortium: gần giống private khi mà vấn đề phân tán bị kiểm soát.
Vd khi nhiều công ty hợp tác với nhau và dùng chung các nút xác thực.
3.
Vấn đề chuỗi dài nhất (the longest chain)
Chuỗi dài nhất (khái niệm này xuất hiện trong PoW) là chuỗi mà các nốt chấp nhận là bản hợp lệ của blockchain.
Quy tắc là các nút áp dụng chuỗi dài nhất cho phép mọi nút trên mạng chấp nhận về blockchain hiện tại và do đó chấp nhận về cùng một lịch sử giao dịch.
Chuỗi dài nhất là chuỗi các khối mà tốn nhiều công sức nhất để xây dựng.
VD trong PoW thì cần sử dụng sức mạnh tính toán,
vậy chuỗi dài nhất là chuỗi các khối tốn nhiều năng lượng tính toán nhất.
Thường thì blockchain với nhiều block hơn thì sẽ tốn nhiều năng lượng hơn và theo luật thì khối này sẽ được chấp nhận.
Tuy nhiên,
điều này ko không thực sự đúng khi mà chuỗi tốn nhiều năng lượng nhất để xây dựng không nhất thiết là chuỗi dài nhất.
Bởi vì khi mà độ khó của bài toán thay đổi thì việc tạo các block yêu cầu nhiều năng lượng hơn.
Độ khó tăng dần khi nhiều thợ đào tham gia và ngược lại.
Các thợ đào thường sẽ tham ra vào đào chuỗi dài nhất.
Chuỗi dài nhất được tính bởi chainwork – là tổng số hàm băm được mong đợi là cần thiết để tạo ra chuỗi hiện tại [Pieter Wuille]
Các bạn có thể tìm hiểu kỹ hơn trong [2].