от Rumen(4-08-2004)

рейтинг (29)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

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

В настоящата статия започваме изследване на базовата приложна криптография, чрез разглеждане на инфраструктурата с публични ключове (PKI), и по-конкретно: ключове, сертификати, и доверие (достоверност), заедно с някои практически примери за генериране на ключове и задачи по управление на сертификати. Пълното описание на много от тези понятия често излиза извън обхвата на тази статия.

ОСНОВИ НА КРИПТОГРАФИЯТА

Криптирането преобразува така информацията, че тя да стане нечетима за всеки, който не знае определена "тайна", а декриптирането е обратното на тази операция :-). Реално използваният метод за криптиране се нарича криптографски алгоритъм, а "тайната" се нарича ключ. Най-общо съществуват два класа криптографски алгоритми: симетрично криптиране и асиметрично криптиране (често наричано криптиране с публичен ключ).

СИМЕТРИЧНО КРИПТИРАНЕ

Повечето симетрични криптиращи алгоритми използват един ключ за криптиране и за декриптиране. Този ключ трябва да се предава по някакъв "сигурен" начин, с други думи това може да породи проблеми. Сравнено с криптирането с публичен ключ симетричното криптиране е доста ефикасно (бързо) -- в пъти по-бързо, реално, това прави алгоритмите за симетрично криптиране привлекателни. Въпреки това, ако симетричният ключ е компрометиран, тайната изчезва, а с това изчезват и всички ползи, следващи от използването на криптиране въобще.

КРИПТИРАНЕ С ПУБЛИЧЕН КЛЮЧ

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

Тъй като криптирането с публичен ключ е бавно в сравнение със симетричното криптиране, неговата употреба обикновенно се ограничава до цифрови подписи и предаването на симетричните ключове.
.
ИНФРАСТРУКТУРА С ПУБЛИЧЕН КЛЮЧ (PKI)

Инфраструктурата с публичен ключ (PKI) е името на система от криптографски алгоритми -- софтуер и инфраструктура, използвани при прилагането на сигурни услуги, като конфиденциалност, идентификация, авторизация, и достоверност. В ядрото на PKI стои използването на сертификати с публични ключове.

СЕРТИФИКАТИ

Сертификат, още известен и като X.509 сертификат или сертификат с публичен ключ, е файл, който свързва публичен ключ (от асиметрична двойка ключове) със идентичност (обикновенно човек, компютър, или корпоративна единица). Тези сертификати съдържат споменатият публичен ключ, допълнен от информация която може еднозначно да идентифицира субекта на сертификата (т.е. име, организация, местоположение), периода на валидност на сертификата, издаващата страна (сертификационната организация) и детайли, относно издаването на сертификата, като например цифорвия подпис на издаващата страна (организация).

СЕРТИФИКАЦИОННИ ОРГАНИЗАЦИИ

Сертификационните организации (CAs) са доверени организации, които предлагат услуги за генериране на сертификати, издаване, и отмяна. Основно съществуват две класификации за CA: подчинени CAs, тези чиито подписващ сертификат е от своя страна подписан от друга CA; и базови (root) CAs, които издават и подписват със свой собствен подписващ сертификат.

ДОВЕРИЕ

Едно от ключовите изисквания стоящо зад мотивите за използване на PKI е понятието за разпределено доверие. Например, как аз, потребителя да вярвам на твърдението, че сайта на който ще изпратя информацията за моята кредитна карта наистина принадлежи на фирмата на която претендира че принадлежи? Решението на този проблем лежи в използването на сертификати.

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

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

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

Прехвърлянето на доверие работи по следният начин. Да приемем, че съществуват двама човека, Алис и Боб, които се познават и си вярват един на друг. После, Боб има приятелка, непозната на Алис,:-) с име Касандра, на която той вярва.

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

Това е начина по които CAs се използват в PKI. Вместо да трябва изрично да се вярва по отношение на всеки сертификат, които срещнете, може да се вярва само на няколко CAs. Тогава, ако сертификат, който срещнете е бил издаден (или подписан) от един от тези няколко облечени в доверие CAs, Вие можете транзитивно да вярвате на този сертификат. По този начин PKI решава проблема с големия обем сертификати.

За нещастие, това е и слабо място на PKI, тъй като се залага прекалено много доверие в "доверените CAs". Това обаче, е тема на статия[1] или статия[2].
Връзки:
[1]http://www.counterpane.com/pki-risks.html
[2]http://www.apache-ssl.org/7.5things.txt
Оригинал:
http://www.newsforge.com/article.pl?sid=04/07/29/155212

PS: Вече съм преведел и втората част, но искам първо да тествам примерите и да си доизясня някои неща и тогава да я пусна.
Приятно четене


<< Сигурни Уеб-услуги: основи на PKI - Част 2 (превод) | Свържете OpenOffice.org към PostgreSQL (превод) >>