Khái niệm Hashing
Hashing là quá trình chuyển đổi dữ liệu đầu vào (bất kỳ độ dài nào) thành một chuỗi ký tự có độ dài cố định (giá trị hash/hàm băm) bằng một thuật toán toán học. Giá trị hash thường được biểu diễn dưới dạng thập lục phân (hex) hoặc nhị phân.
Ví dụ minh họa
Giả sử bạn có danh sách 20.000 số và cần tìm một số cụ thể. Thay vì quét tuyến tính, hashing cho phép ánh xạ giá trị đó đến một chỉ mục trong bảng băm (hash table) để truy xuất tức thì.
Hàm băm (Hash Function) trong bảo mật
- Chuyển đổi dữ liệu thô thành giá trị băm duy nhất, không thể đảo ngược.
- Dùng để kiểm tra tính toàn vẹn dữ liệu, lưu trữ mật khẩu an toàn, chữ ký số.
- Thuật toán phổ biến: MD5 (128-bit), SHA-1, SHA-2 (SHA-256, SHA-512), NTLM, LANMAN.
Hashing so với Mã hóa (Encryption)
| Đặc điểm | Hashing | Mã hóa |
|---|---|---|
| Chiều | Một chiều (không giải mã được) | Hai chiều (có thể giải mã với khóa) |
| Mục đích | Xác thực, kiểm tra toàn vẹn | Bảo mật dữ liệu khi truyền/lưu trữ |
| Đầu ra | Độ dài cố định | Độ dài tùy thuộc dữ liệu đầu vào |
Ứng dụng hashing trong bảo mật
- Lưu trữ mật khẩu: Hệ thống băm mật khẩu người dùng, so sánh giá trị băm khi đăng nhập (không lưu mật khẩu gốc).
- Kiểm tra toàn vẹn file: So sánh hash trước/sau truyền tải.
- Chữ ký số & chứng chỉ: Băm nội dung rồi ký với khóa riêng.
- Blockchain: Liên kết các khối bằng hash.
Đặc tính an toàn của hàm băm
Theo FIPS 180-4, thuật toán băm an toàn (SHA-256, SHA-3...) phải đáp ứng: không thể tìm đầu vào cho một hash cho trước (pre-image resistance), không thể tìm hai đầu vào cho cùng hash (collision resistance).
Các ý chính về hashing
- Phân bố đều giá trị trên mảng (bảng băm).
- Khóa (key) được chuyển thành chỉ mục bằng hàm băm.
- Truy cập phần tử trong một lần (O(1) trung bình).
- Xử lý va chạm (collision) bằng chaining hoặc open addressing.