|
Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Инфраструктура Открытого Ключа (часть 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 можно послать первое случайное простое число).
