Mục lục
Đầ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 có thể xác minh tính toàn vẹn của tập dữ liệu một cách hiệu quả và hiệu quả hơn trong các mạng ngang hàng yêu cầu người tham gia chia sẻ và xác minh thông tin một cách độ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 hiểu băm là gì trước khi tiếp tục đọc bài viết này.
Giả sử bạn muốn tải xuống một tệp lớn. Với các bản tải xuống phần mềm nguồn mở, thường cần phải kiểm tra xem hàm băm của tệp đã tải xuống có khớp với mã được nhà phát triển công khai hay không. Nếu chúng khớp nhau thì hai tài liệu đó nhất quán.
Nếu các giá trị băm không khớp, bạn đang gặp rắc rối. Hoặc bạn đã tải xuống một tệp độc hại được ngụy trang dưới dạng phần mềm hoặc bạn đã tải xuống tệp đó không chính xác và kết quả cuối cùng là tệp đó không thể sử dụng được. Nếu tải sai, chắc chắn bạn sẽ cảm thấy khó chịu vì phải chờ file tải rất lâu. Bây giờ nếu bạn bắt đầu lại, bạn phải hy vọng rằng vấn đề tương tự sẽ không xảy ra nữa.
Bạn đã cân nhắc Có cách nào dễ dàng hơn để giải quyết vấn đề này không? Đây là nơi cây Merkle xuất hiện. Cây Merkle có thể chia tệp thành nhiều khối dữ liệu. Ví dụ: một tệp 50 GB có thể được chia thành 100 bản, mỗi bản có kích thước 0,5 GB. Sau đó, bạn có thể tải từng cái một xuống. Đây là cách hoạt động của torrent.
Nguồn tệp tại thời điểm này là giá trị băm, được gọi là Merkle root. 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 thực dữ liệu dễ dàng hơn.
Để dễ hiểu, chúng tôi đưa ra một ví dụ. Bên dưới, tệp 8GB được chia thành tám phần và mỗi đoạn được đặt tên từ A đến H. Mỗi đoạn sau đó được cắm vào một hàm băm, tạo ra 8 giá trị băm khác nhau.
Sử dụng hàm băm để tính giá trị băm của 8 mảnh Hope giá trị.
Hy vọng cách giải thích ví dụ trên dễ hiểu. Chúng ta có giá trị băm của tất cả các mảnh, nếu một trong số chúng sai, liệu chúng ta có thể tìm ra vấn đề bằng cách so sánh các tệp nguồn không? Có thể, nhưng nó vẫn cực kỳ kém hiệu quả. Nếu tệp có hàng chục nghìn phân đoạn, chúng ta có cần băm tất cả các phân đoạn và so sánh kết quả một cách chi tiết không?
Không cần đâu. Chúng ta chỉ cần kết hợp một cặp giá trị băm và thực hiện thao tác băm kết hợp. Nghĩa là, chúng tôi đã biểu diễn vớihA + hB,hC + hD,hE + hF vàhG + hH Hoạt động băm. Kết quả sẽ là bốn giá trị băm. Sau đó, chúng tôi tiến hành vòng băm hợp nhất tiếp theo cho đến khi thu được hai giá trị băm. Hai giá trị băm này sau đó được kết hợp và cuối cùng thu được giá trị băm chính, đó là gốc Merkle (còn gọi là giá trị băm gốc).
Cấu trúc này trông giống như một cái cây lộn ngược. Hàng lá phía dưới kết hợp với nhau tạo thành đốt và cuối cùng là rễ.
Bây giờ chúng ta có Merkle root đại diện cho tệp đã tải xuống. So sánh giá trị băm gốc với giá trị của tệp nguồn và nếu nó khớp thì mọi người đều vui vẻ! Khi các giá trị băm khác nhau, điều đó chứng tỏ dữ liệu đã bị giả mạo. Nói cách khác, một hoặc nhiều đoạn tạo ra một giá trị băm khác. Vì vậy, ngay cả những sửa đổi dữ liệu nhỏ cũng có thể thay đổi hoàn toàn gốc rễ của Merkel.
May mắn thay, việc kiểm tra lỗi rất dễ dàng. Giả sử lỗi làhE. Đầu tiên, chúng tôi yêu cầu những người khác cung cấp hai hàm băm (hABCD và hEFGH) để tạo gốc Merkle. Giá trịhABCD của chúng tôi phải khớp với giá trị khác, chứng tỏ rằng cây con không có lỗi. NếuhEFGHkhông khớp, chúng tôi có thể sửa lỗi từ đây. Sau đó, hãy hỏi người khác về các giá trị bămhEF vàhGH của họ và so sánh chúng với giá trị băm của riêng bạn. NếuhGH ổn thì hãy cho biết hEF là thủ phạm. Cuối cùng, chúng tôi so sánh các giá trị băm của hE và hF và khi chúng tôi nhận thấy nguồn gốc của lỗi là hE, chúng tôi có thể tải lại khối dữ liệu.
Tóm lại, chức năng của cây Merkle là chia dữ liệu thành nhiều phần, sau đó lặp lại thao tác băm để cuối cùng tạo thành gốc Merkel, nhờ đó bạn có thể xác minh một cách hiệu quả nơi xảy ra lỗi. dữ liệu. Trong phần tiếp theo, chúng tôi sẽ giới thiệu các ứng dụng thú vị khác.
Bạn muốn bắt đầu hành trình tiền điện tử của mình? Hãy đến Binance và mua Bitcoin ngay bây giờ!
Cây Merkle có nhiều trường hợp sử 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 điện tử không thể tách rời khỏi cây Merkle. Cây Merkle là một phần không thể thiếu của mỗi khối, thường nằm ở tiêu đề khối. Thông qua giá trị băm giao dịch (TXID) của mỗi giao dịch trong khối, chúng ta có thể thu được các lá.
Trong trường hợp này, gốc Merkel phục vụ một số mục đích. Chúng ta hãy xem ứng dụng của Merkle Root trong khai thác tiền điện tử và xác minh giao dịch.
Các khối Bitcoin bao gồm hai phần. Phần đầu tiên là tiêu đề khối, có kích thước cố định và chứa siêu dữ liệu khối. Phần thứ hai là phần thân khối, có kích thước thay đổi nhưng thường lớn hơn nhiều so với tiêu đề khối và chứa danh sách giao dịch.
Người khai thác cần băm dữ liệu nhiều lần cho đến khi tạo ra kết quả đáp ứng các điều kiện cụ thể trước khi họ có thể đào ra một khối hợp lệ. Để có được kết quả chính xác, họ cần phải thử hàng nghìn tỷ lần. Với mỗi lần thử, người khai thác sẽ thay đổi số ngẫu nhiên trong tiêu đề khối, giá trị Nonce, để tạo ra các kết quả khác nhau. Tuy nhiên, phần còn lại của khối vẫn giữ nguyên và hàng nghìn giao dịch bên trong nó vẫn cần được băm mỗi lần.
Merkel đã đơn giản hóa rất nhiều quá trình này. Khi quá trình khai thác bắt đầu, tất cả hàng đợi giao dịch được đóng gói và xây dựng thành cây Merkle và giá trị băm gốc 32 bit được tạo sẽ được đặt trong tiêu đề khối. Sau đó, không cần băm toàn bộ khối mà chỉ cần băm tiêu đề khối.
Phương pháp này ngăn chặn việc giả mạo dữ liệu và do đó có hiệu quả, cho phép tất cả các giao dịch trong một khối được tóm tắt một cách hiệu quả ở dạng nhỏ gọn. Không thể sửa đổi danh sách giao dịch của các tiêu đề khối hợp lệ, nếu không gốc Merkle sẽ bị thay đổi. Sau khi khối được gửi đến các nút khác, hàm băm gốc được tính từ danh sách giao dịch. Nếu nó không khớp với giá trị trong tiêu đề khối, khối có thể bị từ chối.
Chúng ta cũng có thể sử dụng một thuộc tính thú vị khác của rễ Merkle, liên quan đến Ứng dụng nhẹ dành cho khách hàng ( các nút không duy trì bản sao hoàn chỉnh của chuỗi khối). Nếu bạn đang chạy một nút trên một thiết bị có tài nguyên hạn chế, bạn sẽ không muốn tải xuống và băm tất cả các giao dịch trong một khối. Thay vào đó, bạn chỉ cần yêu cầu bằng chứng Merkle, bằng chứng được cung cấp bởi một nút đầy đủ rằng giao dịch đã được đưa vào một khối cụ thể. Bằng chứng này được biết đến nhiều hơn với tên gọi “Xác minh thanh toán đơn giản” hay SPV và được Satoshi Nakamoto trình bày chi tiết trong sách trắng Bitcoin.
Để kiểm tra hD, chỉ cần xác minh màu đỏ The giá trị băm là đủ.
Giả sử chúng ta muốn lấy thông tin giao dịch về TXID của hD. Nếu đã biếthCthì hCDcó thể được tính toán. Sau đó, thông quahAB, bạn có thể tính toánhABCD. Cuối cùng, bằng cách tham khảo hEFGH, bạn có thể kiểm tra xem gốc Merkle được tính toán có nhất quán với giá trị băm gốc trong tiêu đề khối hay không. Một kết quả khớp thành công chứng tỏ rằng giao dịch đã được bao gồm trong khối, vì việc tạo ra cùng một hàm băm bằng cách sử dụng các dữ liệu khác nhau là gần như không thể.
Trong ví dụ trên, chúng tôi chỉ băm ba lần. Nếu không có sự chứng nhận của Merkel, sẽ phải mất tới bảy lần. Các khối ngày nay chứa hàng nghìn giao dịch và bằng chứng Merkle giúp chúng ta tiết kiệm rất nhiều thời gian và sức mạnh tính toán.
Cây Merkle đã chứng tỏ tầm quan trọng của chúng trong các ứng dụng khoa học máy tính, như chúng ta đã làm đã thấy, nó cũng khá 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 thuận tiện hơn và tránh tắc nghẽn dữ liệu dư thừa trong mạng.
Nếu không có cây Merkle và gốc Merkle, Bitcoin và các khối tiền điện tử khác sẽ không thể nhỏ gọn như ngày nay. Mặc dù các máy khách nhẹ thiếu lợi thế 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 rằng các giao dịch được bao gồm trong các khối với mức phí tối thiểu.