Trong khoa học máy tính, một cây là một cấu trúc dữ liệu. Trong cấu trúc này gồm có:
- Nút: Một cách nói thú vị để ám chỉ một cái gì đó có chứa dữ liệu và có thể liên kết với các nút khác.
- Cạnh: Đó là các liên kết kết nối các nút.
Vì cây là loại biểu đồ đặc biệt nên bắt đầu từ một nút gốc. Do đó, cần phải có một nút ban đầu. Các nút chỉ liên kết bằng cách phân nhánh từ các nút mẹ. Như vậy, bạn có thể chỉ cần liên kết các nút của mình theo cách bạn muốn. Nút không có nút con được gọi là lá hoặc điểm cuối.
Bất cứ khi nào nói đến một hệ thống phân cấp, chúng ta đều nghĩ về một cái cây. Chẳng hạn như cấu trúc bộ máy trong một tổ chức:
Hóa ra, loại cấu trúc dữ liệu này chúng ta đã biết trước cả khoa học máy tính và chúng có nhiều trường hợp sử dụng khác nhau. Cụ thể, nó thường được sử dụng để biểu diễn dữ liệu phân cấp, vì nó có cấu trúc lưu trữ dữ liệu nhất định để tìm kiếm hiệu quả hơn và còn nhiều lợi ích khác.
Cây Merkle là một loại cây đặc biệt. Và cũng là một trường hợp sử dụng của cấu trúc dữ liệu với các hạn chế bổ sung. Bạn thấy đấy, một cây Merkle còn được gọi là cây hash.
Hash là gì?
Hash về cơ bản là một chữ ký của bất kỳ loại dữ liệu tùy ý. Hiểu theo cách khoa học thì đó là một hàm lấy dữ liệu kích thước tùy ý và trả về hàm kích thước cố định.
Tuy nhiên, vì là nó “chữ ký” của dữ liệu nên phải có các tính chất sau:
- Xác định: Một dữ liệu chỉ có 1 hash và không có sự trùng lặp ngẫu nhiên.
- Thống nhất: Có chức năng hoạt động xuyên suốt, không thay đổi.
Tuy nhiên, để có được chữ ký tốt, duy nhất thì phải có đầu ra (kích thước cố định) gần như nhau. Nếu không, sẽ xảy ra xung đột: có nghĩa là ngày càng có nhiều dữ liệu có cùng chữ ký. Với đầu ra có “kích thước cố định” (kích thước chữ ký) đủ lớn và thống nhất, sẽ không có vấn đề gì xảy ra.
- Phạm vi xác định: Đây là phần xác định kích thước cố định.
Vì mục tiêu là lấy bất kỳ dữ liệu nào và tạo ra một chữ ký chung, nên phải có một phạm vi xác định thường được tính bằng đơn vị bit. Ví dụ hàm hash rất phổ biến SHA-512 có phạm vi xác định là 512 bit.
- Không thể đảo ngược: Chữ ký được thực hiện theo một chiều, có nghĩa là không thể lấy nội dung gốc bằng cách sử dụng hash.
Mặc dù đây không phải là một yêu cầu nhất thiết phải có, đặc biệt đối với hash mật mã, nhưng chắc chắn rất quan trọng (Ví dụ thay vì lưu trữ mật khẩu của bạn, Facebook có thể lưu trữ chữ ký xác nhận mật khẩu).
Trở lại cây Merkle Tree, như chúng ta đã nói, mỗi chiếc lá trong cây này có một số khối dữ liệu trong đó. Một nút có thể chứa hash mật mã (chữ ký một chiều) của nút con. Điều này hóa ra là một cách rất thú vị để lưu trữ một số dữ liệu; đặc biệt bởi vì nó cho phép bạn xác minh mọi loại dữ liệu. Quá trình này diễn ra một cách nhanh chóng vì chỉ cần kiểm tra chữ ký của dữ liệu.
Nhưng tại sao? Chúng ta không thể kiểm tra hash bình thường của dữ liệu thay vì đặt từng mảnh và tạo ra cả một cây phải không?
Chúng ta có thể. Tuy nhiên, nếu bạn đang phát triển một hệ thống phân tán/ngang hàng (nơi các máy đang trao đổi thông tin và bạn không biết bạn có thể tin tưởng vào cái nào) thì loại xác minh này trở nên cực kỳ quan trọng. Mặc dù cùng một dữ liệu ở nhiều nơi nhưng không có cách nào để biết nếu không có phương thức trên.
Nút mà bạn nhận được dữ liệu rất trung thực. Dữ liệu bạn nhận được là chính xác (và nút không lừa bạn). Dữ liệu không bị ngắt trên đường vận chuyển.
Đảm bảo các câu hỏi được trả lời một cách đáng tin cậy và giúp xác minh nhanh là lý do tại sao sử dụng cây Merkle. Có rất nhiều ví dụ về loại cấu trúc này trong thực tế, đặc biệt là hệ thống kiểm soát nguồn Git và tiền điện tử giả ẩn danh Bitcoin là những thứ đáng chú ý nhất được biết đến. Như vậy, đây cũng là điều kiện tiên quyết để hiểu blockchain là gì.
Thùy Trang
Tạp chí Bitcoin | Hackernoon