Чи є фіксована точка MD5, де md5 (x) == x?


114

Чи є фіксована точка в трансформації MD5, тобто чи існує x така, що md5(x) == x?


8
Яке перетворення md5? Математичний (від будь-якого доменного біта до 128 біт) або той, що перебуває з будь-якого бістстрингу на 32-знакову гекстстринг (практичну)? Не очевидно, що відповіді для них обох однакові ...
Рафал Доугірд

4
Ну, вони є такою ж відповідь, чи не так? Ми знаємо, що не існує 128-бітового x, для якого md5(x) == x, оскільки md5(x) це 128 біт. Тому в md5 є фіксована точка для введення довільного розміру, якщо і лише тоді, коли в 128-бітовій області є md5 фіксованою точкою.
південь

1
Я не думаю, що вони є однаковою відповіддю, оскільки для практичних 32 символів hexstring це довільний вибір, представляєте ви шістнадцяткові цифри у верхньому регістрі [AF] або в нижньому регістрі [af]. Обидва представлення відповідають одному і тому ж 128-бітовому номеру, але вони дадуть різні хеші, якщо надаються як входи в MD5. Тож ймовірність наявності фіксованої точки в будь-якому із представлень насправді1-(1/e)*(1/e) ≈ 86.47%
Душан

Відповіді:


138

Оскільки сума MD5 становить 128 біт, то будь-яка фіксована точка обов'язково повинна також бути 128 біт. Припускаючи , що сума MD5 з будь-якого рядка рівномірно розподіляється по всій можливій сумі, то ймовірність того, що будь-яка дана 128-бітова рядок є фіксованою точкою є 1 / 2 128 .

Таким чином, ймовірність того, що немає 128-бітової рядки не є фіксованою точкою є (1 - 1 / 2 128 ) 2 128 , так що ймовірність того, що існує фіксована точка 1 - (1 - 1 / 2 128 ) 2 128 .

Оскільки межа як n переходить до нескінченності (1 - 1 / n ) n дорівнює 1 / e , а 2 128 , безумовно, дуже велика кількість, ця ймовірність майже рівно 1 - 1 / e ≈ 63,21%.

Звичайно, насправді немає випадкових випадків - або є фіксований пункт, або немає. Але ми можемо бути 63,21% впевнені, що існує фіксована точка. (Також зауважте, що це число не залежить від розміру простору клавіш - якщо сума MD5 становила 32 біти або 1024 біта, відповідь була б однаковою, доки вона більша, ніж приблизно 4 або 5 біт).


11
Чи можете ви насправді зробити припущення, що сума MD5 будь-якого рядка рівномірно розподілена по всіх можливих сумах?
Ori Pessach

13
Так. Велика кількість і модульність утворюють приблизно випадковий розподіл. Якби їх не було, у вас були б постійні зіткнення. Природа md5 змушує її вихід розподілятися випадковим чином.
Стефан Кендалл

2
Я використовував вашу відповідь як основу для цієї відповіді: security.stackexchange.com/questions/3851/…
CesarB

1
Ось, мати золотий знак.
Денніс

За винятком того, що md5 є детермінованим, а не випадковим.
PyRulez

13

У моїй грубій спробі виявлено збіг 12 префіксів та 12 суфіксів.

приставка 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

суфікс 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

Запис у блозі: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


Посилання не працює. Google плюс закрили у квітні
Typewar

Вибачте ... Я не зберегла повідомлення в блозі, і резервна копія google + не працює для мене. Але ось мій проект github: github.com/thomasegense/MD5FixPointSearch
Thomas Egense

Ви впевнені в цьому: префікс 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 Я використав md5sumкоманду linux, я отримав інший результат
ThunderPhoenix

Не впевнений, що ви правильно використовували md5sum. Ви також можете підтвердити це онлайн тут: onlinemd5.com
Thomas Egense

11

Оскільки хеш незворотний, це було б важко зрозуміти. Єдиним способом вирішити це було б обчислити хеш на кожному можливому виході хеша і побачити, чи придумали ви збіг.

Щоб уточнити, в хеші MD5 є 16 байт. Це означає, що є 2 ^ (16 * 8) = 3,4 * 10 ^ 38 комбінацій. Якщо для обчислення хеша на 16 байт знадобилося 1 мілісекунда, для обчислення всіх цих хешей знадобиться 10790283070806014188970529154.99 років.


2
Щоправда, якби вам довелося спробувати кожного . Але вам доведеться лише спробувати всі можливі дані, щоб переконатися, що немає фіксованої точки. Якщо є фіксований момент (а відповідь Адама Розенфілда говорить про те, що це може бути), тоді є одне щасливе здогадка.
Наафф

Функція незворотна в тому сенсі, що вона не має математичної оберненості, однак це означає лише, що для даного виходу може бути більше одного входу. Загалом, простір входів для даного виходу буде нескінченним, але якщо ви знаєте, що він починався як 128-бітове значення, ви можете звузити можливості. Існує шанс на "роботу назад", якщо ви не ставитесь до функції як до чорної скриньки, а замість цього прочитаєте специфікацію та застосуєте математичне мислення.
rndmcnlly

2
@Naaff: "тільки спробувати всі можливі дані" - і це простіше, ніж спробувати кожен хеш, як? Зовсім навпаки, оскільки декілька можливих входів можуть хешувати один і той же вихід.
Пісквор вийшов з будівлі

1
@Piskvor: Ви неправильно зрозуміли, що мав на увазі Наафф (мені теж потрібна хвилина). Більш чіткий спосіб сказати це було б "Тільки якщо немає фіксованої точки, ви спробуєте спробувати всі можливі дані (з простору 2 ^ 128)". Іншими словами, вам потрібно спробувати всі можливості, якщо жодна до цього не спрацювала. Отже 1,08е28 років, або один щасливий здогад!
P тато

"Якщо для обчислення хеша знадобилося 1 мілісекунда". Сучасні GPU можуть обчислити мільярди хешей за секунду, набагато швидше, ніж це. Але все-таки це займе дуже багато часу.
markasoftware

0

Хоча я не маю відповіді так / ні, я гадаю, що "так", і, крім того, можливо, існує 2 ^ 32 таких фіксованих точок (для інтерпретації бітових рядків, а не для інтерпретації символьних рядків). Я активно працюю над цим, тому що це здається дивовижною, стислою головоломкою, яка потребуватиме великої творчості (якщо ви відразу не погоджуєтесь на пошук грубої сили).

Мій підхід такий: трактувати це як математичну проблему. У нас є 128 булевих змінних та 128 рівнянь, що описують результати з точки зору вхідних даних (які повинні відповідати). Підключивши всі константи до таблиць алгоритму та біт накладки, я сподіваюся, що рівняння можна значно спростити, щоб отримати алгоритм, оптимізований до 128-бітного випадку введення. Ці спрощені рівняння можуть бути запрограмовані якоюсь приємною мовою для ефективного пошуку, або знов оброблятись абстрактно, призначаючи одиничні біти за один раз, спостерігаючи за суперечностями. Вам потрібно побачити лише декілька біт виводу, щоб знати, що він не відповідає входу!


Це дійсно цікаво, поділіться, будь ласка, своїм прогресом, коли ви йдете цією дорогою?
user230910

-1

Напевно, але знайти це займе більше часу, ніж ми маємо або вимагатиме компрометації MD5.


6
Це не було порушено. Все, що їм вдалося зробити, це за розумну кількість часу створити 2 рядки, що прирівнюють один і той же хеш. Ще важко створити рядок, який прирівнюватиметься до конкретного хешу.
Кіббі

9
не знаю, як знайти компрометацію md5, тим більше, ніж це поставить під загрозу алгоритм, якби я сказав вам MD5 ("Швидка бура лисиця перестрибує ледачу собаку") = 9e107d9d372bb6826bd81d3542a419d6
Kip

5
Фіксований момент, ймовірно, дасть певні важелі з математики, які можуть призвести до більш всебічного порушення MD5. Я не переконаний, що Glomek справді може виправдати «напевно»; Я б прийняв "можливо" без еквівокацій.
Джонатан Леффлер

-9

Існує дві інтерпретації, і якщо дозволено обирати будь-яку, ймовірність знайти фіксовану точку зростає до 81,5%.

  • Інтерпретація 1: чи відповідає MD5 виходу MD5 у двійковій формі вхідному?
  • Інтерпретація 2: чи відповідає MD5 виходу MD5 у шістнадцятковій формі ?

13
Нічого про алгоритм MD5 не передбачає шістнадцятковий - він працює на байтах і виробляє байти - тому я вважаю, що остання інтерпретація недійсна.
Нік Джонсон

Незважаючи на те, чи існує фіксований момент в інтерпретації 1, все ще може бути (чи не бути) інтерпретація 2. Однак якщо ви зацікавлені в дослідженні проблеми, інтерпретація 1 здається набагато кращим місцем для початку, оскільки ви виграли Не потрібно приймати всілякі довільні рішення щодо кодування та символу. Крім цього, бінарний корпус має менше бітів!
rndmcnlly

4
Ви неправильно трактуєте, що насправді є шістнадцятковим. Ви можете представляти двійкове у шістнадцятковій формі, так само як ви можете його представити у десятковій чи восьмій або базовій частині 3. Це число та має різні подання. Отже, інтерпретація 1 і 2 - це одне і те ж. Те, про що ти думаєш - це представлення символьних рядків, яке зовсім не є однаковим шістнадцятковим, але є зовсім іншим бінарним значенням. Насправді у вас може бути багато різних шістнадцяткових рядків у різних наборах символів. 128-бітове хеш-значення може бути представлено у вигляді "шестигранної" рядка, але воно не дорівнює рядку. Рядок - це не ті самі бінарні дані.
визначається

Дастін, інтерпретація 2 насправді означає MD5 рядка відображення.
Джошуа

4
Однак з цією ідеєю існує величезна проблема, оскільки вона безпосередньо залежить від кодування вашого персонажа. Різні схеми кодування призведуть до абсолютно різних наборів результатів. Існує навіть цілий проект, і стаття, яка розкриває його, ґрунтується на цьому нерозумінні того, як MD5 працює acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
визначає

-23

Строго кажучи, оскільки вхід MD5 становить 512 біт, а вихід - 128 біт, я б сказав, що це неможливо за визначенням.


4
Ні, MD5 з 1 байтових рядків існує.
Джошуа

7
Вхід може бути будь-якого розміру. Якщо вхід менше 512 байт, то він прокладений, але невеликі введення все ще прийнятні. З Вікіпедії: "MD5 обробляє повідомлення змінної довжини у фіксовану довжину у 128 біт. Вхідне повідомлення розбивається на шматки 512-бітних блоків (шістнадцять 32-бітових маленьких цілих цілих чисел); повідомлення підкладається так, що його довжина ділиться на 512. "
Наафф

Отже, ви припускаєте, що, скажімо, 0000000001 = 1? Тоді я б заперечив, що питання в кращому випадку уточнено.
Ori Pessach

11
Введення в MD5 може бути 128 біт. Якщо MD5 хоче вкласти цей вклад, то, ну, чесно кажучи, це справа MD5. Вхід ще добре визначений. Аналогічно, вихід - це чітко визначені 128 біт. Якщо (чітко визначений) вхід і (добре визначений) вихід є однаковими, то MD5 (x) = x.
Наафф

2
@Joshua MD5 порожнього рядка (тобто 0 байт) навіть існує
Kip
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.