MD5 срещу SHA-1 срещу SHA-2 - кой е най-сигурният хеш за криптиране и как да ги проверите

Какво представлява хеш функцията?

Хеш функцията приема входна стойност (например низ) и връща стойност с фиксирана дължина. Един идеален хеш функция има следните свойства:

  • това е много бързо
  • може да върне огромен диапазон от хеш стойности
  • генерира уникален хеш за всеки уникален вход (без сблъсъци)
  • той генерира различни хеш стойности за подобни входни стойности
  • генерираните хеш стойности нямат забележим модел в тяхното разпределение

Не съществува идеална хеш функция, разбира се, но всяка има за цел да работи възможно най-близо до идеала. Като се има предвид, че (повечето) хеш функции връщат стойности с фиксирана дължина и поради това диапазонът от стойности е ограничен, това ограничение на практика може да бъде игнорирано. Броят на възможните стойности, които могат да бъдат върнати от 256-битова хеш функция, например, е приблизително същият като броя на атомите във Вселената.

В идеалния случай хеш функцията практически не връща сблъсъци - тоест няма два различни входа да генерират една и съща хеш стойност. Това е особено важно за криптографските хеш функции: хеш сблъсъците се считат за уязвимост.

И накрая, хеш функцията трябва да генерира непредсказуемо различни хеш стойности за всяка входна стойност. Например вземете следните две много сходни изречения:

1. "The quick brown fox." 2. "The quick brown fax." 

Можем да сравним хеш стойностите на MD5, генерирани от всяко от двете изречения:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

За две подобни изречения бяха генерирани два много различни хеша, което е свойство, полезно както за проверка, така и за криптография. Това е следствие от разпределението: хеш стойностите на всички входове трябва да бъдат разпределени равномерно и непредсказуемо в целия диапазон от възможни хеш стойности.

Общи хеш функции

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

MD5

Хеш функцията MD5 генерира 128-битова хеш стойност. Проектиран е за използване в криптография, но с времето са открити уязвимости, така че вече не се препоръчва за тази цел. Въпреки това, той все още се използва за разделяне на база данни и изчисляване на контролни суми за валидиране на прехвърлянето на файлове.

SHA-1

SHA означава алгоритъм Secure Hash. Първата версия на алгоритъма беше SHA-1, а по-късно беше последвана от SHA-2 (виж по-долу).

Докато MD5 генерира 128-битов хеш, SHA1 генерира 160-битов хеш (20 байта). В шестнадесетичен формат е цяло число с 40 цифри. Подобно на MD5, той е проектиран за криптологични приложения, но скоро е установено, че има и уязвимости. Към днешна дата той вече не се счита за по-малко устойчив на атаки от MD5.

SHA-2

Втората версия на SHA, наречена SHA-2, има много варианти. Вероятно най-често използваният е SHA-256, който Националният институт за стандарти и технологии (NIST) препоръчва да се използва вместо MD5 или SHA-1.

Алгоритъмът SHA-256 връща хеш стойност от 256 бита или 64 шестнадесетични цифри. Въпреки че не е съвсем съвършен, настоящите изследвания показват, че е значително по-сигурен от MD5 или SHA-1.

По отношение на производителността, хеш на SHA-256 е около 20-30% по-бавен за изчисляване, отколкото хешовете MD5 или SHA-1.

SHA-3

Този хеш метод е разработен в края на 2015 г. и все още не е видял широко приложение. Неговият алгоритъм не е свързан с този, използван от неговия предшественик, SHA-2.

Алгоритъмът SHA3-256 е вариант с еквивалентна приложимост на този на по-ранния SHA-256, като първият отнема малко повече време за изчисляване, отколкото по-късния.

Използване на хеш стойности за проверка

Типично използване на хеш функции е за извършване на проверки за валидиране. Едно често използване е проверката на компресирани колекции от файлове, като .zip или .tar архивни файлове.

Като се има предвид архив и очакваната му хеш стойност (обикновено наричана контролна сума), можете да извършите собствено изчисление на хеш, за да потвърдите, че архивът, който сте получили, е пълен и неповреден.

Например мога да генерирам MD5 контролна сума за tar файл в Unix, като използвам следните команди:

tar cf - files | tee tarfile.tar | md5sum - 

За да получите MD5 хеш за файл в Windows, използвайте командата Get-FileHash PowerShell:

Get-FileHash tarfile.tar -Algorithm MD5 

Генерираната контролна сума може да бъде публикувана на сайта за изтегляне, до връзката за изтегляне на архива. След като изтеглят архива, приемникът може да потвърди, че е попаднал правилно, като изпълни следната команда:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

където 2e87284d245c2aae1c74fa4c50a74c77 е генерираната контролна сума, която е била осчетоводена. Успешното изпълнение на горната команда ще генерира състояние на OK като това:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK