thetvbytesoft
Member
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: Bạn có thể hình dung các sợ dây nối với nhau bằng các nút. Thì các dữ liệu có thể hiểu nối với nhau bằng các nút khác nhau. Đó là liên các nút
1 cây bằng đầu từ 1 nút gọi là nút gốc, cũng là nút đầu tiên. Từ nút gốc, phân nhánh thành các nút khác nhau. Bạn cũng có thể, liên kết các nút lại theo cách mà ban muốn. Nút không có nút con được gọi là lá hoặc điểm cuối.
Xem thêm: viết phần mềm theo yêu cầu
Hệ thống phân cấp nào, cũng gắn với 1 cây. Chẳng hạn như cấu trúc bộ máy trong một tổ chức:
Xem thêm: lợi ích của blockchain
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.
Xem thêm: viet phan mem
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ì.
Nút: Bạn có thể hình dung các sợ dây nối với nhau bằng các nút. Thì các dữ liệu có thể hiểu nối với nhau bằng các nút khác nhau. Đó là liên các nút
1 cây bằng đầu từ 1 nút gọi là nút gốc, cũng là nút đầu tiên. Từ nút gốc, phân nhánh thành các nút khác nhau. Bạn cũng có thể, liên kết các nút lại theo cách mà ban muốn. Nút không có nút con được gọi là lá hoặc điểm cuối.
Xem thêm: viết phần mềm theo yêu cầu
Hệ thống phân cấp nào, cũng gắn với 1 cây. Chẳng hạn như cấu trúc bộ máy trong một tổ chức:
Xem thêm: lợi ích của blockchain
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.
Xem thêm: viet phan mem
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ì.