Có một Điểm cố định MD5 trong đó md5 (x) == x không?


114

Có một điểm cố định trong phép biến hình MD5, tức là có tồn tại x sao cho md5(x) == xkhông?


8
Biến đổi md5 nào? Câu hỏi toán học (từ bất kỳ chuỗi bit nào đến 128 bit) hoặc từ bất kỳ chuỗi kiểm tra nào đến chuỗi hex 32 ký tự (thực tế)? Không rõ ràng là câu trả lời cho cả hai người đều giống nhau ...
Rafał Dowgird

4
Chà, chúng câu trả lời giống nhau, phải không? Chúng ta biết rằng không tồn tại x không dài 128 bit md5(x) == x, vì md5(x) dài 128 bit. Do đó, có một điểm cố định trong md5 cho đầu vào có kích thước tùy ý nếu và chỉ khi có một điểm cố định trong md5 trên miền 128 bit.
paul

1
Tôi không nghĩ rằng chúng là câu trả lời giống nhau vì đối với chuỗi hex 32 ký tự thực tế, đó là một lựa chọn tùy ý cho dù bạn biểu thị các chữ số hex ở dạng chữ hoa [AF] hay dạng chữ thường [af]. Cả hai biểu diễn tương ứng với cùng một số 128-bit nhưng chúng sẽ mang lại các hàm băm khác nhau khi được cung cấp làm đầu vào cho MD5. Vì vậy, xác suất mà có một điểm cố định trong một trong hai cơ quan đại diện là trong thực tế1-(1/e)*(1/e) ≈ 86.47%
Dušan

Câu trả lời:


138

Vì tổng MD5 dài 128 bit, bất kỳ điểm cố định nào cũng nhất thiết phải dài 128 bit. Giả sử rằng tổng MD5 của bất kỳ chuỗi được phân bố đều trên toàn bộ số tiền có thể, sau đó xác suất mà bất kỳ chuỗi 128-bit nhất định là một điểm cố định là 1 / 2 128 .

Như vậy, xác suất mà không có chuỗi 128-bit là một điểm cố định là (1 - 1 / 2 128 ) 2 128 , vì vậy xác suất mà có một điểm cố định là 1 - (1 - 1 / 2 128 ) 2 128 .

Vì giới hạn khi n đi đến vô cùng của (1 - 1 / n ) n1 / e , và 2 128 chắc chắn là một số rất lớn, nên xác suất này gần như chính xác là 1 - 1 / e ≈ 63,21%.

Tất nhiên, không có sự ngẫu nhiên nào thực sự liên quan - hoặc có một điểm cố định hoặc không. Tuy nhiên, chúng tôi có thể tin chắc 63,21% rằng có một điểm cố định. (Ngoài ra, hãy lưu ý rằng con số này không phụ thuộc vào kích thước của không gian khóa - nếu tổng MD5 là 32 bit hoặc 1024 bit, câu trả lời sẽ giống nhau, miễn là nó lớn hơn khoảng 4 hoặc 5 bit).


11
Bạn có thể thực sự đưa ra giả định rằng tổng MD5 của bất kỳ chuỗi nào được phân phối đồng nhất trên tất cả các tổng có thể không?
Ori Pessach

13
Đúng. Số lượng lớn và điều độ tạo thành một phân phối gần như ngẫu nhiên. Nếu không, bạn sẽ có những va chạm liên tục. Bản chất của md5 buộc sản lượng của nó phải được phân phối một cách ngẫu nhiên.
Stefan Kendall

2
Tôi đã sử dụng câu trả lời của bạn như là một cơ sở cho câu trả lời này: security.stackexchange.com/questions/3851/...
CesarB

1
Đây, có một huy hiệu vàng.
Dennis

Ngoại trừ rằng md5 là xác định, không phải ngẫu nhiên.
PyRulez

13

Nỗ lực vũ phu của tôi đã tìm thấy kết quả khớp 12 tiền tố và 12 hậu tố.

tiền tố 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

hậu tố 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

Bài đăng trên blog: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


Liên kết không hoạt động. Google plus ngừng hoạt động vào tháng 4
Typewar

Xin lỗi ... Tôi chưa lưu bài đăng trên blog và google + sao lưu không hoạt động với tôi. Nhưng đây là dự án github của tôi: github.com/thomasegense/MD5FixPointSearch
Thomas Egense

Bạn có chắc chắn về điều này không: tiền tố 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 Tôi đã sử dụng md5sumlệnh linux, tôi nhận được kết quả khác
ThunderPhoenix

Không chắc bạn sử dụng md5sum đúng khi đó. Bạn cũng có thể xác nhận nó trực tuyến tại đây: onlinemd5.com
Thomas Egense

11

Vì hàm băm là không thể thay đổi, điều này sẽ rất khó để tìm ra. Cách duy nhất để giải quyết vấn đề này là tính toán hàm băm trên mọi đầu ra có thể có của hàm băm và xem liệu bạn có tìm ra kết quả phù hợp hay không.

Nói rõ hơn, có 16 byte trong một băm MD5. Điều đó có nghĩa là có 2 ^ (16 * 8) = 3,4 * 10 ^ 38 kết hợp. Nếu mất 1 mili giây để tính toán một hàm băm trên giá trị 16 byte, thì sẽ mất 10790283070806014188970529154.99 năm để tính tất cả các hàm băm đó.


2
Đúng, nếu bạn phải thử mọi thứ . Nhưng bạn sẽ chỉ phải thử mọi đầu vào có thể để xác minh rằng không có điểm cố định. Nếu có một điểm cố định (và câu trả lời của Adam Rosenfield gợi ý rằng có thể có) thì chỉ cần một dự đoán may mắn là đủ.
Naaff

Hàm không thể đảo ngược theo nghĩa là nó không có nghịch đảo toán học, tuy nhiên, điều này chỉ có nghĩa là đối với một đầu ra nhất định có thể có nhiều hơn một đầu vào. Nói chung, không gian của các đầu vào cho một đầu ra nhất định sẽ là vô hạn, nhưng nếu bạn biết nó bắt đầu như một giá trị 128 bit, bạn có thể thu hẹp các khả năng. Sẽ có cơ hội "làm việc ngược" nếu bạn không coi hàm như một hộp đen, mà thay vào đó hãy đọc thông số kỹ thuật và áp dụng một số tư duy toán học.
rndmcnlly

2
@Naaff: "chỉ phải thử mọi đầu vào có thể" - và điều này dễ hơn là thử mọi băm, làm thế nào? Hoàn toàn ngược lại, vì một số đầu vào có thể có thể băm thành cùng một đầu ra.
Piskvor rời tòa nhà

1
@Piskvor: Bạn đã hiểu sai ý của Naaff (tôi cũng mất một phút). Một cách rõ ràng hơn để nói nó sẽ là "Chỉ khi không có điểm cố định, bạn sẽ thử mọi đầu vào có thể (từ khoảng trống 2 ^ 128)". Nói cách khác, bạn chỉ phải thử mọi khả năng nếu không có khả năng nào trước đó hiệu quả. Vì vậy, 1,08e28 năm, hoặc một dự đoán may mắn!
P Daddy

"Nếu mất 1 mili giây để tính toán một hàm băm". Các GPU hiện đại có thể tính toán hàng tỷ băm mỗi giây, nhanh hơn nhiều so với mức này. Nhưng vẫn còn, sẽ mất một thời gian rất dài.
markasoftware

0

Mặc dù tôi không có câu trả lời có / không, nhưng suy đoán của tôi là "có" và hơn nữa rằng có thể có 2 ^ 32 điểm cố định như vậy (đối với diễn giải chuỗi bit, không phải cho chuỗi ký tự). Tôi đang tích cực giải quyết vấn đề này vì nó có vẻ như là một câu đố tuyệt vời, ngắn gọn sẽ đòi hỏi rất nhiều sự sáng tạo (nếu bạn không tìm kiếm brute force ngay lập tức).

Cách tiếp cận của tôi là như sau: coi nó như một bài toán. Chúng ta có 128 biến boolean và 128 phương trình mô tả kết quả đầu ra dưới dạng đầu vào (được cho là phù hợp). Bằng cách bổ sung tất cả các hằng số từ các bảng trong thuật toán và các bit đệm, hy vọng của tôi là các phương trình có thể được đơn giản hóa rất nhiều để mang lại một thuật toán được tối ưu hóa cho trường hợp đầu vào 128 bit. Sau đó, các phương trình đơn giản này có thể được lập trình bằng một số ngôn ngữ đẹp để tìm kiếm hiệu quả, hoặc xử lý lại một cách trừu tượng, gán các bit đơn lẻ tại một thời điểm, đề phòng sự tương phản. Bạn chỉ cần xem một vài bit của đầu ra để biết rằng nó không khớp với đầu vào!


Điều này thực sự thú vị, hãy chia sẻ sự tiến bộ của bạn khi bạn đi trên con đường này?
user230910

-1

Có thể, nhưng việc tìm kiếm sẽ mất nhiều thời gian hơn chúng tôi có hoặc sẽ liên quan đến việc xâm phạm MD5.


6
Nó vẫn chưa bị phá vỡ. Tất cả những gì họ có thể làm là, trong một khoảng thời gian hợp lý tạo ra 2 chuỗi tương đương với cùng một hàm băm. Vẫn rất khó để tạo ra một chuỗi tương đương với một hàm băm cụ thể.
Kibbee

9
không chắc việc tìm một cái sẽ ảnh hưởng đến md5 như thế nào, hơn nữa nó sẽ ảnh hưởng đến thuật toán nếu tôi nói với bạn MD5 ("Con cáo nâu nhanh nhẹn nhảy qua con chó lười") = 9e107d9d372bb6826bd81d3542a419d6
Kip

5
Một điểm cố định có thể sẽ cung cấp một số đòn bẩy cho phép toán có thể dẫn đến vi phạm MD5 toàn diện hơn. Tôi không tin rằng Glomek thực sự có thể biện minh cho 'có lẽ'; Tôi sẽ chấp nhận 'có thể' mà không cần phân biệt.
Jonathan Leffler 25/10/08

-9

Có hai cách giải thích và nếu được phép chọn một trong hai, xác suất tìm thấy một điểm cố định sẽ tăng lên 81,5%.

  • Giải thích 1: MD5 của đầu ra MD5 trong hệ nhị phân có khớp với đầu vào của nó không?
  • Giải thích 2: MD5 của đầu ra MD5 ở dạng hex có khớp với đầu vào của nó không?

13
Không có gì về thuật toán MD5 ngụ ý hex - nó hoạt động trên byte và tạo ra byte - vì vậy tôi nghĩ cách giải thích sau này không hợp lệ.
Nick Johnson

Cho dù có một điểm cố định theo cách diễn giải 1 hay không, thì vẫn có thể có (hoặc không) một điểm ở cách diễn giải 2. Tuy nhiên, nếu bạn quan tâm đến việc khám phá vấn đề, cách giải thích 1 có vẻ là một nơi tốt hơn nhiều để bắt đầu vì bạn đã thắng không phải đưa ra tất cả các loại quyết định tùy ý về cách viết hoa và mã hóa ký tự. Trên hết, trường hợp nhị phân có ít bit hơn!
rndmcnlly

4
Bạn đang hiểu sai về hex thực sự là gì. Bạn có thể biểu diễn hệ nhị phân ở dạng hex, cũng như bạn có thể biểu diễn nó ở dạng thập phân hoặc bát phân hoặc cơ số 3. Đó là một số và có các cách biểu diễn khác nhau. Vì vậy, cách giải thích 1 và 2 giống nhau. Những gì bạn đang nghĩ đến là biểu diễn chuỗi ký tự, không phải là cùng một hex mà là một giá trị nhị phân hoàn toàn khác. Trên thực tế, bạn có thể có nhiều chuỗi hex khác nhau trong các bộ ký tự khác nhau. Giá trị băm 128 bit có thể được biểu diễn dưới dạng chuỗi "hex", nhưng nó không bằng chuỗi. Chuỗi không phải là cùng một dữ liệu nhị phân.
xác định

Dustin, giải thích 2 thực sự có nghĩa là MD5 của chuỗi hiển thị.
Joshua

4
Tuy nhiên, có một vấn đề lớn với ý tưởng đó, đó là nó phụ thuộc trực tiếp vào mã hóa ký tự của bạn. Các lược đồ mã hóa khác nhau sẽ dẫn đến các tập kết quả hoàn toàn khác nhau. Thậm chí có cả một dự án và một bài báo gỡ lỗi nó dựa trên sự hiểu lầm này về cách MD5 hoạt động acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
xác định

-23

Nói một cách chính xác, vì đầu vào của MD5 dài 512 bit và đầu ra là 128 bit, tôi sẽ nói điều đó là không thể theo định nghĩa.


4
Không, MD5 của chuỗi 1 byte tồn tại.
Joshua

7
Đầu vào có thể có kích thước bất kỳ. Nếu đầu vào nhỏ hơn 512 byte thì nó được đệm, nhưng đầu vào nhỏ vẫn được chấp nhận. Từ Wikipedia: "MD5 xử lý một thông điệp có độ dài thay đổi thành một đầu ra có độ dài cố định là 128 bit. Thông điệp đầu vào được chia thành các khối 512 bit (mười sáu số nguyên cuối cùng nhỏ 32 bit); thông báo được đệm để độ dài của nó chia hết cho 512. "
Naaff

Vì vậy, bạn đang giả định rằng, giả sử, 0000000001 = 1? Sau đó, tôi sẽ tranh luận rằng câu hỏi được chỉ định kém, tốt nhất.
Ori Pessach

11
Đầu vào cho MD5 có thể là 128 bit. Nếu MD5 muốn đưa đầu vào đó thì, tốt, thành thật mà nói, đó là việc của MD5. Đầu vào vẫn được xác định rõ. Tương tự như vậy, đầu ra là 128 bit được xác định rõ ràng. Nếu đầu vào (được xác định rõ) và đầu ra (được xác định rõ) đều giống nhau thì MD5 (x) = x.
Naaff

2
@Joshua MD5 của một chuỗi rỗng (tức là 0 byte) thậm chí tồn tại
Kip
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.