Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 2

Проверка контрольной суммы linux

Examples

В следующем примере кода вычисляются MD5 хэш-значение строки и возвращается хэш в виде строки с 32 символами в шестнадцатеричном формате.The following code example computes the MD5 hash value of a string and returns the hash as a 32-character, hexadecimal-formatted string. Хэш-строка, созданная с помощью этого примера кода, совместима с любой хэш-функцией MD5 (на любой платформе), создающей хэш-строку 32-символа в шестнадцатеричном формате.The hash string created by this code example is compatible with any MD5 hash function (on any platform) that creates a 32-character, hexadecimal-formatted hash string.

Top md5sum Askers

All Time

178

John Doe

8,6021111 gold badges3535 silver badges4949 bronze badges

133

victorz

1,93944 gold badges1717 silver badges1414 bronze badges

109

mailGO

1,10911 gold badge77 silver badges44 bronze badges

88

Michael Shnitzer

2,11655 gold badges2222 silver badges3131 bronze badges

75

user2344996

78711 gold badge77 silver badges88 bronze badges

47

Daniel

94011 gold badge99 silver badges1414 bronze badges

36

Daniel Kng

74611 gold badge77 silver badges2020 bronze badges

15

WoooHaaaa

15.8k2525 gold badges7777 silver badges126126 bronze badges

15

Speckinius Flecksis

58455 silver badges88 bronze badges

13

AndyAndroid

3,8511111 gold badges4040 silver badges7070 bronze badges

12

user1270384

66977 gold badges2323 silver badges5353 bronze badges

9

Bob Kuhar

9,25188 gold badges5555 silver badges9696 bronze badges

8

okysabeni

6,8431313 gold badges5959 silver badges8080 bronze badges

8

Awesome

3,85344 gold badges2323 silver badges4545 bronze badges

7

user1950349

3,4541414 gold badges4141 silver badges7676 bronze badges

6

w00d

4,73699 gold badges4646 silver badges7878 bronze badges

6

James Mclaren

52933 gold badges99 silver badges2222 bronze badges

5

Bilal Akil

4,35844 gold badges2323 silver badges4242 bronze badges

5

Ken

3,09266 gold badges3131 silver badges4040 bronze badges

5

Nickolay Kondratyev

4,01933 gold badges1818 silver badges3636 bronze badges

Only non community-wiki questions and answers are included in these totals (updated daily)

Что такое хеширование

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

Алгоритм работы хеш-функции построен таким образом, что для любого массива данных функция выдает уникальную строку. Ввиду этой особенности полученная строка может использоваться как цифровой отпечаток данных. Такой отпечаток можно юзать для проверки целостности данных.

К примеру, когда разработчик программного обеспечения публикует в сети свой программный продукт, вместечке с ним он может опубликовать его хеш. Это позволит юзерам проверить целостность программы перед ее установкой. Ели программа была заражена вирусами или загрузилась с ошибками, ее хеш не будет соответствовать хешу, который был опубликован разработчиком программы.

Примеры использования

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

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

С помощью MD5 проверяли целостность и подлинность скачанных файлов — так, некоторые программы поставляются вместе со значением контрольной суммы. Например, пакеты для инсталляции свободного ПО.

MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию.. Некоторые Linux-системы также используют MD5 для хранения паролей.

Многие системы используют базы данных для аутентификации пользователей и существует несколько способов хранения паролей:

  1. Пароли хранятся как есть. При взломе такой базы все пароли станут известны.
  2. Хранятся только хеши паролей. Найти пароли можно используя заранее подготовленные таблицы хешей. Такие таблицы составляются из хешей простых или популярных паролей.
  3. К каждому паролю добавляется несколько случайных символов (их называют «соль») и результат хешируется. Полученный хеш вместе с «солью» сохраняются в открытом виде. Найти пароль с помощью таблиц таким методом не получится.

Существует несколько надстроек над MD5.

  • MD5 (HMAC) — Keyed-Hashing for Message Authentication (хеширование с ключом для аутентификации сообщения) — алгоритм позволяет хешировать входное сообщение L с некоторым ключом K, такое хеширование позволяет аутентифицировать подпись.
  • MD5 (Base64) — здесь полученный MD5-хеш кодируется алгоритмом Base64.
  • MD5 (Unix) — алгоритм вызывает тысячу раз стандартный MD5, для усложнения процесса. Также известен как MD5crypt.

Что такое контрольная сумма

Контрольная сумма или хеш-сумма – это значение, которое было рассчитано по некоторому алгоритму на основе имеющихся файлов или данных. Особенностью контрольной суммы является то, что ее алгоритм, при одинаковых входных данных всегда выдает одинаковое значение. При этом малейшее изменение входных данных кардинально меняет значение контрольной суммы.

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

Также нужно упомянуть, что контрольную сумму нельзя использовать для получения исходных данных. То есть нельзя «расшифровать» хеш-сумму и получить данные которые были хешированы, хеш-сумму можно только сравнить с другой хеш-суммой. Это особенность открывает дополнительные возможности. Например, хеш-суммы используются для хранения паролей. Когда вы регистрируетесь на каком-то сайте и вводите свой пароль, то он не хранится на сервере в открытом виде. Вместо этого хранится только его контрольная сумма. А когда вы входите в свой аккаунт с использованием пароля, система получается ваш пароль, высчитывает его хеш-сумму и сравнивает с хеш-суммой, которая хранится на сервере. Если хеш-суммы совпали, значит пароль верный и вы можете войти в аккаунт, если хеш-суммы не совпадают, значит пароль не верный и вас перенаправляют на страницу для восстановления пароля.

Для высчитывания контрольной суммы существует множество различных алгоритмов или так называемых хеш-функций. Самыми известными и популярными алгоритмы являются: CRC32, MD5, SHA-1 и SHA-2. Но, есть и множество других алгоритмов, некоторые из которых имеют широкое применения, а некоторые используются только для специфических задач. При этом часть существующих алгоритмов признаны устаревшими или уязвимыми и больше не используются. Так, алгоритм MD5 практически полностью перестал использоваться поскольку выяснилось, что он может выдавать одинаковые значения для разных входных значений.

Для примера продемонстрируем, как выглядит контрольная сумма на практике. Например, возьмем строку «Hello, world!» и высчитаем ее контрольную сумму с использованием нескольких популярных алгоритмов.

Алгоритм Значение
Adler32 205e048a
CRC32 ebe6c6e6
Haval 5711dea10d85b988fcb1eed99ce7310c
MD2 8cca0e965edd0e223b744f9cedf8e141
MD4 0abe9ee1f376caa1bcecad9042f16e73
MD5 6cd3556deb0da54bca060b4c39479839
RipeMD128 3cbb446fc20277b2a4e4b8b8b40aa962
RipeMD160 58262d1fbdbe4530d8865d3518c6d6e41002610f
SHA-1 943a702d06f34599aee1f8da8ef9f7296031d699
SHA-256 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3
SHA-384 55bc556b0d2fe0fce582ba5fe07baafff035653638c7ac0d5494c2a64c0bea1cc57331c7c12a45cdbca7f4c34a089eeb
SHA-512 c1527cd893c124773d811911970c8fe6e857d6df5dc9226bd8a160614c0cd963a4ddea2b94bb7d36021ef9d865d5cea294a82dd49a0bb269f51f6e7a57f79421
Tiger b5e5dd73a5894236937084131bb845189cdc5477579b9f36
Whirlpool 238034e71c9f4d712ef02f8fe109bc1f32425530088c1ea13786e1ffdc953a7d567db4aba11ce0226efdd5ed5d55abd087b58122f891e61df996a37e595131b5

Способы открытия

Рассмотрим программы, которые открывают такой формат.

Способ 1: MD5Summer

Начинает обзор MD5Summer, целью которой является создание и проверка хеша MD5 файлов.

  1. Запускаем софт и выбираем папку, где находится MD5 файл. Затем щелкаем на «Verify sums».

В результате откроется окно эксплорера, в котором обозначаем исходный объект и нажимаем «Открыть».

Выполняется процедура верификации, по завершению которой жмем «Close».

Способ 2: Md5Checker

Md5Checker – очередное решение для взаимодействия с рассматриваемым расширением.

  1. Запускаем программу и жмем кнопку «Add» на ее панели.

В окне каталога выбираем исходный объект и нажимаем «Открыть».

Файл добавляется и далее можно проводить действия по проверке контрольных сумм.

Способ 3: MD5 Checksum Verifier

MD5 Checksum Verifier – утилита для сверки контрольных сумм дистрибутивов.

  1. После запуска софта переходим ко вкладке «Verify check file» и щелкаем по значку с многоточием в поле «Check file».

Открывается Проводник, в котором перемещаемся к необходимой папке, выделяем файл и жмем «Открыть».

Для сверки нажимаем на кнопку «Verify check file». Для выхода из программы надо щелкнуть «Exit».

Способ 4: Smart Projects ISOBuster

Smart Projects ISOBuster предназначен для восстановления данных с поврежденных оптических дисков любого типа и работы с образами. В нем также имеется поддержка MD5.

  1. Сначала загружаем подготовленный образ диска в программу. Для этого выбираем пункт «Открыть файл-образ» в «Файл».

Осуществляем переход в каталог с образом, обозначаем его и жмем «Открыть».

Потом жмем по надписи «CD» в левой части интерфейса правой кнопкой мыши и выбираем пункт «Проверить этот образ с помощью контрольного файла MD5» в появившемся меню «Файл с контрольной суммой MD5».

В открывшемся окне отыскиваем файл контрольной суммы загруженного образа, обозначаем его и жмем «Открыть».

Начинается процесс проверки суммы MD5.

По завершении процедуры выводится сообщение «Контрольная сумма образа совпадает».

Способ 5: Блокнот

Просмотр содержимого MD5 файла можно посмотреть стандартным приложением Windows Блокнотом.

  1. Запускаем текстовый редактор и нажимаем «Открыть» в меню «Файл».

Открывается окно обозревателя, где двигаемся в нужную директорию, а затем выделяем искомый файл, предварительно выбрав в нижней правой части окна пункт «Все файлы» из выпадающего списка, и кликаем «Открыть».

Открывается содержимое указанного файла, где можно увидеть значение контрольной суммы.

Все рассмотренные приложения открывают формат MD5. MD5Summer, Md5Checker, MD5 Checksum Verifier работают только с рассматриваемым расширением, а Smart Projects ISOBuster может также создавать образы оптических дисков. Для того, чтобы посмотреть содержимое файла достаточно открыть его в Блокноте.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

Remarks

Хэш-функции сопоставляют двоичные строки произвольной длины с маленькими двоичными строками фиксированной длины.Hash functions map binary strings of an arbitrary length to small binary strings of a fixed length. Криптографическая хэш-функция имеет свойство, которое вычисляется нецелесообразно для поиска двух различных входных значений, которые являются хэш-значениями для одного и того же значения. то есть хэши двух наборов данных должны совпадать, если соответствующие данные также совпадают.A cryptographic hash function has the property that it is computationally infeasible to find two distinct inputs that hash to the same value; that is, hashes of two sets of data should match if the corresponding data also matches. Небольшие изменения данных приводят к большим непредсказуемым изменениям в хэш-коде.Small changes to the data result in large, unpredictable changes in the hash.

Размер хеша для алгоритма MD5 составляет 128 бит.The hash size for the MD5 algorithm is 128 bits.

Методы ComputeHash класса MD5 возвращают хэш как массив размером 16 байт.The ComputeHash methods of the MD5 class return the hash as an array of 16 bytes

Обратите внимание, что некоторые реализации MD5 создают хэш с 32-символом в шестнадцатеричном формате.Note that some MD5 implementations produce a 32-character, hexadecimal-formatted hash. Для взаимодействия с такими реализациями отформатируйте возвращаемое значение ComputeHash методов в виде шестнадцатеричного значения.To interoperate with such implementations, format the return value of the ComputeHash methods as a hexadecimal value

Note

Из-за проблем с MD5/SHA1 Корпорация Майкрософт рекомендует использовать SHA256 или SHA512.Due to collision problems with MD5/SHA1, Microsoft recommends SHA256 or SHA512. Вместо класса MD5 рекомендуется использовать класс SHA256 или SHA512.Consider using the SHA256 class or the SHA512 class instead of the MD5 class. Используйте MD5 только для обеспечения совместимости с устаревшими приложениями и данными.Use MD5 only for compatibility with legacy applications and data.

Основы безопасности при использовании MD5

Данный стандарт кодирования значится одним из самых распространенных методов защиты данных не лишь в прикладном, но и в веб-программировании. Так что не будет лишним обезопасить свой md5 hash от намеренного взлома.

Основным способом, гарантирующим безопасность хеша вашего пароля, значится использование «соли». Он основан на добавлении к паролю нескольких случайных символов и последующем хешировании результата.

Во многих языках программирования для этого используются специальные классы и функции. Не являются исключением из правил и серверные языки программирования.

Создать хеш-код MD5 в php можно при помощи нескольких функций:

  • md5() – в качестве 1-го из параметров принимает значение «соли»;
  • crypt() – в отличие от предыдущей эта функция полностью автоматизирует весь процесс, в том числе и генерирование значения соли.

Ее синтаксис:

Пример использования:

При использовании функции md5() в PHP для задания значения соли используют методы генерации случайных чисел. К примеру, rand():

Помимо применения «соли» было разработано еще несколько методов защиты хеша MD5:

  • MD5 (Unix) – заданное первоначальное значение проходит цикл хеширования около 1000 раз;
  • MD5 (HMAC) – данный метод основан на использовании в хешировании специального ключа;
  • MD5 (Base64) – полученный хеш еще раз кодируются при помощи алгоритма Base64.

В материале приведены лишь начальные сведения об обеспечении безопасности хеша, полученного при помощи этого алгоритма. Самым простым и эффективным из них значится использование уникального значения «соли», которая даёт возможность существенно «насолить» злоумышленнику и «подсластить» жизнь владельцу взламываемого пароля.

Methods

Освобождает все ресурсы, используемые классом HashAlgorithm.Releases all resources used by the HashAlgorithm class.

(Inherited from HashAlgorithm)

Вычисляет хэш-значение для заданного массива байтов.Computes the hash value for the specified byte array.

(Inherited from HashAlgorithm)

Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array.

(Inherited from HashAlgorithm)

Вычисляет хэш-значение для заданного объекта Stream.Computes the hash value for the specified Stream object.

(Inherited from HashAlgorithm)

(Inherited from HashAlgorithm)

Создает экземпляр реализации по умолчанию хэш-алгоритма MD5.Creates an instance of the default implementation of the MD5 hash algorithm.

Создает экземпляр заданной реализации хэш-алгоритма MD5.Creates an instance of the specified implementation of the MD5 hash algorithm.

Освобождает все ресурсы, используемые текущим экземпляром класса HashAlgorithm.Releases all resources used by the current instance of the HashAlgorithm class.

(Inherited from HashAlgorithm)

Освобождает неуправляемые ресурсы, используемые HashAlgorithm, и дополнительно освобождает управляемые ресурсы.Releases the unmanaged resources used by the HashAlgorithm and optionally releases the managed resources.

(Inherited from HashAlgorithm)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)

Если переопределено в производном классе, передает данные, записанные в объект, на вход хэш-алгоритма для вычисления хэша.When overridden in a derived class, routes data written to the object into the hash algorithm for computing the hash.

(Inherited from HashAlgorithm)

Передает записываемые в объект данные в хэш-алгоритм для вычисления хэша.Routes data written to the object into the hash algorithm for computing the hash.

(Inherited from HashAlgorithm)

Если переопределено в производном классе, завершает вычисление хэша после обработки последних данных криптографическим хэш-алгоритмом.When overridden in a derived class, finalizes the hash computation after the last data is processed by the cryptographic hash algorithm.

(Inherited from HashAlgorithm)

Сбрасывает хэш-алгоритм в исходное состояние.Resets the hash algorithm to its initial state.

(Inherited from HashAlgorithm)

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Вычисляет хэш-значение для заданной области входного массива байтов и копирует указанную область входного массива байтов в заданную область выходного массива байтов.Computes the hash value for the specified region of the input byte array and copies the specified region of the input byte array to the specified region of the output byte array.

(Inherited from HashAlgorithm)

Вычисляет хэш-значение для заданной области заданного массива байтов.Computes the hash value for the specified region of the specified byte array.

(Inherited from HashAlgorithm)

Пытается вычислить хэш-значение для заданного массива байтов.Attempts to compute the hash value for the specified byte array.

(Inherited from HashAlgorithm)

Пытается завершить вычисление хэша после обработки последних данных хэш-алгоритмом.Attempts to finalize the hash computation after the last data is processed by the hash algorithm.

(Inherited from HashAlgorithm)

Top md5sum Answerers

Last 30 Days

4

choroba

185k1919 gold badges166166 silver badges235235 bronze badges

3

VGR

31k44 gold badges3434 silver badges4747 bronze badges

1

Wiimm

2,09511 gold badge99 silver badges2020 bronze badges

1

dash-o

10.4k11 gold badge22 silver badges2626 bronze badges

1

anmol sharma

14244 bronze badges

1

dariober

3,84711 gold badge1717 silver badges3030 bronze badges

All Time

205

jameshfisher

23.9k2020 gold badges8484 silver badges136136 bronze badges

198

ThiefMaster

272k7272 gold badges529529 silver badges594594 bronze badges

192

Peter.O

5,38633 gold badges2525 silver badges3636 bronze badges

188

PSS

3,86033 gold badges2424 silver badges2727 bronze badges

166

ire_and_curses

62.3k2222 gold badges109109 silver badges135135 bronze badges

164

jyz

4,80333 gold badges2525 silver badges3535 bronze badges

152

unutbu

655k134134 gold badges14641464 silver badges14551455 bronze badges

90

Graeme

1,19588 silver badges44 bronze badges

59

Albireo

10k1212 gold badges5555 silver badges9393 bronze badges

57

Brian Campbell

272k5454 gold badges341341 silver badges322322 bronze badges

46

Dieter_be

72766 silver badges1212 bronze badges

46

tsds

6,86677 gold badges5555 silver badges7979 bronze badges

37

SgtWilko

48655 silver badges66 bronze badges

31

Marc B

332k3333 gold badges366366 silver badges452452 bronze badges

23

trevor

24711 silver badge22 bronze badges

18

tripleee

121k1818 gold badges181181 silver badges236236 bronze badges

17

Gordon Davisson

87.1k1414 gold badges9393 silver badges114114 bronze badges

17

JB Nizet

608k7676 gold badges10551055 silver badges11301130 bronze badges

16

sehe

308k3939 gold badges392392 silver badges524524 bronze badges

15

tesujimath

29133 silver badges33 bronze badges

Команда md5sum в Linux

Синтаксис

 md5sum   ...

Он напечатает или проверит контрольную сумму MD5 (128-бит).

Он вычисляет контрольную сумму MD5 для файла «test.cpp».

Вывод:

c6779ec2960296ed9a04f08d67f64422 /home/mandeep/test/test.cpp

Опции

  • -b: читать данные файлов в двоичном режиме. Перед именем файла выводится символ *;
  • -c: сверять вычисленные значения MD5 со значениями из файла;
  • -tag: создавать контрольную сумму в стиле BSD;
  • -t: читать данные файлов в текстовом режиме (по умолчанию). Перед именем файла выводится пробел;
  • -help: вывести только справку по опциям;
  • -version: вывести только информацию о версии.

Параметры, которые полезны при проверке контрольной суммы

  • -status —  выводить только код проверки ();
  • -w, -warn —  предупреждать о строках (checksum lines) с неправильным форматом;
  • –ignore-missing — не сообщать о статусе отсутствующих файлов;
  • –quiet — не печатать OK для каждого успешно проверенного файла;
  • –strict — выйти ненулевым для неправильно отформатированных файлов контрольных сумм.

Примеры

Быстрое вычисление хеша из командной строки (обратите внимание на ключ -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

Заметьте, что для каждого файла выводится результат проверки: OK или FAILED. Список проверяемых файлов читается из указанного файла.

Если нужно просто проверить, все ли файлы имеют правильные контрольные суммы, можно подавить «вывод результата для каждого файла» с помощью ключа --status. Тогда вообще ничего не выводится, а возвращается невидимый «код возврата». Это полезно, когда программа вызывается другой программой.

Чтобы вычислить хеши всех файлов в текущем каталоге и его подкаталогах (рекурсивно), при этом выводить размер файлов и относительный путь файла используете:

 md5deep -r -z -l *

получается информация (которую можно перенаправить для сохранения в файле «md5deep * > output.txt«) вида:

        57  0cfbc88da15e6d31d3ad438d50f14eed  docs/DVD05/disc05.iso
  14325604  7cd30a721a2e672c3d08c932760be0e3  Edocs/2005/2005-08.tar.gz
   7944551  b13aa16388acaf55c5bcf71e8b5c158c  Edocs/2004/2004-12.tar.gz

История

В 1993 году Берт ден Бур (Bert den Boer) и Антон Босселарс (Antoon Bosselaers) показали, что в алгоритме возможны псевдоколлизии, когда разным инициализирующим векторам соответствуют одинаковые дайджесты для входного сообщения.

В 1996 году Ганс Доббертин (Hans Dobbertin) объявил о коллизии в алгоритме, и уже в то время было предложено использовать другие алгоритмы хеширования, такие как Whirlpool, SHA-1 или RIPEMD-160.

Из-за небольшого размера хеша в 128 бит можно рассматривать birthday-атаки. В марте 2004 года был запущен проект MD5CRK с целью обнаружения уязвимостей алгоритма, используя birthday-атаки. Проект MD5CRK закончился 17 августа 2004 года, когда Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) обнаружили уязвимости в алгоритме.

1 марта 2005 года Арьен Ленстра, Ван Сяоюнь и Бенне де Вегер продемонстрировали построение двух документов X.509 с различными открытыми ключами и одинаковым хешем MD5.

18 марта 2006 года исследователь Властимил Клима (Vlastimil Klima) опубликовал алгоритм, который может найти коллизии за одну минуту на обычном компьютере, метод получил название «туннелирование».

В конце 2008 года US-CERT призвал разработчиков программного обеспечения, владельцев веб-сайтов и пользователей прекратить использовать MD5 в любых целях, так как исследования продемонстрировали ненадёжность этого алгоритма.

24 декабря 2010 года Тао Се (Tao Xie) и Фэн Дэнго (Feng Dengguo) впервые представили коллизию сообщений длиной в один блок (512 бит).
Ранее коллизии были найдены для сообщений длиной в два блока и более. Позднее Марк Стивенс (Marc Stevens) повторил успех, опубликовав блоки с одинаковым хешем MD5, а также алгоритм для получения таких коллизий.

Криптоанализ Править

На данный момент существуют несколько видов «взлома» хешей MD5 — подбора сообщения с заданным хешем:

  • Перебор по словарю
  • RainbowCrack

RainbowCrack — новый вариант взлома хеша. Он основан на генерировании большого количества хешей из набора символов, и потом по этой базе можно вести поиск заданного хеша. Хотя генерация хешей занимает недели, зато последующий взлом производится за считанные минуты. Rainbow-таблицы можно найти, а можно сгенерировать самому.

Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений и идентичного начального буфера. Природа таких коллизий кроется в размере хеша. При своей длине в 128 бит, он имеет $ 2^{128} $ различных дайджестов и для сообщений большей длины чем 128, коллизии просто неизбежны. Существуют еще так называемые псевдоколлизии, когда для разного значения начального буфера получаются одинаковые значения хеша, при этом сообщения могут совпадать или отличаться. Вскоре после создания алгоритма такие коллизии были обнаружены.

A = 0x12AC2375
В = 0x3B341042
C = 0x5F62B97C
D = 0x4BA763ED

и задать входное сообщение

AA1DDABE D97ABFF5 BBF0E1C1 32774244
1006363E 7218209D E01C136D 9DA64D0E
98A1FB19 1FAE44B0 236BB992 6B7A779B
1326ED65 D93E0972 D458C868 6B72746A

то, добавляя число $ 2^9 $ к определенному 32-разрядному слову в блочном буфере, можно получить второе сообщение с таким же хешем. Ханс Доббертин представил такую формулу:
$ L2_i=\left\{\begin{matrix} L1_i, i < 16, i!=14; \\L1_i + 2^9, i = 14. \end{matrix}\right. $

Тогда MD5(IV, L1) = MD5(IV, L2) = BF90E670752AF92B9CE4E3E1B12CF8DE.

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

и

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

Каждый их этих блоков дает MD5 хеш равный 79054025255fb1a26e4bc422aef54eb4.

Метод Сяоюнь Вана и Хунбо Ю Править

позволяет для заданного инициализирующего вектора найти две пары $ M,M’ $ и $ N,N’ $, такие что $ f(f(s,M),M’)=f(f(s,N),N’) $

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

Она также применима к другим хеш-функциям, таким как RIPEMD и HAVAL.

Применение этой атаки к MD4 позволяет найти коллизию меньше чем за секунду. Она также применима к другим хеш-функциям, таким как RIPEMD и HAVAL.

Что такое контрольная сумма

Контрольная сумма или хеш-сумма – это значение, которое было рассчитано по некоторому алгоритму на основе имеющихся файлов или данных. Особенностью контрольной суммы является то, что ее алгоритм, при одинаковых входных данных всегда выдает одинаковое значение. При этом малейшее изменение входных данных кардинально меняет значение контрольной суммы.

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

Также необходимо упомянуть, что контрольную сумму нельзя использовать для получения исходных данных. То есть нельзя «расшифровать» хеш-сумму и получить данные которые были хешированы, хеш-сумму можно только сравнить с другой хеш-суммой. Это особенность открывает дополнительные возможности. Например, хеш-суммы используются для хранения паролей. Когда вы регистрируетесь на каком-то сайте и вводите свой пароль, то он не хранится на сервере в открытом виде. Вместо этого хранится только его контрольная сумма. А когда вы входите в свой аккаунт с использованием пароля, система получается ваш пароль, высчитывает его хеш-сумму и сравнивает с хеш-суммой, которая хранится на сервере. Если хеш-суммы совпали, значит пароль верный и вы можете войти в аккаунт, если хеш-суммы не совпадают, значит пароль не верный и вас перенаправляют на страницу для восстановления пароля.

Для высчитывания контрольной суммы существует множество различных алгоритмов или так называемых хеш-функций. Самыми известными и популярными алгоритмы являются: CRC32, MD5, SHA-1 и SHA-2. Но, есть и множество других алгоритмов, некоторые из которых имеют широкое применения, а некоторые используются только для специфических задач. При этом часть существующих алгоритмов признаны устаревшими или уязвимыми и больше не используются. Так, алгоритм MD5 практически полностью перестал использоваться поскольку выяснилось, что он может выдавать одинаковые значения для разных входных значений.

Для примера продемонстрируем, как выглядит контрольная сумма на практике. Например, возьмем строку «Hello, world!» и высчитаем ее контрольную сумму с использованием нескольких популярных алгоритмов.

Алгоритм Значение
Adler32 205e048a
CRC32 ebe6c6e6
Haval 5711dea10d85b988fcb1eed99ce7310c
MD2 8cca0e965edd0e223b744f9cedf8e141
MD4 0abe9ee1f376caa1bcecad9042f16e73
MD5 6cd3556deb0da54bca060b4c39479839
RipeMD128 3cbb446fc20277b2a4e4b8b8b40aa962
RipeMD160 58262d1fbdbe4530d8865d3518c6d6e41002610f
SHA-1 943a702d06f34599aee1f8da8ef9f7296031d699
SHA-256 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3
SHA-384 55bc556b0d2fe0fce582ba5fe07baafff035653638c7ac0d5494c2a64c0bea1cc57331c7c12a45cdbca7f4c34a089eeb
SHA-512 c1527cd893c124773d811911970c8fe6e857d6df5dc9226bd8a160614c0cd963a4ddea2b94bb7d36021ef9d865d5cea294a82dd49a0bb269f51f6e7a57f79421
Tiger b5e5dd73a5894236937084131bb845189cdc5477579b9f36
Whirlpool 238034e71c9f4d712ef02f8fe109bc1f32425530088c1ea13786e1ffdc953a7d567db4aba11ce0226efdd5ed5d55abd087b58122f891e61df996a37e595131b5

Как видно, каждый алгоритм выдает значение, которое не имеет совершенно ничего общего с исходными данными. И сколько раз мы бы не высчитывали контрольную сумму строки «Hello, world!», мы каждый раз будем получать одни и те же значения.

Ключи запуска программы

md5sum [ключи] [файл] ...

Если файл не указан, или в качестве его имени указан символ -, то данные читаются из standard input.

Ключи:

  • -t, --text — читать данные файлов в текстовом режиме (по умолчанию). Перед именем файла выводится пробел.
  • -b, --binary — читать данные файлов в двоичном режиме. Перед именем файла выводится символ *.
  • -c, --check — сверять вычисленные значения MD5 со значениями из файла
  • --status — (только при проверке хешей) — выводить только код проверки ()
  • -w, --warn — (только при проверке хешей) — предупреждать о строках (checksum lines) с неправильным форматом
  • --help — вывести только справку по ключам
  • --version — вывести только информацию о версии
Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации