Hash là gì
Hash hay dịch tiếng Việt là “băm”. Tưởng tượng, bạn có một miếng thịt, và bạn dung dao băm miếng thịt đó ra, thì Hash cũng làm công việc tương tự nhưng đối tượng bị “băm” ở đây là dữ liệu.
Cụ thể hơn nhé!
Bạn có một đoạn văn bản (clear text), bạn đưa đoạn văn bản này qua cỗ máy xay hash thì bạn sẽ được một đoạn mã hóa (cipher text)
Ví dụ :
- Clear text : abcdef
- Sau khi được mã hóa bởi MD5 sẽ được : e80b5017098950fc58aad83c8c14978e
Một vài đặc điểm của hash :
- Hai đoạn văn bản clear text khác sau sẽ hash ra hai chuỗi mã hóa hoàn toàn khác nhau
- Chiều dài của đoạn mã hóa là không đổi. Hay nói cách khác, nếu dung cùng một thuật toán hash, thì bất kể chiều dài của đoạn văn bản là bao nhiêu đi nữa, đoạn mã hóa sau khi hash luôn có chiều dài bằng nhau.
- Hash là hàm một chiều. Từ đoạn văn bản, sau khi hash sẽ được đoạn mã hóa. Nhưng từ đoạn mã hóa, không thể khôi phục lại đoạn văn bản ban đầu.
Một số thuật toán Hash :
- MD5
- SHA-256
- SHA-512
Series video về Mật mã học :
Các ứng dụng của Hash
Đảm bảo tính toàn vẹn dữ liệu
Giả sử có 2 người muốn trao đổi dữ liệu với nhau, tên là Alice và Bob. Alice muốn gửi một lá thư cho Bob nhưng cô ấy sợ rằng nội dung bức thư sẽ bị thay đổi trong quá trình gửi. Alice sẽ làm như sau :
- Alice soạn nội dung thư. Ví dụ : “em yêu anh”
- Alice hash lá thư này, và thu được đoạn mã hóa : 65722a42b8aaa47d59c2327e70412be4
- Alice gửi lá thư kèm với đoạn mã hóa cho Bob
4. Khi Bob nhận được thư, Bob sẽ tiến hành hash lại nội dung thư
5. Bob so sánh nội dung đoạn mã hóa mà mình tự hash với đoạn mã hóa mà Alice gửi cho mình. Nếu hai đoạn này giống nhau, tức là nội dung thư không bị thay đổi. Còn nếu hai đoạn mã hóa này khác nhau chứng tỏ nội dung thư đã bị thay đổi.
Lưu trữ mật khẩu
Đối với một số trang web cần đăng nhập và xác thực người dùng, phía web server phải có một database để lưu trữ thông tin username/password của người dùng. Tuy nhiên nếu chỉ đơn thuần lưu username/password ở dạng văn bản clear text thì vô cùng nguy hiểm, vì nếu lỡ hacker xâm nhập được vào hệ thống thì toàn bộ thông tin username/password sẽ bị hacker đánh cắp.
Để đảm bảo an toàn, người ta sẽ hash mật khẩu, và lưu thông tin trong database ở dạng username/hash(password)
Quá trình đăng nhập của người dùng sẽ diễn ra như sau :
- Người dùng nhập username/password
- Web server hash password mà người dùng nhập vào để được một đoạn mã hóa
- Web server sẽ so sánh đoạn mã hóa này với database. Nếu cặp username/mã hóa mà web server vừa tính toán trùng khớp với username / mã hóa trong database thì người dùng vừa nhập một mật khẩu hợp lệ. Ngược lại, người dùng đã nhập sai mật khẩu.
Kiểm tra tập tin
Một số trang web lớn như Microsoft, khi mọi người tải một file, bên cạnh đường link tải file và tên file, bao giờ cũng có một đoạn hash.
Sau khi mọi người tải file xong, có thể dùng tool CertUtil để kiểm tra.
- Người dùng tải file
- Hash file để có đoạn mã hóa
- So sánh đoạn mã hóa vừa tính với đoạn mã hóa trên trang chủ. Nếu trùng khớp thì đây là file “chính chủ” thật. Nếu không khớp, thì đây có thể là file giả mạo, không nên dùng, tốt nhất nên xóa đi.
Phần mềm Anti-Virus
Hiện nay, cơ chế phát hiện và diệt virus đã phát triển rất nhiều, ví dụ như dùng AI + big data hay sandbox. Nhưng cơ chế truyền thống dùng database vẫn tỏ ra vô cùng hữu hiệu bởi nó nhanh, ít tốn tài nguyên của máy và vẫn giúp chúng ta phát hiện hầu hết các mẫu virus phổ biến.
Database ở đây đơn giản là tập hợp các file virus và mã hash tương ứng. Nguyên lý hoạt động như sau :
- Khi người dùng thao tác với file, ví dụ chép file từ usb sang, sẽ kích hoạt chương trình anti virus hoạt động.
- Phần mềm sẽ hash file mà người dùng đang chép để có đoạn mã hóa
- Phần mềm so sánh đoạn mã hóa này với các đoạn mã hóa trong database. Nếu có mẫu trùng khớp, thì file người dùng đang thao tác là file có chứa virus. Ngược lại, nếu tra hết database mà không thấy mẫu nào trùng khớp, thì đây là file sạch hoặc file chứa một mẫu virus mới mà database chưa có. Lúc này, thông thường, phần mềm anti virus sẽ đưa file qua các bộ lọc cao cấp hơn.
Tổng kết
Trên đây là khái niệm về Hash và một số ứng dụng mà hash đang âm thầm phục vụ chúng ta. Ngoài ra còn rất nhiều ứng dụng khác nữa, phức tạp hơn, khó nhận biết hơn, nhưng chung quy lại, hash là một phần không thể thiếu trong Mật mã học mà một khi đã làm trong các lĩnh vực liên quan đến an toàn thông tin, thì không thể bỏ qua Hash.
Tác giả
Tuấn Nguyễn CCDA, CCIE Security #65083.