Шифроването, хеширането и осоляването са всички свързани техники, но всеки от тези процеси има свойства, които ги отдават на различни цели.
Накратко, криптирането включва кодиране на данни, така че да могат да бъдат достъпни само от тези, които имат ключа. Това го предпазва от неоторизирани страни.
Криптографското хеширане включва изчисления, които не могат да бъдат върнати обратно. Тези функции имат някои специални свойства, които ги правят полезни за цифрови подписи и други форми на удостоверяване.
Соленето включва добавяне на произволни данни, преди да бъдат поставени чрез криптографска хеш функция. Използва се предимно за запазване на паролите по време на съхранение, но може да се използва и с други видове данни.
Какво е криптиране?
Казано по-просто, криптирането е процесът на използване на код, за да се предотврати достъп до информация на други страни. Когато данните са шифровани, само тези, които имат ключа, имат достъп до него. Докато се използва достатъчно сложна система и се използва правилно, нападателите са възпрепятствани да виждат данните.
Данните се кодират с алгоритми за криптиране, които са известни също като шифри. Едно от най-важните разлики между криптиране и хеширане (за което ще стигнем по-късно) е, че криптирането е проектирано да върви и в двете посоки. Това означава, че след като нещо е криптирано с ключ, то също може да бъде декриптирано.
Това прави криптирането полезно в редица ситуации, като например за безопасно съхраняване или прехвърляне на информация. След като данните са криптирани правилно, те се считат за сигурни и могат да бъдат достъпни само от тези, които имат ключа. Най-известният тип е криптиране на симетричен ключ, което включва използването на един и същи ключ както в процеса на криптиране, така и в декриптирането..
Шифроването на публичния ключ е малко по-сложно, тъй като един публично достъпен ключ се използва за криптиране на данни, докато съответстващият му частен ключ се използва за декриптирането му. Тази функция позволява на хората, които никога не са се срещали, да общуват сигурно. Шифроването с публичен ключ също е важна част от цифровите подписи, които се използват за валидиране на автентичността и целостта на данните и съобщенията.
Вижте също: Обяснени общи типове криптиране
Общи алгоритми за криптиране
- Цезар шифър – Това е прост код, който включва всяка буква да се премества на определен брой места. Ако шифърът на Цезар има смяна от три, всеки “а” ще стане “d”, всеки “b” ще стане “e”, всеки “c” ще стане “f” и така нататък. Той е кръстен на Юлий Цезар, който е първият човек, записан, използвал схемата.
- AES – Advanced Encryption Standard е сложен алгоритъм със симетричен ключ, който осигурява значителна част от нашите съвременни комуникации. Тя включва редица сложни стъпки и често се използва за криптиране на данни в TLS, приложения за съобщения, в покой и в много други ситуации. Тук се задълбочаваме в AES криптирането.
- 3DES – Triple DES се базира на алгоритъма DES. Когато нарастващата компютърна мощност направи DES несигурен, 3DES беше разработен като подсилен алгоритъм. В 3DES данните се пускат чрез алгоритъма DES три пъти, а не само веднъж, което затруднява крака. 3DES може да се използва за много от същите неща като AES, но само определени реализации се считат за безопасни.
- RSA – Шифърът Rivest-Shamir-Adleman беше първата форма на широко използвана криптография с публичен ключ. Тя позволява на субектите да комуникират сигурно, дори ако не са се срещали или са имали възможност да обменят ключове. Може да се използва в редица различни протоколи за сигурност, като PGP и TLS. Тук имаме задълбочено ръководство за криптиране на RSA.
- ECDSA – Алгоритъмът за цифров подпис на елиптичната крива е вариант на DSA, който използва криптография на елиптична крива. Като алгоритъм с публичен ключ, той може да се прилага в подобни ситуации като RSA, въпреки че се прилага по-рядко поради някои проблеми със сигурността.
Криптиране в действие
За да ви дадем представа как шифроването работи на практика, ще използваме шифъра на Цезар като пример. Ако искахме да шифроваме съобщение от “Хайде да ядем“Със смяна на три,”L“Ще се превърне в”О“,„д“Ще се превърне в”з” и така нататък. Това ни дава криптирано съобщение за:
Ох hdw
За да дешифрира съобщението, получателят ще трябва да знае, че алгоритъмът за криптиране включва смяна от три, след което върнете всяка буква на три места. Ако искахме, бихме могли да променим кода, като изместим всяка буква с различно число. Можем дори да използваме много по-сложен алгоритъм.
Един пример е AES. Ако използваме 128-битов AES онлайн калкулатор за криптиране „Хайде да ядем“С ключ от”1234”, Тя ни дава:
FeiUVFnIpb9d0cbXP / Ybrw ==
Този шифротекст може да бъде декриптиран само с ключа на „1234“. Ако трябваше да използваме по-сложен ключ и да го запазим частен, тогава бихме могли да разгледаме данните, защитени от нападатели.
Какво е хеширане?
Криптографските хеш функции са специален вид еднопосочно изчисление. Те вземат низ от данни от всякакъв размер и винаги дават изход с предварително определена дължина. Този изход се нарича хашиш, хеш стойност или дайджест на съобщения. Тъй като тези функции не използват клавиши, резултатът за даден вход винаги е един и същ.
Няма значение дали вашият принос е изцяло Война и мир или просто две букви, резултатът от хеш функцията винаги ще бъде една и съща дължина. Функциите на хеш имат няколко различни свойства, които ги правят полезни:
- Те са еднопосочни функции – Това означава, че няма практичен начин да се разбере какъв е оригиналният вход от дадена хеш стойност.
- Малко вероятно е два входа да имат една и съща хеш стойност – Въпреки че е възможно два различни входа да получат една и съща хеш стойност, шансовете това да се случи са толкова малки, че всъщност не се тревожим за това. За практически цели хеш стойностите могат да се считат за уникални.
- Един и същ вход винаги дава същия резултат – Всеки път, когато поставите една и съща информация в дадена хеш функция, тя винаги ще доставя един и същ изход.
- Дори и най-малката промяна дава съвсем различен резултат – Ако дори един знак е променен, хеш стойността ще бъде значително различна.
За какво се използват хешовете?
Функциите на хеш може да имат някои интересни свойства, но какво всъщност можем да правим с тях? Възможността да изплюете уникален изход с фиксиран размер за вход с всякаква дължина може да изглежда като нищо повече от неясен трик на партията, но хеш функциите всъщност имат редица приложения.
Те са основен компонент на цифрови подписи, които са важен аспект за проверка на автентичността и целостта в интернет. Кодове за удостоверяване на съобщения с хеш (HMAC) също използват хеш функции за постигане на подобни резултати.
Криптографските хеш функции могат да се използват и като нормални хеш функции. В тези сценарии те могат да действат като контролни суми за проверка на целостта на данните, като алгоритми за пръстови отпечатъци, които елиминират дублиращите се данни, или за създаване на хеш-таблици за индексиране на данни.
Общи криптографски хеш функции
- MD5 – Това е хеш функция, която е публикувана за първи път през 1991 г. от Рон Ривест. Сега тя се счита за несигурна и не трябва да се използва за криптографски цели. Въпреки това, той все още може да се използва за проверка на целостта на данните.
- SHA-1 – Алгоритъмът за сигурен хеш 1 се използва от 1995 г., но не се счита за сигурен от 2005 г., когато са извършени редица успешни атаки при сблъсък. Сега се препоръчва вместо това да се използва SHA-2 или SHA-3.
- SHA-2 – Това е семейство хеш функции, които действат като приемници на SHA-1. Тези функции съдържат множество подобрения, които ги правят сигурни в голямо разнообразие от приложения. Въпреки това, SHA-256 и SHA-512 са уязвими към атаки с удължаване на дължината, така че има определени ситуации, при които е най-добре да се приложи SHA-3.
- SHA-3 – SHA-3 е най-новият член на семейството на алгоритъма на Secure Hash, но той е изграден съвсем различно от своите предшественици. На този етап той все още не е заместил SHA-2, а просто дава на криптографите друга опция, която може да осигури подобрена сигурност в определени ситуации.
- RIPEMD – RIPEMD е друго семейство от функции, което е разработено от академичната общност. Тя се основава на много от идеите от MD4 (предшественикът на MD5) и не е ограничена от никакви патенти. RIPEMD-160 все още се счита за сравнително сигурен, но не е видял много широко приложение.
- водовъртеж – Whirlpool е хеш функция от семейството на шифрованите квадратни блокове. Тя се основава на модификация на AES и не подлежи на никакви патенти. Счита се за сигурен, но малко по-бавен от някои от неговите алтернативи, което доведе до ограничено приемане.
Хашинг функции в действие
Сега, когато разберете какво са хеш функциите, е време да ги приложите на практика. Ако сложим същия текст на „Хайде да ядем”В онлайн калкулатор SHA-256, той ни дава:
5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2
Ако променим дори един символ с една позиция, той променя драстично целия хеш. Опечатка като „Met яде”Дава напълно различен резултат:
4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342
За разлика от криптирането, ние не можем да поставим тази хеш стойност чрез функцията в обратна посока, за да получим отново своя принос. Въпреки че тези хеш-функции не могат да се използват по същия начин като криптиране, техните свойства ги правят ценна част от цифровите подписи и много други приложения.
Hash функции и пароли
Функциите на хеш имат друга обща употреба, която все още не сме обсъждали. Те също са ключов компонент на запазване на нашите пароли по време на съхранение.
Вероятно имате десетки онлайн акаунти с пароли. За всеки от тези акаунти паролата ви трябва да се съхранява някъде. Как може да се потвърди вашето влизане, ако уебсайтът няма собствено копие на вашата парола?
Компании като Facebook или Google съхраняват милиарди потребителски пароли. Ако тези компании запазиха паролите като незабележим текст, всеки нападател, който можеше да пробие в базата данни с пароли, би имал достъп до всеки акаунт, който намери.
Това би било сериозно бедствие за сигурността, както за компанията, така и за нейните потребители. Ако всяка една парола беше изложена на нападатели, тогава всички техни акаунти и потребителски данни биха били в опасност.
Най-добрият начин да се предотврати това е да не съхранявате самите пароли, а вместо това хеш стойностите за паролите. Както разгледахме в предишния раздел, криптографските хеш функции функционират в една посока, създавайки изход с фиксиран размер, който не е възможно да се обърне обратно.
Ако дадена организация съхранява хеша на парола вместо самата парола, тя може да провери дали двата хеша съвпадат, когато потребителят влезе. Потребителите въвеждат своите пароли, които след това са хеширани. След това този хеш се сравнява с хеша на паролата, който се съхранява в базата данни. Ако двата хеша съвпадат, тогава е въведена правилната парола и потребителят получава достъп.
Тази настройка означава това паролата никога не трябва да се съхранява. Ако нападател пробие в базата данни, тогава ще открият само хешовете на паролите, а не паролите.
Докато хеширането на пароли за съхранение не пречи на нападателите да използват хешовете, за да разберат паролите, това прави работата им значително по-трудна и отнема много време. Това извежда нашата последна тема, осоляването.
Какво е осоляването?
Осоляването е по същество добавянето на произволни данни, преди да бъдат поставени чрез хеш функция, и те се използват най-често с пароли.
Най-добрият начин да се обясни с помощта на соли е да обсъдим защо имаме нужда от тях на първо място. Може би сте мислили, че съхраняването на хешовете на паролите би решило всички наши проблеми, но за съжаление нещата са малко по-сложни от това.
Слаби пароли
Много хора имат наистина лоши пароли, може би и вие. Проблемът е, че хората са склонни да мислят по предсказуеми модели и да избират пароли, които лесно се запомнят. Тези пароли са уязвими за атаки в речника, които преминават през хиляди или милиони от най-често срещаните комбинации от пароли всяка секунда, в опит да намерят правилната парола за акаунт.
Ако вместо това се съхраняват хеши за пароли, нещата са малко по-различни. Когато нападател се натъкне на база данни с хешове за пароли, те могат да използват всяка от тях хеш-таблици или дъгови маси да търсят съвпадащи хешове, които могат да използват, за да открият паролите.
Хеш таблицата е предварително изчислен списък на хешовете за общи пароли, който се съхранява в база данни. Те изискват повече работа преди време, но след като таблицата е попълнена, е много по-бързо да се търсят хешовете в таблицата, отколкото е да се изчисли хешът за всяка възможна парола. Друго предимство е, че тези таблици могат да се използват многократно.
Таблиците на дъгата са подобни на хеш таблиците, само че те заемат по-малко място с цената на повече изчислителна мощност.
И двата метода на атака стават далеч по-практични, ако се използват слаби пароли. Ако потребителят има обща парола, вероятно е хешът за паролата да бъде в хеш таблицата или в дъгата. Ако случаят е такъв, тогава само въпрос на време е нападателят да получи достъп до парола на потребителя.
Потребителите могат да помогнат за фолирането на тези атаки, като изберат по-дълги и сложни пароли, които е много по-малко вероятно да се съхраняват в таблиците. На практика това не се случва никъде близо до колкото трябва, тъй като потребителите са склонни да избират лесно пароли, които се запомнят. Като отпуснато правило, нещата, които лесно се запомнят, често са лесни за намиране на нападателите.
Солите предлагат друг начин за заобикаляне на този проблем. Чрез добавяне на случаен низ от данни към парола, преди да се хешира, тя по същество я прави по-сложна, което затруднява шансовете за успех на тези атаки.
Как действа осоляването на практика
Като пример, да кажем, че имате имейл акаунт и вашата парола е „1234“. Когато използваме онлайн калкулатор SHA-256, получаваме следното като хеш стойност:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Този хеш е това, което ще се съхранява в базата данни за вашия акаунт. Когато въведете паролата си от „1234“, Той се хешира и след това стойността се сравнява със запаметената стойност. Тъй като двете стойности са еднакви, ще ви бъде предоставен достъп.
Ако нападател проникне в базата данни, той ще има достъп до тази стойност, както и до всички останали хеширани пароли, които са били там. След това нападателят ще вземе тази стойност на хеш и ще я потърси в предварително изчислената хеш таблица или таблицата с дъгата. От “1234“Е една от най-често срещаните пароли, те ще намерят съвпадащия хеш много бързо.
Хеш таблицата ще им каже, че:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Съответства на:
1234
Тогава нападателят ще знае, че вашата парола е „1234“. След това те могат да използват тази парола, за да влязат във вашия акаунт.
Както виждате, това не беше много работа за нападателя. За да направим нещата по-трудни, ние добавяме сол на произволни данни към паролата, преди да се хешира. Осоляването помага значително да се намалят шансовете на хеш таблиците и дъговите таблици да върнат положителен резултат.
Да вземем случайна информация от 16 знака:
H82BV63KG9SBD93B
Добавяме го към нашата проста парола на „1234” така:
1234H82BV63KG9SBD93B
Едва сега, когато сме го осолили, ние го поставяме през същата хеш функция, която правихме преди, която се връща:
91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303
Разбира се, тази стойност на хеш не е по-дълга или по-сложна от предишната, но това не е въпросът. Докато и двете са с еднаква дължина, “1234H82BV63KG9SBD93B“Е далеч по-рядко срещана парола, така че е много по-малко вероятно хешът й да бъде запазен в хеш таблицата.
Колкото по-малка е вероятността паролата да бъде запазена в хеш таблицата, толкова по-малка е вероятността атаката да успее. Ето как добавянето на соли помага да се направи хеширането на паролите по-сигурно.
Хакване на цели бази данни
Когато нападателят има достъп до цяла база данни за хеширане на пароли, те не трябва да тестват всеки хеш срещу всеки запис. Вместо това те могат да търсят в цялата база данни за съвпадения, които съвпадат с тяхната хеш-таблица. Ако базата данни е достатъчно голяма, нападателят може да компрометира огромен брой акаунти, дори да имат само пет процента успеваемост.
Ако на паролите са дадени уникални соли, преди да бъдат хеширани, тогава това прави процеса много по-сложен. Ако солите са достатъчно дълги, шансовете за успех стават много по-ниски, което би изисквало хеш таблиците и дъговите таблици трябва да бъдат твърде големи, за да могат да се намират съвпадения хеши.
Друго предимство на солите идва, когато множество потребители в една и съща база данни имат една и съща парола или ако един потребител има една и съща парола за няколко акаунта. Ако хешовете за пароли не са осолени предварително, нападателите могат да сравнят хешовете и да определят, че всички акаунти с една и съща стойност на хеш също споделят същата парола.
Това улеснява хакерите да се насочват към най-често срещаните хеш стойности, които ще им донесат най-големи награди. Ако паролите са осолени предварително, тогава хеш стойностите ще бъдат различни, дори когато се използват едни и същи пароли.
Потенциални слабости на солта
Соленето губи своята ефективност, ако е извършено неправилно. Двата най-често срещани проблема възникват, когато солите са твърде къси или ако не са уникални за всяка парола. По-късите соли са все още уязвими при атаките на дъгова маса, тъй като не правят получения хеш достатъчно рядък.
Ако солите се използват повторно за всяка хеширана парола и солта е открита, това прави много по-лесно да се разбере всяка парола в базата данни. Използването на една и съща сол също означава, че всеки със същата парола ще има същия хеш.
Общи алгоритми за осоляване
Не се препоръчва използването на нормални хеширащи функции за съхранение на пароли. Вместо това са разработени редица функции със специфични функции, които помагат за повишаване на сигурността. Те включват Argon2, scrypt, bcrypt и PBKDF2.
Argon2
Argon2 беше победителят в конкурса за скриване на пароли за 2015 г. Той все още е сравнително нов, що се отнася до алгоритмите, но бързо се превърна в една от най-надеждните функции за хеширане на пароли.
Въпреки младостта си, досега той е държал себе си в редица изследователски трудове, които са го изследвали за слабости. Argon2 е по-гъвкав от другите алгоритми за хеширане на пароли и може да бъде реализиран по много различни начини.
scrypt
Произнесе “крипта на ess“, Това е вторият най-млад алгоритъм за хеширане на пароли, който се използва. Проектиран през 2009 г., scrypt използва голям, но регулируем обем памет в своите изчисления. Регулируемата му природа означава, че той все още може да бъде устойчив на атаки, дори когато изчислителната мощност нараства с течение на времето.
bcrypt
bcrypt е разработен през 1999 г. и е базиран на шифъра Blowfish. Той беше един от най-често разчитаните на алгоритмите, използвани в хеширането на пароли в продължение на много години, но сега е по-уязвим за програмируемите полеви масиви на портата (FPGA). Ето защо Argon2 често се предпочита в по-новите реализации.
PKFD2
Тази функция за извличане на ключове е разработена да замени PBKDF1, който има по-къса и по-малко сигурна дължина на ключа. Насоките на NIST от [year] г. все още препоръчват PKFD2 за хеширане на пароли, но Argon2 адресира някои от проблемите си със сигурността и може да бъде по-добър вариант в много ситуации.
Шифроване, хеширане и осоляване: резюме
Сега, след като разгледахме подробностите за криптирането, хеширането и осоляването, е време бързо да се върнем назад към ключовите различия, така че да потънат. Докато всеки от тези процеси е свързан, всеки от тях има различна цел.
Шифроването е процесът на кодиране на информация за нейната защита. Когато данните са кодирани, те могат да бъдат декриптирани и достъпни само от тези, които имат правилния ключ. Алгоритмите за криптиране са обратими, което ни дава начин да държим данните си далеч от нападателите, но все пак да можем да имаме достъп до него, когато имаме нужда от това. Той се използва широко, за да ни предпази онлайн, изпълнявайки решаваща роля в много от нашите протоколи за сигурност, които поддържат данните ни сигурни, когато се съхраняват и са в транзит..
За разлика, хеширането е еднопосочен процес. Когато хапваме нещо, не искаме да можем да го върнем в първоначалния си вид. Функциите за криптографски хеш имат редица уникални свойства, които ни позволяват да докажем достоверността и целостта на данните, например чрез цифрови подписи и кодове за удостоверяване на съобщения.
За съхраняване на нашите пароли се използват и специфични видове криптографски хеш функции. Съхраняването на хеш на паролата вместо самата парола осигурява допълнителен слой сигурност. Това означава, че ако нападател получи достъп до база данни, той няма да може веднага да получи достъп до паролите.
Докато хеширането на пароли прави живота по-труден за хакерите, той все още може да бъде заобиколен. Тук идва осоляването. Соленето добавя допълнителни данни към паролите, преди да бъдат хеширани, което прави атаките по-отнемащи време и тежки ресурси. Ако солите и паролите се използват правилно, те правят хеш-таблиците и дъговите таблици непрактични средства за атака.
Заедно, криптирането, хеширането и осоляването са всички важни аспекти, за да ни предпази онлайн. Ако тези процеси не бяха на мястото си, нападателите ще имат безплатно за всички вашите акаунти и данни, оставяйки ви без сигурност в интернет.
Технология-1 от tec_estromberg под CC0
Шифроване, хеширане и осоляване са всички важни техники за защита на данни. Криптирането е процесът на кодиране на данни, за да бъдат достъпни само от тези, които имат ключа. Хеширането включва изчисления, които не могат да бъдат върнати обратно и се използва за цифрови подписи и други форми на удостоверяване. Осоляването включва добавяне на произволни данни, преди да бъдат поставени чрез криптографска хеш функция и се използва за запазване на паролите по време на съхранение. Всички тези техники са важни за защита на данни и трябва да бъдат използвани правилно, за да се предотврати достъп до информация на други страни.
Шифроване, хеширане и осоляване са всички важни техники за защита на данни. Криптирането е процесът на кодиране на данни, за да бъдат достъпни само от тези, които имат ключа. Хеширането включва изчисления, които не могат да бъдат върнати обратно и се използва за цифрови подписи и други форми на удостоверяване. Осоляването включва добавяне на произволни данни, преди да бъдат поставени чрез криптографска хеш функция и се използва за запазване на паролите по време на съхранение. Всички тези техники са важни за защита на данни и трябва да бъдат използвани правилно, за да се предотврати достъп до информация на други страни.
Шифроване, хеширане и осоляване са всички важни техники за защита на данни. Криптирането е процесът на кодиране на данни, за да бъдат достъпни само от тези, които имат ключа. Хеширането включва изчисления, които не могат да бъдат върнати обратно и се използва за цифрови подписи и други форми на удостоверяване. Осоляването включва добавяне на произволни данни, преди да бъдат поставени чрез криптографска хеш функция и се използва за запазване на паролите по време на съхранение. Всички тези техники са важни за защита на данни и трябва да бъдат използвани правилно, за да се предотврати достъп до информация на други страни.