Tìm hiểu về blockchain

Thanh Polimi
13 min readApr 5, 2023

--

Blockchain là gì

Blockchain là một cuốn sổ cái được chia sẻ mà nội dung một khi được ghi vào sẽ không thể được thay đổi nên dùng để ghi lại các giao dịch hoặc theo dõi các tài sản (assets) trong một mạng lưới các thành viên. Hầu như bất kỳ thứ gì có giá trị đều có thể được theo dõi và giao dịch trên mạng blockchain, giảm rủi ro và cắt giảm chi phí cho tất cả những người tham gia — IBM (https://www.ibm.com/topics/what-is-blockchain)

Blockchain là một danh sách tăng dần của các bản ghi, được gọi là các khối (blocks) mà được liên kết với nhau bởi thuật toán mã hoá. Mỗi khối sẽ chứa một chuỗi hash mã hoá của khối trước đó, một timestamp và dữ liệu giao dịch. Bởi vì mỗi khối chứa thông tin về khối trước đó nên chúng hình thành một chuỗi (chain) với mỗi khối thêm vào sẽ góp phần củng cố khối trước.Chính bởi vậy nó chống lại được sự sửa đổi do việc sửa đổi dữ liệu trong một khối sẽ dẫn đến việc cần phải thay đổi dữ liệu của toàn bộ các khối tiếp sau — Wikipedia ( https://en.wikipedia.org/wiki/Blockchain )

Chúng ta đã từng biết đến một cấu trúc dữ liệu cho phép tạo ra sự liên kết giữa các khối dữ liệu đó là Linked-List.

Figure 1: Linked-List Concept

Như thấy ở trên, các khối dữ liệu cũng được liên kết với nhau nhưng thông qua con trỏ( pointer ) chứa địa chỉ vùng nhớ của khối tiếp theo. Cách lưu trữ này đảm bảo rằng các khối dữ liệu tạo thành một chuỗi tuy nhiên có các điểm sau không đáp ứng được các yêu cầu của blockchain

  • Dữ liệu thêm vào tiếp theo không có sự gắn kết với dữ liệu của khối trước đó nên việc thay đổi dữ liệu trong một khối nếu có diễn ra cũng không thể bị phát hiện
  • Ở đây chúng ta sử dụng con trỏ là địa chỉ vùng nhớ, nên con trỏ này có thể dễ dàng bị thay đổi trỏ sang một vùng nhớ khác mà không gây ra sự đứt gãy về chuỗi

Để giải quyết vấn đề tăng cường tính liên kết chặt chẽ giữa các khối dữ liệu công nghệ blockchain sử dụng Hash Pointer thay vì memory pointer như linked-list. Như vậy blockchain hay chuỗi khối là một cấu trúc dữ liệu trong đó khối dữ liệu thêm vào sau được liên kết với khối dữ liệu trước đó thông qua việc chứa trong bản thân nó một liên kết dựa trên giá trị hash tính toán từ khối trước đó từ đó tạo ra sự ràng buộc chặt chẽ khiến dữ liệu được lưu trong cấu trúc khó có thể bị thay đổi một khi đã được ghi vào.

Hãy quan sát hình dưới đây để thấy được các khối (block) đã được xích lại (chain) với nhau như thế nào.

Figure 2: Hash Chain

Ta có thể quan sát thấy một số điểm sau

  • Khối đầu tiên trong chuỗi được gọi là chuỗi thuỷ tổ ( genesis block) và nó sẽ không có khối phía trước nên giá trị previous hash sẽ là một giá trị 0.
  • Các khối sau sẽ có trường previous has chứa giá trị hash được tính toán dựa trên dữ liệu của khối phía trước
  • Nếu dữ liệu của một khối thay đổi ( bao gồm dữ liệu giao dịch và previous hash ) sẽ dẫn tới giá trị hash của khối đó sẽ bị thay đổi theo khiến cho chuỗi xích sẽ bị đứt gãy nếu các khối tiếp theo không tiến hành cập nhật lại.
  • Muốn thay đổi dữ liệu một khối và duy trì tính hợp lệ của toàn chuỗi thì cần tính toán lại và cập nhật giá trị lưu trong Previous Hash của khối đó và toàn bộ các khối tiếp sau.

Như vậy blockchain với việc sử dụng Hash Pointer hình thành một cuốn sổ cái (ledger) chứa các dao dịch và khó có thể sửa đổi một mà không dẫn đến việc phải bỏ công sức ra tính toán để giữ cho nó vẫn hợp lệ.

Blockchain Hash

Như trên ta thấy các khối dữ liệu sử dụng giá trị Hash như một con trỏ móc nối với nhau. Tại sao giá trị hash lại có thể được sử dụng để “xích” các khối với nhau? Để hiểu được chúng ta tìm hiểu một chút về hàm Hash.

Hash Function

Một hàm hash ( hàm băm ) sẽ nhận một chuỗi đầu vào ( có thể là số, chữ cái hay thậm chí là các một file ảnh ) với một độ dài bất kỳ, thực hiện biến đổi nó và trả về kết quả là một chuỗi có độ dài cố định. Độ dài của chuỗi kết quả có thể khác nhau ( ví dụ 32 bit, 64 bit, 128 bit hay 256 bit) tuỳ thuộc vào hàm hash sẽ được sử dụng.

Figure 3 : How Hash Algorithms Work

Một hàm Hash là một hàm ánh xạ một chiều 1- 1 từ không gian n chiều (n tuỳ ý ) sang không gian m chiều ( m xác định trước ).

Hàm hash là implemention của một thuật toán hash. Tồn tại rất nhiều thuật toán hashing khác nhau tuy nhiên chúng đều có điểm điểm chung:

  • Chỉ thực hiện việc nén dữ liệu và tính toán rất nhanh không quá ảnh hưởng bởi kích thước dữ liệu đầu vào
  • Với một thuật toán xác định cho dù đầu vào có khác nhau như thế nào thì thông qua thuật toán, kết quả nhận được sẽ đều có một độ dài đồng nhất được quy định từ trước
  • Thuật toán hashing đều là ánh xạ một chiều tức là gần như bất khả thi để thực hiện khôi phục dữ liệu về trạng thái ban đầu từ một kết quả. (Pre-image resistance)
  • Cho một input x với giá trị hash h(x) gần như không thể tìm ra một input y với y<>x mà h(y) = h(x) (Second pre-image resistance- weak collision resistance)
  • Với x <> y thì h(x) <> h(y) hay với một đầu vào duy nhất của hàm hash xác định thì chỉ cho ra một kết quả duy nhất ( Strong collission resistance)

Khái niệm hiệu ứng tuyết lở ( avalanche effect) là tính chất mong đợi của tất cả các hàm hash. Hiệu ứng tuyết lở nói rằng chỉ một thay đổi nhỏ (thậm chí chỉ 1 ký tự ) ở văn bản đầu vào sẽ cho ra một giá trị hash đầu ra hoàn toàn khác biệt.

Figure 4 : Hash Function

Một số họ thuật toán hash phổ biến bao gồm :

  • Message Digest (MD)
  • Secure Hash Algorithm (SHA-1, SHA-2, SHA-3..)
  • RACE Integrity Primitives Evaluation Message Digest (RIPEMD)
  • Whirlpool

Nonce (Number That Only Use Once)

Ứng dụng hash vào công nghệ blockchain chúng ta thấy các step thực hiện như sau

  • Đưa các giao dịch vào block
  • Xây dựng input cho đầu vào hàm hash sử dụng : dữ liệu giao dịch + timestamp + hash value của block trước đó
  • Đẩy input vào và thực thi hàm hash để tính giá trị hash của block
  • Giá trí hash sẽ được sử dụng trong quá trình tính hash của block tiếp theo của block này.

Các thao tác cần thực hiện để thay đổi dữ liệu trong một block:

  • Như vậy giả sử nếu ta thay đổi dữ liệu transaction của một block thứ n trong chuỗi thì sẽ dẫn đến giá trị hash của block sẽ bị thay đổi. Sự thay đổi này dễ dàng kiểm tra được thông qua việc tính giá trị hash hiện tại của block n và so sánh nó với giá trị được lưu trữ trong block tiếp theo của nó — block n+1. Hai giá trị khác nhau chứng tỏ sự đứt gãy của chuỗi.
  • Để khôi phục lại tính hợp lệ của chuỗi chúng ta cần cập nhật previous hash của block n+1 sử dụng giá trị hash mới của block n.
  • Việc này dẫn đến dữ liệu của block n+1 cũng bị thay đổi và giá trị hash của nó không còn như cũ
  • Như một hiệu ứng dây chuyền ta phải tính lại giá trị hash của block n+1 và cập nhật block n+2
  • Mọi việc cứ tiếp tục như vậy cho đến hết chuỗi

Như đê cập ở trên, hàm hash có thể được tính toán rất nhanh ( nhằm giúp xác định tính hợp lệ một cách nhanh chóng ) nên việc cập nhật chuỗi tuy rằng tốn công hơn nhưng với một máy tính đủ mạnh vẫn có thể thực hiện được. Nếu tốc độ cập nhật lớn hơn tốc độ tạo block mới thì sẽ có thời điểm việc cập nhật lại hash tiến đến block cuối và hoàn thành việc hợp thức hoá sự sửa đổi. Để khắc phục điểm này người ta sử dụng thêm một khái niệm gọi là số NONCE ( Number That Use Only Once)

Số nonce được sử dụng như một đầu vào bổ sung, cùng với dữ liệu của block để thạo thành tham số đầu vào cho hàm hash khiến cho việc tính toán ra giá trị hash của block tốn thời gian hơn mà không ảnh hưởng đến thời gian xác định tính hợp lệ của block đó. Để tạo ra block mới, người ta cần tìm số nonce để khi kết hợp với dữ liệu của block sẽ tạo ra một giá trị hash thoả mãn một điều kiện nhất định gọi là mức độ khó hay difficulty level ( Ví dụ: giá trị hash tính ra cần chứa 4 chữ số 0 ở đầu)

Như vậy để “xích” thêm một block mới vào chuỗi thì cần dùng thuật toán vét cạn để tìm ra một số N sao cho khi kết hợp với dữ liệu của block cuối cùng trong chuỗi sẽ sinh ra một giá trị hash thoả mãn điều kiện ( giả sử bắt đầu bằng 4 chữ số 0). Việc tính toán này sẽ đòi hỏi thời gian tốn hơn rất nhiều trong khi đó với giá trị nonce và dữ liệu block ta hoàn toàn kiểm tra được xem block đó có bị thay đổi hay không sử dụng hash function mà không quá tốn thời gian. Sử đổi một block lúc này chúng ta cũng phải tuân thủ các bước ở trên tuy nhiên do mỗi lần tính lại hash là một lần phải đi tìm mới số nonce khiến việc update chuỗi để hợp thức hoá thay đổi tốn nhiều công sức hơn rất nhiều.

Tham khảo : https://andersbrownworth.com/blockchain/blockchain

Figure 5: Modify a block with Nonce

Blockchain và mạng Peer-To-Peer network

Cho đến thời điểm hiện tại chúng ta đã có một blockchain với đúng ý nghĩa tên của nó là tập hợp các khối dữ liệu được xích lại với nhau. Tuy nhiên vẫn còn những vấn đề chưa được giải quyết triệt để

  • Cho dù số nonce và mức độ khó khiến việc tạo ra block mới tốn công sức hơn nhưng vẫn có thể hợp thức hoá sự thay đổi với một năng lực tính toán đủ mạnh và tốc độ thêm block mới không quá nhanh
  • Toàn bộ blockchain lưu trữ trên một hệ thống máy tính được quản lý bởi một cơ quan quản lý tập trung ( người sở hữu hệ thống máy tính này )
  • Việc truy suất vẫn nằm trong kiểm soát của cơ quan quản lý tập trung và tính chính xác của dữ liệu do họ quyết định

Đây chính là đặc thù chung của những hệ thống quản lý dữ liệu cổ điển. Trong ý tưởng về blockchain được đưa ra phổ biến vào năm 2008, như một phần đề án cho Bitcoin, một dạng tiền tệ ảo được phát triển để giải quyết bài toán lâu đời về niềm tin, cha đẻ của Bitcoin — Satoshi Nakamoto đã đưa ra khái niệm về một “hệ thống tiền tệ ngang hàng (peer-to-peer)”. Trong đó thay vì một hệ thống tập trung, công nghệ blockchain sử dụng sức mạnh của mạng ngang hàng P2P để cung cấp một cuốn sổ cái được chia sẻ, và tin tưởng của các transactions. Với việc sử dụng mạng ngang hàng, toàn bộ các bài toán trên đã được giải quyết:

  • Bởi vì đây là một hệ thống ngang hàng, nên mỗi thành viên (node) tham gia vào sẽ có một bản sao của blockchain việc này khiến cho việc hợp thức hoá thay đổi của một block gần như bất khả thi vì lúc này cần thay đổi dữ liệu được lưu trên toàn bộ các node của mạng.
  • Một giao thức được định nghĩa cho phép các node trao đổi với nhau và đạt sự đồng thuận về tính chính xác của dữ liệu mà không cần phụ thuộc tin tưởng vào từng thành viên tham gia ( ※ Bài toán Byzantine )
  • Do lưu trữ ngang hàng nên không cần đến bất cứ một cơ quan quản lý tập trung nào

Với sự xuất hiện của P2P network chúng ta có thể hình tượng hoạt động của blockchain để tạo ra block mới như sau

  • Một node sẽ tiến hành nhận transaction và chứng thực nó
  • Transaction sau đó được đẩy cho mạng sử dụng giao thức liên lạc giữa các peers
  • Các node nhận được thông tin transaction sẽ tiến hành kiểm tra tính hợp lệ của nó
  • Nếu transaction hợp lệ các node sẽ đưa nó vào một block tiềm năng ( một block chứa nhiều transaction)
  • Các node sẽ tìm số nonce và khi tìm ra nó sẽ thông báo với toàn mạng về block nó vừa tạo cùng với số nonce tìm được
  • Các node khác dừng tính toán và kiểm tra tính hợp lệ của block vừa nhận được trong mối quan hệ với số nonce và thêm vào blockchain của nó nếu thoả mãn
  • Tại thời điểm này transaction được tính là đã xử lý, block được xác nhận lần đầu và trở thành 1 phần của blockchain

Cấu thành của blockchain

Như vậy sau khi tìm hiểu chúng ta có thể hình dung ra những thành phần cơ bản cấu tạo nên blockchain như sau

  • Mạng ngang hàng (P2P Network) : Một cấu trúc liên kết mạng ngang hàng nơi mà các thành viên ( các node ) có thể gửi nhận các thông điệp cho nhau
  • Node : Một node trong mạng blockchain thực hiện nhiều công việc khác nhau tuỳ theo vai trò của nó. Về cơ bản một node có thể sẽ nhận giao dịch từ người dùng, kiểm tra tính hợp lệ, thực hiện tính toán (mining) để tạo block mới, sử dụng giao thức đồng thuận để cùng với các node khác quyết định ra block mới của toàn mạng và nhận phần thưởng dựa trên công sức bỏ ra.
  • Các khối dữ liệu (Block) : Các block hay khối dữ liệu được hình thành bởi một tập các giao dịch và một vài thành phần khác như timestamp, hash value của khối trước, hay số nonce
  • Giao dịch (Transaction) : một giao dịch được định nghĩa là sự chuyển dịch một giá trị từ người gửi sang người nhận
  • Địa chỉ (Address) : Cho đến thời điểm hiện tại chúng ta chưa nói chi tiết về những người sẽ sử dụng blockchain. Địa chỉ (Address) là định danh duy nhất được sử dụng trong các giao dịch trên blockchain để xác định người gửi/người nhận ( người sử dụng blockchain). Một địa chỉ thường là một khoá công khai hoặc được sinh ra từ khoá công khai. Một người có thể tạo nhiều địa chỉ, tuy nhiên mỗi địa chỉ là duy nhất. Khái niệm địa chỉ trong blockchain cũng tương tự khái niệm địa chỉ email, trong đó khoá công khai (public key) được sử dụng như địa chỉ email gửi đến các thành viên, ngược lại khoá cá nhân (private key) được sử dụng như password để vào hòm thư. Khoá cá nhân sẽ được dùng để ký (sign) các giao dịch trước khi chúng được xử lý bởi mạng blockchain.

Đối với các blockchain thế hệ mới sẽ gồm thêm các thành phần sau ( chúng ta sẽ đề cập ở các chương khác )

  • Smart Contract
  • Scripting/Programming language :
  • Virtual Machine
  • State Machine

Ưu điểm và nhược điểm

Blockchain cung cấp những ưu điểm rất lớn so với cách lưu trữ truyền thống nhưng cũng tồn tại những nhược điểm cố hữu từ cách thiết kế của nó.

Ưu điểm

  • Tính phi tập trung : đây là ý tưởng cốt lõi và là ưu điểm chính của blockchain. Sẽ không cần đến một bên tin tưởng thứ ba hay ở giữa nào để kiểm tra tính hợp lệ của các transactions thay vào đó là một cơ chế đồng thuận tự động được sử dụng để thực hiện việc đó
  • Trong sáng và tin tưởng: blockchain được chia sẻ và tất cả mọi người nhìn thấy những gì đang có trong blockchain từ đó cho phép hệ thống trở nên trong suốt và xây dựng được sự tin tưởng.
  • Không thể thay đổi : Một khi dữ liệu được ghi vào blockchain thì nó cực kỳ khó để thay đổi (Thực tế thì gần như không thể thay đổi )
  • Tính khả dụng cao: do được xây dựng trên mạng ngang hàng của hàng trăm nghìn nodes và dữ liệu được sao chép giữa toàn bộ các nodes nên hệ thống có tính khả dụng rất cao. Cho dù một node rời khỏi mạng hoặc không thể truy cập thì blockchain vẫn tiếp tục hoạt động.
  • Cực kỳ an toàn: Toàn bộ các transaction trên blockchain đều được mã hoá một cách an toàn và cung cấp tính toàn vẹn cao
  • Chi phí thấp : do không cần đến bên quản lý thứ 3 nên các giao dịch diễn ra được xử lý với chi phí thấp

Nhược điểm

Mọi công nghệ đều có điểm mạnh và điểm yếu, blockchain không phải ngoại lệ và nó cũng tồn tại các điểm yếu sau :

  • Khả năng mở rộng
  • Khả năng thích ứng
  • Tính hợp pháp
  • Tính riêng tư
  • Công nghệ còn khá non trẻ

--

--

Thanh Polimi

I am represented by the lion(leo), and these spirited fire signs are the kings of the celestial jungle. Leo is delighted to embrace his royal status.