Разликата между криптиране, хеширане и осоляване

Бързо, знаете ли разликата между криптиране и хеширане? Знаете ли какво е осоляването? Искаш ли да? Това е риторичен въпрос - все пак ще ви кажа.

Криптирането и хеширането понякога се бъркат помежду си. Осоляване ... не толкова. Но си струва да разгледаме и трите, за да можем по-добре да разберем криптирането като цяло.

Какво е шифроване?

Шифроването е практика за разшифроване на информация по начин, който само някой със съответния ключ може да я декламира и прочете. Шифроването е двупосочна функция. Когато шифровате нещо, правите това с намерението да го декриптирате по-късно.

Това е ключово разграничение между криптиране и хеширане.

За криптиране на данни използвате нещо, наречено шифър, което е алгоритъм - поредица от добре дефинирани стъпки, които могат да бъдат следвани процедурно - за криптиране и дешифриране на информация. Алгоритъмът на думите има някаква поразителна конотация поради белезите, които всички ние все още носим от смятането в гимназията и колежа. Но както ще видите, един алгоритъм всъщност е нищо повече от набор от правила - и те всъщност могат да бъдат доста прости.

Шифроването има дълга историческа история. Датира от най-малко 1900 г. пр. Н. Е. След откриването на гробна стена с нестандартни йероглифи, изсечени в нея. Оттогава има безброй исторически примери.

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

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

Нека разгледаме криптирането с помощта на обикновен шифър. В този случай ще шифрирам изречението „Не бъди шут“, използвайки еднофабричен шифър за смяна, който просто заменя всяка буква с една, която е последователно на три места пред нея.

Плетен текст: Не бъди глупак

става:

Шифротекст: Grqwehdmhun

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

Исторически алгоритми за криптиране

Нека започнем с преминаването на някои различни видове шифри, след което ще влезем в съвременните алгоритми, които се използват при шифроването днес.

  • Shift Ciphers - Подобно на примера, който разгледахме по-горе, две страни определят число между 1–25 и изместват буквите този брой интервали в азбуката. Номерът за смяна служи като ключ.
  • Шифри за заместване - Тези шифри заменят обикновения текст с шифров текст, използвайки алгоритъм, който е фиксирана система. Ключът е документът, който показва фиксираната система, която може да се използва за обратен инженеринг на криптирането.
  • Транспониращи шифри - Този алгоритъм използва набор от правила, които служат като ключ, за да променят реда на текста в различни пермутации, които след това могат да бъдат криптирани. Най-често срещаните примери са железопътни огради и маршрутни шифри.
  • Полиалфабетни шифри - Това са вид заместващ шифър, който използва множество азбуки, за да усложни допълнително неразрешено декриптиране на шифротекста.
  • Номенклаторни шифри - Вид на заместващ шифър, който замества обикновените думи в просто текст със символи, за да се опита да изхвърли определена форма на криптоанализа.

Криптоанализата е изследване на криптосистемите с намерение да се намерят слабости в тях. Една от най-често срещаните форми на криптоанализа, която датира от арабски математик на име Ал-Кинди, живяла около 800 г. сл. Н. Е., Се нарича честотен анализ. Той изследва шифротекста за повтарящи се символи или низове от символи и ги препраща с думи, които биха се появили с висока честота в съобщението, което се дешифрира. Така че, например, ако пишете съобщение до Наполеон, логично е, че ще използвате неговото име няколко пъти. Съпоставяйки версията на шифротекста с неговото име, той ви помага да започнете да картографирате ключа и да дешифрирате съобщението.

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

Съвременно шифроване

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

Днес благодарение на компютърните технологии и интернет вече можем да практикуваме криптография с публичен ключ. С криптографията с публичен ключ единият публичен ключ се използва за криптиране, а другият частен ключ се използва за декриптиране. Това виждате по време на SSL ръкостискане, където те са решили исторически рисковите проблеми с физическия обмен на ключове, като използват публично достъпния ключ за криптиране на симетричен сесиен ключ и го изпращат обратно на сървъра за декриптиране чрез неговия личен ключ. Е, всъщност не го виждате, но улавяте моята дрейф.

Днес най-често срещаните форми на криптиране са:

  • Асиметрично криптиране - това е пример за публичен ключ, който току-що дадохме. Единият ключ криптира, другият ключ дешифрира. Шифроването върви само по един път. Това е концепцията, която формира основата за PKI (публична ключова инфраструктура), която е доверителният модел, който подбива SSL / TLS.
  • Симетрично шифроване - Това е по-близо до форма на криптиране на частен ключ. Всяка страна има свой ключ, който може както да криптира, така и да дешифрира. Както обсъдихме в примера по-горе, след асиметричното криптиране, което се случва при SSL ръкостискане, браузърът и сървърът комуникират с помощта на симетричния сесиен ключ, който се предава заедно.

Между двете асиметрично криптиране е по-силно поради еднопосочния си характер.

Когато пазарувате SSL сертификат и виждате „2048-битов“, прехвърлен наоколо, това се отнася за дължината на частния ключ. Когато видите „256-битово“ споменато, това се отнася до размера на симетричните ключове за сесия, които се използват по време на реалната комуникация. Това не означава, че симетричното криптиране е по-малко безопасно. Все още ще са необходими суперкомпютър хиляди години за декриптиране на 256-битово криптиране.

Причината да се използва симетрично 256-битово криптиране за комуникация е, че е по-бързо, което означава по-добра производителност.

Съвременни алгоритми за криптиране

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

  • AES - AES означава Advanced Encryption Standard, първоначално наричан Rijndael, това е спецификацията за криптиране, публикувана от Националния институт за стандарти и технологии (NIST) през 2001 г. Той поставя незабележим текст чрез редица „кръгове на трансформация“, определени според размера на ключовете, всеки кръг се състои от няколко етапа на обработка. Нека не се впускаме твърде далеч в плевелите на този. AES е общ алгоритъм със SSL / TLS. Той замени стандарта за шифроване на датите (DES), създаден през 1977 г.
  • RSA - RSA означава Rivest-Shamir-Adlemen, след създателите му е алгоритъм за криптиране с публичен ключ (асиметричен), който съществува от 1978 г. и все още се използва широко днес. Той използва факторизацията на прости числа, за да шифрова незабележимо число. [Факт за забавление: Към съжаляващия име Клифърд Кокс, математик, нает от GCHQ, британска разузнавателна агенция, измисли еквивалентна система пет години по-рано, през 1973 г., но тя не беше разсекретена до 1997 г.]
  • ECC - ECC означава криптография на елиптична крива, която разчита на алгебраичната структура на елиптичните криви над крайните полета. Въпреки че ECC съществува от 1985 г., той се използва само от около 2004 г. ECC има очевидни предимства пред RSA и вероятно ще играе по-важна роля в бъдещето на SSL / TLS.
  • PGP - PGP означава доста добра поверителност, тя е създадена през 1991 г. от Фил Цимерман. Това е наистина повече от колекция от алгоритми, отколкото един единствен, всичко за хеширане, компресия на данни и криптография с публичен и частен ключ. Всяка стъпка използва различен алгоритъм. PGP е критикуван за лоша използваемост, липса на повсеместност и дължината на своите ключове.

Кога трябва да се използва криптиране?

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

Ключът е, че криптирането е обратимо. Хеширането не е така.

Какво е Hashing?

Хеширането е практика да се използва алгоритъм за картографиране на данни от всякакъв размер до фиксирана дължина. Това се нарича хеш стойност (или понякога хеш код или хеш суми). Докато криптирането е двупосочна функция, хеширането е еднопосочна функция. Макар че технически е възможно да обърнете хеш нещо, необходимата изчислителна мощност го прави невъзможно. Хеширането е еднопосочно.

Сега, докато криптирането има за цел да защити данните по време на транзит, хеширането има за цел да потвърди, че файл или част от данните не са променени - дали са автентични.

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

Всяка стойност на хеш е уникална. Ако два различни файла произвеждат една и съща уникална хеш стойност, това се нарича сблъсък и това прави алгоритъма по същество безполезен. Миналата година Google създаде сблъсък с хеширащия алгоритъм SHA-1, за да демонстрира, че е уязвим. SHA-1 беше официално прекратена в полза на SHA-2 в началото на 2016 г. Но Google имаше смисъл да направи така, че отдели две години на стойност средства, човешки часове и талант в партньорство с лаборатория в Амстердам, за да направи нещо, което до този момент беше по-скоро абстракция в реалност. Това е дълъг път за доказване на точка. Но Google отиде там.

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

Когато клиент изтегли софтуера, браузърът му ще дешифрира файла, след което ще провери двете уникални хеш стойности. След това браузърът ще изпълни същата хеш функция, използвайки същия алгоритъм, и отново хешира както файла, така и подписа. Ако браузърът генерира една и съща хеш стойност, той знае, че и подписът, и файлът са автентични - те не са променени.

Ако не е, браузърът издава предупреждение.

Не забравяйте, че нито един файл не може да създаде една и съща стойност на хеш, така че всяка промяна - дори и най-малкият ощипвам - ще доведе до различна стойност.

Общи алгоритми на хеширане

Точно както направихме с криптирането, нека разгледаме някои от най-разпространените алгоритми на хеширане, които се използват днес.

  • MD4 - MD4 е алтернативен хеш алгоритъм, създаден през 1990 г., дори неговият създател Роналд Ривест признава, че има проблеми със сигурността. 128-битовият алгоритъм на хеширане оказа влияние, но това може да се усети в по-нови алгоритми като WMD5, WRIPEMD и семейството WHSA.
  • MD5 - MD5 е друг алгоритъм на хеширане, създаден от Рей Ривест, за който се знае, че страда от уязвимост. Създаден е през 1992 г. като приемник на MD4. В момента MD6 е в процес на разработка, но от 2009 г. Rivest го отстрани от разглеждане на NIST за SHA-3.
  • SHA - SHA означава Algorithm Hashing Algorithm и вероятно е най-известният като алгоритъм на хеширане, използван в повечето SSL / TLS шифрови пакети. Шифров пакет е съвкупност от шифри и алгоритми, които се използват за SSL / TLS връзки. SHA обработва хеширащите аспекти. SHA-1, както споменахме по-рано, сега е оттеглен. SHA-2 вече е задължителен. Понякога се знае, че SHA-2 има SHA-256, въпреки че се предлагат и варианти с по-голяма дължина на бита.
  • RIPEMD - Семейство криптографски хеширащи алгоритми с дължини 128, 160, 256 и 320 бита. Той е разработен в рамките на проекта на ЕС „Зрелият“ от Ханс Доббертин и група учени през 1996 г. Неговата 256 и 320 битова версия всъщност не добавя допълнителна сигурност, а просто намалява потенциала за сблъсък. През 2004 г. се съобщава за сблъсък за RIPEMD-128, което означава, че RIPEMD-160 е единственият алгоритъм от тази фамилия, който си заслужава солта (това ще бъде невероятно каре в около два абзаца).
  • WHIRLPOOL - Проектиран от Victor Rijmen (съ-създател на алгоритъма AES, за който обсъждахме по-рано) и Paulo Barreto през 2000 г. Оттогава той претърпя две ревизии. Той произвежда 512-битови хешове, които обикновено са представени като 128-цифрени шестнадесетични числа.
  • TIGER - сравнително нов алгоритъм, който започва да придобива известна сцепление с мрежи за споделяне на файлове и торент сайтове. Понастоящем няма известни атаки, които да са ефективни срещу пълния му вариант за 24 кръга.

Какво е осоляване?

Соленето е концепция, която обикновено се отнася до хеширане на пароли. По същество това е уникална стойност, която може да се добави в края на паролата, за да се създаде друга хеш стойност. Това добавя слой на сигурност към процеса на хеширане, по-специално срещу атаки с груби сили. Атака с груба сила е мястото, където компютър или ботнет опит всяка възможна комбинация от букви и цифри, докато се намери паролата.

Както и да е, при осоляване допълнителната стойност се обозначава като "сол".

Идеята е, че като добавите сол в края на паролата и след това я хеширате, вие по същество усложнявате процеса на разбиване на паролата.

Нека да разгледаме един бърз пример.

Кажете паролата, която искам да соля, изглежда така:

7X57CKG72JVNSSS9

Вашата сол е само думата СОЛ

Преди да хеширате, добавяте SALT в края на данните. И така, ще изглежда така:

7X57CKG72JVNSSS9SALT

Стойността на хеша е различна, отколкото би била само за обикновената несолена парола. Не забравяйте, че дори и най-малкото изменение на хешираните данни ще доведе до различна уникална хеш стойност. Като осолявате паролата си, вие по същество криете нейната истинска хеш стойност, като добавяте допълнителен бит данни и я променяте.

Сега, ако нападател на груба сила знае вашата сол, това е по същество безполезно. Те могат просто да го добавят в края на всяка промяна на паролата, която опитват, и в крайна сметка да я намерят.

Бихме могли да напишем цяла статия за сигурността на паролата и дали тя все още е дори полезна защитна защита - и ние някой път - но засега това трябва да е проходимо определение за осоляване.

И настрана, ако досега не бяхте събрали две и две, нашето име, Hashed Out, е игра на популярната идиома за обсъждане на нещо и процеса на хеширане, включващ SSL криптиране. Хей Патрик, това е наистина умно. Благодаря, че забелязахте.

Какво хабихме (за скимери)

Ето какво разгледахме в днешната дискусия:

  • Шифроването е двупосочна функция, при която информацията се кодира по такъв начин, че да може да бъде разшифрована по-късно.
  • Хеширането е еднопосочна функция, при която данните се картографират на стойност с фиксирана дължина. Хеширането се използва предимно за удостоверяване.
  • Соленето е допълнителна стъпка по време на хеширане, обикновено се разглежда като асоциирана към хешираните пароли, която добавя допълнителна стойност в края на паролата, която променя получената хеш стойност.

Първоначално публикувано на www.thesslstore.com на 29 август 2018 г.