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

Шифрирање, но нели
Пред да размислите како технички да криптирате и кои алгоритми да ги користите, треба да направите еден чекор назад. Интегрирањето на безбедна криптирање во вашата сопствена апликација е помалку техничко, но повеќе идејно прашање.
Првото прашање на кое треба да се одговори: Кои податоци сакам да ги заштитам од кого? Одговорот на ова прашање е апсолутна основа без која не е можно да се користи безбеден метод за криптирање.
Од една страна, мора да се разјасни кои податоци треба да бидат шифрирани. Прво звучи како едноставно прашање, но воопшто не е. Пример: Развивате онлајн продавница или CRM систем и сакате да ги криптирате податоците за клиентите. Звучи одлично на почетокот. Но, како имате намера да ги обработите овие податоци тогаш? Како сакате повторно да ги пронајдете овие податоци - првично не е можно пребарување на криптирани податоци.
Од кого сакам да ги заштитам податоците?
Откако ќе дефинирате кои податоци треба да бидат криптирани, се поставува следното прашање: од кого сакам да ги заштитам податоците?
Следните примери имаат за цел да го демонстрираат опсегот на ова прашање. Сакате да ги заштитите податоците за пристап до базата на податоци на вашата апликација. Сценариото е дека напаѓачот наоѓа слаба точка во вашата апликација и може да ги прочита сите локални податоци. Ако го користи за преземање на конфигурацијата, тој барем не треба да има директно податоци за пристап до базата на податоци. Затоа е јасно дека криптирањето и дешифрирањето мора да се одвиваат од страната на серверот. Без податоците за пристап, вашата апликација не може да пристапи до серверот на базата на податоци.
Друг пример: Сакате да ги заштитите податоците од вашите администратори затоа што работите со безбедна услуга за пораки. Ова значи дека криптирањето и дешифрирањето мора да се одвиваат на клиентот. Алтернативно решение, како што веќе видов во тест за пенетрација, дека податоците се испраќаат до сервер и ова потоа криптира или дешифрира, не помага во овој случај. Податоците се достапни во обичен текст на серверот, дури и ако се наоѓаат само во главната меморија.
Важни прашања за да ја пронајдете вистинската архитектура за криптирање
Ние веќе се осврнавме на најважното прашање: "Кои датуми"и од кого. „Зошто„Потоа е повторно поврзано со„ кого “. Ова може да се искористи за да се разјасни “,Каде„Шифрирањето мора да се изврши.
Откако ќе се разјасни сето ова, можете да се посветите на техничката имплементација, т.е.Како што".
Шифрирањето се спроведува безбедно
Како што веќе споменавме, техничките детали за криптирање се дискутираат во овој напис. Клучниот менаџмент е посебна, многу сложена тема, за која ќе се дискутира во следната статија за блогот.
Во овој дел, најпрво би сакал да ве прашам: Не градете свој метод за шифрирање. Брус Шнајер еднаш убаво го сумираше (сега познат како закон на Шнајер), што би сакал да го преведам многу слободно:
Секој може да развие енкрипција што е толку паметна што не можете сами да ја прекинете. Предизвик е да се развие таков што никој друг не може да го скрши дури и по повеќегодишна анализа.
За жал, веќе имавме многу ревизии во кои клиентите развија сопствен криптосистем и за жал тоа не го заработи ова име еднаш.
Втора важна точка е дека ако одлучите да користите постоечки алгоритам, не го спроведувајте сами. Речиси е невозможно да се размислува за сите странични канални напади и други напади што можат да ја направат шифрирањето бескорисно.
Солта во супа: либсодиум
За среќа, денес има библиотеки кои можат да направат многу работа за вас кога станува збор за користење на криптирање. Тимот околу Даниел Bern. Бернштајн, Тања Ланге и Питер Швабе направи голем чекор кога го започнаа проектот NaCl (се изговара: сол). NaCl обезбедува многу функции што се потребни за безбеден крипто систем. Врз основа на ова, беше развиена библиотеката „libsodium“, што ја прави пренослива и ја прави достапна за скоро сите достапни програмски јазици. Многу дозволената лиценца за ISC дозволува употреба во сите проекти, дури и ако тие се комерцијални (внимание, обвивките за одредени програмски јазици може да користат различни лиценци).
Што либзодиум прави за вас
Дури и кога имате фундаментално безбеден алгоритам, огромен предизвик е да го имплементирате безбедно. Од една страна, има напади со странични канали. Нападот не се одвива директно врз криптирањето, но се прават обиди да се извлечат заклучоци за обичниот текст или клучот што се користи преку заобиколувања. libsodium веќе ја зема предвид оваа опција, поради што програмерите не мора да се грижат за тоа.
Дури и тешките проблеми како што се полнењето и автентикацијата, целосно се справуваат со либсодиум. Полнењето секогаш е потребно со блок-шифри, бидејќи тие можат да работат само во цели блокови. Со AES, на пример, ова се секогаш блокови од 16 бајти. Ако податоците што треба да се шифрираат се долги само 8 бајти, останатите 8 бајти мора да се пополнат. Друга тешкотија е автентикација во криптирање. Во овој контекст, автентикација значи да можете да препознаете манипулација со шифрираниот текст (шифрираните податоци). Самиот AES не нуди интегрирана автентикација, на пример; ова се додава само со режимот за шифрирање GCM.
Во комбинација: Проблеми со полнење и недостаток на автентикација може да доведат до фактот дека обичниот текст може да се врати, бидејќи може да биде можно службена должност за полнење.
Патем, ова е само мал извадок од она што може да го направите погрешно со крипто. За среќа, либсодиумот се грижи за сите проблеми со криптирање.
Инсталација на либсодиум
либсодиумот може да го составиш самиот на сите платформи. Постојат и готови DLL за Windows. За жал, овие не се дигитално потпишани, па затоа треба сами да ги потврдите DLL-ите.
Штета што програмерите потпишуваат со PGP, но клучот може да се најде само на почетната страница и не е автентициран од други. Во спротивно, алатката Minisign сè уште може да се користи, при што мора да му верувате на клучот даден на почетната страница.
Сепак, важно е да се изврши верификација! Најдобрата крипто библиотека секако нема корист ако е подготвена и, на пример, генерира лоша совпаѓање или интегрира друга задна врата.
Сите обврзници за други програмски јазици се засноваат на либсодиум, т.е. користете DLL или споделен предмет. Датотеката мора да биде интегрирана пред употреба. Како функционира ова, точно се разликува во зависност од програмскиот јазик, но многу добро е опишано во одделните проекти.
Што е сега сега?
Следниот чекор е да се запознаете со врзувањата на соодветниот програмски јазик и да играте малку. Брза белешка: ако документацијата за едно врзување е лоша, земете друга. Во Јава, на пример, има многу библиотеки, но некои се подобро одржувани и, пред сè, документирани.
Во основа, сепак, би сакал да ги направам следниве коментари:
Не оставајте ништо на случајноста, или барем?
Добрата енкрипција бара криптографски безбедна шанса. libsodium ги користи внатрешните функции на оперативниот систем за да генерира случајни податоци, па затоа може да и верувате на случајната функција (на пр. randombytes_buf).
Белешки за симетрична енкрипција
Со симетрична енкрипција, останува да се каже дека не треба да користите клуч повеќе од еднаш. Nonce - што доаѓа од „не повеќе од еднаш“ - може да се користи само еднаш (!). Генерирајте нов „nonce“ повторно и повторно користејќи ја случајната функција.
Ако ја користите функцијата на високо ниво за шифрирање, libsodium користи XSalsa20 Stream Cipher за шифрирање и Poly1305 за автентикација од октомври 2017 година. Исто така, постои опција да се користи AES-GCM. Ова може да биде предност ако треба да исполнувате одредени критериуми. Овој алгоритам не се користи како стандард, бидејќи е достапен само ако процесорот ги поддржува инструкциите AES-NI.
Асиметрична енкрипција
Со асиметрична енкрипција, libsodium нуди функции за генерирање на парови на клучеви и - како што веќе беше споменато погоре - се грижи за полнење и автентикација. Користените алгоритми (заклучно со октомври 2017 година) се X25519 за клучот, шифра за проследување XSalsa20 за шифрирање и Poly1305 за автентикација.
Хаширање
Функциите за хаширање што ги нуди либсодиумот овозможуваат едноставно всилување, т.е истиот влез доведува до ист излез или комбинација со лозинка за HMAC сценарио. Користениот алгоритам е (заклучно со октомври 2017 година) BLAKE2b еден од финалистите за SHA-3.
лозинка
Напишавме за ова во нашата статија за безбедно чување на лозинки. За среќа, libsodium веќе обезбедува соодветни функции за безбедно складирање на лозинка. Во стандардната имплементација, сегашната верзија на либсодиум користи Argon2.
изгледи
Criticalе го разгледаме ова критично прашање подетално во текот на следните неколку недели. Целта е да научите како најдобро се користи либсодиумот и дека всушност можете да интегрирате безбедна криптирање во вашата апликација. Ако е малку поакутно, секако можеме и директно да ве советуваме. Исто така, со нетрпение ги очекуваме вашите повратни информации!