2010-09-29 35 views
21

Dưới đây là 3 ví dụ md5 bămCó bất kỳ chuỗi con nào của hàm băm (md5, sha1) nhiều hơn "ngẫu nhiên" hơn giá trị khác không?

$ md5 -s "1" && md5 -s "2" && md5 -s "3" 
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b 
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c 
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3 

Nói rằng tôi muốn lấy 8 ký tự từ bất kỳ băm. Phần bắt đầu của băm đặc biệt "ngẫu nhiên" hơn là kết thúc? ở giữa? Hay tất cả các chất nền đều giống nhau "ngẫu nhiên"?

+0

Theo tôi, "ngẫu nhiên" không phải là từ đúng ở đây. Hàm băm là xác định như chúng nhận được; không có sự ngẫu nhiên nào cả. Bạn có thể băm nhỏ có thể hỏi nếu một chuỗi con của một băm có cùng một sức đề kháng thông đồng như ban đầu (tính cho chiều dài khác nhau, tất nhiên). – Jens

+0

Tôi sắp hỏi câu hỏi này rất rõ .. – insaner

Trả lời

17

Tôi đã tò mò bản thân mình, vì vậy tôi đã đi trước và viết một program để kiểm tra điều này. Bạn sẽ cần Crypto++ để biên dịch mã.

Tuyên bố từ chối trách nhiệm: Khi nói đến mật mã, hoặc thậm chí chỉ là toán học nói chung, tôi biết vừa đủ để tự bắn mình vào chân. Vì vậy, lấy kết quả sau đây với một hạt muối và ghi nhớ rằng tôi chỉ có một kiến ​​thức cursory của các công cụ tôi đang sử dụng.

Tôi chỉ lấy mẫu ba chất nền: 8 byte đầu tiên, 8 byte giữa và 8 byte cuối cùng. Dài câu chuyện ngắn, họ đều bình đẳng ngẫu nhiên.

Tuy nhiên, khi sử dụng không gian mẫu nhỏ hơn, có vẻ như 8 bit cuối cùng ngẫu nhiên hơn một chút. Không gian lấy mẫu càng lớn, càng gần ba chất nền tiếp cận ngẫu nhiên hoàn toàn.


1000 lặp:

First: 0.995914 
Middle: 0.996546 
Last: 0.998104 

5000 lặp:

First: 0.998387 
Middle: 0.998624 
Last: 0.999501 

10000 lặp:

First: 0.999614 
Middle: 0.999457 
Last: 1 

30000 lặp:

012.351.
First: 1 
Middle: 1 
Last: 1 

"Ngẫu nhiên" được đo bởi lớp Crypto ++ 'MaurerRandomnessTest. Để tham khảo, tệp thực thi được biên dịch từ mã trên có giá trị ngẫu nhiên là 0.632411 và bản sao của Macbeth của Shakespeare được tải xuống từ Project Gutenburg có giá trị ngẫu nhiên là 0.566991.

+0

Tôi đang đánh dấu sự chấp nhận này vì nó thực sự thể hiện "sự ngẫu nhiên". Cảm ơn @kurige! –

11

Tất cả các giá trị băm tốt (và md5 là hợp lý mặc dù không an toàn về mặt mã hóa) đều là ngẫu nhiên, vì vậy có, lấy bất kỳ bit nào bạn thích từ chuỗi, chúng phải được phân phối như nhau.

9

Nitpick: "ngẫu nhiên" là từ sai để sử dụng ở đây, vì hàm băm là xác định.

Để trả lời ý bạn là gì :), một thuộc tính mong muốn của hàm băm là đạt được số Avalanche effect: về cơ bản, để có mọi đầu vào gây ra những thay đổi mạnh mẽ cho đầu ra. Vì vậy, đối với một băm được thiết kế tốt, mỗi chuỗi con sẽ bị ảnh hưởng như nhau thường xuyên ("được như ngẫu nhiên") như bất kỳ khác.

+1

Tôi đặt từ ngẫu nhiên trong dấu ngoặc kép vì lý do này rất nhiều :) +1 cho liên kết đến hiệu ứng lở tuyết. –

Các vấn đề liên quan