Trong hầu hết báo cáo điều tra số, bạn sẽ thấy một chuỗi ký tự dài ngoằng đi kèm mỗi tệp hoặc mỗi bản sao ổ đĩa. Đó là giá trị băm (hash). Với người ngoài, nó trông như rác. Với người làm điều tra, nó là chỗ dựa cho một khẳng định rất mạnh: “dữ liệu tôi phân tích hôm nay đúng là dữ liệu tôi đã thu giữ hôm đó, không sai một bit”. Bài viết giải thích hàm băm dùng thế nào cho đúng, và vì sao MD5 vẫn xuất hiện trong điều tra số dù từ lâu bị coi là yếu.
Hàm băm là gì?
Hàm băm nhận đầu vào có độ dài bất kỳ — một tệp vài KB hay một ổ đĩa vài TB — và cho ra một chuỗi có độ dài cố định, gọi là giá trị băm (digest). Ba tính chất khiến nó hữu ích trong điều tra:
- Xác định: cùng một dữ liệu đầu vào luôn cho cùng một giá trị băm, trên mọi máy, ở mọi thời điểm.
- Nhạy với thay đổi nhỏ: đổi một bit trong đầu vào, giá trị băm thay đổi gần như toàn bộ. Không có khái niệm “gần giống”.
- Một chiều: từ giá trị băm không dựng lại được dữ liệu gốc.
Ba thuật toán hay gặp nhất trong nghề: MD5 (128 bit, 32 ký tự hex), SHA-1 (160 bit, 40 ký tự hex) và SHA-256 (256 bit, 64 ký tự hex). Cả ba đều làm đúng công việc trên; khác biệt nằm ở độ bền trước tấn công.
Băm chứng minh được điều gì — và không chứng minh được điều gì
Hash chứng minh tính toàn vẹn: dữ liệu không thay đổi giữa hai thời điểm. Nó không chứng minh nguồn gốc — giá trị băm không nói dữ liệu đến từ máy nào, ai tạo ra, thu giữ trong hoàn cảnh nào. Những câu hỏi đó thuộc về chuỗi hành trình chứng cứ.
Băm trước và sau khi sao chép
Thứ tự chuẩn khi tạo bản sao pháp y gồm sáu bước:
- Băm dữ liệu nguồn trước khi sao chép, qua thiết bị chặn ghi.
- Tạo bản sao bit-by-bit.
- Băm bản sao vừa tạo.
- So sánh hai giá trị. Khớp nghĩa là bản sao trung thực.
- Ghi cả hai giá trị vào biên bản, kèm thuật toán và công cụ đã dùng.
- Băm lại ở mỗi lần bàn giao, để chứng minh dữ liệu không đổi trong thời gian lưu giữ.
Một chi tiết hay bị bỏ qua: băm cái gì. Giá trị băm của vùng dữ liệu trên đĩa khác với giá trị băm của tệp ảnh chứa nó, nếu định dạng ảnh có thêm phần mô tả và nén. Báo cáo phải nói rõ đối tượng được băm là thiết bị, là nội dung ảnh, hay là tệp ảnh.
Khi không thể băm nguồn
Quy trình trên giả định nguồn là một thiết bị lưu trữ đứng yên. Thực tế nhiều lần không được vậy: hệ thống đang chạy, điện thoại không tháo được bộ nhớ, dữ liệu nằm trên dịch vụ trực tuyến. Với các nguồn sống, dữ liệu thay đổi ngay trong lúc thu thập, nên băm nguồn hai lần cũng ra hai kết quả khác nhau — đó là bản chất, không phải lỗi. Cách xử lý là băm ngay dữ liệu đã trích ra, và ghi rõ rằng nguồn ở trạng thái động nên không có giá trị băm nguồn để đối chiếu.
Khi hash không khớp
Hash lệch không đồng nghĩa với gian lận. Nguyên nhân thường gặp gồm sector hỏng trên ổ nguồn, lỗi đường truyền hoặc bộ nhớ khi sao chép, ổ vẫn hoạt động ngầm lúc băm, hoặc hai lần băm không cùng phạm vi. Điều quan trọng là ghi nhận trung thực và tìm nguyên nhân, không lặng lẽ băm lại cho tới khi khớp. Kỹ thuật băm theo từng đoạn giúp khoanh vùng: thay vì một giá trị cho cả ổ, công cụ tính hash cho từng khối, nhờ đó xác định đúng phần dữ liệu lệch và giữ nguyên giá trị chứng minh cho phần còn lại.
MD5 yếu ở chỗ nào
Cần tách bạch ba loại kháng tấn công, vì gộp chúng lại là nguồn gốc của hầu hết tranh cãi:
- Kháng va chạm: khó tìm hai đầu vào khác nhau cho cùng một giá trị băm, khi kẻ tấn công được tự do chọn cả hai. MD5 đã mất tính chất này hoàn toàn; với SHA-1 cũng đã có va chạm được công bố công khai.
- Kháng tiền ảnh: cho trước một giá trị băm, khó tìm ra dữ liệu sinh ra nó. Với MD5 vẫn chưa có tấn công thực tế.
- Kháng tiền ảnh thứ hai: cho trước một tệp cụ thể, khó tìm tệp khác có cùng giá trị băm. Đây cũng chưa bị phá vỡ trên thực tế.
Việc đối chiếu bản sao với nguồn dựa vào tính chất thứ ba, chứ không phải thứ nhất. Điều tra viên gặp dữ liệu đã tồn tại sẵn rồi mới băm nó; không ai được chọn trước nội dung để cài cặp va chạm. Đó là lý do MD5 vẫn còn “đủ dùng” cho khâu xác minh bản sao, và vì sao nhiều hệ thống quản lý chứng cứ cũ vẫn lưu giá trị MD5.
Vậy va chạm ảnh hưởng gì tới giá trị chứng minh
Ảnh hưởng thay đổi theo mục đích sử dụng hash, và cần phân biệt ba tình huống.
Một, đối chiếu bản sao với nguồn. Va chạm gần như không ảnh hưởng, vì kẻ đối nghịch không kiểm soát được nội dung tại thời điểm điều tra viên tính hash.
Hai, dùng hash để nhận dạng nội dung. Đây là chỗ thực sự nguy hiểm. Khi đối chiếu hash với một danh sách tệp đã biết — lọc bỏ tệp hệ thống vô hại, hoặc đánh dấu tệp đáng ngờ — thì người tạo ra tệp có thể đã chuẩn bị trước một cặp tệp cùng giá trị băm, một vô hại và một không. Với MD5, việc chuẩn bị như vậy nằm trong tầm tay. Kết luận “tệp này trùng hash với tệp đã biết nên chính là tệp đó” mất tính chắc chắn.
Ba, khả năng bị phản biện. Ngay cả khi kỹ thuật không có vấn đề, một báo cáo chỉ có MD5 vẫn tặng cho bên phản biện một chỗ để đặt dấu hỏi, trong khi chi phí tính thêm SHA-256 gần như bằng không.
Thực hành khuyến nghị
- Mặc định SHA-256 cho mọi công việc mới.
- Tính đồng thời ít nhất hai thuật toán. Hầu hết công cụ tạo ảnh làm việc này trong cùng một lượt đọc, và tạo cặp va chạm đồng thời trên hai họ hàm băm khác nhau là bài toán khó hơn rất nhiều.
- Giữ MD5 khi cần tương thích với hệ thống hoặc danh sách hash cũ, nhưng luôn kèm theo một thuật toán mạnh.
- Ghi đầy đủ trong báo cáo: thuật toán, công cụ và phiên bản, đối tượng được băm, thời điểm tính.
- So sánh bằng công cụ, không bằng mắt. Thói quen chỉ liếc vài ký tự đầu và cuối là một lỗi khó chống chế khi bị hỏi lại.
Kết luận
Hàm băm là công cụ đơn giản nhưng gánh phần rất nặng trong điều tra số: nó biến câu “tôi không sửa gì cả” thành một khẳng định kiểm chứng được. Hiểu đúng nó nghĩa là hiểu cả giới hạn — hash nói về toàn vẹn chứ không nói về nguồn gốc, và mức an toàn của MD5 phụ thuộc vào việc bạn dùng nó để đối chiếu hay để nhận dạng.
Lưu ý: bài viết mang tính giới thiệu chung, không phải tư vấn pháp lý. Với vụ việc cụ thể, hãy tham vấn chuyên gia pháp luật có thẩm quyền.
