Криптография и Свобода - 2. Public Key Infrasturcture (PKI)
Public Key Infrastructure (PKI)
Аббревиатура PKI в повседневной жизни имеет множество назначений. Это, в первую очередь, система выработки и регистрации собственных уникальных ключевых параметров, необходимых для каких-то целей. А каких? Как правило, для аутентификации (подтверждения подлинности) клиента на каком-то сервере. Тут мы плавно переходим к продолжению предыдущей главы: есть криптографические стандарты, а для чего они нужны и как их использовать?
Когда какой-то человек приходит в отделение банка, то его просят представиться: кто вы и что вам здесь надо. Если тот же человек пытается зайти на банковский сервер, то сервер делает фактически то же самое – пытается проверить подлинность и цели обратившегося к нему клиента. А как это сделать? Одним из распространенных методов проверки подлинности клиента является его криптографическая аутентификация, т.е. проверка подлинности с помощью криптографических методов.
Дальше нам потребуются три источника и три составных части PKI: private key, public key и сертификат. Читатели, знакомые с этими понятиями, смело могут перевернуть эту страницу или отлучиться на минутку по каким-то неотложным делам. Когда вернетесь, все эти заморочки закончатся, у вас уже будет готовый персональный сертификат. Ну а с остальными – курс криптографического ликбеза.
Криптографическая аутентификация предполагает проверку электронно-цифровой подписи (ЭЦП) клиента. А нормальная ЭЦП, в свою очередь, предполагает наличие у клиента ключа для подписи, а у сервера – ключа для проверки подписи клиента. Ключ, с помощью которого клиент осуществляет подпись, называется private key, а ключ, с помощью которого сервер осуществляет проверку подписи клиента – public key. По-русски - закрытые и открытые ключи.
Вопросы и ответы.
- Есть ли у клиента его открытый ключ?
Есть.
- Есть ли у сервера закрытый ключ клиента?
Нет.
- Связаны ли между собой закрытые и открытые ключи?
Да, связаны, каждому закрытому ключу соответствует строго определенный открытый ключ.
- Можно ли по закрытому ключу определить открытый ключ?
Да.
- Можно ли по открытому ключу определить закрытый?
Нет.
Детская писательница Агния Барто в таких случаях говорила: «Мы с Тамарой ходим парой...». Точно так же, парой, ходят по криптографическим просторам public and private keys. И называют их key pair, а в интерфейсе PKCS # 11 функция их выработки тоже называется C_GenerateKeyPair. Тандем, если кто следит за политикой в современной России.
Ну и, как принято в тандеме, один главнее. Private key, несомненно, главнее.
В общих словах, про тандем все. Если кто заинтересуется подробностями: каким образом строятся и используются в ЭЦП закрытый и открытые ключи – милости прошу на Wikipedia.
Теперь о сертификате. Открытый ключ еще называют публичным, потому что он у всех на виду. А появляться на публике голому открытому ключу просто неприлично. Вот его приодевают и приукрашивают в специальной организации, называемой Центром Сертификации (ЦС) или, по терминологии Microsoft, Certification Authority (CA). Приодетый и приукрашенный открытый ключ, получивший в ЦС персональную ЭЦП, и принято называть сертификатом.
Как приодевают и приукрашивают в ЦС открытый ключ – особая песня. Различных атрибутов в сертификате может быть великое множество: фамилия, имя, отчество владельца, его должность, место работы, место жительства, электронная почта и т.д. и т.п. Указывается также назначение ключа (key usage или extended key usage): для подписи или шифрования электронной почты, для идентификации пользователя на сервере, для подписи программных кодов, для EFS (Encrypted File System) и прочая, прочая, прочая. В сертификате обязательно присутствуют срок действия ключа и электронная подпись ЦС. Здесь опять же, пробегая галопом по такой необъятной теме, как состав информации, включаемой в сертификат, я руководствовался принципами гуманизма к обычному читателю, стараясь не перегружать далекого от криптографии человека всеми нюансами, связанными с созданием в современных информационных системах персональных сертификатов. Вкратце: это «одетый» открытый ключ, получивший «паспорт» - персональную ЭЦП в ЦС. «Одежд» может быть много, иногда и самых экзотических: корейцы, например, включают в свои сертификаты хеш-функцию от национального ID и некоторого случайного числа – это их персональный атрибут, который называется KR, по-видимому, Korean Random.
Ходят слухи, что в одной стране хотят включить в персональный публичный сертификат чиновника размеры взяток, которые можно дать ему по Internet, и создать автоматизированную систему электронного взяткооборота, являющуюся частью электронного ....
О трех источниках и трех составных частях PKI: public, private keys and certificates – пока хватит. Надеюсь, что даже у непросвещенных читателей сложилось некоторое общее представление об этих понятиях, пора поговорить и о CA – Центре выдачи сертификатов, той организации, где «одевают» поступившие к ним public keys.
Возможно, это именно тот случай, когда нужно вмешательство государства в криптографические проблемы. Ведь CA должен быть той организацией, которой все доверяют. Именно CA своей ЭЦП подтверждает, что содержащийся в сертификате открытый ключ принадлежит именно тому, кто прописан в его атрибутах, и что этому клиенту можно доверять. Как CA это делает – к криптографии в большинстве случаев не имеет прямого отношения.
Общенациональный CA я бы сравнил с эмиссионным центром, печатающим денежные купюры, которым все доверяют. Наличие общенационального CA является признаком высокоразвитости страны, наличия в ней общедоступных современных технологий электронной коммерции и электронного документооборота. Хотя, наверное, я бы назвал условие наличия национального CA достаточным, но не необходимым. Internet-технологии, как правило, не знают национальных границ, сейчас в мире уже существуют общепризнанные CA такие, как VeriSign, GlobalSign, DigiCert и другие.
Процесс получения персонального сертификата в CA является одним из первоначальных понятий в PKI. Как составить запрос на сертификат (PKCS # 10), что в него включить, как получить готовый сертификат из CA: online (Enterprise CA) или offline (Stand alone CA) – вот те проблемы, которые должны быть решены в PKI. В отличии от России (offline) у корейцев offline не может использоваться просто по определению: только online! Никаких чиновников, только диалог компьютеров в режиме реального времени. И, завершая эту часть PKI, посвященную диалогу с CA, отмечу три ключевых слова: new, renew, revoke. По русски: клиент должен иметь возможность в режиме реального времени:
- запросить новый сертификат;
- обновить действующий сертификат;
- отменить действующий сертификат.
Все эти возможности у корейцев реально реализованы, любой пользователь любого корейского банка при открытии счета получает свои персональные коды для Internet Banking. Программное обеспечение PKI, являющееся фактически ActiveX компонентой, автоматически и бесплатно скачивается с сайта банка, и с помощью этого ActiveX и полученных в банке персональных кодов пользователь бесплатно в режиме online получает в общенациональном сертификационном центре Yessign сертификат, который затем может быть использован в системе Internet Banking любого корейского банка. Читателя, испугавшегося слова ActiveX, хочу успокоить: не надо бояться, оно не кусается. Это такие специальные динамические библиотеки, которые, в частности, могут понимать и выполнять некоторые функции, вызываемые из браузера Internet Explorer.
А теперь о том, как у корейцев организован диалог клиентского компьютера с банковским сервером.
С черного хода. В том смысле, что основной диалог клиента с сервером происходит через обычный порт, через который работает протокол HTTP, а та часть диалога, где требуется авторизация клиента, в результате чего он получает доступ к своему банковскому счету – через другой, причем у разных банков эти порты тоже могут быть разные. И у всех, как правило, этот порт отличен от стандартного 443 – порта HTTPS. И шифруется при этом не все подряд, а только конфиденциальная информация.
Если героический читатель-непрограммист все честно дочитал до этого места и заинтересовался подробностями диалога клиентского компьютера с корейским банковским сервером, то хочу по секрету сообщить, что этот диалог очень похож на диалог клиент-сервер в протоколе HTTPS. Вот только конфиденциальные страницы браузер получает с сервера не сам, а через ActiveX, о котором уже шла речь при получении сертификата. Этот же ActiveX выполняет и функции соединения с банковским сервером через специальный порт (handshake – привет-привет, давай пообщаемся, ну и так далее...).
Что же в результате получилось?
Вместо грубой силы – сломаем Windows так, чтобы HTTPS работал по нашему – корейский клиент, ничего не ломая, протаптывает собственную тропочку к банковскому серверу и по ней уже ведет свои дела с персональным банковским счетом. Ведет честно, по правилам SSL, только шифрует при этом не весь протокол, а только то, что является конфиденциальной информацией на странице и с использованием корейского национального алгоритма симметричного шифрования SEED.
В Интернете я наткнулся на интересную презентацию, которую приготовил mr. Jae-IL, Lee, Vice President of Korea Information Security Agency and Secretary General of Korea PKI Forum. В ней дается краткое представление о PKI наиболее развитых стран азиатско-тихоокеанского региона: Южной Кореи, Китая, Японии, Сингапура, Тайваня, Таиланда и Индии. В частности, с момента появления PKI в феврале 1999 года в Корее было выдано примерно 11 миллионов сертификатов, а в Китае – 5 млн. с августа 2004. По остальным странам даются только даты появления PKI: в Японии – апрель 2001, Сингапур – 1998 год, Тайвань – апрель 2002, Таиланд – 2001 год, Индия – июнь 2000. Россия в этой презентации даже не упоминается.
В самой Корее действует 6 национальных сертификационных центров.
Около 70% выданных сертификатов используются для Internet Banking
Мне, безусловно, после первой пары лет «въезжания» в международные криптографические стандарты захотелось въехать и в корейские протоколы обмена клиента с банковским сервером. Как полноценный зарубежный специалист, официально зарегистрированный в корейской иммиграционной службе, я имел свой ID и свои счета в корейских банках, следовательно, фактически ничем не отличался от корейца и реально использовал их Internet Banking. Я попытался написать своего клиента, который мог бы успешно общаться с корейским банковским сервером и совершать банковские операции от моего имени. Стандартный корейский клиент, автоматически загружаемый с банковского сервера на мой компьютер, иногда вдруг переходил на корейский язык и выдавал какие-то непонятки для русского программиста.
Корейский банковский сервер, как и сами корейцы, имел дружественный интерфейс и терпеливо выносил все мои муки творчества при создании собственного клиента. Примерно через месяц я научился с ним здороваться и получать доступ к своему банковскому счету с помощью своего клиента.
«... Есть надписи на русском языке» как пел В.С.Высоцкий.
Назад Продолжение
В начало книги Криптография и Свобода - 2