

Hashing là quá trình tạo ra đầu ra có kích thước cố định từ đầu vào có kích thước thay đổi, thông qua các công thức toán học gọi là hàm băm (được triển khai dưới dạng thuật toán băm).
Mặc dù không phải tất cả hàm băm đều sử dụng mật mã, nhưng các hàm băm mật mã lại là nền tảng cốt lõi của tiền mã hóa. Nhờ vậy, blockchain và các hệ thống phân tán khác có thể đạt được mức độ toàn vẹn và bảo mật dữ liệu cao.
Cả hàm băm thông thường và hàm băm mật mã đều có tính tất định. Tính tất định nghĩa là miễn là đầu vào không thay đổi, thuật toán băm sẽ luôn cho ra cùng một giá trị đầu ra (gọi là digest hoặc hash).
Thông thường, các thuật toán băm trong tiền mã hóa được thiết kế dưới dạng hàm một chiều, tức là không thể dễ dàng đảo ngược nếu không có lượng lớn thời gian và tài nguyên tính toán. Nói cách khác, việc tạo đầu ra từ đầu vào rất dễ, nhưng làm ngược lại (tìm đầu vào chỉ từ đầu ra) lại rất khó. Nhìn chung, thuật toán băm càng khó bị đảo ngược thì càng an toàn.
Mỗi hàm băm sẽ cho ra giá trị đầu ra có kích thước khác nhau, nhưng với từng thuật toán băm, kích thước đầu ra luôn là cố định. Ví dụ, thuật toán SHA-256 chỉ sinh ra giá trị 256 bit, còn SHA-1 luôn tạo digest dài 160 bit.
Để minh họa, hãy thử chạy hai từ "ExampleText" và "exampletext" qua thuật toán băm SHA-256 (được sử dụng trong Bitcoin).
| Input | Output (256 bits) |
|---|---|
| ExampleText | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
| exampletext | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
Lưu ý rằng chỉ một thay đổi nhỏ (chữ cái đầu in hoa) đã tạo ra giá trị băm hoàn toàn khác. Tuy nhiên, sử dụng SHA-256 thì đầu ra luôn có kích thước cố định là 256 bit (hoặc 64 ký tự), bất kể kích thước đầu vào. Ngoài ra, dù chạy hai từ này qua thuật toán bao nhiêu lần, đầu ra vẫn không đổi.
Ngược lại, nếu dùng thuật toán SHA-1 với cùng đầu vào, kết quả sẽ như sau:
| Input | Output (160 bits) |
|---|---|
| ExampleText | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
| exampletext | e58605c14a76ff98679322cca0eae7b3c4e08936 |
Lưu ý, SHA là viết tắt của Secure Hash Algorithms, chỉ tập hợp các hàm băm mật mã gồm SHA-0, SHA-1 cùng nhóm SHA-2 và SHA-3. SHA-256 thuộc nhóm SHA-2 cùng với SHA-512 và các biến thể khác. Hiện tại, chỉ nhóm SHA-2 và SHA-3 được đánh giá là an toàn.
Các hàm băm thông thường được ứng dụng rộng rãi như tra cứu cơ sở dữ liệu, phân tích tệp lớn và quản lý dữ liệu. Ngược lại, hàm băm mật mã được sử dụng nhiều trong bảo mật thông tin, như xác thực thông điệp và tạo dấu vân tay số. Đối với Bitcoin, hàm băm mật mã là thành phần thiết yếu của quá trình khai thác và tạo địa chỉ, khóa mới.
Sức mạnh thực sự của hashing thể hiện khi xử lý lượng lớn thông tin. Ví dụ, có thể băm một tệp hoặc tập dữ liệu lớn qua hàm băm rồi dùng giá trị đầu ra để nhanh chóng xác minh độ chính xác, toàn vẹn dữ liệu. Điều này khả thi nhờ tính tất định: đầu vào luôn tạo ra giá trị băm rút gọn. Kỹ thuật này giúp không cần lưu trữ hoặc ghi nhớ khối lượng lớn dữ liệu.
Hashing đặc biệt hữu ích với công nghệ blockchain. Blockchain Bitcoin có nhiều thao tác liên quan đến hashing, nhất là trong khai thác. Hầu hết giao thức tiền mã hóa đều dựa vào hashing để liên kết, cô đọng nhóm giao dịch thành block và tạo liên kết mật mã giữa các block, hình thành blockchain.
Hàm băm áp dụng kỹ thuật mật mã được gọi là hàm băm mật mã. Thông thường, để phá vỡ hàm băm mật mã cần thử nghiệm brute-force với số lượng lớn. Để "đảo ngược" hàm băm mật mã, cần đoán đầu vào qua thử sai cho đến khi trùng đầu ra. Tuy nhiên, cũng có trường hợp đầu vào khác nhau cho cùng đầu ra – gọi là "va chạm" (collision).
Về mặt kỹ thuật, hàm băm mật mã cần đáp ứng ba tiêu chí để được xem là an toàn: kháng va chạm, kháng tiền ảnh và kháng tiền ảnh thứ hai.
Trước khi đi sâu từng tiêu chí, hãy tóm tắt logic bằng ba câu:
Va chạm xảy ra khi các đầu vào khác nhau cho cùng giá trị băm. Hàm băm chỉ được coi là kháng va chạm cho đến khi có người tìm ra va chạm. Mọi hàm băm đều tồn tại va chạm vì số đầu vào vô hạn, số đầu ra hữu hạn.
Nói cách khác, hàm băm kháng va chạm khi xác suất tìm va chạm thấp tới mức phải mất hàng triệu năm tính toán. Vì không có hàm băm nào hoàn toàn không va chạm, một số thuật toán đủ mạnh vẫn được xem là kháng va chạm (ví dụ: SHA-256).
Trong số các thuật toán SHA, SHA-0 và SHA-1 không còn an toàn do đã xuất hiện va chạm. Hiện tại, SHA-2 và SHA-3 được coi là kháng va chạm.
Kháng tiền ảnh liên quan đến hàm một chiều. Hàm băm kháng tiền ảnh khi xác suất tìm được đầu vào tạo nên giá trị đầu ra xác định là cực kỳ thấp.
Tính chất này khác kháng va chạm vì kẻ tấn công phải đoán đầu vào từ đầu ra, còn va chạm là tìm hai đầu vào khác nhau cho cùng đầu ra.
Kháng tiền ảnh rất quan trọng để bảo vệ dữ liệu vì chỉ cần băm thông điệp đã có thể xác thực tính toàn vẹn mà không cần tiết lộ nội dung. Trên thực tế, nhiều dịch vụ và ứng dụng web lưu trữ giá trị băm của mật khẩu thay vì mật khẩu rõ.
Kháng tiền ảnh thứ hai là trung gian giữa hai tính chất trên. Tấn công kiểu này là khi ai đó tìm được một đầu vào cụ thể khác cho giá trị băm giống với đầu vào đã biết.
Nói cách khác, tấn công tiền ảnh thứ hai là tìm va chạm, nhưng thay vì hai đầu vào ngẫu nhiên, lại là một đầu vào tạo ra giá trị băm giống đầu vào xác định trước.
Do đó, hàm băm kháng va chạm cũng kháng tiền ảnh thứ hai, vì kháng tiền ảnh thứ hai luôn kéo theo kháng va chạm. Tuy nhiên, vẫn có thể tấn công tiền ảnh đối với hàm băm kháng va chạm, vì chỉ cần tìm một đầu vào cho một đầu ra.
Khai thác Bitcoin gồm nhiều bước liên quan hàm băm, như kiểm tra số dư, liên kết đầu vào - đầu ra giao dịch, và băm giao dịch trong block để tạo Cây Merkle. Một trong những lý do chính giúp blockchain Bitcoin an toàn là thợ đào phải thực hiện hàng loạt phép băm để tìm ra lời giải hợp lệ cho block kế tiếp.
Cụ thể, thợ đào thử nhiều đầu vào khác nhau khi tạo giá trị băm cho block ứng viên. Họ chỉ xác thực được block nếu tạo ra giá trị băm bắt đầu bằng số lượng số 0 nhất định. Số lượng số 0 xác định độ khó khai thác, thay đổi theo hash rate toàn mạng.
Ở đây, hash rate thể hiện sức mạnh tính toán đầu tư vào khai thác Bitcoin. Nếu hash rate tăng, giao thức Bitcoin tự động điều chỉnh độ khó để thời gian đào một block trung bình luôn gần 10 phút. Nếu nhiều thợ đào ngừng khai thác, hash rate giảm mạnh, độ khó sẽ được điều chỉnh để việc đào dễ hơn cho đến khi thời gian block trung bình về mức 10 phút.
Lưu ý, thợ đào không cần tìm va chạm vì có nhiều giá trị băm hợp lệ (bắt đầu bằng số lượng số 0 nhất định). Có nhiều lời giải cho một block, thợ đào chỉ cần tìm ra một lời giải - theo ngưỡng xác định bởi độ khó khai thác.
Khai thác Bitcoin rất tốn kém nên thợ đào không có động cơ gian lận vì sẽ chịu tổn thất tài chính lớn. Càng nhiều thợ đào tham gia blockchain, mạng lưới càng mạnh.
Không thể phủ nhận rằng hàm băm là công cụ thiết yếu trong khoa học máy tính, đặc biệt khi xử lý dữ liệu lớn. Khi kết hợp với mật mã, thuật toán băm rất linh hoạt, cung cấp bảo mật và xác thực đa dạng. Vì vậy, hàm băm mật mã là yếu tố sống còn của hầu hết mạng lưới tiền mã hóa, nên việc hiểu rõ tính chất và cơ chế hoạt động của chúng cực kỳ hữu ích cho bất kỳ ai quan tâm đến công nghệ blockchain.
Hashing là hàm chuyển đổi dữ liệu bất kỳ thành đầu ra cố định. Nó đảm bảo toàn vẹn và bảo mật dữ liệu trong blockchain bằng cách tạo dấu vân tay duy nhất. Chỉ thay đổi nhỏ trong dữ liệu cũng tạo ra giá trị băm hoàn toàn khác, rất lý tưởng để xác minh và bảo vệ mật mã.
Hàm băm xử lý dữ liệu đầu vào để tạo đầu ra cố định thông qua thuật toán toán học. Cùng một đầu vào luôn cho kết quả giống nhau nhờ tính tất định – các hàm này tuân thủ quy tắc tính toán nhất quán, đảm bảo khả năng tái tạo và tin cậy trong các phép toán mật mã.
Hashing dùng để xác minh toàn vẹn dữ liệu, chữ ký số, xác thực mật khẩu và bảo mật blockchain. Nó đảm bảo dữ liệu không bị thay đổi và giúp xác thực danh tính an toàn trong hệ thống mật mã.
Hashing tạo đầu ra cố định, không thể đảo ngược, dùng để xác minh toàn vẹn dữ liệu. Mã hóa có thể đảo ngược và bảo vệ tính bí mật. Hashing không giải mã được dữ liệu, còn mã hóa có thể giải mã nếu có đúng khóa.
Một hàm băm tốt cần kháng va chạm để tránh trùng lặp, kháng chỉnh sửa để thay đổi nhỏ tạo ra đầu ra rất khác, và có hiệu suất tra cứu cao để truy xuất nhanh dữ liệu.
Các thuật toán băm phổ biến gồm MD5, SHA-1, SHA-256. MD5 tạo giá trị băm 128 bit nhưng đã có lỗ hổng bảo mật. SHA-256 cho giá trị băm 256 bit, bảo mật mạnh hơn. SHA-1 đã bị loại bỏ. SHA-256 được ưa chuộng trong blockchain vì khả năng chống va chạm và an toàn cao.











