Hàm băm là gì?
Một hàm băm biến bất kỳ nội dung nào — một câu, một phần mềm, một bản sao lưu nhiều giga byte — thành một chuỗi có độ dài cố định gọi là vân tay hoặc digest. Ba tính chất định nghĩa nó: đầu ra luôn cùng một kích thước dù đầu vào thế nào, cùng một nội dung luôn cho cùng một vân tay, và việc ngược từ vân tay về đầu vào phải bất khả thi trên thực tế. Chính điểm thứ ba phân biệt một hash mật mã với một tổng kiểm tra như CRC32.
Trên thực tế, hai cách dùng chiếm hầu hết. Kiểm tra tính toàn vẹn : nhà phát hành công bố vân tay của tệp, bạn tính lại, và trùng nhau chứng minh bản tải về không bị sửa đổi. So sánh nội dung : thay vì giữ chính các tài liệu, người ta giữ vân tay của chúng — trùng nhau nghĩa là nội dung trùng nhau, mà không lộ gì về bản chất của chúng.
Chọn thuật toán nào ngày nay?
SHA-256 là câu trả lời mặc định: được chuẩn hóa bởi NSA rồi phổ biến khắp nơi, triển khai trong mọi ngôn ngữ, và chưa có xung đột nào được biết đến. SHA-512 hợp với khối lượng lớn khi bộ xử lý là 64 bit, thường nhanh hơn người anh em trên loại kiến trúc này. SHA-384 không thêm gì khác ngoài một biến thể dài hơn. Đối với việc ký thông điệp bằng khóa, HMAC-SHA-256 là chuẩn mực: nó kết hợp khóa bí mật và hash, nên chỉ người giữ khóa mới tạo ra được cùng giá trị.
Còn MD5 và SHA-1 vẫn hữu ích cho các kiểm tra không nhạy cảm — chỉ mục, cache, phát hiện trùng lặp — nơi tốc độ quan trọng hơn độ bền. Riêng CRC32, thì không phải là hash mật mã: nó phát hiện hư hỏng vô tình, nhưng hư hỏng có chủ ý thì làm được chỉ trong vài giây.
Tại sao MD5 và SHA-1 bị coi là đã bị phá?
Vì các nhà nghiên cứu đã tạo ra, với từng thuật toán, hai tài liệu khác nhau nhưng chung một vân tay. Với MD5, minh chứng có từ năm 2004; với SHA-1, một xung đột thực sự được tạo ra năm 2017 với tên SHAttered. Chỉ một xung đột là đủ phá một chữ ký: nếu kẻ tấn công chọn tài liệu và nhà phát hành chỉ băm nó, hắn có thể đưa ra một chữ ký phủ lên hoàn toàn một nội dung khác. Đó là lý do chứng chỉ TLS, cập nhật phần mềm và chữ ký gói đã từ bỏ các thuật toán này.
Những gì hash không làm được
Băm không phải là mã hóa: vân tay được thiết kế là bất khả nghịch, nhưng nó không bảo vệ nội dung bằng cách làm cho nội dung không đọc được. Hash không mã hóa gì, không thay thế TLS cũng không thay thế khóa mã hóa, và cũng không bảo vệ nổi một mật khẩu — đó là việc của bcrypt, scrypt hay Argon2, vốn được thiết kế để chậm. Cuối cùng, băm hai lần không tăng cường gì: nối các thuật toán lại chỉ thêm một lớp yếu vào chỗ mà một hàm chưa bị phá đã đủ.
Được khuyến nghị cho
Quản trị hệ thống và giám đốc công nghệ kiểm tra tổng kiểm tra của các bản phát hành, nhà phát triển niêm phong sản phẩm hoặc xác thực webhook, kiểm toán viên và đội tuân thủ kiểm tra tính toàn vẹn của bản sao lưu, nhà báo và nhà phân tích so tài liệu mà không phát tán, sinh viên mật mã học làm việc với các khái niệm vân tay, xung đột và salt — và bất kỳ ai muốn băm một nội dung nhanh chóng và không để lại dấu vết, với các công cụ bổ sung là trình tạo mật khẩu, bộ mã hóa và giải mã Base64, bộ giải mã JWT, công cụ kiểm thử regex và bộ đếm ký tự.