Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Инфраструктура Открытого Ключа (часть 6)
Структуры данных
Рассмотрим структуры данных, необходимые для управляющих сообщений PKI. Далее опишем ограничения на значения и последовательность событий для каждой из управляющих операций PKI и рассмотрим, как это может быть инкапсулировано в различные транспортные механизмы.
Полное сообщение PKI
Все сообщения, используемые для управления PKI, имеют следующую структуру:
PKIMessage ::= SEQUENCE { header PKIHeader, body PKIBody, protection [0] PKIProtection OPTIONAL, extraCerts [1] SEQUENCE SIZE (1..MAX) OF Certificate OPTIONAL }
PKIHeader содержит информацию, которая является общей для многих сообщений PKI.
PKIBody содержит информацию, специфичную для сообщения.
PKIProtection, если используется, содержит биты, которые защищают сообщение PKI.
Поле extraCerts может содержать сертификаты, которые могут использоваться получателем. Например, оно может применяться СА или RA для предоставления конечному участнику сертификатов, которые он должен проверить с использованием собственного нового сертификата (если, например, СА, который выпустил сертификат конечного участника, не является для него корневым СА). Заметим, что данное поле не обязательно должно содержать сертификационный путь – получатель может отсортировать, выбрать или каким-то другим образом обработать дополнительные сертификаты, чтобы иметь возможность использовать их.
Заголовок сообщения PKI
Все PKI-сообщения требуют определенной информации для возможности адресации и идентификации транзакций. Некоторая необходимая информация содержится в заголовке транспортного уровня; однако если PKI-сообщение защищено, то данная информация защищена тоже (например, безопасность транспортного уровня может не предполагаться).
Для данной информации используется следующая структура данных:
PKIHeader ::= SEQUENCE { pvno INTEGER { ietf-version2 (1) }, sender GeneralName, -- идентификация отправителя recipient GeneralName, -- идентификация ожидаемого получателя messageTime [0] GeneralizedTime OPTIONAL, -- время создания данного сообщения -- (используется, если отправитель -- считает, что транспорт должен быть -- "соответствующим", например, что для -- получателя важно время) protectionAlg [1] AlgorithmIdentifier OPTIONAL, -- алгоритм, используемый для вычисления -- защищенных битов senderKID [2] KeyIdentifier OPTIONAL, recipKID [3] KeyIdentifier OPTIONAL, -- идентифицирует конкретные ключи, -- используемые для защиты transactionID [4] OCTET STRING OPTIONAL, -- идентифицирует транзакцию; должно быть -- одним и тем же соответственно в -- сообщениях запроса, ответа и -- подтверждения senderNonce [5] OCTET STRING OPTIONAL, recipNonce [6] OCTET STRING OPTIONAL, -- nonces, используемые для защиты от -- replay-атак, senderNonce вставляется -- создателем данного сообщения; -- recipNonce является nonce, предвари- -- тельно вставленным в соответствующее -- сообщение ожидаемым получателем -- данного сообщения freeText [7] PKIFreeText OPTIONAL, -- может быть использовано для указания -- контекстно-зависимых инструкций generalInfo [8] SEQUENCE SIZE (1..MAX) OF InfoTypeAndValue OPTIONAL -- может быть использовано для указания -- контекстно-зависимой информации } PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String -- текст представлен как UTF-8 String -- (замечание: каждый UTF8String должен -- включать RFC 1766 language tag для -- указания языка, на котором -- представлен текст)
Поле pvno для данной версии спецификации фиксировано.
Поле sender содержит имя отправителя PKIMessage.
Данное имя (в сочетании с senderKID, если оно используется) должно применяться для проверки защиты сообщения. Если об отправителе ничего не известно (например, в сообщении начальной регистрации, когда конечный участник может не знать собственный DN, e-mail, IP адрес и т.д.), то поле sender должно содержать значение NULL ; это означает, что последовательность RDN имеет нулевую длину. В таком случае поле senderKID должно содержать идентификатор (например, номер), указывающий получателю на информацию о соответствующем разделяемом секрете, который используется для проверки сообщения.
Поле recipient содержит имя получателя PKIMessage. Данное имя (в сочетании с recipKID, если он используется) должно применяться для проверки защиты сообщения.
Поле protectionAlg указывает алгоритм, используемый для защиты сообщения. Если биты защиты не применяются (заметим, что PKIProtection является OPTIONAL ), то данное поле должно быть опущено; если биты защиты применяются, то данное поле также должно использоваться.
SenderKID и recipKID используются для указания того, какие ключи были задействованы для защиты сообщения ( recipKID обычно требуется только в том случае, если для защиты сообщения используются ключи Диффи-Хеллмана).
Поле transactionID в заголовке сообщения может использоваться для того, чтобы допускать корреляцию с предыдущим запросом. Например, в случае с RA может существовать много отложенных на данный момент запросов.
Поля senderNonce и recipNonce защищают PKIMessage от replay-атак.
В поле messageTime указывается время создания сообщения. Это помогает конечным участникам корректировать свое локальное время в соответствии с временем центральной системы.
Поле freeText может использоваться для передачи получателю читаемого сообщения (на некотором языке). Первый язык используется для указания требуемого в ответе языка.
Поле generalInfo может применяться для передачи получателю дополнительных данных для машинной обработки.
Тело сообщения PKI
PKIBody ::= CHOICE { -- элементы, специфичные для конкретного сообщения ir [0] CertReqMessages, -- Initialization Request ip [1] CertRepMessage, -- Initialization Response cr [2] CertReqMessages, -- Certification Request cp [3] CertRepMessage, -- Certification Response p10cr [4] CertificationRequest, -- PKCS #10 -- Certification Request popdecc [5] POPODecKeyChallContent, -- pop Challenge popdecr [6] POPODecKeyRespContent, -- pop Response kur [7] CertReqMessages, -- Key Update Request kup [8] CertRepMessage, -- Key Update Response krr [9] CertReqMessages, -- Key Recovery Request krp [10] KeyRecRepContent, -- Key Recovery Response rr [11] RevReqContent, -- Revocation Request rp [12] RevRepContent, -- Revocation Response ccr [13] CertReqMessages, -- Cross-Cert. Request ccp [14] CertRepMessage, -- Cross-Cert. Response ckuann [15] CAKeyUpdAnnContent, -- CA Key Update Ann. cann [16] CertAnnContent, -- Certificate Ann. rann [17] RevAnnContent, -- Revocation Ann. crlann [18] CRLAnnContent, -- CRL Announcement conf [19] PKIConfirmContent, -- Confirmation nested [20] NestedMessageContent, -- Nested Message genm [21] GenMsgContent, -- General Message genp [22] GenRepContent, -- General Response error [23] ErrorMsgContent -- Error Message }Листинг 18.1. Синтаксис тела сообщения PKI
Конкретные типы будут описаны ниже.