Bài 12/65 · Phần 02: Bitcoin vận hành thế nàoHọc thử miễn phí
Hàm băm (hash) là gì: dấu vân tay của dữ liệu
Duyệt bởi Ban biên tập HODL.VN · Cập nhật 24/10/2026
Điểm chính
- Hàm băm biến dữ liệu bất kỳ thành một chuỗi ký tự độ dài cố định, như dấu vân tay: cùng dữ liệu cho cùng mã, đổi một chữ thì mã đổi hoàn toàn.
- Hash là một chiều: từ mã băm không tính ngược ra dữ liệu gốc. Đây không phải mã hoá.
- Bitcoin dùng SHA-256 để nối khối vào chuỗi và để ra đề bài cho thợ đào: tìm một mã băm bắt đầu bằng thật nhiều số 0.
- Mã băm của khối 972.808 (23/10/2026) bắt đầu bằng 19 chữ số 0.
Hàm băm (hash function) là một công thức biến dữ liệu bất kỳ, một chữ, một file, một cuốn sách, thành một chuỗi ký tự có độ dài cố định, gọi là mã băm (hash). Cùng dữ liệu luôn cho cùng mã băm. Chỉ cần đổi một ký tự, mã băm thay đổi hoàn toàn. Nhờ vậy mã băm hoạt động như dấu vân tay của dữ liệu.
Bạn không cần biết toán để hiểu hash trong Bitcoin. Bạn chỉ cần nắm bốn tính chất ở dưới và một ví dụ có thể tự chạy. Hiểu hash xong thì hai chuyện sẽ sáng ra: vì sao các khối móc xích chắc đến vậy, và vì sao đào Bitcoin là một cuộc đua đoán số.
Hash biến dữ liệu thành dấu vân tay
Bitcoin dùng hàm băm tên SHA-256. Mã băm của nó luôn dài 64 ký tự thập lục phân (số 0-9 và chữ a-f), tức 256 bit. Dưới đây là mã SHA-256 thật của vài chuỗi, được tính bằng máy:
Dữ liệu đầu vào | SHA-256 |
|---|---|
|
|
|
|
|
|
|
|
Nhìn bảng sẽ thấy chuỗi nào cũng cho mã dài đúng 64 ký tự. Hai dòng đầu chỉ khác nhau một chữ hoa chữ thường, nhưng hai mã băm không có điểm gì giống nhau.
Nếu đầu vào là cả một cuốn sách hàng nghìn trang, kết quả vẫn là 64 ký tự. Bạn có thể tự kiểm tra bằng lệnh echo -n "Bitcoin" | shasum -a 256 trên máy Mac hoặc Linux.

Bốn tính chất làm hash hữu ích
- Cùng đầu vào, cùng đầu ra. Máy nào chạy SHA-256 cho chữ "Bitcoin" cũng ra đúng mã ở bảng trên. Nhờ đó hàng nghìn máy trong mạng kiểm tra chéo nhau mà không cần hỏi ý nhau.
- Thay đổi nhỏ, kết quả khác hoàn toàn. Đổi "Bitcoin" thành "bitcoin" là mã băm khác sạch. Không thể đoán "mã gần giống" từ "dữ liệu gần giống". Tính chất này khiến mọi chỉnh sửa lén lút đều lộ ra.
- Một chiều. Từ mã băm, bạn không có cách tính ngược ra dữ liệu gốc, ngoài việc thử từng khả năng. Đây là điểm hay bị nhầm: hash không phải mã hoá (encryption). Mã hoá có chìa để giải mã, hash thì không có đường quay lại. Bạn dùng hash để kiểm tra "có đúng dữ liệu này không", không phải để cất dữ liệu đi rồi lấy lại.
- Khó tìm hai đầu vào cho cùng một mã. SHA-256 có khoảng 2 mũ 256 mã khả dĩ, tức cỡ 10 mũ 77, một con số khổng lồ đến mức không thể thử hết. Vì vậy thực tế không ai tìm ra hai dữ liệu khác nhau cho cùng một mã băm.
Bitcoin dùng hash vào đâu
Hash xuất hiện khắp Bitcoin. Có ba chỗ quan trọng nhất cho người học.
Mã nhận dạng giao dịch và khối. Mỗi giao dịch và mỗi khối có một mã băm làm "tên" duy nhất. Khi bạn tra một giao dịch trên trang khám phá khối, chuỗi dài bạn thấy chính là mã băm.
Nối khối vào chuỗi. Mỗi khối chứa mã băm của khối ngay trước nó. Nếu ai đó sửa một giao dịch trong khối cũ, mã băm của khối đó đổi. Mã băm khối kế tiếp đang ghi mã cũ nên không còn khớp, và cứ thế vỡ dây chuyền đến hết chuỗi.
Đây là lý do blockchain có tính bất biến: muốn sửa một khối cũ, phải tính lại mọi khối sau nó, mà mỗi khối đều tốn sức đào.
Đề bài cho thợ đào. Đây là chỗ thú vị nhất, và là cách hash biến thành cuộc đua.
Hash biến thành cuộc đua đoán số
Mạng Bitcoin đặt một yêu cầu: mã băm của khối phải nhỏ hơn một ngưỡng cho trước. Nói cách khác, mã băm phải bắt đầu bằng thật nhiều số 0. Vì hash không đoán trước được, thợ đào không có đường tắt. Họ chỉ có cách đổi một con số trong khối (gọi là nonce), tính hash, kiểm tra, rồi thử số khác, lặp lại hàng tỷ tỷ lần.

Để bạn tự cảm nhận, hãy xem một thí nghiệm nhỏ. Lấy chuỗi HODL tra Lan 5 USD rồi nối thêm một con số tăng dần, 0, 1, 2, 3... và tính SHA-256 từng lần, tìm mã băm đầu tiên bắt đầu bằng một số lượng chữ số 0 định trước.
Yêu cầu mã băm bắt đầu bằng | Con số nối thêm tìm được đầu tiên | Mã băm tìm được |
|---|---|---|
3 chữ số 0 | 139 |
|
4 chữ số 0 | 380.571 |
|
5 chữ số 0 | 1.656.851 |
|
Cứ thêm một chữ số 0 yêu cầu, số lần thử trung bình tăng khoảng 16 lần, vì mỗi ký tự thập lục phân có 16 giá trị. Kết quả đầu tiên ở dòng 3 chữ số 0 gặp may nên nhanh hơn mức trung bình, đó là bản chất ngẫu nhiên của trò này: có lúc trúng sớm, có lúc rất muộn.
Đoạn mã Python sau chạy lại được thí nghiệm trên máy bạn (khoảng một giây):
import hashlib
n = 0
while True:
h = hashlib.sha256(f"HODL tra Lan 5 USD{n}".encode()).hexdigest()
if h.startswith("00000"):
print(n, h); break
n += 1Mạng Bitcoin làm đúng việc này, nhưng ở quy mô khủng khiếp. Mã băm của khối 972.808, tạo ngày 23/10/2026, bắt đầu bằng 19 chữ số 0 (000000000000000000014cfc30a4…).
Theo mempool.space tại ngày 24/10/2026, độ khó khoảng 140,6 nghìn tỷ và sức đào toàn mạng khoảng 1.069 EH/s, tức hơn một tỷ tỷ phép băm mỗi giây. Để ra một khối, cả mạng trung bình phải thử cỡ 6 nhân 10 mũ 23 lần. Với tốc độ đó, một khối ra trung bình sau khoảng chín đến mười phút.
Bitcoin thực ra băm hai lần liên tiếp (SHA-256 hai lần) trên tiêu đề khối dài 80 byte, nhưng nguyên lý không đổi. Muốn xem dựng lại một khối bằng số thật, bạn có thể đọc bài Bitcoin hoạt động thế nào? Dựng lại khối đầu tiên của Satoshi.
Vì sao điều này bảo vệ Bitcoin
Có hai bất đối xứng làm nên sự an toàn. Tìm ra một mã băm thoả yêu cầu thì cực khó, phải thử rất nhiều lần. Nhưng kiểm tra một mã băm có thoả yêu cầu hay không thì dễ, chỉ cần tính đúng một lần. Thợ đào tốn điện để tìm, còn hàng nghìn node chỉ mất tích tắc để kiểm chứng.
Vì vậy kẻ muốn viết lại lịch sử phải tính lại không chỉ một khối mà cả chuỗi sau đó, trong khi cả mạng vẫn đang đào thêm khối mới. Phần còn lại của mạng tạo ra khối nhanh hơn nên kẻ gian gần như không bao giờ đuổi kịp.
Sức đào toàn mạng càng lớn, đường đua càng dài với kẻ tấn công. Bài hashrate Bitcoin có số liệu sức đào qua 12 tháng và cách độ khó tự điều chỉnh mỗi 2.016 khối.
Lỗi hay gặp
- Lỗi thứ nhất: "hash là mã hoá". Không phải. Mã băm không giải ngược được, nên bạn không thể "giải mã" nó. Ở Module 3, bạn sẽ gặp mã hoá bất đối xứng, khái niệm khác hẳn.
- Lỗi thứ hai: "thợ đào giải một bài toán khó rất thông minh". Họ không làm toán cao siêu. Họ chỉ thử rất nhiều lần với tốc độ cực cao. Lợi thế thuộc về ai có máy nhanh và điện rẻ.
- Lỗi thứ ba: "nhiều số 0 nghĩa là khối có giá trị cao hơn". Số 0 chỉ là bằng chứng đã tốn công sức. Nó không làm khối "quý" hơn, chỉ chứng minh khối hợp lệ.
Tự kiểm tra
Check your understanding
Bạn đổi một chữ hoa thành chữ thường trong dữ liệu đầu vào của SHA-256. Mã băm thay đổi thế nào?
Giải thíchHash khác mã hoá (encryption) ở điểm nào?
Giải thíchMột người mới nói: "Thợ đào giải bài toán cao siêu nên mới tốn điện". Bạn nên chỉnh thế nào?
Giải thích
Bài tiếp theo
Bây giờ bạn đã có đủ ba mảnh: sổ chung, mạng và hash. Bài kế tiếp ghép chúng lại: đào Bitcoin và mempool, nơi giao dịch chờ được ghi vào khối và thợ đào tranh nhau ghi.
Bài viết mang tính giáo dục, không phải khuyến nghị đầu tư. Số liệu mạng lấy từ mempool.space tại ngày 24/10/2026. Bitcoin biến động mạnh, chỉ dùng số tiền bạn chấp nhận mất.