stringtranslate.com

MD5

Алгоритм дайджеста сообщений MD5 — это широко используемая хэш-функция, создающая 128- битное хэш-значение. MD5 была разработана Рональдом Ривестом в 1991 году для замены более ранней хэш-функции MD4 [ 3] и была определена в 1992 году как RFC 1321.

MD5 может использоваться в качестве контрольной суммы для проверки целостности данных от непреднамеренного повреждения. Исторически он широко использовался как криптографическая хэш-функция ; однако было обнаружено, что он страдает от обширных уязвимостей. Он остается пригодным для других некриптографических целей, например, для определения раздела для конкретного ключа в секционированной базе данных , и может быть предпочтительнее из-за более низких вычислительных требований, чем более поздние алгоритмы безопасного хэширования . [4]

История и криптоанализ

MD5 — один из серии алгоритмов дайджеста сообщений , разработанных профессором Рональдом Ривестом из Массачусетского технологического института (Rivest, 1992). Когда аналитическая работа показала, что предшественник MD5 MD4 , скорее всего, небезопасен, Ривест разработал MD5 в 1991 году в качестве безопасной замены. ( Ханс Доббертин действительно позже нашел слабые места в MD4.)

В 1993 году Ден Бур и Босселаерс дали ранний, хотя и ограниченный, результат обнаружения « псевдоколлизии » функции сжатия MD5 ; то есть двух разных векторов инициализации , которые создают идентичный дайджест.

В 1996 году Доббертин объявил о коллизии функции сжатия MD5 (Dobbertin, 1996). Хотя это не было атакой на полную хеш-функцию MD5, она была достаточно близка к этому, чтобы криптографы рекомендовали перейти на замену, такую ​​как SHA-1 (также скомпрометированную с тех пор) или RIPEMD-160 .

Размер хэш-значения (128 бит) достаточно мал, чтобы рассмотреть атаку дня рождения . MD5CRK был распределенным проектом, начатым в марте 2004 года, чтобы продемонстрировать, что MD5 практически небезопасен, путем обнаружения коллизии с помощью атаки дня рождения.

MD5CRK закончился вскоре после 17 августа 2004 года, когда Сяоюнь Ван , Дэнго Фэн, Сюэцзя Лай и Хунбо Юй объявили о столкновениях для полного MD5. [5] [6] Сообщалось, что их аналитическая атака заняла всего один час на кластере IBM p690 . [7]

1 марта 2005 года Арьен Ленстра , Сяоюнь Ван и Бенне де Вегер продемонстрировали создание двух сертификатов X.509 с разными открытыми ключами и одинаковым значением хэш-функции MD5, что является наглядной практической коллизией. [8] В конструкцию были включены закрытые ключи для обоих открытых ключей. Несколько дней спустя Властимил Клима описал улучшенный алгоритм, способный создавать коллизии MD5 за несколько часов на одном ноутбуке. [9] 18 марта 2006 года Клима опубликовал алгоритм, который мог находить коллизию в течение одной минуты на одном ноутбуке, используя метод, который он называет туннелированием. [10]

Были опубликованы различные RFC-ошибки, связанные с MD5 . В 2009 году Киберкомандование США использовало хэш-значение MD5 своего заявления о миссии как часть своей официальной эмблемы. [11]

24 декабря 2010 года Тао Се и Дэнго Фэн объявили о первой опубликованной одноблочной (512-битной) коллизии MD5. [12] (Предыдущие открытия коллизий основывались на многоблочных атаках.) По «соображениям безопасности» Се и Фэн не раскрыли новый метод атаки. Они бросили вызов криптографическому сообществу, предложив вознаграждение в размере 10 000 долларов США первому, кто найдет другую 64-байтовую коллизию до 1 января 2013 года. Марк Стивенс ответил на вызов и опубликовал коллизионные одноблочные сообщения, а также алгоритм построения и источники. [13]

В 2011 году был одобрен информационный документ RFC 6151 [14] для обновления соображений безопасности в MD5 [15] и HMAC-MD5. [16]

Безопасность

Одним из основных требований к любой криптографической хеш-функции является то, что она должна быть вычислительно невыполнимой для нахождения двух различных сообщений, которые хешируются с одним и тем же значением. MD5 катастрофически не соответствует этому требованию. 31 декабря 2008 года Институт программного обеспечения CMU пришел к выводу, что MD5 по сути «криптографически сломан и непригоден для дальнейшего использования». [17] Слабости MD5 были использованы в полевых условиях, наиболее печально известным из которых стало вредоносное ПО Flame в 2012 году. По состоянию на 2019 год MD5 продолжает широко использоваться, несмотря на его хорошо документированные слабости и устаревание экспертами по безопасности. [18]

Существует атака коллизий , которая может находить коллизии в течение нескольких секунд на компьютере с процессором Pentium 4 2,6 ГГц (сложность 2 24,1 ). [19] Кроме того, существует также атака коллизий с выбранным префиксом , которая может создавать коллизию для двух входов с указанными префиксами в течение нескольких секунд, используя готовое вычислительное оборудование (сложность 2 39 ). [20] Возможность находить коллизии значительно улучшилась благодаря использованию готовых графических процессоров . На графическом процессоре NVIDIA GeForce 8400GS можно вычислить 16–18 миллионов хешей в секунду. NVIDIA GeForce 8800 Ultra может вычислять более 200 миллионов хешей в секунду. [21]

Эти атаки хэширования и коллизии были продемонстрированы общественности в различных ситуациях, включая конфликтующие файлы документов [22] [23] и цифровые сертификаты . [24] По состоянию на 2015 год было продемонстрировано, что MD5 все еще довольно широко используется, в первую очередь компаниями, занимающимися исследованиями в области безопасности и антивирусными программами. [25]

По состоянию на 2019 год четверть широко используемых систем управления контентом по-прежнему используют MD5 для хеширования паролей . [18]

Обзор проблем безопасности

В 1996 году в конструкции MD5 был обнаружен изъян. Хотя в то время это не считалось фатальной слабостью, криптографы начали рекомендовать использование других алгоритмов, таких как SHA-1 , который с тех пор также оказался уязвимым. [26] В 2004 году было показано, что MD5 не является устойчивым к коллизиям . [27] Таким образом, MD5 не подходит для таких приложений, как сертификаты SSL или цифровые подписи , которые полагаются на это свойство для цифровой безопасности. Исследователи дополнительно обнаружили более серьезные недостатки в MD5 и описали возможную атаку на коллизию — метод создания пары входов, для которых MD5 выдает идентичные контрольные суммы . [5] [28] Дальнейшие успехи во взломе MD5 были достигнуты в 2005, 2006 и 2007 годах. [29] В декабре 2008 года группа исследователей использовала эту технику для подделки действительности сертификата SSL . [24] [30]

По состоянию на 2010 год Институт программного обеспечения CMU считает MD5 «криптографически сломанным и непригодным для дальнейшего использования» [31] , и большинство приложений правительства США теперь требуют семейства хэш-функций SHA-2 . [32] В 2012 году вредоносная программа Flame использовала уязвимости MD5 для подделки цифровой подписи Microsoft . [33]

Уязвимости к столкновениям

В 1996 году в функции сжатия MD5 были обнаружены коллизии, и Ганс Доббертин написал в техническом бюллетене RSA Laboratories : «Представленная атака пока не угрожает практическим применениям MD5, но она довольно близка к этому... в будущем MD5 больше не должен реализовываться... там, где требуется устойчивая к коллизиям хэш-функция». [34]

В 2005 году исследователи смогли создать пары документов PostScript [35] и сертификатов X.509 [36] с одинаковым хешем. Позже в том же году дизайнер MD5 Рон Ривест написал, что «md5 и sha1 оба явно сломаны (с точки зрения устойчивости к коллизиям)». [37]

30 декабря 2008 года группа исследователей объявила на 25-м конгрессе Chaos Communication Congress , как они использовали коллизии MD5 для создания промежуточного сертификата центра сертификации, который казался легитимным при проверке его хэшем MD5. [24] Исследователи использовали кластер PS3 в EPFL в Лозанне , Швейцария [38], чтобы изменить обычный сертификат SSL, выданный RapidSSL, на рабочий сертификат CA для этого эмитента, который затем можно было использовать для создания других сертификатов, которые казались бы легитимными и выданными RapidSSL. VeriSign , эмитенты сертификатов RapidSSL, заявили, что прекратили выпуск новых сертификатов, использующих MD5 в качестве алгоритма контрольной суммы для RapidSSL, как только была объявлена ​​уязвимость. [39] Хотя Verisign отказалась отзывать существующие сертификаты, подписанные с использованием MD5, их ответ был сочтен адекватным авторами эксплойта ( Александр Сотиров , Марк Стивенс , Якоб Аппельбаум , Арьен Ленстра , Дэвид Молнар, Даг Арне Освик и Бенне де Вегер). [24] Брюс Шнайер написал об атаке, что «мы уже знали, что MD5 — это сломанная хэш-функция» и что «никто больше не должен использовать MD5». [40] Исследователи SSL написали: «Наше желаемое воздействие заключается в том, что центры сертификации прекратят использовать MD5 при выдаче новых сертификатов. Мы также надеемся, что использование MD5 в других приложениях также будет пересмотрено». [24]

По данным Microsoft , в 2012 году авторы вредоносного ПО Flame использовали коллизию MD5 для подделки сертификата подписи кода Windows. [33]

MD5 использует конструкцию Меркла–Дамгарда , поэтому если можно построить два префикса с одинаковым хешем, к обоим можно добавить общий суффикс, чтобы повысить вероятность принятия коллизии в качестве допустимых данных приложением, использующим ее. Кроме того, современные методы поиска коллизий позволяют указать произвольный префикс : злоумышленник может создать два конфликтующих файла, которые оба начинаются с одного и того же содержимого. Все, что нужно злоумышленнику для создания двух конфликтующих файлов, — это файл шаблона с 128-байтовым блоком данных, выровненным по 64-байтовой границе, который может свободно изменяться алгоритмом поиска коллизий. Пример коллизии MD5 с двумя сообщениями, различающимися на 6 бит, выглядит так:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f8955ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbd f 280373c5bd8823e3156348f5b ae6dacd436c919c6 dd53e2 б 487da03fd 02396306d248cda0e99f33420f577ee8 ce54b67080 a 80d1e c69821bcb6a88393 96f965 2 b6ff72a70
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f8955ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd 7 280373c5bd8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 a b6ff72a70

Оба производят хэш MD5 79054025255fb1a26e4bc422aef54eb4. [41] Разница между двумя образцами заключается в том, что ведущий бит в каждом полубайте был перевернут. Например, 20-й байт (смещение 0x13) в верхнем образце, 0x87, равен 10000111 в двоичном виде. Ведущий бит в байте (также ведущий бит в первом полубайте) перевернут, чтобы получить 00000111, что равно 0x07, как показано в нижнем образце.

Позже также было обнаружено, что можно строить коллизии между двумя файлами с отдельно выбранными префиксами. Эта техника была использована при создании мошеннического сертификата CA в 2008 году. Новый вариант параллельного поиска коллизий с использованием MPI был предложен Антоном Кузнецовым в 2014 году, что позволило найти коллизию за 11 часов на вычислительном кластере. [42]

Уязвимость прообраза

В апреле 2009 года была опубликована атака на MD5, которая ломает стойкость прообраза MD5 . Эта атака является только теоретической, с вычислительной сложностью 2 123,4 для полного прообраза. [43] [44]

Приложения

Дайджесты MD5 широко используются в мире программного обеспечения для обеспечения некоторой гарантии того, что переданный файл прибыл в целости и сохранности. Например, файловые серверы часто предоставляют предварительно вычисленную контрольную сумму MD5 (известную как md5sum ) для файлов, чтобы пользователь мог сравнить с ней контрольную сумму загруженного файла. Большинство операционных систем на базе Unix включают утилиты для вычисления суммы MD5 в свои дистрибутивные пакеты; пользователи Windows могут использовать включенную функцию PowerShell "Get-FileHash", включенную функцию командной строки "certutil -hashfile <filename> md5", [45] [46] установить утилиту Microsoft, [47] [48] или использовать сторонние приложения. Android ROM также используют этот тип контрольной суммы.

Диаграмма, показывающая использование хеширования MD5 при передаче файлов
Диаграмма, показывающая использование хеширования MD5 при передаче файлов

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

Исторически MD5 использовался для хранения одностороннего хеша пароля , часто с растяжением ключа . [49] [50] NIST не включает MD5 в свой список рекомендуемых хешей для хранения паролей. [51]

MD5 также используется в области электронного раскрытия информации , чтобы предоставить уникальный идентификатор для каждого документа, которым обмениваются в процессе юридического раскрытия информации. Этот метод может быть использован для замены системы нумерации штампов Бейтса , которая использовалась десятилетиями при обмене бумажными документами. Как и выше, это использование следует предотвращать из-за легкости атак коллизии.

Алгоритм

Рисунок 1. Одна операция MD5. MD5 состоит из 64 таких операций, сгруппированных в четыре раунда по 16 операций. F — нелинейная функция; в каждом раунде используется одна функция. Mi обозначает 32-битный блок входного сообщения, а Ki обозначает 32-битную константу, разную для каждой операции. <<< s обозначает левый поворот бита на s позиций; s меняется для каждой операции. обозначает сложение по модулю 2 32 .

MD5 обрабатывает сообщение переменной длины в выходное сообщение фиксированной длины в 128 бит. Входное сообщение разбивается на фрагменты из 512-битных блоков (шестнадцать 32-битных слов); сообщение дополняется так , чтобы его длина делилась на 512. Дополнение работает следующим образом: сначала в конец сообщения добавляется один бит, 1. Затем следует столько нулей, сколько требуется, чтобы довести длину сообщения до 64 бит, что меньше кратного 512. Оставшиеся биты заполняются 64 битами, представляющими длину исходного сообщения по модулю 2 64 .

Основной алгоритм MD5 работает с 128-битным состоянием, разделенным на четыре 32-битных слова, обозначенных A , B , C и D. Они инициализируются определенными фиксированными константами. Затем основной алгоритм использует каждый 512-битный блок сообщения по очереди для изменения состояния. Обработка блока сообщения состоит из четырех аналогичных этапов, называемых раундами ; каждый раунд состоит из 16 аналогичных операций, основанных на нелинейной функции F , модульном сложении и левом вращении. На рисунке 1 показана одна операция в рамках раунда. Существует четыре возможных функции; в каждом раунде используется другая:

обозначают операции XOR , AND , OR и NOT соответственно.

Псевдокод

Хэш MD5 вычисляется по этому алгоритму. [52] Все значения указаны в порядке от младшего к старшему .

// : Все переменные беззнаковые 32-битные и переносятся по модулю 2^32 при вычислении var  int s[64], K[64] var  int i// s указывает количество смещений за раундс[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 }с[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 }с[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 }с[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 }// Использовать двоичную целую часть синусов целых чисел (радианы) в качестве констант: for i from 0 to 63 do K[i] := floor(2 32 × abs(sin(i + 1))) end for // (Или просто использовать следующую предварительно вычисленную таблицу):К[ 0.. 3] := { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee }К[ 4.. 7] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 }К[ 8..11] := { 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be }К[12..15] := { 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 }К[16..19] := { 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa }К[20..23] := { 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 }К[24..27] := { 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed }К[28..31] := { 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a }К[32..35] := { 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c }К[36..39] := { 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 }К[40..43] := { 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 }К[44..47] := { 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 }К[48..51] := { 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 }К[52..55] := { 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1 }К[56..59] := { 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1 }К[60..63] := { 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 }// Инициализация переменных: var  int a0 := 0x67452301 // A var  int b0 := 0xefcdab89 // B var  int c0 := 0x98badcfe // C var  int d0 := 0x10325476 // D// Предварительная обработка: добавление одного бита 1, добавляющего бит «1» к сообщению<  // Примечание: входные байты рассматриваются как битовые строки, // где первый бит — самый старший бит байта. [53]// Предварительная обработка: заполнение нулями, добавление бита «0» до тех пор, пока длина сообщения в битах не станет ≡ 448 (mod 512)// Примечание: два шага заполнения, описанные выше, реализованы более простым способом // в реализациях, которые работают только с полными байтами: добавить 0x80 // и дополняем 0x00 байтами, чтобы длина сообщения в байтах была ≡ 56 (mod 64).добавить исходную длину в битах mod 2 64  к сообщению// Обрабатываем сообщение последовательными 512-битными фрагментами: для каждого  512-битного фрагмента дополненного сообщения делаем разбить кусок на шестнадцать 32-битных слов M[j], 0 ≤ j ≤ 15 // Инициализируем хэш-значение для этого фрагмента:  var  int A := a0 var  int B := b0 var  int C := c0 var  int D := d0  // Основной цикл:  for i от 0 до 63 do  var  int F, g if 0 ≤ i ≤ 15 then F := (B и C) или (( not B) и D) г := я иначе если 16 ≤ i ≤ 31 , то F := (D и B) или (( не D) и C) g := (5×i + 1) mod 16 иначе, если 32 ≤ i ≤ 47 , то F := B xor C xor D g := (3×i + 5) mod 16 иначе, если 48 ≤ i ≤ 63 , то F := C xor (B или ( не D)) g := (7×i) mod 16  // Будьте осторожны с приведенными ниже определениями a,b,c,d F := F + A + K[i] + M[g] // M[g] должен быть 32-битным блоком А := Д Д := С С := Б B := B + leftrotate (F, s[i]) end for  // Добавить хэш этого фрагмента к текущему результату: а0 := а0 + А б0 := б0 + В с0 := с0 + С д0 := д0 + Дконец дляvar  char digest[16] := a0 append b0 append c0 append d0 // (Вывод в прямом порядке байтов)

Вместо приведенной выше формулировки из исходного RFC 1321 для повышения эффективности можно использовать следующее (полезно, если используется язык ассемблера — в противном случае компилятор, как правило, оптимизирует приведенный выше код. Поскольку в этих формулировках каждое вычисление зависит от другого, это часто медленнее, чем приведенный выше метод, в котором nand/and можно распараллелить):

( 0 ≤ i ≤ 15): F := D xor (B и (C xor D))(16 ≤ i ≤ 31): F := C xor (D и (B xor C))

MD5-хэши

128-битные (16-байтовые) хэши MD5 (также называемые дайджестами сообщений ) обычно представляются в виде последовательности из 32 шестнадцатеричных цифр. Ниже показан 43-байтовый ввод ASCII и соответствующий хэш MD5:

MD5(" Быстрая коричневая лиса перепрыгивает через ленивую собаку ") =9e107d9d372bb6826bd81d3542a419d6

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

MD5(" Быстрая коричневая лиса перепрыгивает через ленивую собаку . ") =e4d909c290d0fb1ca068ffaddf22cbd0

Хэш строки нулевой длины:

MD5("") =d41d8cd98f00b204e9800998ecf8427e

Алгоритм MD5 указан для сообщений, состоящих из любого количества бит; он не ограничен кратными восьми битам ( октетами , байтами ). Некоторые реализации MD5, такие как md5sum , могут быть ограничены октетами или не поддерживать потоковую передачу сообщений изначально неопределенной длины.

Реализации

Ниже приведен список криптографических библиотек, поддерживающих MD5:

Смотрите также

Ссылки

  1. ^ Rivest, R. (апрель 1992 г.). «Шаг 4. Обработка сообщения блоками по 16 слов». Алгоритм MD5 Message-Digest. IETF . стр. 5. раздел 3.4. doi : 10.17487/RFC1321 . RFC 1321. Получено 10 октября 2018 г.
  2. ^ Xie Tao; Fanbao Liu; Dengguo Feng (2013). "Fast Collision Attack on MD5" (PDF) . Архив Cryptology ePrint . Архивировано (PDF) из оригинала 2 февраля 2021 г. . Получено 3 декабря 2013 г. .
  3. ^ Ciampa, Mark (2009). CompTIA Security+ 2008 в деталях . Австралия; США: Course Technology/Cengage Learning. стр. 290. ISBN 978-1-59863-913-1.
  4. ^ Клеппманн, Мартин (2 апреля 2017 г.). Проектирование приложений с интенсивным использованием данных: Великие идеи, лежащие в основе надежных, масштабируемых и обслуживаемых систем (1-е изд.). O'Reilly Media. стр. 203. ISBN 978-1449373320.
  5. ^ ab J. Black, M. Cochran, T. Highland: Исследование атак MD5: идеи и улучшения Архивировано 1 января 2015 г. на Wayback Machine , 3 марта 2006 г. Получено 27 июля 2008 г.
  6. ^ Хоукс, Филипп; Пэддон, Майкл; Роуз, Грегори Г. (13 октября 2004 г.). «Musings on the Wang et al. MD5 Collision». Архив Cryptology ePrint . Архивировано из оригинала 5 ноября 2018 г. Получено 10 октября 2018 г.
  7. Bishop Fox (26 сентября 2013 г.). «Быстрые генераторы столкновений MD5 и MD4». BishopFox . Архивировано из оригинала 26 апреля 2017 г. . Получено 10 февраля 2014 г. .
  8. ^ Lenstra, Arjen ; Wang, Xiaoyun ; Weger, Benne de (1 марта 2005 г.). «Colliding X.509 Certificates». Архив Cryptology ePrint . Архивировано из оригинала 23 мая 2017 г. . Получено 10 октября 2018 г. .
  9. ^ Клима, Властимил (5 марта 2005 г.). «Поиск коллизий MD5 – игрушка для ноутбука». Архив Cryptology ePrint . Архивировано из оригинала 17 мая 2017 г. Получено 10 октября 2018 г.
  10. Властимил Клима: Туннели в хэш-функциях: коллизии MD5 в течение минуты. Архивировано 6 августа 2011 г. на Wayback Machine , Cryptology ePrint Archive Report 2006/105, 18 марта 2006 г., пересмотрено 17 апреля 2006 г. Получено 27 июля 2008 г.
  11. ^ "Code Cracked! Cyber ​​Command Logo Mystery Solved". USCYBERCOM . Wired News . 8 июля 2010 г. Архивировано из оригинала 17 февраля 2014 г. Получено 29 июля 2011 г.
  12. ^ Тао Се; Дэнго Фэн (2010). «Построение коллизий MD5 с использованием всего одного блока сообщений» (PDF) . Архивировано из оригинала 14 мая 2017 г. . Получено 28 июля 2011 г. .
  13. ^ "Марк Стивенс – Исследования – Атака с коллизией одного блока на MD5". Marc-stevens.nl. 2012. Архивировано из оригинала 15 мая 2017 года . Получено 10 апреля 2014 года .
  14. ^ Тернер, Шон (март 2011 г.). «RFC 6151 – Обновленные соображения безопасности для MD5 Message-Digest и алгоритмов HMAC-MD5». Internet Engineering Task Force . doi :10.17487/RFC6151. Архивировано из оригинала 15 июня 2017 г. . Получено 11 ноября 2013 г. .
  15. ^ Rivest, Ronald L. (апрель 1992 г.). "RFC 1321 – The MD5 Message-Digest Algorithm". Internet Engineering Task Force . doi : 10.17487/RFC1321 . Архивировано из оригинала 9 апреля 2021 г. . Получено 5 октября 2013 г. .
  16. ^ Krawczyk, Hugo; Bellare, Mihir; Canetti, Ran (февраль 1997 г.). "RFC 2104 – HMAC: Keyed-Hashing for Message Authentication". Internet Engineering Task Force . doi :10.17487/RFC2104. Архивировано из оригинала 15 апреля 2021 г. . Получено 5 октября 2013 г. .
  17. ^ Чад Р., Догерти (31 декабря 2008 г.). «Заметка об уязвимости VU#836068 MD5 уязвима для атак столкновений». База данных заметок об уязвимостях . CERT Carnegie Mellon University Software Engineering Institute. Архивировано из оригинала 26 июля 2011 г. Получено 3 февраля 2017 г.
  18. ^ ab Cimpanu, Catalin. «Четверть основных CMS используют устаревший MD5 в качестве схемы хеширования паролей по умолчанию». ZDNet . Архивировано из оригинала 24 января 2021 г. . Получено 17 июня 2019 г. .
  19. ^ MMJ Stevens (июнь 2007 г.). On Collisions for MD5 (PDF) (Магистерская диссертация). Архивировано (PDF) из оригинала 17 мая 2017 г. Получено 31 марта 2010 г.
  20. ^ Марк Стивенс; Арьен Ленстра; Бенне де Вегер (16 июня 2009 г.). «Конфликты выбранного префикса для MD5 и приложений» (PDF) . Федеральная политехническая школа Лозанны . Архивировано из оригинала (PDF) 9 ноября 2011 года . Проверено 31 марта 2010 г.
  21. ^ "Новый взломщик GPU MD5 взламывает более 200 миллионов хешей в секунду". Архивировано из оригинала 11 мая 2011 года . Получено 25 марта 2011 года .
  22. ^ Магнус Даум, Стефан Лакс . "Hash Collisions (The Poisoned Message Attack)". Eurocrypt 2005 rump session . Архивировано из оригинала 27 марта 2010 г.
  23. ^ Макс Гебхардт; Георг Иллиес; Вернер Шиндлер (31 октября 2005 г.). "Заметка о практической ценности отдельных коллизий хэшей для специальных форматов файлов" (PDF) . Национальный институт стандартов и технологий . Архивировано из оригинала (PDF) 17 сентября 2008 г.
  24. ^ abcde Сотиров, Александр; Марк Стивенс; Джейкоб Аппельбаум; Арьен Ленстра; Дэвид Молнар; Даг Арне Освик; Бенне де Вегер (30 декабря 2008 г.). «MD5 сегодня считается вредным». Архивировано из оригинала 25 марта 2017 года . Проверено 30 декабря 2008 г.Анонсировано Архивировано 16 ноября 2018 г. на Wayback Machine на 25-м Конгрессе Chaos Communication .
  25. ^ "Poisonous MD5 – Wolves Among the Sheep | Silent Signal Techblog". 10 июня 2015 г. Архивировано из оригинала 10 июня 2015 г. Получено 10 июня 2015 г.
  26. ^ Ханс Доббертин (лето 1996 г.). «Статус MD5 после недавней атаки». CryptoBytes . Получено 22 октября 2013 г.
  27. ^ Xiaoyun Wang; Hongbo Yu (2005). «Как взломать MD5 и другие хэш-функции» (PDF) . Advances in Cryptology – Lecture Notes in Computer Science . стр. 19–35. Архивировано из оригинала (PDF) 21 мая 2009 г. . Получено 21 декабря 2009 г. .
  28. ^ Xiaoyun Wang, Dengguo ,k.,m.,m, HAVAL-128 и RIPEMD , Cryptology ePrint Archive Report 2004/199, 16 августа 2004 г., пересмотрено 17 августа 2004 г. Получено 27 июля 2008 г.
  29. ^ Марк Стивенс, Арьен Ленстра, Бенне де Вегер: Уязвимость приложений целостности программного обеспечения и подписи кода к коллизиям выбранного префикса для MD5 Архивировано 13 декабря 2007 г. на Wayback Machine , 30 ноября 2007 г. Получено 27 июля 2008 г.
  30. ^ Stray, Jonathan (30 декабря 2008 г.). «Уязвимость веб-браузера может поставить под угрозу безопасность электронной коммерции». CNET.com . Архивировано из оригинала 28 августа 2013 г. Получено 24 февраля 2009 г.
  31. ^ "CERT Vulnerability Note VU#836068". Kb.cert.org. Архивировано из оригинала 21 марта 2017 г. Получено 9 августа 2010 г.
  32. ^ "NIST.gov — Computer Security Division — Computer Security Resource Center". Csrc.nist.gov. Архивировано из оригинала 9 июня 2011 г. Получено 9 августа 2010 г.
  33. ^ ab "Объяснение атаки столкновений вредоносного ПО Flame". Архивировано из оригинала 8 июня 2012 г. Получено 7 июня 2012 г.
  34. ^ Доббертин, Ганс (лето 1996 г.). "Состояние MD5 после недавней атаки" (PDF) . RSA Laboratories CryptoBytes . 2 (2): 1 . Получено 10 августа 2010 г. Представленная атака пока не угрожает практическим применениям MD5, но она довольно близка к этому. .... [ sic ] в будущем MD5 больше не следует реализовывать... [ sic ] там, где требуется хэш-функция, устойчивая к коллизиям.[ постоянная мертвая ссылка ]
  35. ^ "Schneier on Security: More MD5 Collisions". Schneier.com. Архивировано из оригинала 11 апреля 2021 г. Получено 9 августа 2010 г.
  36. ^ "Colliding X.509 Certificates". Win.tue.nl. Архивировано из оригинала 15 мая 2017 года . Получено 9 августа 2010 года .
  37. ^ "[Python-Dev] hashlib — faster md5/sha, adds sha256/512 support". Mail.python.org. 16 декабря 2005 г. Архивировано из оригинала 6 мая 2021 г. Получено 9 августа 2010 г.
  38. ^ "Исследователи используют PlayStation Cluster для создания веб-скелета". Wired . 31 декабря 2008 г. Архивировано из оригинала 21 апреля 2009 г. Получено 31 декабря 2008 г.
  39. ^ Каллан, Тим (31 декабря 2008 г.). «Утренняя атака MD5 — решена». Verisign. Архивировано из оригинала 16 января 2009 г. Получено 31 декабря 2008 г.
  40. ^ Брюс Шнайер (31 декабря 2008 г.). «Подделка SSL-сертификатов». Шнайер о безопасности. Архивировано из оригинала 9 ноября 2020 г. Получено 10 апреля 2014 г.
  41. ^ Эрик Рескорла (17 августа 2004 г.). «Настоящая коллизия MD5». Educated Guesswork (блог) . Архивировано из оригинала 15 августа 2014 г. Получено 13 апреля 2015 г.
  42. ^ Антон А. Кузнецов. "Алгоритм для атаки с коллизиями MD5 с одним блоком с использованием высокопроизводительного вычислительного кластера" (PDF) . IACR. Архивировано (PDF) из оригинала 4 июня 2016 г. Получено 3 ноября 2014 г.
  43. ^ Ю Сасаки; Казумаро Аоки (16 апреля 2009 г.). «Нахождение прообразов в полном MD5 быстрее, чем исчерпывающий поиск». Достижения в криптологии — EUROCRYPT 2009. Конспект лекций по информатике. Том 5479. Springer Berlin Heidelberg . С. 134–152. doi :10.1007/978-3-642-01001-9_8. ISBN 978-3-642-01000-2.
  44. ^ Мин Мао и Шаохуэй Чэнь и Цзинь Сюй (2009). «Построение начальной структуры для атаки на прообраз MD5». Международная конференция по вычислительному интеллекту и безопасности 2009 года . Том 1. IEEE Computer Society. стр. 442–445. doi :10.1109/CIS.2009.214. ISBN 978-0-7695-3931-7. S2CID  16512325.
  45. ^ "Поиск значений контрольной суммы в Windows 10". Сообщество Microsoft. Архивировано из оригинала 11 января 2024 г. Получено 23 ноября 2023 г.
  46. ^ "certutil". certutil . Microsoft Learn. Архивировано из оригинала 23 ноября 2023 г. Получено 23 ноября 2023 г.
  47. ^ «Доступность и описание утилиты File Checksum Integrity Verifier». Служба поддержки Microsoft. 17 июня 2013 г. Архивировано из оригинала 15 февраля 2015 г. Получено 10 апреля 2014 г.
  48. ^ «Как вычислить значения криптографического хэша MD5 или SHA-1 для файла». Служба поддержки Microsoft. 23 января 2007 г. Архивировано из оригинала 9 марта 2015 г. Получено 10 апреля 2014 г.
  49. ^ "FreeBSD Handbook, Security – DES, Blowfish, MD5 и Crypt". Архивировано из оригинала 18 февраля 2017 г. Получено 19 октября 2014 г.
  50. ^ "Synopsis – man pages section 4: File Formats". Docs.oracle.com. 1 января 2013 г. Архивировано из оригинала 4 марта 2016 г. Получено 10 апреля 2014 г.
  51. ^ NIST SP 800-132 Архивировано 1 декабря 2016 г. в разделе 5.1 Wayback Machine .
  52. ^ "Источник ссылки". Архивировано из оригинала 21 июня 2021 г. Получено 23 декабря 2020 г.
  53. ^ RFC 1321, раздел 2, «Терминология и обозначения», страница 2.

Дальнейшее чтение

Внешние ссылки