Чи можливо розшифрувати хеші MD5?


260

Хтось сказав мені, що він бачив програмні системи, які:

  1. отримати зашифровані паролі MD5 з інших систем;
  2. розшифрувати зашифровані паролі та
  3. зберігання паролів у базі даних системи за допомогою власного алгоритму системи.

Це можливо? Я подумав, що розшифрувати хеши MD5 неможливо / неможливо.

Я знаю, що є словники MD5, але чи є власне алгоритм розшифровки?


7
Повернення MD5 також призведе до отримання декількох паролів.
Компанія Carles

231
MD5 - алгоритм дайджесту. Подумайте про це як перетворення корови на стейк. Тепер спробуйте це змінити.
Механічний равлик

5
@Arst з того, що я розумію, так, але тільки якщо ви мали АЛОТЕ з них. І навіть якби ви це зробили, ви б не змогли піти в зворотному напрямку, оскільки алгоритм цілеспрямовано втрачає інформацію.
Йордан

8
@mechanicalsnail з огляду на цю аналогію, можна було зробити з ДНК на стейку повний ідеальний клон. :))
Триміха Валенцій

8
@TrimikhaValentius MD5 - алгоритм травлення. Подумайте про це як їжте стейк> травлення> вихід. Тепер спробуйте це змінити.
user4157124

Відповіді:


424

Ні. MD5 - це не шифрування (хоча воно може використовуватися як частина алгоритмів шифрування), це одностороння хеш-функція . Значна частина вихідних даних фактично «втрачається» в рамках трансформації.

Подумайте над цим: MD5 завжди має 128 біт. Це означає, що є 2 128 можливих хешей MD5. Це досить велика кількість, і все ж воно, безумовно, кінцеве. І все ж, існує нескінченна кількість можливих входів у задану хеш-функцію (і більшість з них містять більше 128 біт, або крихітних 16 байт). Таким чином, насправді існує нескінченна кількість можливостей для даних, які б відповідали одному і тому ж значення. Те, що робить хеші цікавими, це те, що надзвичайно важко знайти два фрагменти даних, які мають хеш-пам'ять, на одне значення, і шанси цього випадково трапляються майже 0.

Простим прикладом для (дуже небезпечної) хеш-функції (і це ілюструє загальну думку про те, що вона є односторонньою) було б взяти всі біти фрагмента даних і трактувати його як велику кількість. Далі виконайте ціле ділення, використовуючи деяке велике (ймовірно, просте) число n і візьміть решту (див. Модуль ). Вам залишиться деяке число між 0 і n . Якщо ви повинні виконати один і той же обчислення ще раз (будь-коли, на будь-якому комп’ютері і в будь-якому місці), використовуючи абсолютно ту саму рядок, він вийде з тим самим значенням. І все ж, немає можливості дізнатися, яким було початкове значення, оскільки існує нескінченна кількість чисел, що мають таку точну залишок, якщо ділити на n .

Зважаючи на це, було виявлено, що у MD5 є деякі недоліки, такі, що за допомогою деякої складної математики можливо виявити зіткнення, не випробовуючи 2 128 можливих вхідних рядків. І той факт, що більшість паролів короткі, і люди часто використовують загальні значення (наприклад, "пароль" або "секрет"), означає, що в деяких випадках ви можете досить добре вгадати чийсь пароль, використовуючи Googling для хеша або використовуючи Rainbow стіл . Це одна з причин, чому ви завжди повинні " солити " хешовані паролі, щоб два однакових значення, коли хешировані, не хешували однакове значення.

Після того, як фрагмент даних буде запущений через хеш-функцію, назад вже не буде.


22
однак у хеш-просторі MD5 більше зіткнень, ніж вважалося спочатку. Він більше не вважається оптимальним як найкращий хеш для паролів.
Cheeso

12
Оскільки більшість паролів коротші, ніж хеш MD5, зазвичай існує лише один пароль для кожного хеша. (І пошук одного, навіть якщо це не оригінальний, достатньо для доступу до облікового запису.) Справа в тому, що функція одностороння полягає в тому, що в ньому немає декількох різних зображень, тому ми не можемо знати, який був оригінальний , але насправді важко знайти навіть одне оригінальне значення .
Paŭlo Ebermann

2
@ Nick: Насправді, RFC1321 прямо говорить: "Алгоритм приймає як вхід повідомлення довільної довжини"
Адам Баткін

6
@Olathe - я не впевнений, що згоден. Враховуючи хеш, визначити (зі 100% впевненістю) вихідний вклад взагалі неможливо. Існує (як правило) нескінченна кількість входів, які виробляють усі можливі (хешовані) результати. Я сказав, що взагалі тому, що якщо ви знаєте (наприклад), що ви шукаєте рядок символів ASCII, і це менше, ніж, скажімо, 12 байт, ймовірно, що існує лише один вхід, який виробляє заданий вихід. Але завжди будуть зіткнення (нескінченні), і якщо у вас не виникне якихось зовнішніх обмежень (як у моєму прикладі), ви ніколи не дізнаєтесь, що правильно
Адам Баткін

2
@Адам Баткін, ти маєш рацію, але я не маю на увазі 100% впевненість. Розбиття шифру неможливо зробити зі 100% впевненістю. Відправник, можливо, мав на увазі випадковий гріш, а не англійський простий текст, використовуючи той самий ключ, який розшифровує інші англійські прості тексти, але ймовірність англійської дуже близька до 100%. Аналогічно, вибираючи між довгим паролем японської поеми UTF-8 та гібридними рядками, ймовірність поеми становить близько 100%. Це можна зробити, використовуючи ймовірності після факту, а не попередні обмеження. Це, очевидно, неможливо зробити в цілому, але це все ще досить корисно.
Олате

154

Не можна - теоретично. Вся суть хешу в тому, що це лише один спосіб. Це означає, що якщо комусь вдасться отримати список хешей, він все одно не може отримати ваш пароль. Крім того, це означає, що навіть якщо хтось використовує один і той же пароль на кількох сайтах (так, ми всі знаємо, що не повинні, але ...) той, хто має доступ до бази даних сайту A, не зможе використовувати пароль користувача на сайт B.

Той факт, що MD5 - хеш, також означає, що він втрачає інформацію. Для будь-якого заданого хеша MD5, якщо ви дозволяєте паролі довільної довжини, може бути кілька паролів, які створюють один і той же хеш. Для хорошого хешу було б обчислювано нездійсненно знайти їх понад досить тривіальної максимальної довжини, але це означає, що немає гарантії, що якщо ви знайдете пароль, який має цільовий хеш, це, безумовно, оригінальний пароль. Це астрономічний малоймовірно , що ви побачите два ASCII-тільки, розумні довжини паролів , які мають один і той же хеш MD5, але це не неможливо.

MD5 - це поганий хеш для використання паролів:

  • Це швидко, а це означає, що якщо у вас є хеш "цільового", дешево спробувати багато паролів і дізнатись, чи зможете ви знайти той, який хешує до цілі. Соління не допомагає в цьому сценарії, але допомагає зробити його дорожчим спробувати знайти пароль, що відповідає будь-якому з кількох хешів, використовуючи різні солі.
  • Я вважаю, що він має відомі недоліки, які полегшують пошук зіткнень, хоча знайти зіткнення в тексті для друку (а не довільних двійкових даних) було б принаймні складніше.

Я не є експертом з питань безпеки, тому не буду давати конкретних рекомендацій за рамками "Не скачуйте власну систему аутентифікації". Знайдіть його у надійного постачальника та скористайтеся цим. Як проектування, так і впровадження систем безпеки - справа хитра.


2
Так, є й інші методи, але вам потрібно зрозуміти, що Джон сказав вище - "не слід надсилати їм свій пароль - це конфіденційна інформація, яка може залишатися чутливою". - на найнижчому рівні можна перехоплювати електронні листи та отримувати конфіденційну інформацію. Пароль повинен залишатися максимально захищеним - зазвичай, зберігаючи його як хеш, лише в базі даних.
Даніель, травень

3
А також той факт, що якщо пароль можна змінити, це означає, що кожен, хто отримає доступ до вашої бази даних, може отримати паролі користувачів. Не гарна ідея. Один із способів паролів повинен бути нормою; зберігайте справжній пароль (навіть зашифрований) лише в тому випадку, якщо вам це потрібно (наприклад, для автентифікації в іншій системі, яка не має нічого лексема).
Джон Скіт

1
Я бачив антиспам-заходи, коли веб-сервер приймачів відмовляє вхідній пошті лише для того, щоб зачекати, поки поштовий сервер відправника повториться (спам-боти, як правило, намагаються лише один раз). Це може легко перевищити 10-хвилинний час очікування.
sisve

1
@ravisoni: Це знаходження на значенні , яке має той же самий хеш, імовірно з допомогою грубої сили чи таблиць пошуку. Немає гарантії, що це вихідне значення простого тексту.
Джон Скіт

5
@ravisoni: Що ви маєте на увазі під "правильним" тут? Якщо пароль невідомий, ви не можете знати, чи виявлений оригінальний, чи ні. Але справа в тому, що один із способів хеши, як MD5, за визначенням втрачає інформацію. Той факт , що такі сайти , як це можна придумати в згоден паролі просто гарне свідчення MD5 є поганим алгоритмом використовувати з міркувань безпеки.
Джон Скіт

52

Технічно це "можливо" , але в дуже суворих умовах ( райдужні таблиці , грубі форси, засновані на дуже малій можливості, що пароль користувача знаходиться в цій хеш-базі даних).

Але це не означає, що це

  • Життєздатний
    або
  • Безпечний

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


Те, як повинні працювати логіни з хешшю MD5, це:

Під час реєстрації:
Користувач створює пароль -> Хеширується пароль за допомогою MD5 -> Хеш, збережений у базі даних

Під час входу в систему:
Користувач вводить ім'я користувача та пароль -> (Ім'я користувача встановлено) Пароль хешований за допомогою MD5 -> Хеш порівнюється із збереженим хешем у базі даних

Коли потрібно "Забули пароль":

2 варіанти:

  • Користувач надіслав випадковий пароль для входу, а потім попросив змінити його під час першого входу.

або

  • Користувачеві надсилається посилання на зміну свого пароля (з додатковою перевіркою, якщо у вас є питання безпеки / тощо), а потім новий пароль хеширується і замінюється старим паролем у базі даних

1
У мене є кілька ниткоподібних. Столи веселки не змушують жорстоко. Насправді є програми та сайти, які роблять грубі (дуже прості) паролі з кількох символів (як правило, вони просто циклічать протягом декількох годин або днів, і ви можете заповнити хеш і сподіваюся, що він з’явиться в циклі). І на жаль, зважаючи на відсутність якості багатьох паролів, шанс появи одного не є "дуже маленьким шансом".
Maarten Bodewes

32

Не безпосередньо. Через принцип голубої отвори існує (ймовірно) більше одного значення, яке хеширується на будь-якому даному виході MD5. Таким чином, ви не можете змінити це з певністю. Більше того, MD5 ускладнює пошук будь-якого такого перевернутого хешу (однак, трапляються атаки, які спричиняють зіткнення - тобто виробляють два значення, що мають хеш до одного результату, але ви не можете контролювати, що буде отримане значення MD5 бути).

Однак якщо ви обмежите простір пошуку, наприклад, звичайними паролями довжиною нижче N, у вас більше не може бути властивості незворотності (оскільки кількість виходів MD5 набагато перевищує кількість рядків у цікавій області). Тоді ви можете використовувати райдужний стіл або подібний до зворотних хешей.


1
Я додам, що пошук іншого значення, яке хеширує той самий вихід, називається "зіткненням". Це найпоширеніший метод злому систем, що мають хешированний MD5.
Ніколь

5
@ Ренезис, пошук даних, які хешують до раніше відомого значення, називається фактично, і це набагато, набагато важче, ніж просто зіткнення. Ще не було продемонстровано попередньої атаки проти MD5, але атаки зіткнення були використані.
bdonlan

Сенс хеш-функцій (коли використовується для зберігання паролів) не в тому, що існує безліч можливих паролів, які дають той самий хеш (є, але більшість з них довші, ніж сам хеш), а в тому, що важко знайти навіть одна з них (якої було б достатньо для доступу до системи). І так, через райдужні столи ви не використовуєте несолоні хеші. А через невеликий простір паролів, ви будете використовувати повільний хеш (наприклад, bcrypt чи scrypt) замість швидкого (наприклад, MD5 / SHA - * / ....)
Paŭlo Ebermann

1
Щоб бути технічним, ви не можете виконати MD5 із впевненістю, оскільки апаратне забезпечення може працювати несправно. Таким же чином ви, можливо, не зможете бути впевнені, що пароль був, passwordа не всі інші нескінченні входи, які створюють той самий хеш, але які виглядають цілком випадковими, але ви можете бути досить близькими.
Олате

Принцип голубої дуги застосовується, звичайно, але все ж обчислювально неможливо знайти другий вхід, який має хеш для певного значення, наприклад, хеш над звичайним паролем. Якщо ви знайдете X, котрий відповідає х (Х), то ви можете бути впевнені, що X є правильним входом. Це робить перший розділ цієї відповіді, а більшість решти невірним.
Maarten Bodewes

13

Неможливо, принаймні, не за розумну кількість часу.

Як це часто обробляється, це "скидання пароля". Тобто, ви даєте їм новий (випадковий) пароль і надсилаєте їх в електронному листі.


5
Якби хеш не був солений, ви здивуєтеся, як часто все, що потрібно, - це пошук Google за хешованим значенням ...
Майкл Боргвардт,

1
Не дуже практично для системи пошуку паролів, навіть несолоної :)
Matthew Groves,

12

Ви не можете відновити пароль md5. (Будь-якою мовою)

Але ви можете:

дати користувачеві нове.

перевірте якусь таблицю веселки, щоб, можливо, відновити стару.


1
Нікс ідея столу веселки. Якщо ви солите - і ви маєте бути - тоді це не вийде.
Стівен Судіт

1
@StevenSudit Якщо вони все ще використовують MD5 для хеш-паролів замість сильного хеша паролів, ви не можете припустити, що вони використовують сіль. Можливо, так і є, напевно, ні.
Maarten Bodewes

10

Ні, його, мабуть, плутали в словниках MD5.

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


8

Розшифрування (безпосередньо отримання простого тексту з хешованого значення, алгоритмічно), немає.

Однак є методи, які використовують те, що відомо як таблиця веселки . Це цілком можливо, якщо ваші паролі хешировані без солі.


7

MD5 - алгоритм хешування, ви не можете повернути хеш-значення.

Вам слід додати "змінити функцію пароля", де користувач надає інший пароль, обчислює хеш і зберігає його як новий пароль.


7

Немає простого способу це зробити. Це в першу чергу сенс стирання пароля. :)

Одне, що вам слід зробити, це встановити тимчасовий пароль для них вручну та надіслати їх.

Я вагаюся зазначити це, тому що це погана ідея (і це все одно не гарантовано працює), але ви можете спробувати пошукати хеш у веселковій таблиці, як milw0rm, щоб побачити, чи зможете ви відновити старий пароль таким чином.


6

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

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

Крім того, це не підійде для солоних хешів. Посолити рекомендують багато фахівців з безпеки.


Неправильно . Якщо відповідність знайдена, то точно відомо, що це буде оригінальний пароль. Якщо цього не було, тоді можна було б створити зіткнення за будь-якого Н (X), де X - повідомлення без заздалегідь визначеної структури, визначеної противником. Обчислювально неможливо знайти таке зіткнення для криптографічно захищеної хеш-функції, навіть якщо це зламана хеш-функція, така як MD5.
Maarten Bodewes

@MaartenBodewes: "Якщо відповідність буде знайдена, то безсумнівно, що це буде оригінальний пароль." Я не можу зрозуміти, як це відбувається, якщо припустити необмежену довжину паролів. Я б сказав, що це надзвичайно вірогідний оригінальний пароль, але це не повинно бути. Факт, що паролів більше, ніж хедів MD5, означає, що має бути два паролі з однаковим хешем. Тільки тому, що обчислювально неможливо знайти такі зіткнення, не означає, що їх не існує. Або я неправильно зрозумів тебе?
Джон Скіт

@JonSkeet Якщо обчислювально нездійсненно знайти зіткнення на цілі , то знайти один випадково не менше малоймовірно , або гірше. Через обмежений вихідний простір MD5 та проблему з днем ​​народження шанс, що ви зіткнетесь, буде приблизно 1 на 2 ^ 64 (тобто приблизно половина вихідного простору) - і це вже після узгодження приблизно 2 ^ 64 хешів. І це навіть не враховує, що повідомлення, ймовірно, має бути невеликим і мати певний формат, щоб вважати паролем. Більшість паролів мають ентропію значно нижче 2 ^ 64 біт.
Maarten Bodewes

1
@MaartenBodewes: Але є велика різниця між "астрономічно малоймовірним" та "неможливим". Твоя заява про те, що він певний, що це правильний пароль, надто сильний, IMO. Це говорить про математичну визначеність, якої немає.
Джон Скіт

Ви також можете вгадати 2 ^ 128-бітну AES-клавішу за один раз. Це "просто" вкрай малоймовірно. Криптографія покладається на подібні шанси. Для всіх практичних цілей, якщо ви знайдете вхідне повідомлення / пароль, це буде саме той, який ви шукали. Те , що це теоретично можливо , щоб знайти інший вхід повідомлення добре, але на це питання на StackOverflow немає необхідності розглядати його. А веселкові таблиці заповнені лише можливими паролями. Вони не містять достатньої кількості даних, щоб навіть колись виникнути шанс зіткнення (вони або несвідомо переписують карти, або стають відомими).
Maarten Bodewes

4

Немає способу "повернути" хеш-функцію з точки зору знаходження для неї оберненої функції. Як згадувалося раніше, у цьому вся суть функції хеш-функції. Він не повинен бути оборотним, і він повинен забезпечувати швидкий розрахунок хеш-величини. Тож єдиний спосіб знайти вхідний рядок, який дає задане хеш-значення, - це випробувати всі можливі комбінації. З цієї причини це називається грубою силою.

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

Збереження хеш-значень також не є проблемою продуктивності, оскільки обчислення хеш-значення відбувається досить швидко. Отже, що робить більшість систем, це обчислити хеш-пароль пароля, введеного користувачем (який швидко), а потім порівняти його зі збереженим значенням хешу в їхній базі даних користувачів.


У цій відповіді немає нічого поганого, за винятком того, що швидкість хеш-функції - це дуже велика проблема, оскільки більшість паролів недостатньо захищені і дозволяють противнику здійснити атаку зі словника. З цієї причини використовуються повільні хеш-функції замість швидких криптографічно захищених хеш-функцій.
Maarten Bodewes

3

MD5 вважається порушеним не тому, що ви можете отримати оригінальний вміст з хешу, а тому, що за допомогою роботи ви можете скласти два повідомлення, які хешують на один і той же хеш.

Ви не можете скасувати хеш MD5.


3
За конструкцією всі хеши однакової довжини страждають від зіткнень. Це неминуче при обмеженні даних змінної довжини. MD5 вважається застарілим за швидкістю зіткнень, а не за фактом зіткнення.
Джонатан Лоновський

MD5 вважається порушеним через доведену можливість побудови входів, що стикаються.
Нед Батчелдер

3

Ви можете знайти онлайн-інструменти, які використовують словник для отримання вихідного повідомлення.

У деяких випадках метод словника може бути просто марним:

  • якщо повідомлення хеширується за допомогою SALT-повідомлення
  • якщо повідомлення є хешовим не раз

Наприклад, ось один онлайн-інструмент для розшифровки MD5 .


Таблиці веселки - не напади словника - марні, якщо використовується сіль. Не один раз ховати - без солі - все ще дозволяє веселкові столи, хоча знайти вже існуючий в Інтернеті, звичайно, менш вірогідно.
Maarten Bodewes

2

Єдине, над чим можна попрацювати, це (якщо ми згадаємо, що паролі просто хешировані, не додаючи жодної солі для запобігання повторних атак, якщо це так, ви повинні знати сіль), до речі, отримайте інструмент для атаки словника. , файли з багатьох слів, чисел і т. д. потім створюють два рядки, один рядок - це слово, число (у словнику), інший - хеш слова, і порівняйте хеши, якщо збіги ви отримаєте це ...

це єдиний спосіб, не вникаючи в криптоаналіз.


2

Так, можливо саме те, що ви просите. Неможливо "розшифрувати" пароль MD5 без допомоги, але можливо повторно зашифрувати пароль MD5 в інший алгоритм, тільки не за один раз.

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

Очевидно, що це розширений процес, оскільки вам доведеться чекати, коли ваші користувачі скажуть вам, що таке паролі, але це працює.

(NB: сім років потому, добре сподіваємось, хтось знайде це корисним)


Дякую за відповідь. Однак я збираюся "до 1" ви :) Я не можу згадати, чи справді я це робив, але теоретично це повинно працювати. Замість того, щоб чекати, коли кожен користувач увійде, щоб ми змогли повторно зашифрувати його пароль, ви можете просто зашифрувати хешовану версію свого пароля. Отже кожен пароль буде хешований MD5, а потім зашифрований. Щойно оновлено перевірку пароля, щоб зробити те саме, і дані користувача повинні бути безпечними, не вимагаючи втручання користувача.
Іван Бубріскі

Ще один застереження до мого коментаря вище. Я не є експертом із шифрування, тому не впевнений, чи є якісь наслідки для цього щодо безпеки. Наприклад, шифрування слабких паролів, які слабко хешировані перед шифруванням, може потенційно поставити під загрозу безпеку шифрування (можливо, використовувати й іншу сіль?). Крім того, у вас можуть бути резервні копії, які плавають навколо цих хешованих паролів MD5. Можливо, краще зробити повну інвалідність усіх існуючих паролів під час цього типу оновлення.
Іван Бубріскі

Криптографи турбуються про подвійне шифрування, але я думаю, що вони знайшли лише тривіальні випадки, коли це проблема. Але я не думаю, що це корисно в цьому випадку, оскільки MD5 все ще захищений для (не надто довгих, текстових) паролів. Однак подвійне хешування може бути корисним, якщо попередній розробник забув додати сіль, інакше я не можу придумати випадок, коли вам не доведеться всім казати, що паролі слід вважати pwned. Сподіваємось, ваші резервні копії не втрачаються, а шифруються все одно.
користувач3710044

1

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


Я бачив цей веб-сайт, який перетворює md5 в оригінальний текст: md5.gromweb.com . Як це можливо тоді?
samach

2
@ samach321 - Легко: вони мають БД хешованих рядків. Що б ви ввели у їхнє поле "Перетворити рядок у хеш MD5", додається до БД. Спробуйте отримати хеш MD5 з іншого джерела і введіть це. Якщо це щось не є в їхній БД, ви не отримаєте результату.
Vilx-

1

MD5 має свої слабкі сторони (див. Вікіпедія ), тому є деякі проекти, які намагаються попередньо обчислити хеші. Вікіпедія також натякає на деякі з цих проектів. Я знаю (і поважаю) охарактер. Ви не можете сказати користувачеві свій власний пароль, але ви, можливо, зможете їм сказати пароль, який працює. Але я думаю: Просто надішліть новий термін новим паролем у випадку, якщо вони забули.


Те, що MD5 зламано (для конкретних, але важливих застосувань функції), абсолютно не пов'язане з таблицями веселок (на що ви натякаєте, згадуючи попереднє обчислення хешів).
Maarten Bodewes

1

Алгоритм MD5 Hash не є оборотним, тому декодування MD5 неможливе, але на деяких веб-сайтах є об'ємний набір паролів, тому ви можете спробувати в Інтернеті для декодування хеша MD5.

Спробуйте в Інтернеті:

Розшифруйте MD5

md5online

md5decrypter


Так, але це вже охоплене питанням, як у фразі "Я знаю, що є словники". Тому лише вказівка ​​на словники не вважається відповіддю.
Maarten Bodewes

1

Теоретично неможливо розшифрувати хеш-значення, але у вас є кілька брудних прийомів повернення початкового простого тексту.

  1. Bruteforcing : Всі алгоритм комп'ютерної безпеки страждають bruteforcing . Виходячи з цієї ідеї, сьогоднішній графічний процесор використовує ідею паралельного програмування, за допомогою якого він може повернути звичайний текст шляхом масового грубого посилення за допомогою будь-якого графічного процесора. Цей інструмент hashcat робить цю роботу. Востаннє, коли я перевіряв його версію cuda , мені вдалося за шість хвилин надіслати символом довжиною 7 літер.
  2. Пошук в Інтернеті : просто скопіюйте та вставте хеш в Google і перегляньте, чи можете ви там знайти відповідний простий текст. Це не є рішенням, коли ти щось загрожуєш, але це, безумовно, варто спробувати. Деякі веб-сайти підтримують хеш майже для всіх слів у словнику.

2
Атаки зі словника - це інший спосіб або порівняння з іншими базами даних, для яких ви знаєте вхідні паролі.
Maarten Bodewes

1

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

Дешифрування - це не функція, визначена для хеш-функції; шифрування та дешифрування - це функції шифру, такого як AES в режимі CBC; Хеш-функції не шифрують і не розшифровують . Функції хешу використовуються для перебору вхідного повідомлення. Як випливає з назви , конструкція зворотного алгоритму не можлива .


MD5 розроблений як криптографічно захищена одностороння хеш-функція. Тепер легко створювати зіткнення для MD5 - навіть якщо значна частина вхідного повідомлення заздалегідь визначена. Таким чином, MD5 офіційно зламаний, і MD5 більше не слід вважати захищеним криптографічним хешем. Однак все-таки неможливо знайти вхідне повідомлення, яке призводить до хеш-значення: знайдіть X, коли відомий лише H (X) (а X не має попередньо обчисленої структури з принаймні одним 128-байтним блоком попередньо обчислених даних) . Немає відомих попередніх атак на MD5.

Як правило, можна також вгадувати паролі, використовуючи грубі сили або (доповнені) атаки на словник, порівнювати бази даних або спробувати знайти хеші паролів у так званих веселкових таблицях. Якщо відповідність знайдена, то обчислювально визначено, що вхід знайдено. Функції хешу також захищені від атак зіткнення: знаходження, X'що H(X') = H(X)дано H(X). Тож якщо Xзнайдено анну, обчислювально визначено, що це дійсно вхідне повідомлення. Інакше ти б здійснив атаку зіткнення. Таблиці веселки можна використовувати для прискорення атак, а там є спеціалізовані інтернет-ресурси, які допоможуть вам знайти пароль із заданим хешем.

Звичайно, можна повторно використовувати хеш-значенняH(X) для перевірки паролів, створених в інших системах. Єдине, що повинна зробити приймальна система - це збереження результату детермінованої функції, Fяка приймає H(X)як вхід. Коли система Xдається тоді, H(X)тому Fїї можна перерахувати і результати порівняти. Іншими словами, не потрібно розшифровувати хеш-значення, щоб просто перевірити правильність пароля, і ви все одно можете зберігати хеш як інше значення.


Замість MD5 важливо використовувати хеш пароля або PBKDF (функція виведення ключа на основі пароля). Така функція визначає, як використовувати сіль разом з хешем. Таким чином, ідентичні хеші не будуть генеровані для однакових паролів (від інших користувачів або в інших базах даних). З цієї причини хеши паролів також не дозволяють використовувати таблиці з веселками до тих пір, поки сіль достатньо велика і належним чином рандомізована.

Хеші паролів також містять робочий коефіцієнт (інколи налаштований за допомогою ітерації ), який може значно уповільнити атаки, які намагаються знайти пароль із заданим значенням солі та хешу. Це важливо, оскільки база даних із солями та хеш-значеннями може бути викрадена. Нарешті, хеш паролів також може бути важким для пам'яті, так що для обчислення хешу потрібна значна кількість пам'яті. Це робить неможливим використання спеціального обладнання (GPU, ASIC, FPGA тощо), щоб дозволити зловмиснику прискорити пошук. Для хешу паролів також можуть бути доступні інші входи або параметри конфігурації, такі як перець або кількість паралелізації.

Однак це все ще дозволить будь-якій людині перевірити вказаний пароль, H(X)навіть якщо H(X)це хеш паролів. Хеші паролів все ще детерміновані, тому якщо хтось знає весь вхід і сам алгоритм хешу, то Xйого можна використовувати для обчислення H(X)та - знову ж таки - результати можна порівняти.

Зазвичай використовуються хеші паролів є Bcrypt , Scrypt і PBKDF2 . Також є Argon2 в різних формах, який є переможцем порівняно недавнього змагання з шикування паролів. Тут на CrackStation є хороший пост у блозі про те, як правильно захистити пароль.


Можливо, щоб противники не могли виконати хеш-розрахунок, переконавшись, що пароль правильний. Для цього перець можна використовувати як вхід до хешу пароля. Альтернативно, хеш-значення можна, звичайно, зашифрувати за допомогою шифру, такого як AES, та режиму роботи, такого як CBC або GCM. Однак для цього потрібно зберігати секрет / ключ незалежно та з більш високими вимогами доступу, ніж хеш паролів.


0

MD5 - це криптографічна (одностороння) хеш-функція, тому немає прямого способу її розшифровки. Вся мета криптографічної хеш-функції полягає в тому, що ви не можете її скасувати.

Одне, що ви можете зробити, це стратегія грубої сили, де ви здогадуєтеся, що було хешировано, а потім хеш-пам'ять з тією ж функцією і дивіться, чи відповідає вона. Якщо дані про хеши не дуже легко здогадатися, це може зайняти багато часу.


-1

Ще неможливо ввести хеш пароля в алгоритм і повернути пароль у простому тексті, оскільки хешування - це річ у єдиному напрямку. Але те, що люди зробили - це генерувати хеші та зберігати їх у великій таблиці, щоб, коли ви вводите певний хеш, він перевіряв таблицю на пароль, який відповідає хешу, і повертає вам цей пароль. Приклад сайту, який робить це, є http://www.md5online.org/ . Сучасна система зберігання паролів протидіє цьому, використовуючи алгоритм засолу, таким чином, що при введенні одного і того ж пароля у поле пароля під час реєстрації генеруються різні хеші.


-1

Ні, ви не можете розшифрувати / повернути md5, оскільки це одностороння хеш-функція, поки ви не знайдете велику вразливість у MD5. Інший спосіб полягає в тому, що на деяких веб-сайтах є велика кількість баз даних паролів, тому ви можете спробувати в Інтернеті розшифрувати свою хеш-рядок MD5 або SHA1. Я спробував веб-сайт на зразок http://www.mycodemyway.com/encrypt-and-decrypt/md5 і його нормально працює для мене, але це повністю залежить від вашого хешу, якщо цей хеш зберігається в цій базі даних, то ви можете отримати фактичну рядок .


1
Ні, MD5 - це не шифрування, навіть не одностороннє шифрування (що в першу чергу не має сенсу).
Maarten Bodewes

@MaartenBodewes Це моя помилка, це не функція шифрування, її хеш-функція. Дякую.
Рафі Ахмад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.