• BLOCKCHAIN 02: CON TRỎ HASH – BLOCKCHAIN

    Ở phần 1, bạn đọc đã được tìm hiểu các thông tin về Định nghĩa hàm Hash, tính chất, ứng dụng và một số bài toán thực hành. Ở phần tiếp theo, người viết sẽ cùng quý độc giả tìm hiểu thêm về con trỏ Hash và Blockchain – cấu trúc dữ liệu xây dựng trên khái niệm này.

    Con trỏ Hash

    Con trỏ hash vừa trỏ đến dữ liệu vừa lưu giá trị hash (digest) của dữ liệu đó.

     

    Con trỏ hash (Hash pointers) là một con trỏ thông thường (pointers) nhưng có kèm theo giá trị hash của nội dung được trỏ tới.

    Con trỏ hash được dùng để xây dựng các cấu trúc dữ liệu tương tự các cấu trúc dữ diệu được xây dựng bằng con trỏ thường, ví dụ như linked list hoặc cây nhị phân (binary search tree). Với giá trị hash của dữ liệu được trỏ tới, con trỏ hash giúp ta kiểm tra rằng nội dung của thông tin không bị thay đổi.

    Cấu trúc dữ liệu Linked List xây dựng bằng con trỏ (pointer)

     

    Blockchain

    Cấu trúc linked list thông thường bao gồm một chuỗi các khối (block), mỗi khối này sẽ bao gồm dữ liệu và một con trỏ chỉ về khối đằng trước trong chuỗi. Khi sử dụng con trỏ hash thay cho con trỏ thông thường để xây dựng cấu trúc dữ liệu linked list, cấu trúc mới này được gọi là blockchain.

    Blockchain là cấu trúc dữ liệu Linked List nhưng dùng con trỏ hash (thay cho con trỏ bình thường)

    Với blockchain, ngoài việc có thể trỏ tới block trước đó, mỗi block còn có thể lưu giá trị digest (giá trị hash) của khối được trỏ tới. Thông qua việc kiểm tra giá trị hash, ta có thể nhận dạng khối được trở tới có bị thay đổi hay không. Cấu trúc blockchain như vậy cho phép chúng ta chỉ cần lưu giá trị của con trỏ chỉ tới khối cuối cùng, đồng thời vẫn kiểm soát được nội dung của các khối còn lại không bị thay đổi.

    Ví dụ, một người nào đó muốn thay đổi nội dung của dữ liệu của Blockchain ở một khối k trong danh sách; vì nội dung khối k này bị thay đổi, con trỏ hash của khối k+1 sẽ không còn đúng. Lúc này khi ta tính giá trị hash của nội dung khối k, thì giá trị này sẽ không giống như giá trị hash được lưu ở con trỏ hash ở khối sau đó là khối k+1. Để không bị phát hiện, người muốn thay đổi nội dung phải tiếp tục thay đổi nội dung dữ liệu của khối k+1, nhưng việc này sẽ dẫn đến chuyện giá trị con trỏ hash ở khối k+2 không còn chính xác; tiếp tục như vậy sẽ dẫn đến việc phải thay đổi nội dung ở khối cuối cùng. Nhưng chúng ta lưu trữ giá trị của khối này, nên sẽ phát hiện ra sự thay đổi đó.

     

    Thực hành: Con trỏ hash trong Bitcoin

    Bitcoin là hệ thống đầu tiên đưa ra khái niệm blockchain, đây cũng là một phát minh chính của hệ thống bitcoin. Blockchain trong Bitcoin có nhiều đặc tính, nhưng trong bài này chúng ta tập trung vào khía cạnh sử dụng con trỏ hash để liên kết các block trong blockchain.

    Minh họa cấu trúc blockchain của hệ thống Bitcoin

     

    Trong chuỗi các block thuộc hệ thống blockchain, khối đầu tiên được gọi là genesis block. Khối này đươc đánh số là block #0, các khối tiếp theo được đánh số tăng dần.

    (Dữ liệu của mỗi block trong chuỗi blockchain của Bitcoin ghi lại các giao dịch tiền ảo của hệ thống Bitcoin; trong bài này chúng ta sẽ chưa đề cập đến nội dung này.)

     

    Ví dụ đây là nội dung của block đầu tiên (#0) trong chuỗi blockchain của Bitcoin:

     

    Trường Prev Block chính là con trỏ hash, trong trường hợp này có giá trị bằng 0 vì đây là block đầu tiên.

    Còn đây là nội dung của block tiếp theo (#1) trong chuối blockchain của bitcoin:

     

    Trường Prev Block trong block này chính là con trỏ hash chỉ về block đầu tiên. Giá trị của trường này ở đây là:

    1000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

    Như định nghĩa phía trên thì con trỏ hash cần làm 2 việc gồm: trỏ tới khối dữ liệu liền trước và chứa giá trị hash của khối dữ liệu.

    Thứ nhất nó cần trỏ tới khỗi dữ liệu trước ở đây là block #0 của bitcoin, thứ 2 nó chứa giá trị hash của block #0. Ở đây giá trị hash của block #0 được lưu ở trường (field) Prev Block trong block #1 làm cả 2 việc này 1 lúc. Bởi vì tính chất không va chạm của hàm hash mật mã, giá trị hash của một block trong blockchain được sử dụng như là định danh (identifier) của khối đó.

    Nhắc lại là một trong những tính chất quan trọng của blockchain: một khi nội dung được lưu vào blockchain thì nội dung đó không thể thay đổi. Nếu ta biết giá trị đúng của con trỏ hash tới khối cuối cùng của blockchain, thì ta có thể kiểm tra được nội dung của tât cả các khối trong blockchain là không bị sửa đổi.

     

    Emanvn | Trần Tuấn Anh

     

    Ngày đăng: 02-11-2017 1,590 lượt xem