Критичну терминологију морају знати програмери

Значај безбедности података у дигиталном добу

У времену када су подаци постали окосница нашег света, заштита корисничких информација је од највеће важности.

За програмере, посао је већ сам по себи изазован: морамо се носити са комплексним и осетљивим системима са многобројним могућностима за грешку. Уз то, наша улога укључује претварање апстрактних људских потреба у функционална корисничка искуства и позадинске процесе. Међутим, сада се пред нас поставља још један, суштински задатак: осигурање безбедности података. Овај захтев је оправдан: као корисници, огорчени смо када се наши подаци злоупотребе, стога је наша дужност да својим корисницима пружимо безбедно и поуздано искуство. Поред тога, владе и компаније то захтевају у циљу усклађивања са прописима.

Слојевитост безбедности података

Безбедност је комплексна јер се састоји од више слојева и често постаје проблем чија одговорност није јасно дефинисана. У савременим cloud окружењима, различити тимови имају директан утицај на унос и излаз података: програмери, администратори база података, систем администратори (DevOps стручњаци), корисници са посебним привилегијама итд. Ови тимови често пренебрегавају безбедност, сматрајући је туђом одговорношћу. Међутим, сваки тим има свој спектар задатака: администратор базе података не може контролисати безбедност апликације, DevOps стручњак нема утицаја на приступ позадинским системима, и тако даље.

Улога програмера у заштити података

Упркос томе, програмери су ти који имају најшири приступ подацима. Они креирају сваки део апликације, повезују се са различитим позадинским сервисима, управљају токенима за приступ, имају пун приступ базама података и пишу апликације са неограниченим привилегијама у систему. Због тога, највећи ризик од непажње или грешке у погледу безбедности постоји на нивоу изворног кода, што чини програмере директно одговорним.

Безбедност података је веома сложена област, и немогуће је покрити све аспекте у једном тексту. Ипак, желим да предочим основну терминологију коју програмери треба да познају како би заштитили своје апликације. Замислите ово као увод у безбедност апликација.

Почнимо!

Хеширање

Детаљну дефиницију можете пронаћи на Википедији. Једноставније речено, хеширање је процес претварања података у други облик, где се оригиналне информације не могу читати. На пример, користећи Base64 енкодирање, стринг „Да ли је моја тајна сигурна код тебе?“ може се конвертовати (хеширати) у „СКСМгбКскгц2ВјцмВ0ИХНхЗмУгд2л0аЦБ5б3У/“. Ако свој лични дневник пишете у Base64 формату, на пример, чланови ваше породице неће моћи да га прочитају (осим ако не знају како се декодира из Base64).

Овај концепт шифровања података се користи приликом чувања лозинки, бројева кредитних картица, итд., у веб апликацијама (у ствари, требало би да се користи у свим врстама апликација). Идеја је да у случају повреде безбедности, нападач не би требало да буде у могућности да користи лозинке, бројеве кредитних картица итд., за наношење штете. За извођење хеширања користе се робусни и комплексни алгоритми; Base64 би био превише једноставан и лако би га пробили нападачи.

Хеширање лозинке користи криптографску технику једносмерног хеширања, што значи да је могуће шифровати податке, али не и дешифровати. Како онда апликација зна да је то ваша лозинка када се пријавите? Она користи исти процес и упоређује хеширану верзију унете лозинке са хешираном верзијом у бази података. Ако се поклапају, пријављивање је омогућено!

Док смо већ код хешова, ево једног занимљивог примера. Ако преузимате софтвер или датотеке са интернета, можда вам је речено да извршите проверу датотека. На пример, када преузимате Ubuntu Linux ISO, страница за преузимање нуди опцију да потврдите преузимање. Клик на њу ће отворити прозор:

Овај прозор даје инструкције за покретање команде која ће хеширати преузету датотеку и упоредити резултат са хеш стрингом приказаним на страници за преузимање: 5fdebс435ded46ae99136ca875afс6f05bde217be7dd018e1841924f6b71d. Ова конверзија се врши помоћу SHA256 алгоритма, као што се види у команди: shasum -a 256 –check.

Ако се хеш добијен провером разликује од оригиналног, то значи да је неко умешао у преузимање и да сте добили компромитовану датотеку.

Нека од познатих имена у домену хеширања лозинки су MD5 (несигуран и застарео), SHA-1 и SHA-2 (породице алгоритама, укључујући SHA-256 и SHA-512), SCRYPT, BCRYPT итд.

Сољење

Сви облици безбедности су игра мачке и миша: лопов учи постојећи систем и проналази нови начин за пробијање, што је запажено, а произвођачи брава унапређују своју технологију, и тако даље. Криптографија није изузетак. Иако је претварање хешева у лозинке постало немогуће, нападачи су развили софистициране технике које комбинују интелигентно погађање са великом рачунарском снагом. Као резултат тога, они често могу предвидети тачну лозинку, само на основу хеша.

Због тога је развијена техника сољења. Она подразумева да се хеширање лозинке (или било којих других података) врши на основу комбинације две ствари: самих података и новог, насумичног низа који нападач не може да погоди. Дакле, ако желимо да хеширамо лозинку superman009, прво бисмо изабрали насумични стринг као „со“, на пример, bCQС6Z2LlbaAskj77, а затим бисмо хеширали superman009-bCQС6Z2LlbaAskj77. Добијени хеш ће се разликовати од стандардних структура које производи алгоритам, што значајно отежава интелигентни обрнути инжењеринг или погађање.

И хеширање и сољење су сложене области које се константно развијају. Стога, као програмери апликација, нећемо се директно бавити овим процесима. Али, корисно је разумети ове концепте и доносити боље одлуке. На пример, ако одржавате стари PHP framework и видите да користи MD5 хешове за лозинке, знате да је време да укључите другу библиотеку за управљање лозинкама у процес креирања корисничког налога.

Кључеви

Често ћете се сусрести са термином „кључеви“ у контексту шифровања. До сада смо разматрали хеширање лозинки или једносмерно шифровање, где необративо конвертујемо податке и уништавамо оригинални облик. Ово није прикладно за свакодневну употребу. Документ написан и послат електронском поштом, а тако безбедан да се никада не може прочитати, је бескористан! Стога, потребно је шифровати податке тако да информације буду доступне пошиљаоцу и примаоцу, али нечитљиве током преноса или складиштења.

У ту сврху, у криптографији постоји концепт „кључа“. Он има функцију кључа од браве. Особа која поседује информације их шифрује користећи тајну која се назива кључ. Уколико прималац/нападач нема овај кључ, немогуће је дешифровати податке, без обзира колико софистицирани њихови алгоритми били.

Ротација кључева

Иако кључеви омогућавају поуздано шифровање, они носе ризике сличне лозинкама: када неко сазна кључ, игра је изгубљена. Замислите сценарио где неко хакује део сервиса као што је GitHub (чак и на неколико секунди) и дође до 20 година старог кода. У оквиру кода, пронађу и криптографске кључеве који се користе за шифровање података компаније (лоша пракса је чувати кључеве заједно са изворним кодом, али изненадили бисте се колико је честа). Ако се компанија није потрудила да промени своје кључеве (слично као лозинке), исти кључ може бити коришћен за стварање хаоса.

Због тога, развијена је пракса честе промене кључева. То се назива ротација кључева, и требало би да буде доступно као аутоматизована услуга, уколико користите реномиране PaaS добављаче у облаку.

Кредит за слику: AWS

На пример, AWS има наменски сервис за ту сврху AWS Key Management Service (KMS). Аутоматизована услуга штеди време око промене и дистрибуције кључева између сервера, и данас је једноставна за велике примене.

Криптографија јавног кључа

Ако вас је претходни разговор о шифровању и кључевима навео да помислите да је то компликовано, у праву сте. Чување кључева и њихово прослеђивање, тако да само прималац може видети податке, ствара логистичке проблеме који би онемогућили данашњу сигурну комуникацију. Међутим, захваљујући криптографији јавног кључа, можемо безбедно комуницирати и куповати онлајн.

Овај тип криптографије је представљао значајан математички напредак и главни је разлог због чега интернет није у хаосу. Детаљи алгоритма су комплексни и математички захтевни, стога ћу га овде објаснити само концептуално.

Кредит за слику: The Electronic Frontier Foundation

Криптографија јавног кључа се ослања на два кључа за обраду информација. Један је приватни кључ, који треба да остане тајна и никада се не дели са другима. Други је јавни кључ, који треба јавно објавити. Ако вам шаљем податке, прво морам да набавим ваш јавни кључ и да шифрујем податке пре слања. Након тога, ви можете дешифровати податке користећи комбинацију приватног и јавног кључа. Све док случајно не откријете свој приватни кључ, могу да вам шаљем шифроване податке које само ви можете да отворите.

Лепота система је у томе што не морам да знам ваш приватни кључ, а свако ко пресретне поруку не може ништа да уради са њом, иако има ваш јавни кључ. Ако се питате како је то уопште могуће, најкраћи и најмање технички одговор је да је растављање великих простих бројева на факторе за рачунаре изузетно тешко:

Рачунари тешко растављају велике просте бројеве на факторе. Дакле, ако је оригинални кључ веома велики, можете бити сигурни да се порука не може дешифровати ни после хиљада година.

Безбедност транспортног слоја (TLS)

Сада када знате како функционише криптографија јавног кључа, знате да је овај механизам, где се користи јавни кључ примаоца за слање шифрованих података, оно што је у основи популарности HTTPS протокола и што наводи Chrome да прикаже „Ова локација је безбедна“. Сервер и претраживач шифрују HTTP саобраћај ( веб странице су дугачки стрингови текста које претраживачи тумаче) користећи јавне кључеве једног другог, стварајући безбедан HTTP (HTTPS).

Кредит за слику: Mozilla. Занимљиво је напоменути да се шифровање не врши на самом транспортном слоју. OSI модел не говори ништа о шифровању података. У ствари, апликација (у овом случају, претраживач) шифрује податке пре него што их преда транспортном слоју, који их затим шаље на одредиште, где се дешифрују. Међутим, сам процес укључује транспортни слој, и у крајњем резултату доводи до безбедног транспорта података, стога се задржао лабав термин „безбедност транспортног слоја“.

Понекад ћете наићи и на термин Secure Socket Layer (SSL). То је исти концепт као TLS, али је SSL старији и сада се замењује TLS-ом.

Потпуно шифровање диска

Понекад су безбедносни захтеви толико високи да се ништа не сме препустити случају. На пример, државни сервери на којима се чувају сви биометријски подаци неке земље не могу се обезбедити и покренути као обични сервери, јер је ризик превисок. У тим ситуацијама није довољно да су подаци шифровани само током преноса. Они морају бити шифровани и док мирују. Стога се користи потпуно шифровање диска за шифровање целог чврстог диска, како би се обезбедила сигурност података чак и у случају физичког продора.

Важно је напоменути да се потпуно шифровање диска мора извршити на хардверском нивоу. Разлог је тај што, ако шифрујемо цео диск, оперативни систем је такође шифрован и не може се покренути када се рачунар покреће. Стога, хардвер мора разумети да је садржај диска шифрован и мора извршити дешифровање у ходу, док прослеђује тражене блокове диска оперативном систему. Због додатног посла који се обавља, потпуно шифровање диска доводи до споријег читања и писања, што програмери таквих система морају имати на уму.

Шифровање од краја до краја

Због забринутости у вези са приватношћу и безбедношћу великих друштвених мрежа, многи су упознати са термином „шифровање од краја до краја“, чак иако немају никакве везе са креирањем или одржавањем апликација.

Раније смо видели како потпуно шифровање диска представља најбољу стратегију, али за свакодневно коришћење није практично. Замислите да Facebook жели да обезбеди податке са телефона које користите и чувате, али не може да примени шифровање целог телефона и закључа све остало.

Из тог разлога, компаније су почеле да примењују шифровање од краја до краја, што значи да се подаци шифрују чим их апликација креира, чува или преноси. Другим речима, чак и када подаци стигну до примаоца, они су у потпуности шифровани и доступни само преко телефона примаоца.

Кредит за слику: Google

Треба напоменути да енд-то-енд (E2E) енкрипција не гарантује математичку сигурност као криптографија јавног кључа. То је стандардно шифровање где се кључ чува у компанији, а ваше поруке су безбедне онолико колико компанија одлучи.

Закључак

Вероватно сте чули за већину ових термина, можда чак и све. Уколико јесте, препоручујем вам да преиспитате своје разумевање ових концепата, као и да оцените колико их озбиљно схватате. Запамтите, безбедност података апликација је борба коју морате да добијете сваки пут (а не само једном), јер је чак и један продор довољан да уништи читаве индустрије, каријере и животе!