Пропускане към основното съдържание

MD5 и SHA-1 хеш алгоритми

MD5 (от „message-digest“) криптографският алгоритъм е създаден през 1991 г. от проф. Роналд Райвест и за първи път е публикуван през април 1992 г. Целта му е да замени компрометирания MD4 алгоритъм, който не е достатъчно сигурен. В последствие се оказва, че и MD5 не отговаря на съвременните изисквания за сигурност и може да бъде разбит.
MD5 е построен върху конструкцията на Merkle–Damgård и генерира шестнайстично число със фиксиран размер от 32 символа (128 бита) за входящо съобщение с произволна дължина. Идеята е да се създаде уникален идентификатор за съобщението, който да гарантира неговата истинност.


Например:
MD5("The quick brown fox jumps over the lazy dog") =
9e107d9d372bb6826bd81d3542a419d6
Дори малка промяна, напр. добавя не точка в края на входящото съобщение би трябвало да генерира нов уникален идентификатор:


MD5("The quick brown fox jumps over the lazy dog.") =
e4d909c290d0fb1ca068ffaddf22cbd0

Дължината на входящото съобщение не е регламентирана. Може да се създаден хаш сума и за нулево съобщение:


MD5("") =
d41d8cd98f00b204e9800998ecf8427e


Входящото съобщение се разбива на 512-битови блокове. Последният блок се допълва с необходимия брой нули. Единичната операция е показана на илюстрацията по-долу. Извършват се 64 такива операции, групирани по 16 в 4 цикъла.
MD5 работи с четири 32-битови думи, обозначени с A, B, C и D, и инициализирани с константи. F е нелинейна функция, еднаква за всеки цикъл. Тя работи с думите B, C и D, като прилага върху тях логически операции XOR, AND, OR и NOT. Възможни са общо четири различни функции. Mi е 32-битов блок от входящото съобщение, а Ki е 32-битова константа, уникална за всяка операция. s представлява побитова ротация наляво със s позиции, а  е събиране по модул 232:

 


Още през 1996 г. е открита възможностите за колизии, т. е. две различни съобщения да имат една и съща хеш сума. Десетина години по-късно, с напредъка на изчислителната техника, генерирането на фалшиви хешове или разбиване им вече е реалност. През 2013 г. Xie Tao, Fanbao Liu, and Dengguo Feng демонстрират колизионна атака, проведена на обикновен компютър, като генерирането на фалшиф хеш е протекло за секунди.
В момента MD5 все още се използва широко за проверка на интегритета на данните, напр. проверка за частично сваляне, но не и за отговорни приложения като SSL сертификати.


SHA-1 („secure hash algorithm“)е криптографска хеш функция, разработена от щатската Национална агенция за сигурност (NSA). Първата версия SHA-0 е публикувана през 1993, а приетата за Национален стандарт SHA-1 - през 1995 г. През 2005 г. е установено, че SHA-1 не е достатъчно надежден алгоритъм и се преминава към коренно различаващия се SHA-2. През 2012 година въз основата на нов алгоритъм („Keccak“) се стандартизира SHA-3. Микрософт спира поддръжката на SHA-1 в продуктите си от 2017 г.
SHA-1 генерира 160-битово шестнайстично число с фиксирана дължина от 40 символа (32 при MD5). SHA-1 се отличава от SHA-0 по една побитова ротация в компресионната функция, което според NSA увеличава сигурността на алгоритъма. SHA-2, в зависимост от версията си, генерира 256 или 512 битов изход. Засега не са известни успешни атаки срещу SHA-2.
Както и при MD5, SHA-1 работи с 32-битови думи, но тук те са 5: A, B, C, D и F. При SHA-0, SHA-1 и SHA-2/512 се правят 80 цикъла, а при SHA-2/256 - 64. При SHA-0 и SHA-1 се използват операциите add, and, or, xor, rotate и mod, а при SHA-2 - add, and, or, xor, rotate, mod и shift.
Една итерация със SHA-1 изглежда така:



A, B, C, D и E са 32-битови думи, F е нелинейна функция, която варира, n означава побитова ротация наляво на n позиции, като n  се променя при всяка операция, Wt е дума от съобщението при цикъл t, а Kt е константа на цикъла, валидна за цикъл t, а  е събиране по модул 232.
Изходът от функцията изглежда така:


SHA1("The quick brown fox jumps over the lazy dog") =
2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12


Смяната на един символ, напр. „dog“ на „cog“ генерира нов хеш:


SHA1("The quick brown fox jumps over the lazy cog") =
de9f2c7f d25e1b3a fad3e85a 0bd17d9b 100db4b3


Входящото съобщение може да бъде и с нулева дължина:


SHA1("") =
da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709


SHA-1 е стандартен алгоритъм, който се използва при протоколи и приложения като TLS and SSL, PGP, SSH, S/MIME, and IPsec. Също така се използва в системи за следене на версиите като Git, Mercurial и Monotone за идентификация на версията и проверка на интегритета на данните.
Щатските държавни служби са задължени от закона да използват SHA-1 и SHA-2 алгоритмите, като след 2010 г. постепенно се преминава към използване само на SHA-2. SHA-1 се използва само за  валидиране на важна некласифицирана информация, въпреки че след 2005 г. са отбелязани само частични успехи в рабиването на SHA-1. Най-големият успех е постигнат през 2012 г., когато за разбиването на единичен хеш са използвани облачни сървъри и цената на атаката е била около 2,8 млн долара.


Източници

Коментари

Популярни публикации от този блог

Проектиране на кемпер с VehiPlan

Оливер Колонж (Oliver Collonge) написва през 2011 г. втора версия на безплатната програма за дизайн на кемпери VehiPlan . Според автора тя е писана и трябва да работи под Windows 2000/Vista. Пробите показват, че работи нормално и под Windows 7 и 10. След като свалите архива (zip) можете да го разархивирате в C:\Windows\Program Files (x86)\. Програмата е с френски интерфейс и затова са необходими още няколко файла - vb6fr.dll , comdlg32.ocx & mscomctl.ocx . Тези файлове се поставят в C:\Windows\SysWOW64\. Comdlg.ocx се поставя в C:\Windows\System32\. След това е необходимо да се стартира Command Prompt (cmd - като администратор) и да се изпълни командата: regsvr32 %systemroot%\system32\comdlg32.ocx Ако възникне някакъв проблем, по-нова версия на файла може да се свали от тук . След това трябва да направим препратка към C:\Program Files (x86)\VehiPlan-2-0-0\VehiPlan.exe за по-удобно стартиране, която да поставим на работния плот или друго подходящо място. В архивния файл на програмат

Диаграма на Гант с електронна таблица

Диаграмата на Гант се състои от ленти, ориентирани успоредно на времевата ос. Всяка лента представлява отделна задача в проекта (вид работа), краищата ѝ — началния и крайния момент на изпълнението  ѝ, а дължината ѝ - продължителността на задачата. Тези диаграми могат да се използват и за други, не точно производствени, цели - например да покажат заетостта на учебна зала. Когато представянето на данните е регулярна задача може да се използва специализиран софтуер като GanttProject, но за инцидентна визуализация можем да се справим с „подръчни средства“. Сега ще покажем как с електронна таблица (LibreOffice Calc) ще визуализираме времето, за което няколко служители са работили във фирмата: Изходните данни са в няколко колони: Продължителността на трудовия стаж в дни определяме с формулата D2=C2-B2, като я копираме за всеки последващ ред. На 6-и ред съответно с функцията MIN и MAX определяме минимална и максимална дата в таблицата, а на 7-и ред - записваме начална (1.1.1989) и