Криптографската хеш функция (CHF) е алгоритъм, който може да се изпълнява върху данни като отделен файл или парола, за да се получи стойност, наречена контролна сума.
Основното използване на CHF е за проверка на автентичността на дадена част от данните. Може да се приеме, че два файла са идентични само ако контролните суми, генерирани от всеки файл, използвайки една и съща криптографска хеш функция, са идентични.
Някои често използвани криптографски хеш функции включват MD5 и SHA-1, въпреки че съществуват и много други. Те често се наричат "хеш функции", но това не е технически правилно. Хеш функцията е общ термин, който обхваща CHF заедно с други видове алгоритми като циклични проверки за излишък.
Криптографски хеш функции: случай на използване
Да речем, че сте изтеглили най-новата версия на браузъра Firefox. По някаква причина трябваше да го изтеглите от сайт, различен от този на Mozilla. Тъй като не се хоства на сайт, на който сте се научили да се доверявате, бихте искали да сте сигурни, че инсталационният файл, който току-що сте изтеглили, е точно същият като този, който Mozilla предлага.
Използвайки калкулатор за контролна сума, вие изчислявате контролна сума с помощта на определена криптографска хеш функция, като SHA-2, и след това я сравнявате с тази, публикувана на сайта на Mozilla. Ако те са еднакви, можете да сте достатъчно сигурни, че изтеглянето, което имате, е това, което Mozilla е предвидила да имате.
Могат ли криптографските хеш функции да бъдат обърнати?
Криптографските хеш функции са предназначени да предотвратят възможността за обръщане на създадените от тях контролни суми обратно към оригиналните текстове. Въпреки това, въпреки че е практически невъзможно да се обърнат, те не са 100 процента гарантирани за защита на данните.
Хакерите могат да използват дъгова таблица, за да разберат обикновения текст на контролна сума. Rainbow таблиците са речници, които изброяват хиляди, милиони или дори милиарди контролни суми заедно със съответните им стойности в обикновен текст.
Въпреки че това технически не обръща алгоритъма за криптографско хеширане, може и да е така, като се има предвид, че е толкова лесно да се направи. В действителност, тъй като никоя дъгова таблица не може да изброи всяка възможна съществуваща контролна сума, те обикновено са полезни само за прости фрази като слаби пароли.
Ето опростена версия на дъгова таблица, за да се покаже как ще работи, когато се използва криптографската хеш функция SHA-1:
Пример за дъгова таблица | |
---|---|
Прав текст | SHA-1 Контролна сума |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
парола1 | e38ad214943daad1d64c102faec29de4afe9da3d |
ilovemydog | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Хакерът трябва да знае кой криптографски хеш алгоритъм е използван за генериране на контролните суми, за да разбере стойностите.
За допълнителна защита, някои уебсайтове, които съхраняват потребителски пароли, изпълняват допълнителни функции на криптографския хеш алгоритъм след генериране на стойността, но преди да бъде съхранена. Този процес създава нова стойност, която само уеб сървърът разбира и която не съответства на оригиналната контролна сума.
Например, след въвеждане на парола и генериране на контролната сума, тя може да бъде разделена на няколко части и пренаредена, преди да бъде съхранена в базата данни с пароли, или определени знаци могат да бъдат заменени с други. При опит за удостоверяване следващия път, когато потребителят се регистрира, сървърът обръща тази допълнителна функция и първоначалната контролна сума се генерира отново, за да се провери дали паролата на потребителя е валидна.
Предприемането на тези стъпки ограничава полезността на хакването, при което всички контролни суми са откраднати. Идеята е да се изпълни функция, която е неизвестна, така че ако хакерът знае криптографския хеш алгоритъм, но не и персонализирания, тогава познаването на контролните суми на паролата е безполезно.
Пароли и криптографски хеш функции
База данни съхранява потребителски пароли по начин, подобен на дъгова таблица. Когато паролата ви бъде въведена, контролната сума се генерира и се сравнява със записаната с вашето потребителско име. След това получавате достъп, ако двете са идентични.
Като се има предвид, че CHF произвежда необратима контролна сума, безопасно ли е за вас да направите паролата си проста като 12345, вместо 12@34 $5, просто защото самите контролни суми не могат да бъдат разбрани? Не, ето защо.
Тези две пароли е невъзможно да се дешифрират само като се погледнат само контролните суми:
MD5 за 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 за 12@34$5: a4d3cc004f487b18b2ccd4853053818b
На пръв поглед може да си помислите, че е добре да използвате някоя от тези пароли. Това е вярно, ако нападател се е опитал да разгадае паролата ви, като познае контролната сума на MD5, което никой не прави, но не е вярно, ако се извърши атака с груба сила или речник, което е често срещана тактика.
Атака с груба сила възниква, когато се предприемат множество произволни удари при отгатване на парола. В този случай би било лесно да познаете 12345, но доста трудно случайно да разберете другия. Атаката чрез речник е подобна по това, че атакуващият може да опита всяка дума, число или фраза от списък с често срещани (и не толкова често срещани) пароли, а 12345 е една от тези често срещани пароли.
Въпреки че криптографските хеш функции произвеждат трудни до невъзможни за отгатване контролни суми, все пак трябва да използвате сложна парола за всичките си онлайн и локални потребителски акаунти.
Повече информация за криптографските хеш функции
Може да изглежда, че криптографските хеш функции са свързани с криптирането, но двете работят по различни начини.
Шифроването е двупосочен процес, при който нещо се криптира, за да стане нечетливо и след това се декриптира по-късно, за да се използва отново нормално. Може да шифровате файлове, които сте съхранили, така че всеки, който има достъп до тях, да не може да ги използва, или можете да използвате шифроване за прехвърляне на файлове, за да шифровате файлове, които се движат по мрежа, като тези, които качвате или изтегляте онлайн.
Криптографските хеш функции работят по различен начин, тъй като контролните суми не са предназначени да бъдат обръщани със специална дехешираща парола. Единствената цел на CHF е да сравняват две части от данни, като например при изтегляне на файлове, съхраняване на пароли и изтегляне на данни от база данни.
Възможно е криптографска хеш функция да произведе една и съща контролна сума за различни части от данни. Когато това се случи, се нарича сблъсък, което е огромен проблем, като се има предвид, че целта на функцията е да прави уникални контролни суми за всяко въвеждане на данни в нея.
Могат да възникнат сблъсъци, защото всеки CHF произвежда стойност с фиксирана дължина, независимо от входните данни. Например криптографската хеш функция MD5 генерира 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 и e10adc3949ba59abbe56e057f20f883e за три напълно различни блока от данни.
Първата контролна сума е от 12345. Вторият е генериран от над 700 букви и цифри, а третият е от 123456. И трите входа са с различна дължина, но резултатите винаги са с дължина само 32 знака, тъй като е използвана контролна сума MD5.
Няма ограничение за броя на контролните суми, които могат да бъдат създадени, защото всяка малка промяна във входа трябва да произведе напълно различна контролна сума. Тъй като има ограничение за броя на контролните суми, които един CHF може да произведе, винаги има възможност да срещнете сблъсък.
Ето защо са създадени други криптографски хеш функции. Докато MD5 генерира стойност от 32 знака, SHA-1 генерира 40 знака, а SHA-2 (512) генерира 128. Колкото по-голям е броят на знаците в контролната сума, толкова по-малка е вероятността да възникне сблъсък.