Перейти до вмісту

MD5: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
[неперевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Mhotamy (обговорення | внесок)
виправлено посилання на шаблон
 
(Не показані 46 проміжних версій ще одного користувача)
Рядок 1: Рядок 1:
[[Файл:CPT-Hashing-File-Transmission.svg|міні|220x220пкс]]
'''MD5''' ''(Message Digest 5)'' — 128-бітний алгоритм [[Хешувальна функція|хешування]], розроблений професором [[Рівест Рональд|Рональдом Л. Рівестом]] в [[1991]] році. Призначений для створення «відбитків» або «дайджестів» повідомлень довільної довжини. Прийшов на зміну MD4, що був недосконалим. Описаний в RFC 1321.
'''MD5''' ''(Message Digest 5)'' — 128-бітний алгоритм [[Хешувальна функція|хешування]], розроблений професором [[Рональд Рівест|Рональдом Л. Рівестом]] в [[1991]] році. Призначений для створення «відбитків» або «дайджестів» повідомлень довільної довжини. Прийшов на зміну [[MD4]], що був недосконалим. Описаний в RFC 1321. З 2011 року відповідно RFC 6151 алгоритм вважається ненадійним.


В [[2004]] році китайські дослідники Сяоюнь Ван (Xiaoyun Wang), Денгуо Фен (Dengguo Feng), Сюецзя Лай (Xuejia Lai) и Хонбо Ю (Hongbo Yu) повідомили про знаходження ними вразливості в алгоритмі, що дозволяє за невеликий час (1 годину на [[Кластер (інформатика)|кластері]] IBM p690) знаходити колізії хеш-функцій [http://eprint.iacr.org/2004/199] [http://eprint.iacr.org/2004/264]. На жаль, автори так і не відкрили свій секрет широкій публіці.
У [[2004]] році китайські дослідники Сяоюнь Ван (Xiaoyun Wang), Денгуо Фен (Dengguo Feng), Сюецзя Лай (Xuejia Lai) і Хонбо Ю (Hongbo Yu) повідомили про знаходження ними вразливості в алгоритмі, що дозволяє за невеликий час (1 годину на [[Кластер (інформатика)|кластері]] IBM p690) знаходити колізії хеш-функцій<ref>{{cite web|url=https://eprint.iacr.org/2004/199|title=Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD|work=Cryptology ePrint Archive: Report 2004/199|date=received 16 Aug 2004, last revised 17 Aug 2004|author=Xiaoyun Wang and Dengguo Feng and Xuejia Lai and Hongbo Yu|accessdate=2018-11-12|archive-date=9 червня 2020|archive-url=https://web.archive.org/web/20200609173224/https://eprint.iacr.org/2004/199}}</ref><ref>{{cite web|url=https://eprint.iacr.org/2004/264|title=Musings on the Wang et al. MD5 Collision|work=Cryptology ePrint Archive: Report 2004/264|date=13 жовтня 2004|author=Philip Hawkes and Michael Paddon and Gregory G. Rose|accessdate=2018-11-12|archive-date=5 листопада 2018|archive-url=https://web.archive.org/web/20181105220829/https://eprint.iacr.org/2004/264}}</ref>.


В [[2006]] році чеський дослідник Властимил Клима опублікував алгоритм [http://eprint.iacr.org/2006/105][http://cryptography.hyperlink.cz/MD5_collisions.html], що дозволяє знаходити колізії на звичайному комп'ютері з довільним початковим вектором (A,B,C,D), за допомогою методу, що був названий: "тунелювання".
У [[2006]] році чеський дослідник Властимил Клима опублікував алгоритм, що дозволяє знаходити колізії з довільним початковим вектором (A,B,C,D) на звичайному комп'ютері за лічені хвилини, цей метод було названо «тунелюванням»<ref>{{cite web|url=https://eprint.iacr.org/2006/105|title=Tunnels in Hash Functions: MD5 Collisions Within a Minute|work=Cryptology ePrint Archive: Report 2006/105|date=received 18 Mar 2006, last revised 17 Apr 2006|author=Vlastimil Klima|accessdate=2018-11-12|archive-date=5 листопада 2018|archive-url=https://web.archive.org/web/20181105223542/https://eprint.iacr.org/2006/105}}</ref>.

2009 року підрозділ [[Національне управління кібербезпеки США|Національного управління кібербезпеки США]] {{нп|US-CERT}} рекомендував відмовитися від застосування цього алгоритму через виявлені вразливості<ref name="cert_836068"/>
Відповідний RFC 6151 було опубліковано в березні 2011 року.

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

На 2023 рік, MD5 все ще широко використовується,{{джерело|дата=жовтень 2023}} незважаючи на свої вразливості.

== Використання MD5 ==
{{Вікіфікувати розділ|дата=квітень 2021}}
{{Розділ без джерел|дата=квітень 2021}}
{{Перекласти|en|MD5#Applications|дата=квітень 2021}}

[[Файл:CPT-Hashing-File-Transmission.svg|альт=Android ROMs використовують такий тип контрольної суми|міні|311x311пкс|Android ROMs використовують такий тип контрольної суми]]
Вибірки повідомлень MD5 широко використовувались у світі програмного забезпечення для гарантування правильної передачі файла. Наприклад, файлові сервери часто надають попередньо підраховану контрольну суму MD5 (відому як md5sum) для файлів, так що користувач може порівняти контрольну суму завантаженого файла з нею. Більшість юніксових операційних систем включають утиліти MD5 до своїх дистрибутивів. Користувачі Windows можуть використовувати інтегровану функцію PowerShell "Get-FileHash", інсталювати утиліту Microsoft або використовувати сторонні програми.

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

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

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


== Алгоритм MD5 ==
== Алгоритм MD5 ==
[[Файл:MD5.png|thumbnail|300px| Блок схема роботи алгоритму MD5]]
[[Файл:MD5 algorithm.svg|thumbnail|300px| Блок схема роботи алгоритму MD5]]


=== Початковий етап підготовки ===
=== Початковий етап підготовки ===
Рядок 20: Рядок 42:
** D = 76 54 32 10.
** D = 76 54 32 10.


Вирівнювані дані розбиваються на блоки по 32 біта, і кожен проходить 4 раунда з 16 операторів. Всі оператори однотипні і мають вигляд: [abcd k s i], визначений як <math>a = b + ((a+ Fun(b, c, d) + X[k] + T<i>) <<< s)</math>, де X - блок даних, а T[1..64] - 64х елементна таблиця побудована наступним чином: <math>T[i]=int(4294967296*|sin(i)|)</math>, s - циклічний зсув вліво на s біт отриманого 32-бітного аргументу.
Вирівнювані дані розбиваються на блоки по 32 біта, і кожен проходить 4 раунди з 16 операторів. Всі оператори однотипні і мають вигляд: [abcd k s i], визначений як <math>a = b + ((a+ Fun(b, c, d) + X[k] + T<i>) <<< s)</math>, де X - блок даних, а T[1..64] - 64-елементна таблиця, побудована наступним чином: <math>T[i]=int(4294967296*|sin(i)|)</math>, s - циклічний зсув вліво на s біт отриманого 32-бітного аргументу.
* В першому раунді Fun F(X, Y, Z) = XY v (not X)Z
* В першому раунді Fun F(X, Y, Z) = XY v (not X)Z
* В другому раунді Fun G(X, Y, Z) = XZ v (not Z)Y.
* В другому раунді Fun G(X, Y, Z) = XZ v (not Z)Y.
Рядок 30: Рядок 52:
Саме обчислення проходить наступним чином:
Саме обчислення проходить наступним чином:


*Зберігаються значення A, B, C и D, що залишились після операцій з попередніми блоками(або їх початкові значення якщо блок перший)
* Зберігаються значення A, B, C і D, що залишились після операцій з попередніми блоками(або їх початкові значення якщо блок перший)


AA = A
AA = A
Рядок 85: Рядок 107:
=== Результат ===
=== Результат ===


Після обчислення для всіх блоків даних, отримуємо кінцевий хеш у регістрах A B C D. Якщо вивести слова у зворотньому порядку DCBA, то отримаємо MD5 хеш.
Після обчислення для всіх блоків даних, отримуємо кінцевий хеш у регістрах A B C D. Якщо вивести слова у зворотному порядку DCBA, то отримаємо MD5 хеш.


== Посилання ==
== MD5-хеші ==
Хеш містить 128 біт (16 байт) і зазвичай представляється як послідовність з 32 [[Шістнадцяткова система числення|шістнадцяткових]] цифр.


Кілька прикладів хешу:
* RFC 1321


MD5 ("md5") = 1bc29b36f623ba82aaf6724fd3b16718
{{Хеш-функції навігація}}


Навіть невелика зміна вхідного повідомлення (у нашому випадку на один біт: ASCII символ «5» з кодом 0x35 <sub> 16 </sub> = 00011010'' '1'' '<sub> 2 </sub> замінюється на символ «4» з кодом 0x34 <sub> 16 </sub> = 00011010'' '0'' '<sub> 2 </sub>) призводить до повної зміни хешу. Така властивість алгоритму називається [[Лавиновий ефект|лавинним ефектом]].
[[Категорія:Криптографія]]


MD5 ("md4") = c93d3bf7a7c4afe94b64e30c2ce39f4f
[[ar:إم دي5]]

[[bg:MD5]]
Приклад MD5-хешу для «нульового» рядка:
[[ca:MD5]]

[[cs:Message-Digest algorithm]]
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
[[da:MD5]]

[[de:Message-Digest Algorithm 5]]
== Імплементації і використання ==
[[en:MD5]]
Наступні криптографічні бібліотеки підтримують MD5:
[[es:MD5]]

[[eu:MD5]]
* [[Botan (бібліотека програм)|Botan]]
[[fa:ام‌دی۵]]
[[fi:MD5]]
* [[Bouncy Castle]]
* {{нп|cryptlib}}
[[fr:MD5]]
* {{нп|Crypto++}}
[[he:MD5]]
[[hr:MD5]]
* [[Libgcrypt]]
* {{нп|Nettle (криптографічна бібліотека)|Nettle||Nettle (cryptographic library)}}
[[hu:MD5]]
[[hy:MD5]]
* [[OpenSSL]]
[[id:MD5]]
* [[wolfSSL]]

[[it:MD5]]
== Джерела ==
[[ja:MD5]]
{{reflist|refs=
[[ko:MD5]]
<ref name="cert_836068">{{cite web|url=https://www.kb.cert.org/vuls/id/836068/|title=CERT Vulnerability Notes Database|work=Software Engineering Institute|date=Original Release Date: 2008-12-31; Last Revised: 2009-01-21|accessdate=2018-11-12|archive-date=12 листопада 2018|archive-url=https://web.archive.org/web/20181112223455/https://www.kb.cert.org/vuls/id/836068/}}</ref>
[[lt:MD5]]
}}
[[ml:MD5]]

[[ms:MD5]]
== Посилання ==
[[nl:MD5]]

[[no:MD5]]
* {{IETF RFC| 1321}}
[[pl:MD5]]
* [https://dev-tips.org/Generators/Hash4Text/MD5 Generate MD5 Online (онлайн сервіс для генерування MD5)]{{Недоступне посилання|date=серпня 2019 |bot=InternetArchiveBot }}{{ref-en}}
[[pt:MD5]]

[[ro:MD5]]
{{Crypto-stub}}
[[ru:MD5]]
{{Геш-функції та коди аутентифікації повідомлення}}
[[sk:Message-Digest algorithm]]
{{ВП-портали|Програмування|}}
[[sl:Algoritem MD5]]
[[Категорія:Криптографія]]
[[sr:MD5]]
[[sv:MD5]]
[[tg:MD5]]
[[tr:MD5]]
[[vi:MD5]]
[[zh:MD5]]

Поточна версія на 09:23, 18 квітня 2024

MD5 (Message Digest 5) — 128-бітний алгоритм хешування, розроблений професором Рональдом Л. Рівестом в 1991 році. Призначений для створення «відбитків» або «дайджестів» повідомлень довільної довжини. Прийшов на зміну MD4, що був недосконалим. Описаний в RFC 1321. З 2011 року відповідно RFC 6151 алгоритм вважається ненадійним.

У 2004 році китайські дослідники Сяоюнь Ван (Xiaoyun Wang), Денгуо Фен (Dengguo Feng), Сюецзя Лай (Xuejia Lai) і Хонбо Ю (Hongbo Yu) повідомили про знаходження ними вразливості в алгоритмі, що дозволяє за невеликий час (1 годину на кластері IBM p690) знаходити колізії хеш-функцій[1][2].

У 2006 році чеський дослідник Властимил Клима опублікував алгоритм, що дозволяє знаходити колізії з довільним початковим вектором (A,B,C,D) на звичайному комп'ютері за лічені хвилини, цей метод було названо «тунелюванням»[3].

2009 року підрозділ Національного управління кібербезпеки США US-CERT[en] рекомендував відмовитися від застосування цього алгоритму через виявлені вразливості[4] Відповідний RFC 6151 було опубліковано в березні 2011 року.

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

На 2023 рік, MD5 все ще широко використовується,[джерело?] незважаючи на свої вразливості.

Використання MD5

[ред. | ред. код]
Android ROMs використовують такий тип контрольної суми
Android ROMs використовують такий тип контрольної суми

Вибірки повідомлень MD5 широко використовувались у світі програмного забезпечення для гарантування правильної передачі файла. Наприклад, файлові сервери часто надають попередньо підраховану контрольну суму MD5 (відому як md5sum) для файлів, так що користувач може порівняти контрольну суму завантаженого файла з нею. Більшість юніксових операційних систем включають утиліти MD5 до своїх дистрибутивів. Користувачі Windows можуть використовувати інтегровану функцію PowerShell "Get-FileHash", інсталювати утиліту Microsoft або використовувати сторонні програми.

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

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

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

Алгоритм MD5

[ред. | ред. код]
Блок схема роботи алгоритму MD5

Початковий етап підготовки

[ред. | ред. код]
  • Вхідні дані вирівнюються так, щоб їхній розмір можна було порівняти з 448 по модулю з 512. Спочатку дописують одиничний біт (навіть якщо довжина порівняна з 448), далі необхідна кількість нульових бітів .
  • Дописування 64-бітного представлення довжини даних по вирівнюванню. Якщо довжина перевищує , то дописують молодші біти.

Допоміжні таблиці та функції

[ред. | ред. код]
  • Ініціалізуть 4 змінних розміром по 32 біта:
    • А = 01 23 45 67;
    • В = 89 AB CD EF;
    • С = FE DC BA 98;
    • D = 76 54 32 10.

Вирівнювані дані розбиваються на блоки по 32 біта, і кожен проходить 4 раунди з 16 операторів. Всі оператори однотипні і мають вигляд: [abcd k s i], визначений як , де X - блок даних, а T[1..64] - 64-елементна таблиця, побудована наступним чином: , s - циклічний зсув вліво на s біт отриманого 32-бітного аргументу.

  • В першому раунді Fun F(X, Y, Z) = XY v (not X)Z
  • В другому раунді Fun G(X, Y, Z) = XZ v (not Z)Y.
  • В третьому раунді Fun Н(Х, Y, Z) = Х xor Y xor Z.
  • В четвертому раунді Fun I(Х, Y, Z) = Y xor (X v (not Z)).

Циклічна процедура обчислення

[ред. | ред. код]

Саме обчислення проходить наступним чином:

  • Зберігаються значення A, B, C і D, що залишились після операцій з попередніми блоками(або їх початкові значення якщо блок перший)

AA = A

BB = B

CC = C

DD = D

Раунд 1

/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  0 7  1][DABC  1 12  2][CDAB  2 17  3][BCDA  3 22  4]
[ABCD  4 7  5][DABC  5 12  6][CDAB  6 17  7][BCDA  7 22  8]
[ABCD  8 7  9][DABC  9 12 10][CDAB 10 17 11][BCDA 11 22 12]
[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]

Раунд 2

/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  1 5 17][DABC  6 9 18][CDAB 11 14 19][BCDA  0 20 20]
[ABCD  5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA  4 20 24]
[ABCD  9 5 25][DABC 14 9 26][CDAB  3 14 27][BCDA  8 20 28]
[ABCD 13 5 29][DABC  2 9 30][CDAB  7 14 31][BCDA 12 20 32]

Раунд 3

/*[abcd k s i] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  5 4 33][DABC  8 11 34][CDAB 11 16 35][BCDA 14 23 36]
[ABCD  1 4 37][DABC  4 11 38][CDAB  7 16 39][BCDA 10 23 40]
[ABCD 13 4 41][DABC  0 11 42][CDAB  3 16 43][BCDA  6 23 44]
[ABCD  9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA  2 23 48]

Раунд 4

/*[abcd k s i] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  0 6 49][DABC  7 10 50][CDAB 14 15 51][BCDA  5 21 52]
[ABCD 12 6 53][DABC  3 10 54][CDAB 10 15 55][BCDA  1 21 56]
[ABCD  8 6 57][DABC 15 10 58][CDAB  6 15 59][BCDA 13 21 60]
[ABCD  4 6 61][DABC 11 10 62][CDAB  2 15 63][BCDA  9 21 64]

Проміжний результат

Виконати наступні операції

A = AA + A
B = BB + B
C = CC + C
D = DD + D

Після цього перевірити, чи є ще блоки, якщо є, то повторюють циклічну процедуру обчислення для наступного 32-х бітового блоку.

Результат

[ред. | ред. код]

Після обчислення для всіх блоків даних, отримуємо кінцевий хеш у регістрах A B C D. Якщо вивести слова у зворотному порядку DCBA, то отримаємо MD5 хеш.

MD5-хеші

[ред. | ред. код]

Хеш містить 128 біт (16 байт) і зазвичай представляється як послідовність з 32 шістнадцяткових цифр.

Кілька прикладів хешу:

 MD5 ("md5") = 1bc29b36f623ba82aaf6724fd3b16718 

Навіть невелика зміна вхідного повідомлення (у нашому випадку на один біт: ASCII символ «5» з кодом 0x35 16 = 00011010 '1 ' 2 замінюється на символ «4» з кодом 0x34 16 = 00011010 '0 ' 2 ) призводить до повної зміни хешу. Така властивість алгоритму називається лавинним ефектом.

 MD5 ("md4") = c93d3bf7a7c4afe94b64e30c2ce39f4f 

Приклад MD5-хешу для «нульового» рядка:

 MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

Імплементації і використання

[ред. | ред. код]

Наступні криптографічні бібліотеки підтримують MD5:

Джерела

[ред. | ред. код]
  1. Xiaoyun Wang and Dengguo Feng and Xuejia Lai and Hongbo Yu (received 16 Aug 2004, last revised 17 Aug 2004). Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD. Cryptology ePrint Archive: Report 2004/199. Архів оригіналу за 9 червня 2020. Процитовано 12 листопада 2018.
  2. Philip Hawkes and Michael Paddon and Gregory G. Rose (13 жовтня 2004). Musings on the Wang et al. MD5 Collision. Cryptology ePrint Archive: Report 2004/264. Архів оригіналу за 5 листопада 2018. Процитовано 12 листопада 2018.
  3. Vlastimil Klima (received 18 Mar 2006, last revised 17 Apr 2006). Tunnels in Hash Functions: MD5 Collisions Within a Minute. Cryptology ePrint Archive: Report 2006/105. Архів оригіналу за 5 листопада 2018. Процитовано 12 листопада 2018.
  4. CERT Vulnerability Notes Database. Software Engineering Institute. Original Release Date: 2008-12-31; Last Revised: 2009-01-21. Архів оригіналу за 12 листопада 2018. Процитовано 12 листопада 2018.

Посилання

[ред. | ред. код]