Опубликован: 26.01.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 6:

Инфраструктура Открытого Ключа (часть 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

Конкретные типы будут описаны ниже.

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Ярослав Ханько
Ярослав Ханько
Украина
Jacob Liberman
Jacob Liberman
Нидерланды, Amsterdam