Сертификат открытого ключа
Сертификат открытого ключа (сертификат электронной подписи, сертификат ключа подписи, сертификат ключа проверки электронной подписи (согласно ст. 2 Федерального Закона от 06.04.2011 «Об электронной подписи» № 63-ФЗ)) — электронный или бумажный документ, содержащий открытый ключ, информацию о владельце ключа, области применения ключа, подписанный выдавшим его Удостоверяющим центром и подтверждающий принадлежность открытого ключа владельцу.
Открытый ключ может быть использован для организации защищённого канала связи с владельцем двумя способами:
- для проверки подписи владельца (аутентификация)
- для шифрования посылаемых ему данных (конфиденциальность)
Существует две модели организации инфраструктуры сертификатов: централизованная (PKI) и децентрализованная (реализуемая на основе т. н. сетей доверия), получившая наибольшее распространение в сетях PGP.
Принцип работы
Сертификаты, как правило, используются для обмена зашифрованными данными в больших сетях. Криптосистема с открытым ключом решает проблему обмена секретными ключами между участниками безопасного обмена, однако не решает проблему доверия к открытым ключам. Предположим, что Алиса, желая получать зашифрованные сообщения, генерирует пару ключей, один из которых (открытый) она публикует каким-либо образом. Любой, кто желает отправить ей конфиденциальное сообщение, имеет возможность зашифровать его этим ключом, и быть уверенным, что только она (так как только она обладает соответствующим секретным ключом) сможет это сообщение прочесть. Однако описанная схема ничем не может помешать злоумышленнику Давиду создать пару ключей, и опубликовать свой открытый ключ, выдав его за ключ Алисы. В таком случае Давид сможет расшифровывать и читать, по крайней мере, ту часть сообщений, предназначенных Алисе, которые были по ошибке зашифрованы его открытым ключом.
Идея сертификата — это наличие третьей стороны, которой доверяют две другие стороны информационного обмена. Предполагается, что таких третьих сторон немного, и их открытые ключи всем известны каким-либо способом, например, хранятся в операционной системе или публикуются в журналах. Таким образом, подлог открытого ключа третьей стороны легко выявляется.
Сертификат открытого ключа выдаётся центром сертификации и состоит из таких полей как:
- сам открытый ключ владельца сертификата,
- срок действия,
- имя эмитента (центра сертификации),
- имя владельца сертификата
- и, самой важной части, цифровой подписи.
Цифровая подпись гарантирует невозможность подделки сертификата. Она является результатом криптографической хеш-функции от данных сертификата, зашифрованным закрытым ключом центра сертификации. Открытый ключ центра сертификации является общеизвестным, поэтому любой может расшифровать им цифровую подпись сертификата, затем вычислить хеш самостоятельно и сравнить, совпадают ли хеши. Если хеши совпадают — значит сертификат действительный и можно не сомневаться, что открытый ключ принадлежит именно тому, с кем мы собираемся устанавливать соединение.
Если Алиса сформирует сертификат со своим публичным ключом и этот сертификат будет подписан третьей стороной (например, Трентом), любой, доверяющий Тренту, сможет удостовериться в подлинности открытого ключа Алисы. В централизованной инфраструктуре в роли Трента выступает удостоверяющий центр. В сетях доверия Трент может быть любым пользователем, и следует ли доверять этому пользователю, удостоверившему ключ Алисы, решает сам отправитель сообщения.
В SSL используется целая цепочка доверия: сертификат подписывается закрытым ключом владельца сертификата, находящегося выше в цепи.[1]
Формальное описание
Пусть имеются две стороны информационного обмена — [math]\displaystyle{ A }[/math], [math]\displaystyle{ B }[/math], желающие обмениваться сообщениями конфиденциально, и третья сторона [math]\displaystyle{ T }[/math] (играющая роль удостоверяющего центра), которой доверяют [math]\displaystyle{ A }[/math] и [math]\displaystyle{ B }[/math].
- Стороне [math]\displaystyle{ A }[/math] принадлежит пара ключей ([math]\displaystyle{ KA_o }[/math], [math]\displaystyle{ KA_s }[/math]), где [math]\displaystyle{ KA_o }[/math] — открытый ключ, а [math]\displaystyle{ KA_s }[/math] — закрытый (секретный) ключ стороны [math]\displaystyle{ A }[/math].
- Стороне [math]\displaystyle{ T }[/math] принадлежит пара ключей ([math]\displaystyle{ KT_o }[/math], [math]\displaystyle{ KT_s }[/math]).
[math]\displaystyle{ A }[/math] регистрируется у [math]\displaystyle{ T }[/math] (посылает запрос на подпись), указывая данные о себе и свой [math]\displaystyle{ KA_o }[/math]. Сторона [math]\displaystyle{ T }[/math] посредством определенных механизмов "удостоверяет личность" стороны [math]\displaystyle{ A }[/math] и выдает стороне [math]\displaystyle{ A }[/math] сертификат [math]\displaystyle{ C }[/math], устанавливающий соответствие между субъектом [math]\displaystyle{ A }[/math] и ключом [math]\displaystyle{ KA_o }[/math]. Сертификат [math]\displaystyle{ C }[/math] содержит:
- ключ [math]\displaystyle{ KA_o }[/math],
- идентификационные данные субъекта [math]\displaystyle{ A }[/math],
- идентификационные данные удостоверяющей стороны [math]\displaystyle{ T }[/math],
- подпись стороны [math]\displaystyle{ T }[/math], которую обозначим [math]\displaystyle{ ST }[/math]. Подпись [math]\displaystyle{ ST }[/math] — это хеш (набор символов, хеш-сумма/хеш-код), полученный в результате применения хеш-функции к данным сертификата [math]\displaystyle{ C }[/math], зашифрованный стороной [math]\displaystyle{ T }[/math] с использованием своего закрытого ключа [math]\displaystyle{ KT_s }[/math].
- и другую информацию.
[math]\displaystyle{ A }[/math] посылает стороне [math]\displaystyle{ B }[/math] свой сертификат [math]\displaystyle{ C }[/math]. [math]\displaystyle{ B }[/math] проверяет цифровую подпись [math]\displaystyle{ ST }[/math]. Для этого [math]\displaystyle{ B }[/math]
- самостоятельно вычисляет хеш от данных сертификата [math]\displaystyle{ C }[/math],
- расшифровывает ЭЦП сертификата [math]\displaystyle{ ST }[/math] с помощью всем известного [math]\displaystyle{ KT_o }[/math], получив другой хеш,
- проверяет равенство этих двух хешей.
Если полученные хеши равны - ЭЦП корректна, а это подтверждает, что [math]\displaystyle{ KA_o }[/math] действительно принадлежит [math]\displaystyle{ A }[/math].
Теперь [math]\displaystyle{ B }[/math], зная открытый ключ [math]\displaystyle{ A }[/math] и зная, что он принадлежит именно [math]\displaystyle{ A }[/math], может шифровать этим открытым ключом все последующие сообщения для [math]\displaystyle{ A }[/math]. И только [math]\displaystyle{ A }[/math] сможет их расшифровать, так как [math]\displaystyle{ KA_s }[/math] известен только [math]\displaystyle{ A }[/math].
Структура сертификата
Электронная форма сертификата определяется стандартом X.509. Перечень обязательных и необязательных полей, которые могут присутствовать в сертификате, определяется данным стандартом, а также законодательством. Согласно законодательству России и Украины (закон «Об электронной цифровой подписи») сертификат должен содержать следующие поля:
Украина | Россия | |
---|---|---|
уникальный регистрационный номер сертификата | + | + |
дата и время начала и окончания срока действия сертификата | + | + |
фамилия, имя и отчество владельца сертификата ключа подписи или псевдоним владельца | + | + |
открытый ключ | + | + |
наименование и реквизиты ЦС | + | + |
наименование криптографического алгоритма | + | + |
информацию об ограничении использования подписи | + | + |
указание на страну выпуска сертификата | + | - |
Кроме этого в сертификат могут вноситься дополнительные поля.
Бумажный сертификат должен выдаваться на основании подтверждающих документов и в присутствии лица с последующим заверением подписями работника УЦ и носителя закрытого ключа.
Российские стандарты
В России действуют свои криптографические стандарты. Использование их совместно с сертификатами описано в RFC4491: Using GOST with PKIX.
См. также
Примечания
- ↑ https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ SSL certificate chain