Сертификат открытого ключа

Сертификат открытого ключа (сертификат электронной подписи, сертификат ключа подписи, сертификат ключа проверки электронной подписи (согласно ст. 2 Федерального Закона от 06.04.2011 «Об электронной подписи» № 63-ФЗ)) — электронный или бумажный документ, содержащий открытый ключ, информацию о владельце ключа, области применения ключа, подписанный выдавшим его Удостоверяющим центром и подтверждающий принадлежность открытого ключа владельцу.

Открытый ключ может быть использован для организации защищённого канала связи с владельцем двумя способами:
 для проверки подписи владельца (аутентификация)
 для шифрования посылаемых ему данных (конфиденциальность)

Существует две модели организации инфраструктуры сертификатов: централизованная (PKI) и децентрализованная (реализуемая на основе т. н. сетей доверия), получившая наибольшее распространение в сетях PGP.

Принцип работы 

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

Идея сертификата — это наличие третьей стороны, которой доверяют две другие стороны информационного обмена. Предполагается, что таких третьих сторон немного, и их открытые ключи всем известны каким-либо способом, например, хранятся в операционной системе или публикуются в журналах. Таким образом, подлог открытого ключа третьей стороны легко выявляется.

Сертификат открытого ключа выдаётся центром сертификации и состоит из таких полей как:
 сам открытый ключ владельца сертификата,
 срок действия,
 имя эмитента (центра сертификации),
 имя владельца сертификата
 и, самой важной части, цифровой подписи.
Цифровая подпись гарантирует невозможность подделки сертификата. Она является результатом криптографической хеш-функции от данных сертификата, зашифрованным закрытым ключом центра сертификации. Открытый ключ центра сертификации является общеизвестным, поэтому любой может расшифровать им цифровую подпись сертификата, затем вычислить хеш самостоятельно и сравнить, совпадают ли хеши. Если хеши совпадают — значит сертификат действительный и можно не сомневаться, что открытый ключ принадлежит именно тому, с кем мы собираемся устанавливать соединение.

Если Алиса сформирует сертификат со своим публичным ключом и этот сертификат будет подписан третьей стороной (например, Трентом), любой, доверяющий Тренту, сможет удостовериться в подлинности открытого ключа Алисы. В централизованной инфраструктуре в роли Трента выступает удостоверяющий центр. В сетях доверия Трент может быть любым пользователем, и следует ли доверять этому пользователю, удостоверившему ключ Алисы, решает сам отправитель сообщения.

В SSL используется целая цепочка доверия: сертификат подписывается закрытым ключом владельца сертификата, находящегося выше в цепи.

Формальное описание 
Пусть имеются две стороны информационного обмена — , , желающие обмениваться сообщениями конфиденциально, и третья сторона  (играющая роль удостоверяющего центра), которой доверяют  и .
 Стороне  принадлежит пара ключей (, ), где  — открытый ключ, а  — закрытый (секретный) ключ стороны .
 Стороне  принадлежит пара ключей (, ).
 регистрируется у  (посылает запрос на подпись), указывая данные о себе и свой . Сторона  посредством определенных механизмов "удостоверяет личность" стороны  и выдает стороне  сертификат , устанавливающий соответствие между субъектом  и ключом . Сертификат  содержит:
 ключ ,
 идентификационные данные субъекта ,
 идентификационные данные удостоверяющей стороны ,
 подпись стороны , которую обозначим . Подпись  — это хеш (набор символов, хеш-сумма/хеш-код), полученный в результате применения хеш-функции к данным сертификата , зашифрованный стороной  с использованием своего закрытого ключа .
 и другую информацию.
 посылает стороне  свой сертификат .  проверяет цифровую подпись . Для этого  
 самостоятельно вычисляет хеш от данных сертификата ,
 расшифровывает ЭЦП сертификата  с помощью всем известного , получив другой хеш,
 проверяет равенство этих двух хешей. 
Если полученные хеши равны - ЭЦП корректна, а это подтверждает, что  действительно принадлежит .

Теперь , зная открытый ключ  и зная, что он принадлежит именно , может шифровать этим открытым ключом все последующие сообщения для . И только  сможет их расшифровать, так как  известен только .

Структура сертификата 
Электронная форма сертификата определяется стандартом X.509. Перечень обязательных и необязательных полей, которые могут присутствовать в сертификате, определяется данным стандартом, а также законодательством. Согласно законодательству России и Украины (закон «Об электронной цифровой подписи») сертификат должен содержать следующие поля:

Кроме этого в сертификат могут вноситься дополнительные поля.

Бумажный сертификат должен выдаваться на основании подтверждающих документов и в присутствии лица с последующим заверением подписями работника УЦ и носителя закрытого ключа.

Российские стандарты 
В России действуют свои криптографические стандарты. Использование их совместно с сертификатами описано в RFC4491: Using GOST with PKIX.

См. также 
 Цифровой сертификат
 Цепочка доверия
 Wildcard-сертификат

Примечания

Ссылки 
 Статья «Электронные подписи» c сайта Linux Format Wiki

Криптография с открытым ключом