Как проверить MD5 хеш-сумму файла в Windows
Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP- AJIekceu4
- 9 931
- 1
- 100,00%
- 13
В некоторых ситуациях, может быть необходимо, посчитать MD5 хеш-сумму для файла, который вы скачали на свой компьютер. Например, чтобы быть уверенным в том, что вы скачали именно тот файл, который хотели и злоумышленник его не модифицировал. В этой статье мы рассмотрим 2 разных способа это сделать: через расширение для проводника, а также через командную строку.
Вариант через расширение для проводника
Для проводника Windows существует замечательная программа Hashtab, которая бесплатна для некоммерческого использования. Скачать ее можно с официального сайта. Выбираем бесплатную (Free) версию и жмем на кнопку «Download».
После установки программы, в контекстном меню проводника появится новая вкладка «Хеш-суммы файлов», выбрав которую, программа автоматически посчитает хеш-суммы для выбранного файла в зависимости от того, какие алгоритмы выбраны в ее настройках.
Вариант через командную строку (с установкой программы)
В случае, если необходимо посчитать хеш-сумму файла через командную строку, мы можем воспользоваться утилитой от Microsoft, которая годится как раз для таких случаев. Скачиваем ее с официального сайта Microsoft и устанавливаем. Для этого надо будет создать какую-либо папку на жестком диске и указать ее в процессе установки. В нашем примере, программа была установлена в папку C:\Program Files (x86)\FCIV. Для того, чтобы посчитать MD5 хеш-сумму файла, нам необходимо запусить командную строку и в ней набрать следующую команду:
"C:\Program Files (x86)\FCIV\fciv.exe" -md5 C:\Users\Admin\Downloads\HashTab_v6.0.0.34_Setup.exe
Как видите, MD5 хеш-сумма одинакова как для первого варианта, так и для второго.
"C:\Program Files (x86)\FCIV\fciv.exe"
— это путь к файлу fciv.exe-md5
— указание алгоритма по которому fciv.exe будет считать хеш-суммуC:\Users\Admin\Downloads\HashTab_v6.0.0.34_Setup.exe
— путь к файлу, для которого мы считаем хеш-сумму.
Вариант через командную строку (без установки программ)
В том случае, если вам не хочется устанавливать какие-либо программы, то можно обойтись встроенными средствами Windows, для этого можно воспользоваться утилитой CertUtil.
Для проверки MD5 хеша, достаточно ввести следующую команду:
certutil -hashfile C:\Users\Admin\Downloads\HashTab_v6.0.0.34_Setup.exe MD5
C:\Users\Admin\Downloads\HashTab_v6.0.0.34_Setup.exe — это путь к тому файлу, хеш-сумму которого мы хотим посчитать.
Как видно на скриншоте, хеш-сумма нашего файла 62130c3964… полностью идентична той, которую мы получили с помощью первого и второго способа.
md5sum — Википедия
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 12 сентября 2016; проверки требуют 6 правок. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 12 сентября 2016; проверки требуют 6 правок.md5sum — программа, позволяющая вычислять значения хеш-сумм (контрольных сумм) файлов по алгоритму MD5. В обычном случае вычисленные хеши выводятся (можно сохранить в файле, для последующего использования). В других случаях программа сверяет вычисленные значения со значениями, сохранёнными в файле (это удобно для массовой проверки целостности файлов).
Наиболее часто программа используется для проверки правильной загрузки файлов по сети. Программа имеет множество версий (функциональность версий может существенно различаться) для различных ОС — например, Linux, UNIX (напр., BSD), Microsoft Windows, MacOS.
md5sum [ключи] [файл] ...
Если файл не указан, или в качестве его имени указан символ -, то данные читаются из standard input.
Ключи:
- -t, —text — читать данные файлов в текстовом режиме (по умолчанию). Перед именем файла выводится пробел.
- -b, —binary — читать данные файлов в двоичном режиме. Перед именем файла выводится символ *.
- -c, —check — сверять вычисленные значения MD5 со значениями из файла
- —status — (только при проверке хешей) — выводить только код проверки ()
- -w, —warn — (только при проверке хешей) — предупреждать о строках (checksum lines) с неправильным форматом
- —help — вывести только справку по ключам
- —version — вывести только информацию о версии
Многие версии программы md5sum не могут обрабатывать множества файлов, перемещаясь по каталогам рекурсивно. Этого ограничения не имеет усовершенствованная версия программы — md5deep.
Быстрое вычисление хеша из командной строки (обратите внимание на ключ -n у echo, предотвращающий добавление символа перевода строки):
$ echo -n "to_hash" | md5sum - 81cf2f9f23fd597f2e278e56718c3831 -
Вычисление в текущем каталоге по маске. Хеши (checksums) MD5 (128-битные значения) выводятся в виде 32-значных шестнадцатеричных чисел.
$ md5sum ./s* 3111519d5b4efd31565831f735ab0d2f ./sec1.png d73ecc5397b8bfde0cc218f798019064 ./sec2.png
Для вычисления и записи (в файл sums.md5) хешей файлов (читаемых как двоичные файлы) с шаблоном имени:
md5sum -b ./sec* > sums.md5
Для проверки контрольных сумм файлов, сохранённых в файле.
md5sum -c sums.md5 ./sec1.png: FAILED ./sec2.png: OK md5sum: WARNING: 1 of 2 computed checksums did NOT match
Если нужно просто проверить, все ли файлы имеют правильные контрольные суммы, можно подавить «вывод результата для каждого файла» с помощью ключа —status. Тогда вообще ничего не выводится, а возвращается невидимый «код возврата». Это полезно, когда программа вызывается другой программой.
Чтобы вычислить хеши всех файлов в текущем каталоге и его подкаталогах (рекурсивно), при этом выводить размер файлов и относительный путь файла, используете:
md5deep -r -z -l *
получается информация (которую можно перенаправить для сохранения в файле «
57 0cfbc88da15e6d31d3ad438d50f14eed docs/DVD05/disc05.iso 14325604 7cd30a721a2e672c3d08c932760be0e3 Edocs/2005/2005-08.tar.gz 7944551 b13aa16388acaf55c5bcf71e8b5c158c Edocs/2004/2004-12.tar.gz
В связи с лёгкостью нахождения коллизий в MD5 md5sum не рекомендуется[1] к дальнейшему использованию.
Команды Unix | |
---|---|
ru.wikipedia.org
Как проверить md5 в Total Commander
[an error occurred while processing the directive]Мы часто качаем в сети различные программы, образы дисков .iso и так далее. И вот когда мы уже все скачали, распаковали и установили, замечаем, что что-то работает не так. А дело было в том, что во время закачки какой-то файл потерял один байт или больше. Но программа уже не будет корректно работать. И чтобы этого избежать, сразу после закачки мы проверяем контрольную сумму (обычно ее показывают те, кто выкладывает файл в сеть). Если она различается, значит архив скачался «битый», с ошибками.
Область применения хеширования md5 довольно широка, и здесь мы не будем разводить на эту тему бла-бла, ведь мы всего лишь хотим знать, как проверить md5 — контрольную сумму и сравнить ее с заданной.
Файл - Посчитать CRC-суммы (формат SFV, MD5)
Выскочит вот такое окошко, ставим галочку MD5 и нажимаем ОК.
Рядом с Вашим файлом создастся еще один, с таким же названием и расширением md5.
Выделяем его и открываем с помощью клавиши F3. Видим контрольную сумму.
Вот так можно проверить md5 с помощью Total Commander.
http://winblogs.ru/moment/md5.htmlhttp://winblogs.ru//wp-content/uploads/kak-proverit-md5-v-total-commander.jpghttp://winblogs.ru/wp-content/uploads/kak-proverit-md5-v-total-commander-150×150.jpgПриложенияmd5,Total CommanderМы часто качаем в сети различные программы, образы дисков .iso и так далее. И вот когда мы уже все скачали, распаковали и установили, замечаем, что что-то работает не так. А дело было в том, что во время закачки какой-то файл потерял один байт или больше. Но программа уже не… Userwinblogs.ru — Компьютер для чайниковwinblogs.ru
Что такое контрольная сумма и как ее проверить?
При обмене информацией по компьютерным сетям или через переносные носители актуальным встает вопрос о том, как проверить целостность передаваемой информации. Ведь если в полученном многомегабайтном файле будет неправильно сохранено несколько бит, то это может привести к проблемам при использовании этого файла. Особенно если этот файл является приложением. Поэтому при распространении различных установочных файлов, образов дисков и прочей информации принято указывать контрольную сумму (хеш) — чтобы пользователи, скачав данные, могли самостоятельно проверить контрольные суммы файлов на предмет совпадения с хешем скачанной информации.
Принципы использования контрольных сумм
Для осознанного использования технологии полезно понимать, что из себя представляет хеш. В общем случае хеш — это набор бит, получаемый в результате вычислений над информацией по определенному алгоритму. Отличительной особенностью такого алгоритма является то, что при изменении хотя бы одного бита в исходной информации, хеш-сумма также меняется. И при этом крайне мала вероятность того, что случайное изменение нескольких бит входящей информации оставит хеш без изменений. Таким образом получается, что контрольная сумма — это как паспорт данных, сверившись с которым можно сделать вывод, что данные — подлинные.
Поэтому принцип использования хэшей довольно прост, и состоит из двух этапов:
1. Вычисление, сохранение и публикация контрольной суммы оригинальных данных.
2. Вычисление ее значения для копии данных и сверка со значением для оригиналов.
Существует много разных алгоритмов хеширования. И соответственно есть много разновидностей хеш-сумм. Наиболее популярные среди них — это CRC32, MD5, SHA-1 и пр.
Где применяются хеши?
Даже те пользователи, которые не знают что такое хеш-суммы, все равно довольно часто пользуются благами их использования — например при открытии упакованных файлов. Дело в том, что современные архиваторы добавляют к упакованным файлам их хеши. Их можно увидеть, открыв архив с помощью программы-архиватора.
И соответственно при разархивировании эти хеши автоматически сверяются. Если архив поврежден — то программа архивации выдаст ошибку с сообщением, что контрольные суммы файлов не совпадают. Поэтому самый простой способ обеспечить контроль правильности передачи файлов — это упаковать их в архив.
Другая сфера применения контрольных сумм — это использование их вместо паролей. Когда посетитель регистрируется на каком-то сайте, вводя секретный пароль, то на сервере сохраняется не сам пароль, а его хеш. Соответственно, если злоумышленники получат доступ к серверу, то они не смогут узнать сохраненные пароли — их там попросту нет.
Также хеш-суммы — неотъемлемая часть работы торрент-трекеров. Благодаря этому при закачке файлов через торренты гарантируется 100-процентная целостность передачи информации. При этом пользователю нет надобности каким-то образом контролировать этот процесс. Все необходимые операции при закачке осуществляет программа (торрент-клиент). Конечно, если файлы уже давно скачаны, и нужно убедиться, не повредились ли они со временем, то можно запустить повторную проверку вручную. Так например в программе uTorrent для этого есть специальный пункт в контекстном меню (появляющемся при нажатии правой кнопкой мыши на выбранном торренте).
При использовании архивов и торрентов хеширование проводится без участия пользователя. Но поскольку далеко не все файлы удобно архивировать и тем более использовать торренты при отправке информации, то существует широко распространенная практика вычисления контрольных сумм для произвольного набора файлов. Чаще всего для этого используются хеш в формате MD5, для которого создано много разных программ.
Как создать MD5-хеш файлов с помощью MD5Checker?
Несмотря на то, что MD5-алгоритм доступен во многих файл-менеджерах и утилитах, не всеми из них удобно пользоваться. Часть программ не умеют проверять хэши для группы файлов. Другая часть программ хоть и делает это, но не выводит в удобном виде отчет о результатах проверки — приходится вручную прокручивать весь список файлов для выявления сообщений об ошибках.
Единственная максимально удобная программа для работы с MD5 — это приложение MD5Checker. Скачать программу можно с официального сайта. Несмотря на то, что программа имеет англоязычный интерфейс, пользоваться ей достаточно просто.
Программа по умолчанию настроена на хеширование программных файлов, архивов и ISO-образов. Поэтому если Вы хотите пользоваться этим приложением допустим для музыки и видео, то необходимо для начала поменять одну единственную настройку — указать маску для файлов, с которыми будет работать программа. Для этого нужно зайти в пункт меню «Tools / Options» и в поле «Include» указать символ * (что означает «все файлы»).
После этого можно пользоваться программой в обычном режиме — теперь будут сканироваться все до единого файлы во всех подпапках.
Для создания MD5-хеша нужно перетащить выбранные файлы из папки в окно программы — и программа автоматически начнет вычислять MD5-суммы для всех выбранных файлов и всех файлов в подпапках (удовлетворяющих заданной нами маске). Посчитанные суммы будут отображены в столбце «Current MD5» («Текущая MD5»). Теперь остается только сохранить полученные значения в файл, нажав кнопку «S To» («Сохранить в»).
При этом важно отметить, что если сохранить MD5-файл в папке, в которой находятся все выбранные нами файлы и подпапки, то будут сохранены относительные пути к ним. Это позволит в будущем проверять контрольную сумму даже если перенести файлы в другое месторасположение. Поэтому перед сохранением файла имеет смысл перейти в корень папки, нажав соответствующую кнопку.
Если открыть полученный файл в блокноте, то можно увидеть, что информация хранится в нем в виде обычного текста.
При этом можно убедиться, что пути к файлам сохранены относительные, т.е. не содержат буквы диска, на котором расположены. Такой MD5-файл можно хранить в папке вместе с файлами, и в будущем на любом компьютере проверять целостность файлов этой папки.
Как проверить контрольные суммы файлов?
Для проверки контрольных сумм файлов нужно заново запустить программу либо нажать кнопку «Clear» для очистки списка файлов.
После этого следует перетащить MD5-файл в окно программы и удостовериться, что напротив каждого файла появилась зеленая галочка. Это означает что файлы хранятся в целости и сохранности. Если файлов довольно много, то контроль удобнее производить по счетчикам «Failed» и «Passed» («Не совпало» и «Совпало») в заголовке таблицы.
Можно провести эксперимент: переименовать один из файлов, а еще один отредактировать, произведя пару незначительных изменений. После запуска повторной проверки программа выявила, что один из файлов стал недоступным под изначальным именем (помечен желтым значком), а контрольная сумма второго файла не совпала (помечен красным значком). Несовпадение контрольной суммы свидетельствует о том, что файл либо изменялся, либо поврежден.
Стоит отметить, что если у Вас имеется несколько папок, в каждой из которых есть один или несколько MD5-файлов (в т.ч. в подпапках), то перетащив эти все папки в окно программы можно одним махом проверить все файлы на целостность. MD5Checker автоматически извлекает значения хешей из попадающихся при сканировании файлов с расширением md5. Это бывает крайне удобно, если осуществляется копирование или передача по интернету больших объемов информации.
Также если Вы переименовали или перенесли какие-то файлы в другое месторасположение, то можно отредактировать в блокноте MD5-файл, указав там новые значения для их путей — и тогда можно будет пользоваться им дальше для проверки файлов.
Итоги
Технология хеширования дает уникальную возможность контроля за сохранностью информации. В нынешние времена, когда количество файлов пользователя исчисляется тысячами и десятками тысяч, необходимо удобство в обработке хеш-сумм для больших объемов данных. С этой задачей успешно справляется программа MD5Checker, с помощью которой Вы сможете как проверить контрольные суммы, так и создать их для множества файлов независимо от глубины их вложенности в дереве папок.
livelenta.com
Проверка контрольной суммы Linux | Losst
Контрольная сумма — это цифра или строка, которая вычисляется путем суммирования всех цифр нужных данных. Ее можно использовать в дальнейшем для обнаружения ошибок в проверяемых данных при хранении или передаче. Тогда контрольная сумма пересчитывается еще раз и полученное значение сверяется с предыдущим.
В этой небольшой статье мы рассмотрим что такое контрольная сумма Linux, а также как выполнять проверку целостности файлов с помощью контрольных сумм md5.
Содержание статьи:
Что такое MD5?
Контрольные суммы Linux с вычисляемые по алгоритму MD5 (Message Digest 5) могут быть использованы для проверки целостности строк или файлов. MD5 сумма — это 128 битная строка, которая состоит из букв и цифр. Суть алгоритма MD5 в том, что для конкретного файла или строки будет генерироваться 128 битный хэш, и он будет одинаковым на всех машинах, если файлы идентичны. Трудно найти два разных файла, которые бы выдали одинаковые хэши.
В Linux для подсчета контрольных сумм по алгоритму md5 используется утилита md5sum. Вы можете применять ее для проверки целостности загруженных из интернета iso образов или других файлов.
Эта утилита позволяет не только подсчитывать контрольные суммы linux, но и проверять соответствие. Она поставляется в качестве стандартной утилиты из набора GNU, поэтому вам не нужно ничего устанавливать.
Проверка контрольных сумм в Linux
Синтаксис команды md5sum очень прост:
$ md5sum опции файл
Опций всего несколько и, учитывая задачи утилиты, их вполне хватает:
- -c — выполнить проверку по файлу контрольных сумм;
- -b — работать в двоичном формате;
- -t — работать в текстовом формате;
- -w — выводить предупреждения о неверно отформатированном файле сумм;
- —quiet — не выводить сообщения об успешных проверках.
Сначала скопируйте файл /etc/group в домашнюю папку чтобы на нем немного поэкспериментировать:
cp /etc/group groups
Например, давайте подсчитаем контрольную сумму для файла /etc/group:
md5sum groups
Или вы можете сохранить сразу эту сумму в файл для последующей проверки:
md5sum groups > groups.md5
Затем каким-либо образом измените этот файл, например, удалите первую строчку и снова подсчитайте контрольные суммы:
md5sum groups
Как видите, теперь значение отличается, а это значит, что содержимое файла тоже изменилось. Дальше верните обратно первую строчку root:x:0: и скопируйте этот файл в groups_list и
cp groups groups_list
Затем опять должна быть выполнена проверка контрольной суммы linux:
md5sum groups_list
Сумма соответствует первому варианту, даже несмотря на то, что файл был переименован. Обратите внимание, что md5sum работает только с содержимым файлов, ее не интересует ни его имя, ни его атрибуты. Вы можете убедиться, что оба файла имеют одинаковые суммы:
md5sum groups groups_list
Вы можете перенаправить вывод этой команды в файл, чтобы потом иметь возможность проверить контрольные суммы:
md5sum groups groups_list > groups.md5
Чтобы проверить, не были ли файлы изменены с момента создания контрольной суммы используйте опцию -c или —check. Если все хорошо, то около каждого имени файла появится слово OK или ЦЕЛ:
md5sum -c groups.md5
Но теперь вы не можете переименовывать файлы, потому что при проверке утилита будет пытаться открыть их по имени и, естественно, вы получите ошибку. Точно так же все работает для строк:
echo -n "Losst" | md5sum -
$ echo -n "Losst Q&A" | md5sum -
Выводы
Из этой статьи вы узнали как выполняется получение и проверка контрольной суммы linux для файлов и строк. Хотя в алгоритме MD5 были обнаружены уязвимости, он все еще остается полезным, особенно если вы доверяете инструменту, который будет создавать хэши.
Проверка целостности файлов Linux — это очень важный аспект использования системы. Контрольная сумма файла Linux используется не только вручную при проверке загруженных файлов, но и во множестве системных программ, например, в менеджере пакетов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение небольшое видео по теме:
losst.ru
Контрольная сумма. Что это и как проверить?
Здравствуйте читатели блога компании КомСервис (г. Набережные Челны). Как показывает практика многих пользователей, при более детальном знакомстве с компьютером, интересует вопрос: что есть контрольная сумма? И как ее вычислить? В этой статье мы расскажем что это и зачем. Так же приведем несколько способов проверки контрольной суммы или хеша файлов.
Структура истатьи
- Определение контрольной суммы
- HashТab — проверка контрольной суммы
- MD5_FileChecker — проверка хеша
Вывод
1. Определение контрольной суммы
Контрольная сумма (хеш) — определенное значение рассчитанное для данных с помощью известных алгоритмов. Предназначается для проверки целостности данных при передаче. Наиболее распространенными алгоритмами являются: CRC32, MD5 и SHA-1.
CRC32 — (Cyclic redundancy code) Циклический избыточный код. используется в работе программ архиваторов.
MD5 — используется не только для проверки целостности данных, но и позволяет получить довольно надежный идентификатор файла. Последний часто используется при поиске одинаковый файлов на компьютере, что бы не сравнивать все содержимое, а сравнить только хеш.
SHA-1 — используется для проверки целостности загружаемых данных программой BitTorrent.
Пример. Вы хотите установить Windows или игру. Скачиваете образ и хотите убедиться в целостности файла. Все ли правильно скачалось и ничего ли не потерялось при передаче. Самым простым способом это сделать — сравнить контрольные суммы скачанного файла с теми которые дает автор или раздающий. Если суммы совпадают, то ошибок в образе нет. В противном случае необходимо скачать заново. Эта простая процедура является профилактикой от всяких зависаний, некорректной работы и вообще возможностью корректной установки операционной системы или игры.
Ниже приведем пару простеньких программ отлично справляющихся с вычислением и проверкой контрольных сумм.
2. HashТab — проверка контрольной суммы
Программа HashTab представляет собой плагин или утилиту, которая интегрируется в операционную систему Windows и при необходимости используется.
Для того что бы скачать перейдем по адресу http://hashtab.ru/.
Hashtab для Windows
Нажмем на кнопку показанную на рисунке выше на официальном сайте и сохраним установочный файл.
Произведем установку программы HashTab.
В результате в свойствах любого файла появится дополнительная вкладка Хеш-суммы файлов. По умолчанию вычисляются CRC32, MD5 и SHA-1.
Вкладка хеш-суммы пустого документа
На рисунке выше показана вкладка Хеш-суммы файла только что созданного пустого документа Microsoft Office Word.docx.
Для проверки необходимо вставить в поле Сравнение хеша сумму указанную автором.
Совпадение контрольных сумм MD5
Если видите картинку подобную выше то ваш скачанный файл (образ) прошел проверку на подлинность и целостность. В противном случае увидите рисунок ниже
Несовпадение контрольных сумм файла
В этом случае лучше заново закачать файл.
На вкладке Хеш-суммы файлов можно изменить Настройки нажав на соответствующую надпись. Откроется окно представленное на рисунке ниже.
Настройки утилиты HashTab
В окне можно поставить отображение необходимых контрольных сумм для вычисления и проверки. Для наглядности отображения рекомендуется поставить «птичку» в «чекбоксе» Показывать хеш-суммы строчными символами.
Строчные буквы в отображении значений хеша
С программой HashTab разобрались. Проще только не сравнивать контрольные суммы)
3. MD5_FileChecker — проверка хеша
Следующая программа для проверки контрольных сумм MD5 работает без установки.
Скачиваем программу и запускаем.
Внешний вид программы MD5_FileChecker.exe
Нажимаем на кнопку Обзор… и выбираем проверяемый файл.
Нажимаем кнопку Рассчитать. Ждем некоторое время в зависимости от мощности вашего компьютера и от размера проверяемого файла. В поле MD5 сумма проверяемого файла появляется вычисленное значение.
MD5 сумма проверяемого файла
В поле Введите контрольную MD5 сумму вводим сумму и нажимаем кнопку Проверить. Если видите сообщение как на рисунке ниже, значит файл целый.
Сообщение программы MD5 File Checker
Иначе вас ждет сообщение представленное на рисунке ниже
Сообщение программы MD5 File Checker
Только если контрольные суммы сошлись, можно уверенно записывать скачанный образ на диск.
Вывод
В этой статье мы разобрались, что такое контрольная сумма, для чего ее используют. В нашем случае это простой вариант проверки файлов на целостность и идентичность оригиналу.
Познакомились с программами HashTab и MD5 File Checker.
Программа HashTab может сравнивать различные контрольные суммы в отличии от MD5 File Checker. Зато последняя не требует установки, что особенно актуально если нет административных прав.
Если у вас появились какие либо вопросы обязательно напишите комментарий.
Видео — Контрольная сумма
Благодарю за то, что поделились статьей в социальных сетях. Всего Вам Доброго!
Источник: www.youpk.ru
comservice-chelny.ru
MD5 — Википедия
MD5 | |
---|---|
Создан | 1991 г. |
Опубликован | апрель 1992 г. |
Предшественник | MD4 |
Преемник | SHA-2 |
Стандарты | RFC 1321 |
Размер хеша | 128 бит |
Число раундов | 4 |
Тип | хеш-функция |
MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году. Предназначен для создания «отпечатков» или дайджестов сообщения произвольной длины и последующей проверки их подлинности. Широко применялся для проверки целостности информации и хранения хешей паролей.
MD5 — один из серии алгоритмов по построению дайджеста сообщения, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института. Был разработан в 1991 году как более надёжный вариант предыдущего алгоритма MD4[1]. Описан в RFC 1321[2]. Позже Гансом Доббертином были найдены недостатки алгоритма MD4.
В 1993 году Берт ден Бур (Bert den Boer) и Антон Босселарс (Antoon Bosselaers) показали, что в алгоритме возможны псевдоколлизии, когда разным инициализирующим векторам соответствуют одинаковые дайджесты для входного сообщения[3].
В 1996 году Ганс Доббертин (Hans Dobbertin) объявил о коллизии в алгоритме[4], и уже в то время было предложено использовать другие алгоритмы хеширования, такие как Whirlpool, SHA-1 или RIPEMD-160.
Из-за небольшого размера хеша в 128 бит можно рассматривать birthday-атаки. В марте 2004 года был запущен проект MD5CRK с целью обнаружения уязвимостей алгоритма, используя birthday-атаки. Проект MD5CRK закончился 17 августа 2004 года, когда Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) обнаружили уязвимости в алгоритме[5].
1 марта 2005 года Арьен Ленстра, Ван Сяоюнь и Бенне де Вегер продемонстрировали построение двух документов X.509 с различными открытыми ключами и одинаковым хешем MD5[6].
18 марта 2006 года исследователь Властимил Клима (Vlastimil Klima) опубликовал алгоритм, который может найти коллизии за одну минуту на обычном компьютере, метод получил название «туннелирование»[7].
В конце 2008 года US-CERT призвал разработчиков программного обеспечения, владельцев веб-сайтов и пользователей прекратить использовать MD5 в любых целях, так как исследования продемонстрировали ненадёжность этого алгоритма[8].
24 декабря 2010 года Тао Се (Tao Xie) и Фэн Дэнго (Feng Dengguo) впервые представили коллизию сообщений длиной в один блок (512 бит)[9]. Ранее коллизии были найдены для сообщений длиной в два блока и более. Позднее Марк Стивенс (Marc Stevens) повторил успех, опубликовав блоки с одинаковым хешем MD5, а также алгоритм для получения таких коллизий[10].
В 2011 году был опубликован информационный документ RFC 6151. Он признаёт алгоритм хеширования MD5[2] небезопасным для некоторых целей и рекомендует отказаться от его использования.
Схема работы алгоритма MD5На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения измеряется в битах и может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.
Ниже приведены 5 шагов алгоритма[2]:
Шаг 1. Выравнивание потока[править | править код]
Сначала к концу потока дописывают единичный бит.
Затем добавляют некоторое число нулевых бит такое, чтобы новая длина потока L′{\displaystyle L’} стала сравнима с 448 по модулю 512, (L′=512×N+448{\displaystyle L’=512\times N+448}). Выравнивание происходит в любом случае, даже если длина исходного потока уже сравнима с 448.
Шаг 2. Добавление длины сообщения[править | править код]
В конец сообщения дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта, затем старшие. Если длина превосходит 264−1{\displaystyle 2^{64}-1}, то дописывают только младшие биты (эквивалентно взятию по модулю 264{\displaystyle 2^{64}}). После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.
Шаг 3. Инициализация буфера[править | править код]
Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами (порядок байтов little-endian, сначала младший байт):
А = 01 23 45 67; // 67452301h В = 89 AB CD EF; // EFCDAB89h С = FE DC BA 98; // 98BADCFEh D = 76 54 32 10. // 10325476h
В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.
Шаг 4. Вычисление в цикле[править | править код]
Определим функции и константы, которые понадобятся нам для вычислений.
- Для каждого раунда потребуется своя функция. Введём функции от трёх параметров — слов, результатом также будет слово:
- 1-й раунд: FunF(X,Y,Z)=(X∧Y)∨(¬X∧Z){\displaystyle \operatorname {FunF} (X,Y,Z)=(X\wedge Y)\vee (\neg X\wedge Z)},
- 2-й раунд: FunG(X,Y,Z)=(X∧Z)∨(¬Z∧Y){\displaystyle \operatorname {FunG} (X,Y,Z)=(X\wedge Z)\vee (\neg Z\wedge Y)},
- 3-й раунд: FunH(X,Y,Z)=X⊕Y⊕Z{\displaystyle \operatorname {FunH} (X,Y,Z)=X\oplus Y\oplus Z},
- 4-й раунд: FunI(X,Y,Z)=Y⊕(¬Z∨X){\displaystyle \operatorname {FunI} (X,Y,Z)=Y\oplus (\neg {Z}\vee X)},
- где ⊕,∧,∨,¬{\displaystyle \oplus ,\wedge ,\vee ,\neg } побитовые логические операции XOR, AND, OR и NOT соответственно.
- Определим таблицу констант T[1…64]{\displaystyle T[1\ldots 64]} — 64-элементная таблица данных, построенная следующим образом: T[n]=int(232⋅|sinn|){\displaystyle T[n]=\operatorname {int} (2^{32}\cdot |\sin n|)}.[11]
- Каждый 512-битный блок проходит 4 этапа вычислений по 16 раундов. Для этого блок представляется в виде массива X из 16 слов по 32 бита. Все раунды однотипны и имеют вид: [abcd k s i], определяемый как a=b+((a+Fun(b,c,d)+X[k]+T[i])⋘s){\displaystyle a=b+((a+\operatorname {Fun} (b,c,d)+X[k]+T[i])\lll s)}, где k — номер 32-битного слова из текущего 512-битного блока сообщения, и …⋘s{\displaystyle \ldots \lll s} — циклический сдвиг влево на s бит полученного 32-битного аргумента. Число s задается отдельно для каждого раунда.
Заносим в блок данных элемент n из массива 512-битных блоков. Сохраняются значения 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
После окончания цикла необходимо проверить, есть ли ещё блоки для вычислений. Если да, то переходим к следующему элементу массива (n + 1) и повторяем цикл.
Шаг 5. Результат вычислений[править | править код]
Результат вычислений находится в буфере ABCD, это и есть хеш. Если выводить побайтово, начиная с младшего байта A и закончив старшим байтом D, то мы получим MD5-хеш. 1, 0, 15, 34, 17, 18…
Сравнение MD5 и MD4[править | править код]
Алгоритм MD5 происходит от MD4. В новый алгоритм добавили ещё один раунд, теперь их стало 4 вместо 3 в MD4. Добавили новую константу для того, чтобы свести к минимуму влияние входного сообщения, в каждом раунде на каждом шаге и каждый раз константа разная, она суммируется с результатом F и блоком данных. Изменилась функция G=XZ∨(Y¬Z){\displaystyle G=XZ\vee (Y\neg Z)} вместо XY∨XZ∨YZ{\displaystyle XY\vee XZ\vee YZ}. Результат каждого шага складывается с результатом предыдущего шага, из-за этого происходит более быстрое изменение результата. Для этой же цели оптимизирована величина сдвига на каждом круге. Изменился порядок работы с входными словами в раундах 2 и 3[2].
Хеш содержит 128 бит (16 байт) и обычно представляется как последовательность из 32 шестнадцатеричных цифр[12].
Несколько примеров хеша:
MD5("md5") = 1BC29B36F623BA82AAF6724FD3B16718
Даже небольшое изменение входного сообщения (в нашем случае на один бит: ASCII символ «5» с кодом 3516 = 0001101012 заменяется на символ «4» с кодом 3416 = 0001101002) приводит к полному изменению хеша. Такое свойство алгоритма называется лавинным эффектом.
MD5("md4") = C93D3BF7A7C4AFE94B64E30C2CE39F4F
Пример MD5-хеша для «нулевой» строки:
MD5("") = D41D8CD98F00B204E9800998ECF8427E
На данный момент существуют несколько видов «взлома» хешей MD5 — подбора сообщения с заданным хешем[13][14]:
При этом методы перебора по словарю и brute-force могут использоваться для взлома хеша других хеш-функций (с небольшими изменениями алгоритма). В отличие от них, RainbowCrack требует предварительной подготовки радужных таблиц, которые создаются для заранее определённой хеш-функции. Поиск коллизий специфичен для каждого алгоритма.
Атаки переборного типа[править | править код]
Для полного перебора или перебора по словарю можно использовать программы PasswordsPro[15], MD5BFCPF[16], John the Ripper. Для перебора по словарю существуют готовые словари[17]. Основным недостатком такого типа атак является высокая вычислительная сложность.
RainbowCrack — ещё один метод нахождения прообраза хеша из заданного множества. Он основан на генерации цепочек хешей, чтобы по получившейся базе вести поиск заданного хеша. Хотя создание радужных таблиц занимает много времени и памяти, последующий взлом производится очень быстро. Основная идея данного метода — достижение компромисса между временем поиска по таблице и занимаемой памятью.
Коллизии MD5[править | править код]
Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений и идентичного начального буфера. В отличие от коллизий, псевдоколлизии определяются как равные значения хеша для разных значений начального буфера, причём сами сообщения могут совпадать или отличаться. В MD5 вопрос коллизий не решается[14].
В 1996 году Ганс Доббертин нашёл псевдоколлизии в MD5, используя определённые инициализирующие векторы, отличные от стандартных. Оказалось, что можно для известного сообщения построить второе, такое, что оно будет иметь такой же хеш, как и исходное. C точки зрения математики это означает: MD5(IV,L1) = MD5(IV,L2), где IV — начальное значение буфера, а L1 и L2 — различные сообщения. Например, если взять начальное значение буфера[4]:
A = 0x12AC2375 В = 0x3B341042 C = 0x5F62B97C D = 0x4BA763E
и задать входное сообщение
AA1DDABE | D97ABFF5 | BBF0E1C1 | 32774244 |
1006363E | 7218209D | E01C136D | 9DA64D0E |
98A1FB19 | 1FAE44B0 | 236BB992 | 6B7A779B |
1326ED65 | D93E0972 | D458C868 | 6B72746A |
то, добавляя число 29{\displaystyle 2^{9}} к определённому 32-разрядному слову в блочном буфере, можно получить второе сообщение с таким же хешем. Ханс Доббертин представил такую формулу:
- L2i={L1i,i≠14;L1i+29,i=14.{\displaystyle L2_{i}={\begin{cases}L1_{i},&i\neq 14;\\L1_{i}+2^{9},&i=14.\end{cases}}}
Тогда MD5(IV, L1) = MD5(IV, L2) = BF90E670752AF92B9CE4E3E1B12CF8DE.
В 2004 году китайские исследователи Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) объявили об обнаруженной ими уязвимости в алгоритме, позволяющей за небольшое время (1 час на кластере IBM p690) находить коллизии[5][18].
В 2005 году Ван Сяоюнь и Юй Хунбо из университета Шаньдуна в Китае опубликовали алгоритм, который может найти две различные последовательности в 128 байт, которые дают одинаковый MD5-хеш. Одна из таких пар (отличающиеся разряды выделены):
d131dd02c5e6eec4693d9a0698aff95c | 2fcab58712467eab4004583eb8fb7f89 |
55ad340609f4b30283e488832571415a | 085125e8f7cdc99fd91dbdf280373c5b |
d8823e3156348f5bae6dacd436c919c6 | dd53e2b487da03fd02396306d248cda0 |
e99f33420f577ee8ce54b67080a80d1e | c69821bcb6a8839396f9652b6ff72a70 |
и
d131dd02c5e6eec4693d9a0698aff95c | 2fcab50712467eab4004583eb8fb7f89 |
55ad340609f4b30283e4888325f1415a | 085125e8f7cdc99fd91dbd7280373c5b |
d8823e3156348f5bae6dacd436c919c6 | dd53e23487da03fd02396306d248cda0 |
e99f33420f577ee8ce54b67080280d1e | c69821bcb6a8839396f965ab6ff72a70 |
Каждый из этих блоков даёт MD5-хеш, равный 79054025255fb1a26e4bc422aef54eb4[19].
В 2006 году чешский исследователь Властимил Клима опубликовал алгоритм, позволяющий находить коллизии на обычном компьютере с любым начальным вектором (A,B,C,D) при помощи метода, названного им «туннелирование»[7][20].
Алгоритм MD5 использует итерационный метод Меркла — Дамгора, поэтому становится возможным построение коллизий с одинаковым, заранее выбранным префиксом. Аналогично, коллизии получаются при добавлении одинакового суффикса к двум различным префиксам, имеющим одинаковый хеш. В 2009 году было показано, что для любых двух заранее выбранных префиксов можно найти специальные суффиксы, с которыми сообщения будут иметь одинаковое значение хеша. Сложность такой атаки составляет всего 239 операций подсчёта хеша[21].
Метод Ван Сяоюня и Юй Хунбо[править | править код]
Метод Ван Сяоюня и Юй Хунбо использует тот факт, что MD5 построен на итерационном методе Меркла — Дамгора. Поданный на вход файл сначала дополняется, так чтобы его длина была кратна 64 байтам, после этого он делится на блоки по 64 байта каждый M0{\displaystyle M_{0}}, M1{\displaystyle M_{1}}, …{\displaystyle \dots {}}, Mn−1{\displaystyle M_{n-1}}. Далее вычисляется последовательность 16-байтных состояний s0{\displaystyle s_{0}}, …{\displaystyle \dots {}}, sn{\displaystyle s_{n}} по правилу si+1=f(si,Mi){\displaystyle s_{i+1}=f\left(s_{i},M_{i}\right)}, где f{\displaystyle f} — некоторая фиксированная функция. Начальное состояние s0{\displaystyle s_{0}} называется
ru.wikipedia.org