Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Протокол TLS
Сертификат сервера
Сервер должен посылать сертификат всякий раз, когда согласованный метод обмена ключами не является анонимным. За этим сообщением всегда непосредственно следует сообщение server hello.
Тип сертификата должен соответствовать выбранному алгоритму обмена ключами шифров, обычно это сертификат X.509v3. Он должен содержать ключ, который соответствует методу обмена ключами. Если не специфицировано обратного, алгоритм подписи для сертификата должен быть тем же, что и алгоритм для ключа сертификата. Если не специфицировано обратного, общедоступный ключ может иметь любую длину.
Алгоритм обмена ключами | Тип сертификата ключа |
---|---|
RSA | Общедоступный ключ RSA ; сертификат должен допускать использование ключа для шифрования. |
RSA_EXPORT | Общедоступный ключ RSA с длиной больше чем 512 бит, который может быть использован для подписи, или ключ длиной 512 бит или короче, который может быть использован для шифрования или подписи. |
DHE_DSS | Общедоступный ключ DSS. |
DHE_DSS_EXPORT | Общедоступный ключ DSS. |
DHE_RSA | Общедоступный ключ RSA, который может использоваться для подписи. |
DHE_RSA_EXPORT | Общедоступный ключ RSA, который может использоваться для подписи. |
DH_DSS | Ключ Diffie-Hellman. Алгоритмом, используемым для подписи сертификата, должен быть DSS. |
DH_RSA | Ключ Diffie-Hellman. Алгоритмом, используемым для подписи сертификата, должен быть RSA. |
Все сертификатные профайлы, ключи и криптографические форматы определены рабочей группой IETF PKIX [PKIX]. Когда присутствует расширение применения ключа, бит digitalSignature должен быть установлен для ключа, выбранного для подписи, как это описано выше, а бит keyEncipherment должен присутствовать, чтобы разрешить шифрование, как это описано выше. Бит keyAgreement должен быть установлен для сертификатов Diffie-Hellman.
Так как параметр CipherSuites, который специфицирует методы нового ключевого обмена, заданы для протокола TLS, они используют формат сертификата и необходимые ключевые данные.
Структура этого сообщения имеет вид:
opaque ASN.1Cert<1..224-1>; struct { ASN.1Cert certificate_list<0..224-1>; } Certificate;
Тот же тип сообщения и структура будут использоваться для отклика клиента на сообщение запроса сертификата. Заметим, что клиент может не посылать сертификата, если он не имеет подходящего, чтобы послать его серверу в ответ на его аутентификационный запрос.
Сообщение ключевого обмена сервера
Сообщение ключевого обмена сервера посылается сервером только, когда сообщение сертификата сервера (если послано) не содержит достаточно данных, чтобы позволить клиенту осуществлять обмен предмастерными секретными кодами (premaster secret). Это верно для следующих методов обмена ключами:
- RSA_EXPORT (если открытый ключ в сертификате длиннее, чем 512 бит)
- DHE_DSS
- DHE_DSS_EXPORT
- DHE_RSA
- DHE_RSA_EXPORT
- DH_anon
Некорректно посылать сообщение ключевого обмена сервера для следующих методов пересылки ключей:
- RSA
- RSA_EXPORT (когда открытый ключ в сертификате сервера короче или равен 512 бит)
- DH_DSS
- DH_RSA
Это сообщение передает криптографическую информацию, чтобы позволить клиенту оперировать с предмастерным секретным кодом: либо общедоступный ключ RSA, чтобы зашифровать предмастерный секретный код, либо общедоступный ключ Diffie-Hellman, с помощью которого клиент может завершить обмен ключами.
В качестве дополнительных определены наборы CipherSuites, которые включают в себя новые алгоритмы обмена ключами. Сервер пошлет сообщение обмена ключами тогда и только тогда, когда тип сертификата, ассоциированный с алгоритмов обмена ключами, не предоставил достаточно информации клиенту, чтобы осуществить пересылку предмастерного секретного кода.
Согласно экспортному закону США, модули RSA больше 512 бит не могут применяться для ключевого обмена в программах, экспортируемых из США. Более длинные ключи RSA, зашифрованные в сертификатах, могут быть использованы для подписи более коротких ключей RSA в случае метода ключевого обмена RSA_EXPORT.
Структура этого сообщения:
enum { rsa, diffie_hellman } KeyExchangeAlgorithm; struct { opaque rsa_modulus<1..2^16-1>; opaque rsa_exponent <1..2^16-1>;} ServerRSAParams;
rsa_modulus | Модуль временного RSA -ключа сервера. |
rsa_exponent | Общедоступный показатель временного RSA -ключа сервера. |
struct { opaque dh_p<1..2^16-1>; opaque dh_g<1..2^16 1>; opaque dh_Ys<1..2^16 1>;} ServerDHParams; /* Временные DH параметры */
dh_p | Простой модуль, используемый для операции Diffie-Hellman. |
dh_g | Генератор, используемый для операции Diffie-Hellman. |
dh_Ys | Общедоступное значение (gX mod p) метода Diffie-Hellman для сервера. |
struct { select (KeyExchangeAlgorithm) { case diffie_hellman: ServerDHParams params; Signature signed_params; case rsa: ServerRSAParams params; Signature signed_params; }; } ServerKeyExchange;
Params | Параметры ключевого обмена сервера. |
---|---|
signed_params | Для неанонимных ключевых обменов. Хэш соответствующих значений параметров с подписью, согласованной с примененным хэшем. |
md5_hash | MD5(ClientHello.random + ServerHello.random + ServerParams); |
sha_hash | SHA(ClientHello.random + ServerHello.random + ServerParams); |
enum { anonymous, rsa, dsa } SignatureAlgorithm; select (SignatureAlgorithm) { case anonymous: struct { }; case rsa: digitally-signed struct { opaque md5_hash[16]; opaque sha_hash[20]; }; case dsa: digitally-signed struct { opaque sha_hash[20]; }; } Signature;
Запрос сертификата
Не анонимный сервер может опционно запросить сертификат от клиента, если это возможно для выбранного шифрового набора. За этим сообщением, если оно послано, непосредственно следует сообщение ключевого обмена сервера ( Server Key Exchange ) (в противном случае, сообщение сертификата сервера).
Структура этого сообщения:
enum { rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4), (255)} ClientCertificateType; opaque DistinguishedName<1..216-1>; struct { ClientCertificateType certificate_types<1..28-1>; DistinguishedName certificate_authorities<3..216-1>; } CertificateRequest;
certificate_types | Это поле представляет собой список типов запрошенных сертификатов, расположенных в порядке предпочтения сервера. |
certificate_authorities | Список имен приемлемых провайдеров сертификатов. Эти имена могут специфицировать уникальное имя корневого или подчиненного CA. Таким образом, это сообщение может быть использовано как для описания известных корней и желательного пространства авторизации. |
DistinguishedName получается из [X509]. Считается фатальной ошибкой (оповещение handshake_failure), если анонимный сервер запрашивает идентификацию клиента.
Hello done сервера
Сообщение сервера hello done посылается сервером, чтобы индицировать завершение операций с hello сервера и связанных с ним сообщений. После отправки этого сообщения сервер ждет отклика клиента.
Это сообщение означает, что сервер завершил подготовку ключевого обмена и клиент может приступить к процедуре пересылки ключей.
После получения сообщения сервера hello done клиент должен проверить, что сервер предоставил корректный сертификат, если это требуется, и что параметры, присланные сервером, приемлемы.
Структура этого сообщения: struct { } ServerHelloDone;
Сертификат клиента
Это первое сообщение, которое может послать клиент после получения сообщения от сервера hello done. Это сообщение посылается только в случае запроса присылки сертификата со стороны сервера. Если приемлемого сертификата нет, клиент должен послать пустое сообщение сертификата. Если серверу для продолжения диалога требуется аутентификация клиента, он может откликнуться, послав уведомление о фатальной ошибке.
Сообщение обмена ключами клиента
Это сообщение непосредственно следует за сообщением сертификата клиента (если оно посылается). В противном случае оно будет первым сообщением, посылаемым клиентом после получения сообщения сервера hello done.
Предмастерный секретный код устанавливается с помощью этого сообщения, либо путем прямой его передачи, зашифровав с применением RSA, либо с помощью передачи параметров Diffie-Hellman, которые позволят каждой из сторон согласовать применение одного и того же предмастерного секретного кода. Когда в качестве метода передачи ключей использован DH_RSA или DH_DSS, запрашивается сертификация клиента, и клиент может откликаться посылкой сертификата, который содержит общедоступный ключ Diffie-Hellman, чьи параметры (группа и генератор) соответствуют, специфицированным в сертификате сервера. Это сообщение не содержит никаких других данных.
Структура этого сообщения:
struct { select (KeyExchangeAlgorithm) { case rsa: EncryptedPreMasterSecret; case diffie_hellman: ClientDiffieHellmanPublic; } exchange_keys; } ClientKeyExchange;