Cây Merkle là gì?
Vào đầu những năm 1980, Ralph Merkle, một nhà khoa học máy tính nổi tiếng trong lĩnh vực mật mã khóa công khai, đã đề xuất khái niệm cây Merkle.
Cấu trúc cây Merkle giúp kiểm tra tính toàn vẹn của tập dữ liệu một cách hiệu quả và đặc biệt hữu ích trong các mạng ngang hàng (P2P) nơi người tham gia cần chia sẻ và xác minh thông tin độc lập.
Hàm băm là cốt lõi của cấu trúc cây Merkle. Do đó, chúng tôi khuyên bạn nên tìm hiểu về phép băm trước khi tiếp tục đọc bài viết này.
Cây Merkle hoạt động như thế nào?
Giả sử bạn muốn tải xuống một tệp lớn. Khi tải phần mềm mã nguồn mở, bạn thường cần kiểm tra xem giá trị băm của tệp tải xuống có khớp với giá trị mà nhà phát triển công bố hay không. Nếu khớp, nghĩa là hai tệp giống nhau.
Nếu giá trị băm không khớp, bạn sẽ gặp rắc rối. Hoặc bạn đã tải xuống một tệp độc hại giả dạng phần mềm, hoặc quá trình tải xuống bị lỗi, khiến tệp không thể sử dụng. Nếu tải xuống không thành công, chắc chắn bạn sẽ cảm thấy bực bội, nhất là sau khi đã chờ đợi rất lâu. Giờ phải bắt đầu lại và hy vọng vấn đề không tái diễn.
Bạn đã bao giờ nghĩ đến một cách đơn giản hơn để giải quyết vấn đề này chưa? Đây chính là lúc cây Merkle phát huy tác dụng. Cây Merkle có thể chia tệp thành nhiều khối dữ liệu. Ví dụ, tệp 50GB có thể được chia thành 100 phần, mỗi phần 0.5GB. Sau đó, bạn có thể tải từng phần một. Đây là nguyên lý của tệp torrent.
Lúc này, nguồn tệp được đại diện bởi một giá trị băm duy nhất gọi là rễ Merkle. Giá trị băm đơn này đại diện cho tất cả các khối dữ liệu tạo nên tệp. Hơn nữa, rễ Merkle giúp việc xác minh dữ liệu trở nên dễ dàng hơn.
Tại sao Bitcoin sử dụng rễ Merkle?
Cây Merkle có nhiều ứng dụng, nhưng bài viết này tập trung vào vai trò quan trọng của nó trong blockchain. Bitcoin và nhiều loại tiền mã hóa khác đều phụ thuộc vào cây Merkle. Cây Merkle là một phần của mỗi khối, thường nằm trong phần đầu khối (block header). Các lá của cây được tạo từ giá trị băm giao dịch (TXID) của mỗi giao dịch trong khối.
Trong trường hợp này, rễ Merkle có nhiều công dụng. Hãy cùng xem ứng dụng của rễ Merkle trong khai thác tiền mã hóa và xác minh giao dịch.
Khai thác (Mining)
Một khối Bitcoin gồm hai phần. Phần đầu là block header, có kích thước cố định và chứa siêu dữ liệu của khối. Phần thứ hai là block body, có kích thước thay đổi nhưng thường lớn hơn nhiều so với block header, chứa danh sách giao dịch.
Thợ đào phải thực hiện phép băm lặp lại dữ liệu cho đến khi tạo ra kết quả đáp ứng điều kiện cụ thể để đào được một khối hợp lệ. Để đạt được kết quả đúng, họ cần thử nghiệm hàng nghìn tỷ lần. Mỗi lần thử, thợ đào thay đổi giá trị nonce trong block header để tạo ra kết quả khác nhau. Tuy nhiên, các phần khác của khối vẫn giữ nguyên, và hàng nghìn giao dịch trong đó vẫn cần được băm mỗi lần.
Rễ Merkle giúp đơn giản hóa quy trình này đáng kể. Khi bắt đầu khai thác, tất cả giao dịch được xếp hàng, đóng gói và xây dựng thành cây Merkle. Giá trị băm gốc 32-bit được tạo ra sẽ đưa vào block header. Sau đó, không cần phải băm toàn bộ khối nữa—chỉ cần băm block header.
Phương pháp này ngăn chặn việc giả mạo dữ liệu và rất hiệu quả, giúp tổng hợp tất cả giao dịch trong khối một cách gọn nhẹ. Danh sách giao dịch trong block header hợp lệ không thể bị thay đổi, vì làm vậy sẽ làm thay đổi rễ Merkle. Khi khối được gửi đến các nút khác, giá trị băm gốc sẽ được tính toán lại từ danh sách giao dịch. Nếu không khớp với giá trị trong block header, khối có thể bị từ chối.
Xác minh (Verification)
Một tính chất thú vị khác của rễ Merkle liên quan đến các máy khách nhẹ (lightweight client—các nút không lưu trữ bản sao đầy đủ của blockchain). Nếu bạn đang chạy một nút trên thiết bị có tài nguyên hạn chế, bạn chắc chắn không muốn tải xuống tất cả giao dịch trong khối và băm chúng. Thay vào đó, bạn chỉ cần yêu cầu bằng chứng Merkle (Merkle proof)—bằng chứng do một nút đầy đủ (full node) cung cấp để chứng minh giao dịch được bao gồm trong một khối cụ thể. Bằng chứng này thường được biết đến với tên gọi "Xác minh Thanh toán Đơn giản" (Simplified Payment Verification - SPV), được Satoshi Nakamoto mô tả chi tiết trong sách trắng Bitcoin.
Kết luận
Cây Merkle đã chứng minh tầm quan trọng của nó trong lĩnh vực khoa học máy tính, và như chúng ta thấy, nó cũng rất có giá trị trong blockchain. Cây Merkle giúp việc xác minh thông tin trong hệ thống phân tán trở nên thuận tiện hơn và tránh tắc nghẽn do dữ liệu dư thừa trong mạng.
Nếu không có cây Merkle và rễ Merkle, các khối Bitcoin và tiền mã hóa khác sẽ không thể gọn nhẹ như ngày nay. Mặc dù máy khách nhẹ có nhược điểm về quyền riêng tư và bảo mật, nhưng với bằng chứng Merkle, người dùng có thể xác minh giao dịch đã được đưa vào khối với chi phí tối thiểu.