Java за цифрово

подписване на

документи в уеб

 

 

 

 

Светлин Наков

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Софийски университет „Св. Климент Охридски”

Българска асоциация на разработчиците на софтуер

Национална академия по разработка на софтуер

 

София, 2005

 

 

Java за цифрово подписване на документи в уеб

 

 

 

© Светлин Наков, 2005

© Издателство „Фабер”

Web-site: www.nakov.com

 

 

 

 

 

Всички права запазени. Настоящата книга се разпространява свободно при следните условия:

1.   Не накърнявайте авторските права и разпространявате без промени.

2.   Авторът не носи отговорност за нанесени щети в следствие на прила­гането на решения, базирани на тази книга или сорс код, публикуван в нея. Ако не се чувствате уверени в това, което правите, наемете консултант.

3.   Авторът извършва техническа поддръжка и консултации единствено срещу хонорар.

 

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

 

 

 

Официален сайт:

www.nakov.com/books/signatures/

 

 

ISBN 954-775-504-8

 

Национална академия по разработка на софтуер

Лекторите

 

» Светлин Наков е преподавател по съвременни софтуерни технологии в СУ Св. Климент Охридски”.

Той е автор на десетки на­учни и технически публи­ка­ции и ня­колко книги, свър­­зани с раз­работката на соф­ту­ер, заради което е търсен лектор и консултант.

През 2004 г. получава наг­ра­дата "Джон Атанасов" от прези­дента на България Ге­орги Пър­ва­нов за приноса му към разви­тието на инфор­ма­ци­он­ните технологии и ин­формаци­он­ното общество.

 

» Мартин Кулов е изпълнителен директор във фирма “Код Атест”, където раз­работва проекти за пови­ша­ване качеството на соф­ту­ер­ните продукти в Бъл­гария чрез автоматизация на про­цесите и внедряване на сис­теми за управление на ка­чеството.

Мартин е опитен лектор и сертифициран от Майкрософт разработчик по програмите MCSD и MCSD.NET.

 

» Други инструк­тори с  опит като преподаватели и програмисти.

Академията

 

» Национална академия по раз­ра­ботка на софтуер (НАРС) е център за професионално обу­чение на соф­ту­ерни специалисти.

 

» НАРС провежда задълбочени кур­сове по разработка на софтуер и съв­ременни софтуерни тех­нологии.

 

» Предлагани специалности:

.NET Enterprise Developer

Java Enterprise Developer

 

» Качествено обу­чение с много практически упраж­нения

 

» Завършвате само за 3 месеца.

 

» Гарантирана работа след успеш­но завършване!

 

» Професионална сертификация!

 

» БЕЗПЛАТНО!

Учите безплатно, плащате след като завършите и започнете работа.

Стипендии от софтуерни фирми.

http://academy.devbg.org


 

 

 

 

 

www.devbg.org

 

 

 

 

 

 

 

 

 

 

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

Асоциацията организира конференции, семинари, симпозиуми, работни срещи и курсове за обучение по разработка на софтуер и софтуерни технологии.

 


Съдържание

Съдържание.. 6

Увод... 8

Глава 1.   Цифрови подписи и сертификати.. 13

1.1.    Цифров подпис.. 13

1.1.1.    Основни понятия.. 13

1.1.2.    Технология на цифровия подпис.. 16

1.2.    Цифрови сертификати и PKI. 19

1.2.1.    Модели на доверие между непознати страни.. 19

1.2.2.    Цифрови сертификати и инфраструктура на публичния ключ.. 23

1.2.3.    Хранилища за сертификати.. 31

1.2.4.    Издаване и управление на цифрови сертификати.. 33

1.2.5.    Анулирани сертификати.. 37

1.3.    Технологии за цифрово подписване в уеб среда.. 38

1.3.1.    Общи съображения при подписването в уеб среда.. 39

1.3.2.    Цифров подпис в уеб браузъра на клиента.. 40

Глава 2.   Цифрови подписи и сертификати в Java.. 50

2.1.    Java Cryptography Architecture и Java Cryptography Extension.. 50

2.1.1.    Основни класове за работа с цифрови подписи и сертификати.. 50

2.1.2.    Директна верификация на сертификати с Java.. 54

2.1.3.    Верификация на сертификационни вериги с Java.. 55

2.2.    Достъп до смарт карти от Java.. 58

Глава 3.   Проектиране на система за цифрово подписване в уеб среда   63

3.1.    Архитектура на системата.. 63

3.2.    Java аплет за подписване на документи.. 64

3.2.1.    Подписани Java аплети.. 64

3.2.2.    Връзка между Java аплет и уеб браузър.. 67

3.2.3.    Проектиране на аплета за подписване.. 69

3.3.    Уеб приложение за верификация на цифровия подпис и използвания сертификат   70

3.3.1.    Система за верификация на цифровия подпис.. 70

3.3.2.    Система за верификация на сертификати.. 71

3.3.3.    Проектиране на уеб приложението.. 72

Глава 4.   NakovDocumentSigner – система за подписване на документи в уеб среда   74

4.1.    Рамкова система NakovDocumentSigner.. 74

4.2.    Java аплет за подписване с PKCS#12 хранилище.. 74

4.3.    Java аплет за подписване със смарт карта.. 94

4.4.    Уеб приложение за верификация на цифровия подпис и сертификата на изпращача   111

Глава 5.   Тестване, оценка и усъвършенстване.. 137

5.1.    Поддържани платформи.. 137

5.2.    Експериментално тестване на системата.. 137

5.3.    Недостатъци и проблеми.. 138

5.4.    Бъдещо развитие и усъвършенстване.. 139

Заключение.. 141

Използвана литература.. 143

 

Увод

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

Проблемът с цифровите подписи в уеб среда

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

Цели

Целта, която си поставяме, е да се разработи технология за цифрово подпис­ване на документи в уеб среда, основана на инфраструк­турата на публичния ключ (PKI) и сървърен софтуер, който посреща подпи­саните документи и проверява валидността на сигнатурата им и използвания цифров серти­фикат.

Разработената технология трябва да е независима от операционната система и от уеб браузъра на потребителя.

Потенциални потребители

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

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

Цифрови подписи и сертификати

В първа глава е направен обзор на терминологията, проблемите и техноло­гиите, свързани с използването на цифров подпис в уеб среда.

Изясняват са понятията, свързани с цифровия подпис, моделите на дове­рие между непознати страни и инфраструктурата на публичния ключ: публичен ключ, личен ключ, цифров сертификат, сертификационен орган, сертифика­ционна верига, защитено хранилище за ключове и сертификати и др. Описват се процедурите и алгоритмите за цифрово подписване на документи и верификация на цифрови подписи. Изяснява се технологията на смарт картите като сигурен и надежден начин за съхранение на ключове и сертификати.

Прави се преглед на съществуващите технологии за подписване на документи в уеб среда. Анализират се техните силни и слаби страни. Разглеждат се начините за реализация на система за подписване на доку­менти в клиентския уеб браузър, работеща върху всички операционни системи и всички масово разпространени уеб браузъри. Обосновава се необходимостта от използване на подписан Java аплет, който подписва файловете преди изпращането им от клиента към сървъра.

Работа с цифрови подписи и сертификати в Java

Във втора глава се разглеждат библиотеките от класове за работа с цифрови подписи и сертификати, които Java 2 платформата предоставя.

Дава се описание на класовете и интерфейсите от Java Cryptography Architecture (JCA) и Java Certification Path API, които имат отношение към работата с цифрови подписи и сертификати. Разглеждат се и средствата за достъп до смарт карти от Java.

Дават се конкретни насоки как разгледаните класове могат да се използват за полагане на цифров подпис, верификация на цифров подпис и верифи­ка­ция на цифрови сертификати и сертификационни вериги.

Проектиране на система за цифрово подписване в уеб среда

В трета глава се анализират и решават конкретните проблеми, свързани с реализаци­ята на Java-базирана система за цифрово подписване на доку­менти в уеб среда. Проектират се отделните компоненти на системата –Java аплет, който подписва документите в клиентския уеб браузър (във вариант за работа с локален сертификат и със смарт карта), уеб приложе­ние, което посреща подписаните документи с подсис­тема за верификация на цифровия подпис и подсистема за верификация на сертификата на потребителя.

Обосновава се необходимостта Java аплетът, който подписва документи, да работи с повишени права. Разглежда се технологията за подписване на Java аплети с цел повишаване на правата, с които се изпълняват. Разглеж­дат се и средствата за комуникация между аплет и уеб браузър.

От страна на сървъра се разглежда проблемът с верификацията на цифро­вия подпис и начините за верификация на цифрови сертификати. Разглеж­дат се двата подхода за верификацията на сертификата на потребителя, които имат приложение при различни сценарии за използване на цифров подпис. Единият подход е директна верификация, при която се проверява дали сертификатът на клиента е директно издаден от даден сертификат, на който сървърът има доверие. Другият подход е класическият – проверка за валидност на цялата сертификационната верига, която започва от клиент­ския сертификат и трябва да завършва със сертификат, на който сървъра има доверие.

Реализация на системата за цифрово подписване в уеб среда

В четвърта глава се преминава през стъпките за конкретната реализация на вече проектираната система за подписване на документи в уеб среда.

Реализацията е наречена NakovDocumentSigner и предоставя напълно функционално рамково приложение (framework) за цифрово подписване на документи в Java-базирани уеб приложения.

Системата демонстрира как със средствата на Java 2 платформата могат да се подписват документи в уеб среда и да се верифицират цифрови подписи, сертификати и сертификационни вериги. Включен е пълният сорс код на отделните компоненти на системата, придружен с разяснения за тяхната работа. Приложени са и скриптове и инструкции за компили­ране, настройка и внедряване на системата.

Тестване, оценка и усъвършенстване

В пета глава е направена критична оценка на реализираната система за подписване на документи в уеб среда. Системата е тествана под различни операционни системи и уеб браузъри и оценена е нейната работоспособ­ност. Анализирани са недостатъците на системата и са описани посоките за нейното бъдещо развитие и възможностите за подобрение.

За автора на настоящата разработка

Светлин Наков е преподавател по съвременни софтуерни технологии в СУ "Св. Климент Охридски", където води курсове по Компютърни алгоритми, Интернет програмиране с Java, Мрежова сигурност, Програмиране за .NET Framework и Конструиране на качествен програмен код.

Той има сериозен професионален опит като софтуерен разработчик и консултант. Неговите интереси обхващат Java технологиите, .NET платфор­мата и информационната сигурност. Работил е по образователни проекти на Microsoft Research в областта на .NET Framework и по изграждането на големи и сложни информационни системи за държавната администрация.

Светлин е завършил Факултета по математика и информатика на СУ "Св. Климент Охридски". Като ученик и студент той е победител в десетки национални състезания по програмиране и е носител на 4 медала от международни олимпиади по информатика.

Светлин има десетки научни и технически публикации, свързани с разра­ботката на софтуер, в български и чуждестранни списания и е автор на книгата "Интернет програмиране с Java". Той е автор и на серия статии, свързани с използването на цифров подпис в уеб среда в престижното електронно издание „developer.com”.

През 2003 г. Светлин Наков е носител на наградата "Джон Атанасов" на фондация Еврика. През 2004 г. получава най-високото българско отличие  за ИТ – награда "Джон Атанасов" от президента на България Георги Първанов за приноса му към развитието на информа­ционните технологии и информационното общество.

В момента Светлин е директор и водещ преподавател в Национална академия по разработка на софтуер, където обучава софтуерни специа­листи за практи­ческа работа в ИТ индустрията.

Повече информация за Светлин Наков може да се намери на неговия личен уеб сайт: www.nakov.com.

Благодарности

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


 

Национална академия по разработка на софтуер

Лекторите

 

» Светлин Наков е преподавател по съвременни софтуерни технологии в СУ Св. Климент Охридски”.

Той е автор на десетки на­учни и технически публи­ка­ции и ня­колко книги, свър­­зани с раз­работката на соф­ту­ер, заради което е търсен лектор и консултант.

През 2004 г. получава наг­ра­дата "Джон Атанасов" от прези­дента на България Ге­орги Пър­ва­нов за приноса му към разви­тието на инфор­ма­ци­он­ните технологии и ин­формаци­он­ното общество.

 

» Мартин Кулов е изпълнителен директор във фирма “Код Атест”, където раз­работва проекти за пови­ша­ване качеството на соф­ту­ер­ните продукти в Бъл­гария чрез автоматизация на про­цесите и внедряване на сис­теми за управление на ка­чеството.

Мартин е опитен лектор и сертифициран от Майкрософт разработчик по програмите MCSD и MCSD.NET.

 

» Други инструк­тори с  опит като преподаватели и програмисти.

Академията

 

» Национална академия по раз­ра­ботка на софтуер (НАРС) е център за професионално обу­чение на соф­ту­ерни специалисти.

 

» НАРС провежда задълбочени кур­сове по разработка на софтуер и съв­ременни софтуерни тех­нологии.

 

» Предлагани специалности:

.NET Enterprise Developer

Java Enterprise Developer

 

» Качествено обу­чение с много практически упраж­нения

 

» Завършвате само за 3 месеца.

 

» Гарантирана работа след успеш­но завършване!

 

» Професионална сертификация!

 

» БЕЗПЛАТНО!

Учите безплатно, плащате след като завършите и започнете работа.

Стипендии от софтуерни фирми.

http://academy.devbg.org


Глава 1.       Цифрови подписи и сертификати

При предаването на важни документи по електронен път често се налага да се удостовери по надежден начин кой в действителност е изпращач (автор) на даден документ. Най-разпространеният от подходите за удосто­веряване на произхода на документи и файлове е чрез използването на т. нар. цифров  подпис (електронен подпис).

1.1.     Цифров подпис

Да разгледаме понятията, свързани с цифровия подпис, сценариите за неговата употреба и алгоритмите за подписване и верификация на подпис.

1.1.1.     Основни понятия

Симетрични и несиметрични кодиращи схеми

В света на компютърната криптографията има два вида шифриращи алго­ритмични схеми – симетрични и асиметрични [Johner, 2000, стр. 5-9].

При симетричните схеми за шифриране се използва един и същ ключ при шифриране и дешифри­ране на информацията. Примери за симетрични шифриращи схеми са алгоритмите за блоков шифър DES, 3DES, IDEA, Blowfish, Rijndael и RC5 и алгоритмите за поточен шифър – RC4 и SEAL.

При асиметричните схеми се използва един ключ за шифрирането на информацията и друг (различен от първия) ключ за дешифрирането. Примери за асиметрични кодиращи схеми са алгоритмите RSA, DSA и ElGamal.

Цифровото подписване на документи използва като математическа основа криптографията, базирана на публични ключове (асиметричните схеми).

Криптография, базирана на публични ключове

Криптографията, базирана на публични ключове (public key crypto­graphy) е математическа наука, която се използва за осигуряване на конфиденци­алност и автентичност при обмяната на информация чрез използването на криптографски алгоритми, работещи с публични и лични ключове. Тези криптографски алгоритми се използват за цифрово подписване на съобще­ния (документи), проверка на цифров подпис, шифриране и дешифриране на съобщения (документи).

Публични и лични ключове

Публичните и личните ключове представляват математически свързана двойка криптографски ключове (public/private key pair). На всеки публичен ключ съответства точно един личен ключ и обратното – на всеки личен ключ съответства точно един публичен ключ. При това от даден публичен ключ не може да се извлече съответният му личен ключ и обратното. Това прави двойките публичен/личен ключ подходящи за шифриране на съоб­щения без да е необходимо двете страни, които обменят информация, да си знаят ключовете една на друга.

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

Публичен ключ

Публичният ключ (public key) представлява число (последователност от битове), което обикновено е свързано с дадено лице. Един публичен ключ може да се използва за проверка на цифрови подписи, създадени със съответния му личен ключ, както и за шифриране на документи, които след това могат да бъдат дешифрирани само от притежателя на съответния личен ключ.

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

Личен ключ

Личният ключ (private key) е число (последователност от битове), известно само на притежателя му. С личния си ключ дадено лице може да подписва документи и да дешифрира документи, шифрирани със съответ­ния на него публичен ключ.

В известна степен личните ключове приличат на добре известните пароли за достъп, които са широкоразпространено средство за автентикация по Интернет. Приликата е в това, че както чрез парола, така и чрез личен ключ, едно лице може да удостоверява самоличността си, т. е. да се автентикира. Освен това, както паролите, така и личните ключове по идея представляват тайна за всички останали, освен за притежателя им.

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

Криптография и криптоанализ

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

За сигурността на публичните и личните ключове

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

В практиката най-често се използват ключове с големина между 128 и 2048 бита, поради което методът на грубата сила (brute force) не може да бъде приложен за отгатването на таен ключ.

Откриването на личен ключ, който съответства на даден публичен ключ, е теоретически възможно, но времето и изчислителната мощ, необходими за целта, правят такива действия безсмислени [Wikipedia-PKC, 2005].

Хеширане и хеш-стойност

Хеш-стойността на едно входно съобщение представлява последовател­ност от битове, обикновено с фиксирана дължина (например 160 или 256 бита), извлечено по някакъв начин от съобщението. Алгоритмите, които изчисляват хеш-стойност, се наричат хеширащи алгоритми.

Криптографски силни хеширащи алгоритми

Съществуват различни хеширащи алгоритми, но само някои от тях са криптографски силни (cryptographically secure hash algorithms). При крип­тографски силните хеширащи алгоритми е изключително трудно (почти невъзможно) по дадена хеш-стойност да се намери входно съобщение,  на което тя съответства [Steffen, 1998].

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

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

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

Някои по-известни криптографски алгоритми за хеширане, широко изпол­звани в практиката, са MD4, MD5, RIPEMD160, SHA1, SHA-256 и др.

Цифрово подписване

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

Цифров подпис

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

Цифровият подпис позволява на получателя на дадено съобщение да провери истинския му произход и неговата цялостност (интегритет).

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

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

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

1.1.2.     Технология на цифровия подпис

Криптографията, базирана на публични ключове осигурява надежден метод за цифрово подписване, при който се използват двойки публични и лични ключове [Johner, 2000, стр. 10-12].

Полагане на цифров подпис

Едно лице полага цифров подпис под дадено електронно съобщение (символен низ, файл, документ, e-mail и др.) чрез личния си ключ. Технически цифровото подписване на едно съобщение се извършва на две стъпки, както е показано на фигура 1-1:

Фигура 0‑1. Цифрово подписване на съобщение

1.        На първата стъпка се изчислява хеш-стойност на съобщението (message digest) по някакъв криптографски силен алгоритъм за хеширане (например MD4, MD5, SHA1 или друг).

2.        На втората стъпка от цифровото подписване получената в първата стъпка хеш-стойност на съобщението се шифрира с личния ключ, с който се извършва подписването. За целта се използва някакъв математически алгоритъм за цифров подпис (digital signature algorithm), който изпол­звайки личния ключ преобразува хеш-стойността в шифрирана хеш-стойност, наричана още цифров подпис. Най-често се използват алгоритмите за цифров подпис RSA (който се основава на теорията на числата), DSA (който се основава на теорията на дискретните логаритми) и ECDSA (който се основава на теорията на елиптичните криви). Полученият цифров подпис обикновено се прикрепя към съобщението в специален формат, за да може да бъде верифициран на по-късен етап, когато това е необходимо.

Верификация на цифров подпис

Цифровият подпис позволява на получателя на дадено подписано съобще­ние да провери истинския му произход и неговата цялостност (интегритет). Процесът на проверка (верификация) на цифров подпис има за цел да установи дали дадено съобщение е било подписано с личния ключ, който съответства на даден публичен ключ.

Проверката на цифров подпис не може да установи дали едно съобщение е подписано от дадено лице. За да проверим дали едно лице е подписало дадено съобщение, е необходимо да се сдобием с истинския публичен ключ на това лице. Това е възможно или чрез получаване на публичния ключ по сигурен път (например на дискета или CD) или с помощта на инфраструктурата на публичния ключ чрез използване на цифрови сертификати. Без да имаме сигурен начин за намиране на истинския публичен ключ на дадено лице не можем да имаме гаранция, че даден документ е подписан наистина от него.

Технически проверката на цифров подпис се извършва на три стъпки, както е показано на фигура 1-2:

Фигура 0‑2. Верификация на цифров подпис

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

2.        На втората стъпка се дешифрира цифровият подпис, който трябва да бъде проверен. Дешифри­рането става с публичния ключ, съответстващ на личния ключ, който е използван при подписването на съобщението, и със същия алгоритъм, който е използван при шифри­рането. В резул­тат се получава оригинал­ната хеш-стойност, която е била изчислена при хеширането на ориги­налното съобщение в първата стъпка от про­цеса на подписването му.

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

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

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

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

Причини за невалиден цифров подпис

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

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

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

При верифика­цията на подписан документ, придружен от цифров сертификат, се използва публичният ключ, съдържащ се в сертификата и ако верификацията е успешна, се счита, че документът е изпратен от лицето, описано в сертификата. Разбира се, преди това трябва да се провери валидността на сертификата.

1.2.     Цифрови сертификати и PKI

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

1.2.1.     Модели на доверие между непознати страни

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

За съжаление математическо решение на този проблем няма. Съществуват алгоритми за обмяна на ключове, например алгоритъмът на Diffe-Helman, но те не издържат на атаки от тип „човек по средата” (main-in-the-middle).

За да започнат две страни сигурна комуникация по несигурна преносна среда, е необходимо по някакъв начин те да обменят публичните си ключове. Един от подходите за това е двете страни да се доверят на трета, независима страна, на която вярват, и с нейна помощ да обменят ключовете си. Тази трета страна е в основата на инфраструктурата на публичния ключ, но има различни подходи, по които се избира такава трета страна и различни принципи, на които се изгражда доверието. Тези подходи и принципи се дефинират от т. нар. „модели на доверие[PGP, 1999, стр. 29-33], [NZSSC, 2005].

Разпространени са различни модели на доверие между непознати страни –модел с единствена доверена страна, Web of trust, йерархичен модел, модел на кръстосаната сертификация (cross certification) и др.

Модел с единствена доверена страна

Моделът с единствена доверена страна (директно доверие) е най-простият. При него има единствена точка, централен сървър, на който всички вярват. Сървърът може да съхранява публичните ключове на всички участ­ници в комуника­цията или просто да ги подписва със своя личен ключ, с което да гарантира истинността им.

На фигура 1-3 е показан схематично моделът на директно доверие:

Фигура 0‑3. Директно доверие

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

Този модел е приложим за малки и средни по големина организации. При големи организации настъпват трудности със скалируемостта, защото един сървър не може да обслужи прекалено много клиенти. Понеже сървърът е единствен, рискът е съсредоточен в единствена точка. Така, ако по няка­къв начин сървърът бъде компрометиран, щетите ще са непоправими.

Модел „Web of trust”

Моделът Web of trust” е приложим при малки групи участници, между някои от които има предварително установено доверие. При този модел всеки участник знае истинските публични ключове на част от останалите (има доверие на своите приятели). За установяване на доверие между непознати участ­ници не е необходим централен сървър, който да съхра­нява ключовете на всички, а доверието се трансферира транзитивно от приятел на приятел. Възможно даден участник да подписва цифрово пуб­личните ключове на всички участници, на които има директно доверие.

На фигура 1-4 е показан моделът „Web of trust” в действие:

Фигура 0‑4. Модел на доверие Web of trust

Ако даден участник A има директно доверие на друг участник B, а участник B има директно доверие на участник C, то може да се счита, че участник A има индиректно доверие на участник C. По този начин всеки участник може транзитивно да изгради своя мрежа на доверие.

По модела на Web of Trust работи една от най-големите световни системи за подписване на електронна поща и други документи – PGP (Pretty Good Privacy).

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

Йерархичен модел на доверие

При йерархичния модел на доверие всички участници вярват в няколко доверени трети страни, наречени сертификационни органи (certification authorities – CA). Сертификаци­онните органи от своя страна трансферират доверието на свои подчинени сертификационни органи, а те също могат да го трансферират или да потвърдят доверието към някой конкретен участ­ник в комуникацията.

Нa сертификационните органи от първо ниво (root CA) се вярва безус­ловно. Техните публични ключове са известни предварително на всички участници. На сертификационните органи от междинно ниво се вярва индиректно (транзитивно). Техните публични ключове са подписани от сертификацион­ните органи на предходното ниво. На конкретните учас­тници в комуника­цията се вярва също транзитивно. Техните публични клю­чове са подписани от междинните сертификационни органи (фигура 1-5):

Фигура 0‑5. Йерархичен модел на доверие

Йерархичният модел на доверие е силно разпространен в Интернет, при финансови, e-commerce и e-goverment приложения. Той е мощен и работи добре при голям брой участници.

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

Хибриден модел „кръстосана сертификация

Хибридният модел на кръстосана сертификация се базира на йерархии от сертификационни органи и участници в комуникацията (както при йерар­хичния модел), но позволява транзитивно прехвърляне на доверие между отделните йерархии (както в „Web of trust” модела). Използва се при нужда от обединяване на няколко йерархични инфраструктури на доверие.

На фигура 1-6 моделът е показан схематично:

Фигура 0‑6. Хибриден модел на кръстосана сертификация

Кой модел да използваме?

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

1.2.2.     Цифрови сертификати и инфраструктура на публичния ключ

Инфраструктурата на публичния ключ разчита на цифрови сертификати и сертификационни органи за да осигури доверие между непознати страни. Нека разгледаме по-детайлно нейната организация.

Цифрови сертификати

Цифровите сертификати свързват определен публичен ключ с определено лице. Можем да ги въз­приемаме като електронни документи, удостоверя­ващи, че даден публичен ключ е собственост на дадено лице [PGP, 1999, стр 21-27].

Сертификатите могат да имат различно ниво на доверие. Те могат да бъдат саморъчно-подписани (self-signed) или издадени (подписани) от някого. За по-голяма сигурност сертификатите се издават от специални институции, на които се има доверие (т. нар. сертификационни органи) при строги мерки за сигур­ност, които гарантират тяхната достоверност.

Съществуват различни стандарти за цифрови сертификати, например PGP (Pretty Good Privacy), SPKI/SDSI (Simple Public Key Infrastructure / Simple Distributed Security Infrastructure) и X.509. В практиката за целите на циф­ровия подпис най-масово се използват X.509 сертификатите. Те са ориен­тирани към йерархичния модел на доверие.

Стандартът X.509

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

Инфраструктура на публичния ключ

Инфраструктурата на публичния ключ (public key infrastructure – PKI) предоставя архитектурата, организацията, техниките, практиките и проце­дурите, които подпомагат чрез цифрови сертификати приложението на криптографията, базирана на публични ключове (public key cryptography) за целите на сигурната обмяна на информация по несигурни мрежи и преносни среди [GlobalSign, 1999].

PKI използва т. нар. сертификационни органи (certification authorities), които управляват и подпомагат процесите по издаване, анулиране, съхра­няване и верификация на цифрови сертификати.

Доверието в рамките на PKI инфраструктурата между непоз­нати страни се базира на цифрови серти­фикати, чрез които даден сертификационен орган удостоверява кой е собственикът на даден публичен ключ.

Има различни типове PKI инфраструктура, но ние ще разгледаме само най-разпространения тип – този с йерархичен модел на доверие, който широко се използва в Интернет (например при HTTPS протокола за сигурна връзка между уеб браузър и уеб сървър).

Услуги на PKI инфраструктурата

PKI инфраструктурата има за цел да осигури следните услуги на своите потребители:

-        Конфиденциалност при пренос на информация. Осъществява се чрез шифриране на информацията с публичен ключ и дешифриране със съответния му личен ключ.

-        Интегритет (неизменимост) на пренасяната информация. Осъщест­вява се чрез техно­логията на цифровия подпис.

-        Идентификация и автентикация. Цифровите сертификати осигуря­ват идентификация на даден участник в комуникацията и позволяват той да бъде автентикиран по сигурен начин. Сертификационните органи гарантират с цифров подпис, че даден публичен ключ е на даден участник.

-        Невъзможност за отказ (non-repudiation) от извършено действие. Осъществява се чрез цифрови подписи, които идентифицират участника, извършил дадено действие, за което се е подписал.

Сертификационни органи

За издаването и управлението на цифрови сертификати инфраструктурата на публичния ключ разчита на т. нар. сертификационни органи (доставчи­ци на удостоверителни услуги), които позволяват да се изгради доверие между непознати страни, участнички в защитена комуникация, базирана на публични и лични ключове.

Сертификационен орган (certification authority – CA) е институция, която е упълномощена да издава цифрови сертификати и да ги подписва със своя личен ключ [Raina, 2003, стр 30-31]. Целта на сертификатите е да пот­върдят, че даден публичен ключ е притежание на дадено лице, а целта на сертифика­ционните органи е да потвърдят, че даден сертификат е истин­ски и може да му се вярва. В този смисъл сертификационните органи се явяват безпристрастна доверена трета страна, която осигурява висока степен на сигурност при компю­търно-базирания обмен на информация.

Сертификационните органи се наричат още удостоверяващи органи или доставчици на удостоверителни услуги.

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

Регистрационен орган

Регистрационният орган (registration authoruty – RA) е орган, който е упъл­номощен от даден сертификационния орган да проверява самоличността и автентичността на заявителя при заявка за издаване на цифров сертифи­кат. Сертификационните органи издават цифрови сертификати на дадено лице след като получат потвърждение от регистрационния орган за него­вата самоличност [Raina, 2003, стр. 33-35].

Регистрационните органи се явяват на практика меж­динни звена в процеса на издаване на цифрови сертификати. Регистрацио­нен орган може да бъде както дадено физическо лице, например системният админи­стратор при малка корпоративна мрежа, така и дадена институция, например орган упълномощен от държавата.

Ниво на доверие в сертификатите

В зависимост от степента на сигурност, която е необходима, се използват сертификати с различно ниво на доверие. За издаването на някои видове сертификати е необходим само e-mail адрес на собственика им, а за издаването на други е необходимо лично присъствие на лицето-собстве­ник, което полага подпис върху документи на хартия в някой от офисите на регистрационния орган.

Ниво на доверие в сертификационните органи

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

За да се вярва на един сертификационен орган, той трябва да е глобален и съответно световно признат и утвърден или локален и утвърден по силата на локалните закони в дадена държава.

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

Световно утвърдени сертификационни органи

Сред най-известните утвърдени глобални световни сертификационни органи са компаниите: GlobalSign NV/SA (www.globalsign.net), Thawte Consulting (www.thawte.com), VeriSign Inc. (www.verisign.com), TC TrustCenter AG (www.trustcenter.de), Entrust Inc. (www.entrust.com) и др.

Български сертификационни органи

В България има няколко сертификационни органа, утвърдени от закона за универсалния електронен подпис и комисията за регулиране на съобще­нията (www.crc.bg). Сред тях са фирмите: “Информационно обслуж­ване” АД (www.stampit.org) и “Банксервиз” АД (www.b-trust.org).

Йерархична структура на сертификационните органи

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

Един сертификационен орган може да бъде от първо ниво (top-level certification authority; Root CA) или да бъде от някое следващо ниво (вж. фигура 1-7):

Фигура 0‑7. Йерархия на сертификационните органи

Сертификационните органи от първо ниво при започването на своята дейност издават сами на себе си сертификат, който подписват с него самия. Тези сертификати са саморъчно-подписани и се наричат Root-сертифи­кати.

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

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

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

Технически е възможно всеки сертификат да бъде използван за да се подпише с него всеки друг сертификат, но на практика възможността за подписване на други сертификати е силно ограничена. Всеки сертификат съдържа в себе си неизменими параметри, които указват дали може да бъде използван за подписване на други сертификати.

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

Един сертификационен орган издава сертификати, с които могат да бъдат подписвани други сертификати, само на други сертификационни органи, като по този начин ги прави непосредствено подчинени на себе.

Саморъчно подписани сертификати

Един сертификат може да бъде подписан от друг сертификат (най-често собственост на някой сертификационен орган) или да е подписан от самия себе си.

Сертификатите, които не са подписани от друг сертификат, а са подписани от самите себе си, се наричат саморъчно-подписани сертификати (self-signed certificates). В частност Root-сертификатите на сертификационните органи на първо ниво се явяват саморъчно-подписани сертификати [Wikipedia, SSC, 2005].