Chương 1 GIỚI THIỆU TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN VÀ THƯƠNG MẠI ĐIỆN TỬ 1. Giới thiệu chung về công nghệ Blockchain Blockchain về cơ bản là một cơ sở dữ liệu được phân phối của các bản ghi hoặc sổ cái công khai của tất cả các giao dịch hoặc các sự kiện kỹ thuật số đã được thực hiện và chia sẻ giữa các bên tham gia. Mỗi giao dịch trong sổ cái công khai được xác minh bởi sự đồng thuận của đa số những người tham gia trong hệ thống. Ngoài ra, một khi đã nhập thông tin không bao giờ có thể bị xóa bỏ.
Công nghệ Blockchain [19] sử dụng chữ ký điện tử [6,11,15,16] và hàm băm [5,17,18] để đảm bảo tính minh bạch, toàn vẹn và riêng tư của dữ liệu; sử dụng mô hình truyền dữ liệu Peer to Peer (mô hình mạng ngang hàng) [4,13,14], mỗi một nút trong mạng như một Client và cũng là một Server để lưu trữ bản sao ứng dụng, và áp dụng các nguyên tắc đối với các nút tham gia vào hệ thống đều phải tuân thủ luật chơi đồng thuận [1,3,10,19].1 Cấu trúc khối “Blockchain”: Về bản chất nó là các chuỗi khối liên kết với nhau như dạng danh sách liên kết nhưng có thể truy xuất ngược từ khối cuối (hiện tại) đến khối đầu tiên. Nó thực sự như một cuốn sổ cái phân tán (Distributed ledger) mà mỗi giao dịch (gọi là khối) trong sổ bao gồm các thông tin được lưu trữ như sau: (1) Dữ liệu (Data): Dữ liệu trong mỗi khối phụ thuộc vào loại Blockchain, ví dụ blockchain của bitcoin chứa thông tin về các giao dịch như thông tin người gửi, người nhận tiền và số bitcoin được giao dịch; blockchain về bảo hiểm y tế sẽ lưu trữ các thông tin về đối tượng được hưởng bảo hiểm, lịch sử sức khỏe của đối tượng đó; …(2) Mã băm (Hash): Dùng để nhận dạng một khối và các dữ liệu trong đó. Mã này là duy nhất, nó tương tự như dấu vân tay. Bất kỳ sự thay đổi nào trong khối 3 thì mã băm cũng sẽ thay đổi; (3) Mã băm đối chiếu (Hash of previous block) sẽ tạo thành chuỗi.
Bất cứ sự thay đổi một khối sẽ khiến các khối tiếp theo không phù hợp. Tuy nhiên, trong thế giới hiện đại và thông minh hiện nay, sử dụng những đoạn mã băm không thôi là chưa đủ để ngăn chặn những sự thay đổi, sự giả mạo. Thực tế, có Hình 1.1: Chuỗi khối Blockchain (Linkedin.com) hàng trăm, hàng nghìn chiếc máy tính với cấu hình ‘khủng’ có thể tính toán hàng trăm nghìn các mã băm trên một giây; tức là khi một khối bị thay đổi dữ liệu, tức mã băm của khối sẽ thay đổi, các máy tính can thiệp vào quá trình thay đổi, giả mạo đó sẽ tính toán lại tất cả các mã băm của các khối tiếp theo sao cho phù hợp và liên kết với các khối trước đó và kết quả là sổ cái Blockchain bị thay đổi giả mạo hoàn toàn. Để giảm thiểu vấn đề này, Blockchain đã được trang bị thêm phương tiện đó là thuật toán đồng thuận, 4 trong đó có 02 loại thuật toán đồng thuận được triển khai phổ biến: Thuật toán bằng chứng công việc (PoW) và thuật toán bằng chứng cổ phần (PoS).
* Thuật toán bằng chứng công việc (Proof of work hay viết tắt là PoW): Cơ chế của PoW là làm chậm lại quá trình hình thành những khối Block mới; ví dụ trong trường hợp Bitcoin, để tính toán bằng chứng công việc theo yêu cầu thì mất khoảng 10 phút, sau đó mới có một khối mới được hình thành vào chuỗi. Với cơ chế PoW này, việc giả mạo dường như là không thể, vì khi thay đổi dữ liệu của một khối, người can thiệp giả mạo sẽ phải tính toán lại toàn bộ bằng chứng công việc của những khối tiếp theo; như vậy chúng ta hãy hình dùng xem, mỗi khối để tính toán lại mất tối thiểu 10 phút, với hàng trăm, hàng nghìn khối thì thời gian sẽ nhiều như thế nào. * Thuật toán bằng chứng cổ phần (Proof of Stake hay viết tắt là PoS): ngược lại với PoW, thuật toán PoS là cách khác để xác minh các giao dịch. Với PoS, người tạo ra khối mới sẽ được lựa chọn một cách ngẫu nhiên, dựa trên giá trị cổ phẩn (hay còn gọi là stake) của họ có.
Người này có trách nhiệm xác nhận tính hợp lệ của các khối mới. Để trở thành một người xác nhận, thì người này phải đặt cọc một khoản tiền nhất định (đó là stake, và khoản tiền này sẽ bị mất nếu người này thực hiện xác nhận một giao dịch gian lận) và người xác nhận chỉ được khai thác. Khi xác nhận được một khối thành công, người xác nhận sẽ nhận được phần thưởng là khoản tiền phí liên quan của các giao dịch tương ứng trong khối đó. Nếu người này không muốn tiếp tục làm người xác nhận, sau một khoảng thời gian nhất định để xác thực người này không thực hiện bất kỳ một xác nhận giả mạo nào, thì cổ phẩn và tiền kiếm được của họ sẽ được hoàn lại.
Như vậy, sẽ rất mất thời gian và tiền để thực hiện một xác nhận một khối block giả. Hai giải thuật đồng thuận PoS được dùng phổ biến nhất hiện nay là Algorand [3] và Ouroboros [1,10] được mô tả như sau: 5 Algorand: Fullnodes dùng cơ chế đồng thuận Byzantine (hoặc cơ chế đồng thuận khác) để bầu ra một node gọi là Leader và một tập các node gọi là hội đồng chứng thực (Selected verifier committee) như sau: Mỗi nút sử dụng gossip để lan truyền thông tin báo cho các nút khác trong mạng lượng “stake” của nó. Mọi nút đều có danh sách tổng hợp về “stake” của tất cả các nút. Bước 1: Mỗi nút thực thi hàm ngẫu nhiên (Pseudorandom Number Generator) để lựa chọn ra một tập gồm k nút ứng cử viên.
Bước 2: Các nút gossip tập hợp các nút ứng cử viên mà mỗi nút đã chọn cho các nút khác. Mọi nút đều thu thập được các tập nút ứng cử viên. Bước 3: Nút xuất hiện nhiều nhất trong các tập ứng cử viên sẽ là nút lãnh đạo. Mọi nút khác đều đạt đồng thuận về nút lãnh đạo và chờ block mới được gửi tới.
Ngoài cách trên còn có các cách khác như sau: Chain-based PoS: các nút được tổng hợp lại thành một danh sách có trọng số theo lượng “stake” mà mỗi nút đang có. Sau đó nút lãnh đạo được lựa chọn từ danh sách đó → chỉ một nút được nhận thưởng. Delegated PoS: Một số nút được chọn ngẫu nhiên làm ứng cử viên từ danh sách các nút. Sau đó các nút còn lại sẽ “đầu tư stake” cho các nút ứng cử viên.
Sau đó nút lãnh đạo được bầu ngẫu nhiên từ danh sách ứng cử viên → Các nút ủng hộ cho nút lãnh đạo cũng được nhận thưởng. “Coin Age” PoS: “Stake” của mỗi nút được thêm một thuộc tính “tuổi” (age). Tuổi của các nút sẽ tăng dần theo thời gian. Khi nút “đủ tuổi” thì nút đó sẽ được quyền làm lãnh đạo → Giảm tỉ lệ “người giàu” được làm lãnh đạo thường xuyên.
Sau khi bầu được Leader và tập hội đồng chứng thực, Leader tạo ra một block mới và đưa dữ liệu vào block, gửi block tới hội đồng chứng thực. Mỗi 6 lần tạo block mới ta sẽ bầu một Leader mới và hội đồng chứng thực mới khác nhau. Sau đó hội đồng chứng thực dùng chữ kí điện tử của mình để kí xác thực lên block này, kèm theo bằng chứng chứng minh mình là một thành viên của hội đồng chứng thực. Tất cả thông tin này gọi là chứng thực số của Block.
Block mới kèm theo chứng thực số của Block được gửi tới tất cả các Fullnode, các Fullnode sẽ kiểm tra chứng thực số của Block là hợp lệ thì sẽ công nhận Block và dữ liệu được lưu trong Block. Ouroboros: Hệ thống có n Full Node S1, S2, …, Sn. Mỗi Si có cặp khóa (vki, ski). Chia thời gian thành các Slot (time stamp), sl1, sl2, ….
Mỗi Slot có một leader để tạo Block ở Slot đó. Ví dụ như hệ thống Bitcoin mỗi Slot khoảng 6 phút. Có thể có Slot ko có block nào. Blockchain bao gồm chuỗi Block B0, B1, B2, …Bk.
Trong đó B0 là genesis Block (Block khởi tạo) chứa danh sách các khóa công khai vk1, vk2, …, vkn Mỗi Block Bi = (h, d, sl, sigsl, sigblock), h là giá trị băm của block trước đó, d là dữ liệu của block, sig là chữ ký của leader Block 1 = (h = Hash(Block 0), d, sl1, sigsl_1, sigblock_1) ; Block 2 = (h = Hash(Block 1), d, sl2, sigsl_2, sigblock_2) ; Block 3 = (h = Hash(Block 2), d, sl3, sigsl_3, sigblock_3) ; …… Khi Full node nhận được dữ liệu tx, nó đưa tx vào bảng tạm (có thể gửi chữ ký xác nhận đã nhận được tx cho người gửi). Mỗi tx được lưu trong u vòng (u Slot). Blockchain update: bất cứ khi nào Full node có được một chuỗi Block mới B0, B’1, B’2, …B’s với s>k nó thay thế Blockchain cũ bằng chuỗi mới nhận được nếu từng block B’j là hợp lệ (j=1,. Tức là B’j = (h, d, slj, sigsl_j, sigblock) trong đó sig là chữ ký hợp lệ của Full node i, với i-1 = (j-1) mod n h, d như đã định nghĩa ở trên.
Blockchain Extension: mỗi Full node thứ i kiểm tra ở slot thứ j: 7 i-1 = = (j-1) mod n. Nếu đúng, Full node i trở thành leader, nó lấy dữ liệu d từ bảng tạm của nó. Tạo ra Block mới Bk+1 = (h, d, slj, sigsl_j, sigblock), trong đó h = SHA(Bk), sig là chữ ký của Full node i, sigblock = ECDSA(h,d, slj, sigsl_j). Full node i gửi Bk+1 cũng như 2t+1 Block khác gần nhất trong Blockchain của nó nếu có yêu cầu.
Dữ liệu tx được xem là hợp lệ sau v Blocks, v càng lớn hệ thống càng an toàn, tuy nhiên thời gian đợi tx hợp lệ sẽ lâu hơn. Hệ thống được chứng minh an toàn nếu số Full node trong hệ thống n >= 3t +1. Trong đó t là số tối đa các Full node không trung thực (bị tấn công). Tính không thay đổi được của dữ liệu.
Thay đổi Block 1 => Hash(Block 1) thay đổi => Block 2 thay đổi => Block 3, …. cũng sẽ thay đổi. Nếu Block thay đổi, chữ ký sigblock không còn hợp lệ -> phải ký lại.