SieuThiBitcoin.comHiểu Bitcoin tận gốc — từ năm 2014
Thuật ngữ Bitcoin

Hash, nonce, Merkle root: ba thuật ngữ nằm trong mỗi khối Bitcoin

Hash là "dấu vân tay" cố định độ dài của dữ liệu; nonce là con số thợ đào thay đổi để tìm hash thoả độ khó; Merkle root là một hash duy nhất tóm gọn mọi giao dịch trong khối. Ba thứ này nằm trong tiêu đề khối và cùng nhau làm cho chuỗi khối khó bị sửa.

Những chiếc lá xếp thành hình cây trên nền giấy trắng, minh hoạ cấu trúc phân nhánh

Hash, hay giá trị băm, là kết quả của một hàm biến dữ liệu bất kỳ thành một chuỗi độ dài cố định, thay đổi hoàn toàn khi dữ liệu thay đổi dù chỉ một chút. Nonce là con số mà thợ đào thay đổi liên tục để tìm ra hash của tiêu đề khối nhỏ hơn mục tiêu. Merkle root là một hash duy nhất đại diện cho toàn bộ giao dịch trong khối.

Ba thuật ngữ này xuất hiện trong mọi tài liệu về cấu trúc khối. Bài viết giải thích từng khái niệm bằng ví dụ đời thường, chỉ ra chúng liên kết với nhau thế nào, và vì sao chúng làm cho lịch sử Bitcoin khó bị sửa. Đây là kiến thức kỹ thuật, không phải lời khuyên đầu tư hay hướng dẫn đào.

Hash: dấu vân tay của dữ liệu

Hàm băm nhận vào dữ liệu bất kỳ, dù là một chữ hay cả cuốn sách, và trả ra một chuỗi có độ dài cố định. Bitcoin chủ yếu dùng SHA-256, cho ra kết quả 256 bit, thường viết thành 64 ký tự thập lục phân.

Tính chất quan trọng thứ nhất là tất định: cùng một dữ liệu luôn cho cùng một hash. Thứ hai là hiệu ứng tuyết lở: đổi một ký tự nhỏ, hash thay đổi hoàn toàn, không có quy luật nhìn thấy được.

Thứ ba là không đảo ngược: từ hash không thể tính ngược ra dữ liệu ban đầu. Thứ tư là chống va chạm: rất khó tìm hai dữ liệu khác nhau cho cùng một hash.

Nhờ những tính chất đó, hash được dùng như dấu vân tay. Hai bên chỉ cần so hash là biết dữ liệu có giống hệt nhau không, mà không cần so từng byte.

Bitcoin thường băm hai lần liên tiếp với SHA-256 cho tiêu đề khối và mã giao dịch. Đây là chi tiết thiết kế từ đầu, nhằm tăng thêm biên an toàn.

Nonce: con số để thử vận may

Tiêu đề khối gồm vài trường: phiên bản, hash của khối trước, Merkle root, thời gian, mục tiêu độ khó và nonce. Thợ đào băm tiêu đề này và kiểm tra kết quả có nhỏ hơn mục tiêu không.

Vì không thể đoán trước hash, cách duy nhất là thử. Thợ đào thay đổi nonce, một số 32 bit, rồi băm lại, lặp đi lặp lại hàng tỷ tỷ lần cho tới khi tìm được kết quả phù hợp.

Nonce 32 bit chỉ có khoảng 4,3 tỷ giá trị, thứ mà máy đào hiện đại thử hết trong chớp mắt. Khi hết, thợ đào thay đổi các phần khác, như dữ liệu phụ trong giao dịch coinbase, khiến Merkle root đổi, rồi thử lại từ đầu.

Từ "nonce" có nghĩa là con số chỉ dùng một lần. Một khi khối đã được tìm thấy, nonce đó chỉ có ý nghĩa với chính khối ấy.

Quá trình thử này chính là bằng chứng công việc. Ai cũng có thể kiểm tra kết quả bằng một phép băm, nhưng để tìm ra nó cần khối lượng tính toán khổng lồ.

Merkle root: một hash cho mọi giao dịch

Một khối có thể chứa hàng nghìn giao dịch. Thay vì đưa tất cả vào tiêu đề, Bitcoin xếp hash của các giao dịch thành từng cặp, băm mỗi cặp thành một hash mới, rồi lặp lại cho tới khi chỉ còn một hash duy nhất ở đỉnh. Đó là Merkle root.

Cấu trúc này gọi là cây Merkle, đặt theo tên nhà mật mã học Ralph Merkle. Nếu số hash ở một tầng là số lẻ, hash cuối được nhân đôi để ghép cặp.

Vì mỗi tầng phụ thuộc tầng dưới, chỉ cần một giao dịch bị sửa, Merkle root sẽ đổi, kéo theo hash tiêu đề khối đổi, và bằng chứng công việc không còn hợp lệ.

Ưu điểm lớn là có thể chứng minh một giao dịch nằm trong khối chỉ bằng một đường nhánh ngắn từ giao dịch lên tới gốc, thay vì tải cả khối. Ví nhẹ dựa vào điều này.

Bảng thuật ngữ liên quan

SHA-256. Hàm băm chính của Bitcoin, thuộc họ hàm do cơ quan tiêu chuẩn Hoa Kỳ công bố.

Băm kép. Băm SHA-256 hai lần, dùng cho tiêu đề khối và mã giao dịch.

RIPEMD-160. Hàm băm thứ hai, dùng cùng SHA-256 để rút gọn khoá công khai khi tạo một số loại địa chỉ.

Tiêu đề khối. Phần 80 byte gồm phiên bản, hash khối trước, Merkle root, thời gian, mục tiêu, nonce.

Hash khối trước. Trường liên kết khối hiện tại với khối trước, tạo thành chuỗi.

Mục tiêu (target). Ngưỡng mà hash tiêu đề khối phải nhỏ hơn.

Bits. Cách mã hoá gọn của mục tiêu trong tiêu đề khối.

Extra nonce. Dữ liệu phụ trong giao dịch coinbase mà thợ đào thay đổi khi nonce đã hết giá trị.

Bằng chứng Merkle. Đường nhánh chứng minh một giao dịch thuộc một khối.

Mã giao dịch (txid). Hash của dữ liệu giao dịch, dùng để tham chiếu.

Wtxid. Mã giao dịch có tính cả dữ liệu chứng nhân sau SegWit.

Cam kết chứng nhân. Một Merkle root riêng cho dữ liệu chứng nhân, đặt trong giao dịch coinbase.

Ba thứ liên kết thế nào

Hãy xem một khối như một phong bì niêm phong. Bên trong là danh sách giao dịch. Merkle root là con dấu tóm gọn toàn bộ danh sách. Hash khối trước là sợi dây nối phong bì này với phong bì trước. Nonce là con số mà người niêm phong phải tìm ra để con dấu đạt chuẩn.

Khi một khối mới được thêm vào, hash của nó trở thành một phần của tiêu đề khối sau. Muốn sửa một giao dịch cũ, kẻ gian phải tính lại Merkle root, tìm nonce mới cho khối đó, rồi làm lại cho mọi khối phía sau.

Đó là lý do mỗi xác nhận mới làm giao dịch càng khó bị đảo ngược. Ba khái niệm nhỏ này cùng nhau tạo nên tính bất biến thực tế của chuỗi khối.

Nếu bạn muốn tự kiểm tra, các thư viện mã nguồn mở và phần mềm nút cho phép tính lại hash của một khối bất kỳ từ dữ liệu thô, và bạn sẽ thấy nó khớp với hash được công bố.

Hash ở khắp nơi trong Bitcoin

Ngoài tiêu đề khối và Merkle root, hash xuất hiện ở rất nhiều chỗ khác. Mã giao dịch là hash của dữ liệu giao dịch. Nhiều loại địa chỉ được tạo từ hash của khoá công khai hoặc của một đoạn script.

Ví HD dùng hàm băm để sinh ra cả cây khoá từ một hạt giống duy nhất. Cụm từ khôi phục cũng có phần kiểm tra được tính bằng hash để phát hiện lỗi gõ.

Chữ ký số cũng bắt đầu bằng việc băm nội dung giao dịch, rồi ký lên hash đó, chứ không ký lên toàn bộ dữ liệu thô.

Có thể nói hàm băm là viên gạch nền của Bitcoin. Hiểu tính chất của nó là hiểu được vì sao nhiều phần khác của hệ thống lại an toàn.

Những hiểu lầm hay gặp

Có người nghĩ hash là một kiểu mã hoá có thể giải mã. Không phải; hash là một chiều, không có khoá để giải.

Có người nghĩ thợ đào "giải bài toán toán học khó". Thực ra bài toán rất đơn giản, chỉ là thử ngẫu nhiên; cái khó nằm ở số lần thử khổng lồ cần thiết.

Có người nghĩ Merkle root bảo vệ quyền riêng tư giao dịch. Không; mọi giao dịch vẫn công khai. Merkle root chỉ giúp kiểm tra tính toàn vẹn và chứng minh một giao dịch thuộc khối.

Hiểu đúng các thuật ngữ giúp bạn đọc tài liệu kỹ thuật tự tin hơn và nhận ra những lời quảng cáo dùng thuật ngữ sai để gây ấn tượng. Đây là kiến thức, không phải lời khuyên đầu tư.

Câu hỏi thường gặp

Hash là gì trong Bitcoin?

Là kết quả của hàm băm, chủ yếu SHA-256, biến dữ liệu thành chuỗi độ dài cố định. Nó hoạt động như dấu vân tay: đổi dữ liệu một chút là hash đổi hoàn toàn.

Nonce dùng để làm gì?

Thợ đào thay đổi nonce trong tiêu đề khối và băm lại liên tục để tìm hash nhỏ hơn mục tiêu. Đây là cốt lõi của bằng chứng công việc.

Merkle root là gì?

Là hash duy nhất ở đỉnh cây Merkle, đại diện cho toàn bộ giao dịch trong khối. Sửa một giao dịch bất kỳ là Merkle root thay đổi.

Hash có giải mã được không?

Không. Hàm băm là một chiều; không thể tính ngược từ hash ra dữ liệu ban đầu.

Ví nhẹ dùng Merkle root thế nào?

Ví nhẹ dùng bằng chứng Merkle để xác minh một giao dịch thuộc một khối mà không cần tải toàn bộ khối.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.