Làm thế nào các tệp 0 byte có thể tạo ra một giá trị băm?


20

Làm thế nào một tệp văn bản byte bằng 0 có thể tạo ra một hàm băm khi được băm với sha1sum, sha256sum, v.v. Dữ liệu nào là chương trình băm để tạo giá trị băm?

Ta

QuickHash trong Linux

Lệnh đầu cuối

Câu trả lời:


21

Các thuật toán băm đọc đầu vào và xử lý nó, bất kể có dữ liệu nào không. Đây là một hành vi hợp lệ và mong muốn và thậm chí được sử dụng để xác minh nếu một triển khai nhất định là chính xác. Điều này dẫn đến "null-băm" cho tất cả các thuật toán chính.

Tóm lại: da39a3ee5e6b4b0d3255bfef95601890afd80709 là sha1-hash cho một tệp trống ở mọi nơi, điều tương tự cũng đúng với băm null của các thuật toán khác.


1
Vâng, bạn học được điều gì đó mới mỗi ngày! Tôi không biết có "giá trị null" cho mọi thuật toán. Cảm ơn nhiều.
Gizmo_the_Great

3
Các thuật toán băm có một điều kiện ban đầu được xác định trước - giống như một số mà chúng bắt đầu và biến đổi khi chúng đọc trong dữ liệu. Nếu không có dữ liệu để đọc, hàm băm chỉ là kết quả của điều kiện ban đầu được đặt trước đó.
Kevin

Lý do cũng là vì thuật toán sha1 nối thêm chiều dài của dữ liệu (trong trường hợp này là: không) và có một số cờ và phần đệm được thêm vào thông báo. Vì vậy, ngay cả "không có dữ liệu" vẫn sẽ dẫn đến một số dữ liệu được xử lý.
user92979

14

Tất cả các thuật toán băm trong Quick Hash là các cấu trúc Merkle của Damgård . Như vậy, họ đệm thông điệp đến bội số của kích thước khối.

Các thuật toán của Quick Hash đạt được điều này bằng cách nối thêm một 1bit, càng nhiều 0bit càng cần thiết, và cuối cùng là độ dài tin nhắn.

Điều này cho phép băm các tin nhắn có độ dài tùy ý, bao gồm các tin nhắn có độ dài bằng không.


Nếu lý do chỉnh sửa của tôi khó hiểu, ban đầu tôi đã đọc sai câu trả lời của bạn và viết lại "cho rõ ràng", sau đó nhận ra rằng chỉnh sửa của tôi là sai và quay lại và sửa nó. Hệ thống hợp nhất hai giải thích vì nó nằm trong cùng một cửa sổ thời gian.
fixer1234

1

(Bổ trợ cho câu trả lời của Dennis và fixer1234?)

Ngắn gọn:

$ shasum -a 256 /dev/null e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null

Tất cả các tệp 0 byte sẽ có cùng một tổng kiểm tra.

$ shasum -a 512 /dev/null cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (lưu ý: MD5 bị hỏng; đây không phải là 'hàm băm an toàn'. Điều này được ghi lại trong mục MD5 trong Wikipedia.)

Do đó, ví dụ, nếu bạn đang cố xác minh tính vô hại của các tệp tại virustotal.com bằng một trong các giá trị băm an toàn được liệt kê ở đây, ví dụ: da39a3ee5e6b4b0d3255bfef95601890afd80709bạn có thể tin rằng tệp thực sự là 0 byte (hoặc là một thư mục, virustotal, khó hiểu, băm như thể đó là tệp 0 byte.)


Làm thế nào điều này thêm vào câu trả lời hiện tại?
Máté Juhász

Bằng cách cung cấp một cách trực tiếp cho một người hoài nghi để xác minh rằng đó là trường hợp Tất cả các tệp 0 byte sẽ có cùng một tổng kiểm tra Một số người đã nghi ngờ về điều này khi thảo luận về sự vô hại của các tệp 0 byte tại virustotal.com. Vì vậy, tôi nghĩ rằng nó bổ sung vào giải pháp một cách cho một người nào đó đặt ra câu hỏi này không chắc chắn liệu đó có phải là sự thật hay không nếu đó là tổng kiểm tra là
Matthew Elvey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.