Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Инфраструктура Открытого Ключа (часть 6)
Синтаксис CertRequest
Синтаксис CertRequest состоит из запроса идентификатора, шаблона содержимого сертификата и дополнительной последовательности управляющей информации.
CertRequest ::= SEQUENCE { certReqId INTEGER, -- ID для обеспечения соответствия -- между запросом и ответом certTemplate CertTemplate, -- поля из сертификата, который -- должен быть выпущен controls Controls OPTIONAL -- атрибуты, используемые при -- выпуске сертификата } CertTemplate ::= SEQUENCE { version [0] Version OPTIONAL, serialNumber [1] INTEGER OPTIONAL, signingAlg [2] AlgorithmIdentifier OPTIONAL, issuer [3] Name OPTIONAL, validity [4] OptionalValidity OPTIONAL, subject [5] Name OPTIONAL, publicKey [6] SubjectPublicKeyInfo OPTIONAL, issuerUID [7] UniqueIdentifier OPTIONAL, subjectUID [8] UniqueIdentifier OPTIONAL, extensions [9] Extensions OPTIONAL } OptionalValidity ::= SEQUENCE { notBefore [0] Time OPTIONAL, notAfter [1] Time OPTIONAL } -- по крайней мере, одно должно быть -- представлено Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }Листинг 18.6. Синтаксис CertRequest
Синтаксис доказательства обладания
ProofOfPossession ::= CHOICE { raVerified [0] NULL, -- используется, если RA уже убедился, что -- запрашивающий обладает закрытым ключом signature [1] POPOSigningKey, keyEncipherment [2] POPOPrivKey, keyAgreement [3] POPOPrivKey } POPOSigningKey ::= SEQUENCE { poposkInput [0] POPOSigningKeyInput OPTIONAL, algorithmIdentifier AlgorithmIdentifier, signature BIT STRING -- Подпись (используя "algorithmIdentifier") является -- значением в DER-представлении poposkInput. -- Замечание: если CertReqMsg certReq CertTemplate -- содержит значения subject и publicKey, то poposkInput -- должно быть опущено и подпись должна быть вычислена -- для DER-представления значения CertReqMsg certReq. -- Если CertReqMsg certReq CertTemplate не содержит -- значения открытого ключа и субъекта, то poposkInput -- должно присутствовать и должно быть подписано. Данная -- стратегия гарантирует, что открытый ключ не -- присутствует в полях poposkInput и CertReqMsg certReq -- CertTemplate. } POPOSigningKeyInput ::= SEQUENCE { authInfo CHOICE { sender [0] GeneralName, -- используется только если установлена -- аутентифицированная идентификация для отправителя -- (т.е. DN из ранее выпущенного или действительного -- в настоящий момент сертификата) publicKeyMAC PKMACValue }, -- используется, если в настоящий момент нет -- аутентифицированного GeneralName отправителя; -- publicKeyMAC содержит MAC, основанный на пароле, -- в DER-представлении значения publicKey publicKey SubjectPublicKeyInfo -- из CertTemplate } PKMACValue ::= SEQUENCE { algId AlgorithmIdentifier, -- значение алгоритма должно быть PasswordBasedMac -- {1 2 840 113533 7 66 13}, значение параметра есть -- значение PBMParameter BIT STRING } POPOPrivKey ::= CHOICE { thisMessage [0] BIT STRING, -- доказательство, представленное в данном сообщении -- (содержит сам закрытый ключ, зашифрованный для СА) subsequentMessage [1] SubsequentMessage, -- доказательство приведено в следующем сообщении dhMAC [2] BIT STRING -- для keyAgreement (только) доказательство -- приведено в данном сообщении, которое содержит -- MAC (для значения DER-представления параметра -- certReq в CertReqMsg, которое должно включать и -- subject, и publicKey), основываясь на ключе, -- полученном из закрытого ключа DH конечного -- участника и открытого ключа DH СА. } SubsequentMessage ::= INTEGER { encrCert (0), -- запросы, при которых результирующий сертификат -- зашифрован для конечного участника (при этом POP -- будет выполнен в подтверждающем сообщении) challengeResp (1) -- запросы, при которых CA/RA обязан выполнить обмен -- вызов-ответ с конечным участником, чтобы доказать, -- что ему известен закрытый ключ }Листинг 18.7. Синтаксис доказательства обладания
Считается, что протоколы должны включать подтверждающее сообщение для сообщения вызов-ответ.
Использование МАС, основанного на пароле
Следующий алгоритм должен применяться при использовании publicKeyMAC в POPOSigningKeyInput для доказательства аутентичности запроса.
PBMParameter ::= SEQUENCE { salt OCTET STRING, owf AlgorithmIdentifier, -- AlgId для One-Way Function -- (SHA-1 рекомендуется) iterationCount INTEGER, -- сколько раз применяется OWF mac AlgorithmIdentifier -- the MAC AlgId (например, -- DES-MAC, Triple-DES-MAC, -- или HMAC) }
Процесс, использующий PBMParameter вычисления publicKeyMAC и тем самым аутентифицирующий исходный запрос сертификата открытого ключа, состоит из двух стадий. Первая стадия использует разделяемую секретную информацию для создания ключа МАС. На второй стадии вычисляются MACs открытых ключей, с помощью данного ключа МАС для создания аутентифицирующего значения.
Инициализация первой стадии алгоритма предполагает существование разделяемого секрета, полученного надежным способом CA/RA и конечным участником. Значение salt присоединяется к разделяемому секрету, и односторонняя функция ( owf ) применяется iterationCount раз, где секрет и salt являются входом в первую итерацию, и для каждой следующей итерации вход есть множество выходов предыдущей итерации, включая ключ K.
На второй стадии K и открытый ключ являются входами в НМАС, в результате чего создается значение для publicKeyMAC следующим образом:
publicKeyMAC = Hash( K XOR opad, Hash( K XOR ipad, public key) )
где ipad и opad определены в RFC 2104.
Управление публикуемой информацией
Управление pkiPublicationInfo необходимо подписчикам для управления опубликованием СА сертификата. Определен следующий синтаксис:
PKIPublicationInfo ::= SEQUENCE { action INTEGER { dontPublish (0), pleasePublish 1) }, pubInfos SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL } -- pubInfos не должно присутствовать, -- если действие есть "dontPublish" -- (если действие есть -- "pleasePublish" и pubInfos опущено, -- предполагается "dontCare") SinglePubInfo ::= SEQUENCE { pubMethod INTEGER { dontCare (0), x500 (1), web (2), ldap (3) }, pubLocation GeneralName OPTIONAL }
Если выбрана опция dontPublish, запрашивающий указывает, что PKI не должно публиковать сертификат (это может означать, что запрашивающий сам опубликует сертификат).
Если выбран метод dontCare или если управление PKIPublicationInfo в запросе опущено, запрашивающий указывает, что PKI может опубликовать сертификат, используя любой выбранный им способ.
Если запрашивающему нужно, чтобы сертификат появился, по крайней мере, в некоторых местах и при этом он хочет допустить, чтобы СА сделал сертификат доступным для других репозиториев, следует установить два значения SinglePubInfo для pubInfos: одно со значением x500, web или ldap, и другое – с dontCare.
Поле pubLocation, если имеется, указывает, где запрашивающий хочет разместить сертификат (заметим, что CHOICE в GeneralName включает, например, URL и IP адрес).
Управление опциями архивирования
Управление pkiArchiveOptions дает подписчикам возможность указать информацию, необходимую для установления архивирования закрытого ключа, соответствующего открытому ключу из запроса сертификата. Это определяется следующим синтаксисом:
PKIArchiveOptions ::= CHOICE { encryptedPrivKey [0] EncryptedKey, -- реальное значение закрытого ключа keyGenParameters [1] KeyGenParameters, -- параметры, которые допускают -- перегенерацию закрытого ключа archiveRemGenPrivKey [2] BOOLEAN -- установлено в TRUE, если отправитель -- хочет, чтобы получатель архивировал -- закрытый ключ или пару ключей, -- которые создал получатель в ответ -- на данный запрос; -- установлено в FALSE, если архивация -- не предполагается. } EncryptedKey ::= CHOICE { encryptedValue EncryptedValue, envelopedData [0] EnvelopedData -- зашифрованный закрытый ключ должен -- быть размещен в -- envelopedData encryptedContentInfo -- encryptedContent -- OCTET STRING. } EncryptedValue ::= SEQUENCE { intendedAlg [0] AlgorithmIdentifier OPTIONAL, -- предполагаемый алгоритм, для -- которого будет -- использоваться значение symmAlg [1] AlgorithmIdentifier OPTIONAL, -- симметричный алгоритм, используемый -- для шифрования значения encSymmKey [2] BIT STRING OPTIONAL, -- (зашифрованный) симметричный ключ, -- используемый для шифрования значения keyAlg [3] AlgorithmIdentifier OPTIONAL, -- алгоритм, используемый для -- шифрования симметричного ключа valueHint [4] OCTET STRING OPTIONAL, -- краткое описание или идентификатор -- содержимого encValue (может иметь -- значение только для посылающего и -- использоваться только если -- EncryptedValue должно перепроверяться -- посылающим в будущем) encValue BIT STRING } KeyGenParameters ::= OCTET STRINGЛистинг 18.8. Синтаксис управления опциями архивирования
Альтернативой посылки ключа является посылка информации о том, как заново создать ключ, используя выбор KeyGenParameters (например, для многих реализаций RSA можно послать первое случайное простое число).