2012-05-15 32 views
7

Vì vậy, tôi hiểu rằng có bằng chứng cho thấy MD5 không thể đảm bảo tính duy nhất vì có nhiều chuỗi trong vũ trụ hơn là chuỗi băm MD5, nhưng có bằng chứng ngược cho số chuỗi hữu hạn không?Có md5 có bảo đảm duy nhất cho các chuỗi ngắn (số chuỗi hữu hạn) không?

Về cơ bản, nếu tôi có chuỗi có độ dài tối đa của X, có một X mà MD5 được đảm bảo là duy nhất không? nếu có, thì X là gì? và nếu có nhiều hơn một giá trị cho X, giá trị tối đa của X là bao nhiêu?

hoặc có X như vậy cho bất kỳ thuật toán băm khác, SHA-1, v.v ... không?

+0

x = 1024 bit theo câu trả lời sau http://stackoverflow.com/questions/1999824/whats-the-shortest-pair-of-strings-that-causes-an-md5-collision – Oli

+2

@ Oli- That câu trả lời nói rằng va chạm băm * biết * ngắn nhất yêu cầu 1024 bit. Vì MD5 xuất ra các giá trị 128 bit, nên đảm bảo rằng va chạm băm ngắn nhất phải ngắn hơn nhiều so với 1024 bit. – templatetypedef

+0

vì vậy nó được chứng minh là ** không duy nhất ** cho 1024 bit, nhưng nó đã được chứng minh là ** duy nhất ** cho ít hơn 1024 bit? –

Trả lời

1

Câu trả lời cho câu hỏi của bạn là có. Đối với bất kỳ hàm băm nào, có độ dài tối đa X mà bạn sẽ lấy lại các chuỗi duy nhất. Tuy nhiên, việc tìm kiếm X có thể rất khó. Ý tưởng là chạy chương trình này:

X= 0; 
For i = 0 onward 
    For all strings of length i 
     Compute the hash code of that string. 
     If a collision is found, return X. 
    X = i 

Ý tưởng là chỉ liệt kê các chuỗi dài hơn và dài hơn cho đến khi bạn tìm thấy va chạm băm. Cuối cùng bạn sẽ phải, vì cuối cùng bạn sẽ tạo ra nhiều chuỗi hơn so với các đầu ra băm có thể có. Theo dự kiến, giả sử rằng hàm băm thực sự là khá ngẫu nhiên, bạn sẽ cần tạo các chuỗi khác nhau O (√ U) trước khi bạn tìm thấy xung đột, trong đó U là kích thước của không gian mà hàm băm ánh xạ . Đối với băm 256 bit, đây là 2 . Điều này có nghĩa rằng trong thực tế chương trình trên sẽ không bao giờ thực sự chấm dứt trừ khi hàm băm bị hỏng, nhưng về lý thuyết nó có nghĩa là số X của bạn tồn tại.

Hy vọng điều này sẽ hữu ích!

+0

vâng, vậy có ai tìm thấy X chưa? –

+0

@templatetypedef rằng khẳng định không thực sự nắm giữ - có rất nhiều va chạm được biết đến, và cho rằng vấn đề, các cuộc tấn công mà làm cho việc sử dụng chúng, trên các thuật toán băm được coi là mạnh mẽ. –

+1

@ CharlesDuffy- Vâng, bạn đã đúng (xin lỗi về điều đó!).Khẳng định của tôi là tìm ra giá trị X này có thể ngụ ý rằng ai đó đã tìm thấy va chạm băm ngắn nhất, và sự hiểu biết của tôi là đối với hầu hết các hàm băm này chưa được thực hiện (chúng ta chỉ biết các xung đột băm ngắn, chứ không phải ngắn nhất) . – templatetypedef

2

Khái quát những câu trả lời xuất sắc ở đây: What's the shortest pair of strings that causes an MD5 collision?

Vụ tấn công được biết đến ngắn nhất trên MD5 yêu cầu 2 khối đầu vào, tức là 128 byte hoặc 1024 bit.

Đối với bất kỳ thuật toán băm nào xuất ra N bit, giả sử nó phân phối đầu vào khoảng ngẫu nhiên, bạn có thể cho rằng xung đột có nhiều hơn 50% khả năng trong khoảng sqrt(2^N) đầu vào. Ví dụ, MD5 băm đến 128 bit, vì vậy bạn có thể mong đợi một xung đột giữa tất cả các đầu vào 64 bit. Điều này giả định một băm ngẫu nhiên thống nhất. Bất kỳ điểm yếu nào cũng sẽ làm giảm số lượng đầu vào trước khi xảy ra va chạm.

+1

Câu hỏi trước hỏi về vụ va chạm băm nhỏ nhất * biết *. Giá trị của 1024 bit lớn hơn rất nhiều so với kích thước đầu ra của hàm băm 128 bit mà câu trả lời là vô nghĩa trong câu hỏi này. – templatetypedef

+1

Vâng, bạn có thể mong đợi một trong ~ 64 bit, nhưng chúng tôi chỉ biết làm thế nào để tạo ra chúng một cách đáng tin cậy trong 1024 bit. Tôi không biết nếu có ai thử nghiệm tất cả ~ 2^64 đầu vào ngắn cho va chạm. Đó là rất nhiều công việc, nhiều năm trên một máy tính, nhưng không phải là không thể. – Clueless

+0

@Clueless: Tôi nhận được 11.000 năm cho máy 8 GHz 4 lõi sử dụng 600 chu kỳ mỗi băm (sử dụng http://cr.yp.to/talks/2008.06.05/slides.pdf làm tham chiếu cho 600 chu kỳ). – Charles

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