Hàm băm Cryptographic Hash Functions: Vai trò trong xác thực dữ liệu
Hàm băm mật mã (cryptographic hash function) biến một dữ liệu bất kỳ, dù là một ký tự hay một tệp nhiều gigabyte, thành một chuỗi có độ dài cố định gọi là giá trị băm. Chỉ cần dữ liệu thay đổi một bit, giá trị băm thay đổi hoàn toàn, và không thể suy ngược từ giá trị băm ra dữ liệu gốc. Nhờ những tính chất này, hàm băm là nền tảng của việc xác thực dữ liệu: kiểm tra tệp tải về, lưu mật khẩu, chữ ký số, chứng chỉ website và cả blockchain. Bài viết giải thích các tính chất cốt lõi, các thuật toán đang dùng và cách hàm băm xuất hiện trong đời sống số hằng ngày.
Hàm băm khác mã hóa ở điểm nào
Mã hóa là quá trình hai chiều: có khóa thì giải mã được. Hàm băm là một chiều: không có "khóa" nào để lấy lại dữ liệu gốc. Mục đích của hàm băm không phải giữ bí mật mà là tạo "dấu vân tay" đại diện cho dữ liệu, để kiểm tra dữ liệu có còn nguyên vẹn và có đúng là dữ liệu mong đợi hay không.
Ba tính chất bảo mật cốt lõi
Kháng tiền ảnh (preimage resistance)
Cho một giá trị băm, không thể tìm được dữ liệu nào cho ra giá trị đó trong thời gian khả thi. Tính chất này giúp việc lưu giá trị băm thay vì dữ liệu gốc trở nên có ý nghĩa.
Kháng tiền ảnh thứ hai (second preimage resistance)
Cho một dữ liệu cụ thể, không thể tìm dữ liệu khác có cùng giá trị băm. Nếu thiếu tính chất này, kẻ tấn công có thể thay một tệp hợp lệ bằng tệp độc hại có cùng dấu vân tay.
Kháng va chạm (collision resistance)
Không thể tìm được bất kỳ hai dữ liệu khác nhau nào có cùng giá trị băm. Đây là tính chất mạnh nhất và cũng là tính chất đầu tiên bị phá vỡ khi một thuật toán già đi.
Ngoài ra còn có hiệu ứng tuyết lở: thay đổi nhỏ ở đầu vào làm khoảng một nửa số bit đầu ra thay đổi, khiến không thể đoán mối liên hệ giữa các đầu vào gần giống nhau.
Các thuật toán băm phổ biến
| Thuật toán | Độ dài đầu ra | Tình trạng | Ghi chú |
|---|---|---|---|
| MD5 | 128 bit | Đã bị phá kháng va chạm | Không dùng cho mục đích bảo mật |
| SHA-1 | 160 bit | Đã có va chạm thực tế | Đã bị loại khỏi chứng chỉ web và chữ ký |
| SHA-256, SHA-512 (họ SHA-2) | 256, 512 bit | An toàn | Được dùng rộng rãi nhất hiện nay |
| SHA-3 | 224 đến 512 bit | An toàn | Thiết kế khác hẳn SHA-2, làm phương án dự phòng |
| BLAKE2, BLAKE3 | Tùy chọn | An toàn | Rất nhanh, dùng trong nhiều phần mềm hiện đại |
Lý do MD5 và SHA-1 bị loại bỏ, cùng rủi ro khi còn dùng chúng, được phân tích kỹ trong bài rủi ro của thuật toán lỗi thời MD5 và SHA-1.
Hàm băm trong xác thực dữ liệu hằng ngày
Kiểm tra tệp tải về
Nhiều trang phát hành phần mềm công bố giá trị SHA-256 bên cạnh tệp. Sau khi tải, bạn tính giá trị băm trên máy và so sánh. Trên Windows dùng certutil -hashfile tenfile SHA256 hoặc lệnh PowerShell Get-FileHash; trên macOS và Linux dùng shasum -a 256 hoặc sha256sum. Lưu ý: nếu kẻ tấn công kiểm soát trang web, họ có thể sửa cả tệp lẫn giá trị băm. Vì vậy giá trị băm nên đi kèm chữ ký số.
Chữ ký số
Khi ký một tài liệu, phần mềm không ký trực tiếp toàn bộ dữ liệu mà ký giá trị băm của nó bằng khóa riêng. Người nhận băm lại tài liệu và dùng khóa công khai để kiểm tra chữ ký. Bạn có thể thực hành với GPG theo bài bảo vệ tài liệu bằng GPG/PGP.
Chứng chỉ website và TLS
Chứng chỉ SSL/TLS được tổ chức cấp chứng chỉ ký, dựa trên giá trị băm của nội dung chứng chỉ. Trong phiên TLS, hàm băm còn dùng để tạo mã xác thực thông điệp, đảm bảo dữ liệu không bị sửa trên đường truyền.
HMAC: băm có khóa
HMAC kết hợp hàm băm với một khóa bí mật, cho phép bên nhận xác minh vừa tính toàn vẹn vừa nguồn gốc thông điệp. API của ngân hàng, cổng thanh toán và webhook thường dùng HMAC để ký yêu cầu.
Hệ thống quản lý phiên bản và blockchain
Git định danh mỗi lần commit bằng giá trị băm, nên mọi thay đổi trong lịch sử đều bị phát hiện. Blockchain liên kết các khối bằng giá trị băm của khối trước, tạo chuỗi khó sửa đổi.
Lưu mật khẩu: trường hợp đặc biệt
Hệ thống đúng chuẩn không lưu mật khẩu mà lưu giá trị băm. Tuy nhiên, các hàm băm nhanh như SHA-256 không phù hợp cho mật khẩu, vì kẻ tấn công có card đồ họa mạnh có thể thử hàng tỷ mật khẩu mỗi giây. Thay vào đó, cần dùng hàm băm mật khẩu chuyên dụng:
- Argon2id: được khuyến nghị cho hệ thống mới, tốn cả bộ nhớ lẫn thời gian tính toán.
- scrypt, bcrypt: vẫn được chấp nhận rộng rãi.
- PBKDF2: dùng khi cần tuân thủ một số tiêu chuẩn, với số vòng lặp đủ lớn.
Mỗi mật khẩu cần một chuỗi ngẫu nhiên riêng gọi là salt, để hai người cùng mật khẩu có giá trị băm khác nhau và bảng tra cứu tính sẵn trở nên vô dụng. Khi đọc tin về cơ sở dữ liệu mật khẩu bị lộ, mức độ nguy hiểm phụ thuộc lớn vào việc dịch vụ đã băm mật khẩu theo cách nào.
Những hiểu lầm cần tránh
- "Băm là mã hóa": không. Nếu cần lấy lại dữ liệu, bạn cần mã hóa.
- "Băm giúp ẩn danh dữ liệu": băm số điện thoại hay email không đủ ẩn danh, vì tập giá trị có thể có khá nhỏ và dễ thử hết.
- "Thuật toán nào cũng được": chọn sai thuật toán, như dùng MD5 cho chữ ký hoặc SHA-256 thuần cho mật khẩu, tạo ra lỗ hổng nghiêm trọng.
Hàm băm là công cụ âm thầm nhưng có mặt ở hầu hết mọi cơ chế bảo mật. Hiểu đúng tính chất của nó giúp bạn kiểm tra tệp đúng cách, chọn thuật toán đúng chỗ và đánh giá chính xác mức độ nghiêm trọng của các sự cố bảo mật.
Câu hỏi thường gặp
Hai tệp khác nhau có thể có cùng giá trị băm không?
Về lý thuyết có, vì số đầu vào vô hạn còn số giá trị băm hữu hạn. Với thuật toán an toàn như SHA-256, việc tìm ra hai tệp như vậy là không khả thi trong thực tế.
SHA-256 có bị máy tính lượng tử phá không?
Máy tính lượng tử theo lý thuyết làm giảm độ an toàn của hàm băm trước tấn công tìm tiền ảnh, nhưng SHA-256 và SHA-512 vẫn được xem là đủ mạnh. Mối đe dọa lớn hơn của lượng tử nằm ở mật mã khóa công khai.
Tại sao giá trị băm luôn có cùng độ dài?
Đó là thiết kế của hàm băm: dữ liệu được xử lý theo từng khối và nén lại thành trạng thái có kích thước cố định, giúp so sánh và lưu trữ thuận tiện bất kể kích thước đầu vào.
Có nên tự viết hàm băm riêng không?
Không. Thiết kế hàm băm an toàn đòi hỏi nhiều năm phân tích của cộng đồng mật mã. Hãy dùng thuật toán chuẩn qua thư viện mật mã uy tín.
Bài liên quan

Bảo mật dữ liệu trên đám mây: Mã hóa ở trạng thái nghỉ và chuyển động
Giải thích mã hóa dữ liệu đám mây ở trạng thái nghỉ và khi chuyển động, mã hóa phong bì, các mô hình quản lý khóa KMS, HSM và danh sách việc cho doanh nghiệp.

Cách bảo vệ file tài liệu quan trọng bằng mã hóa GPG/PGP
Hướng dẫn mã hóa file bằng GPG: mã hóa bằng mật khẩu, bằng khóa công khai, ký số, mã hóa thư mục, quản lý và sao lưu khóa, các sai lầm cần tránh.

Hiểu rõ về chứng chỉ SSL/TLS và cách thức hoạt động trên Website
Giải thích chứng chỉ SSL/TLS: nội dung chứng chỉ, chuỗi tin cậy, bắt tay TLS 1.3, các loại DV, OV, EV, ý nghĩa ổ khóa và cấu hình HTTPS đúng cho quản trị web.

Hướng dẫn sử dụng PGP để mã hóa email cá nhân
Hướng dẫn mã hóa email bằng PGP với Thunderbird, Mailvelope cho Gmail và dịch vụ tích hợp sẵn: tạo khóa, trao đổi, xác minh khóa và các giới hạn cần biết.