Опубликован: 10.10.2007 | Уровень: специалист | Доступ: платный
Лекция 16:

Протокол TLS

Протокол изменения спецификации шифра

Протокол изменения спецификации шифра предназначен для оповещения об изменении стратегии шифрования. Протокол использует одно сообщение, которое зашифровано и архивировано в рамках текущего состояния соединения. Сообщение состоит из одного байта со значением 1.

struct { enum { change_cipher_spec(1), (255) } type;} ChangeCipherSpec;

Сообщение изменения спецификации шифра посылается как клиентом, так и сервером, чтобы уведомить партнера, что последующие записи будут защищены с помощью только что согласованных ключей и спецификации CipherSpec. Получение этого сообщения заставляет получателя на уровне записей немедленно скопировать состояние ожидания чтения в текущее состояние чтения. Сразу после посылки сообщения отправитель должен дать команду уровню записей преобразовать состояние ожидания записи в активное состояние записи. Сообщение изменения спецификации шифра посылается во время диалога после согласования набора параметров безопасности, но до посылки проверочного завершающего сообщения.

Протокол оповещения

Одним из типов содержимого, поддерживаемого слоем записей TLS, является оповещение. Сообщения оповещения передают описание возникшей ситуации. Оповещения с аварийным уровнем вызывают немедленное прерывание соединения. В этом случае другие соединения сессии могут оставаться в рабочем состоянии, но идентификатор сессии должен быть объявлен недействительным, блокируя установление новых соединений. Подобно другим сообщениям, оповещения шифруются и сжимаются, как это специфицировано состоянием текущего соединения.

enum { warning(1), fatal(2), (255) } AlertLevel;
enum { close_notify(0),
        unexpected_message(10),
        bad_record_mac(20),
        decryption_failed(21),
        record_overflow(22),
        decompression_failure(30),
        handshake_failure(40),
        bad_certificate(42),
        unsupported_certificate(43),
        certificate_revoked(44),
        certificate_expired(45),
        certificate_unknown(46),
        illegal_parameter(47),
        unknown_ca(48),
        access_denied(49),
        decode_error(50),
        decrypt_error(51),
        export_restriction(60),
        protocol_version(70),
        insufficient_security(71),
        internal_error(80),
        user_canceled(90),
        no_renegotiation(100),
(255)} AlertDescription;
struct { AlertLevel level; AlertDescription description;} Alert;

Оповещения закрытия

Клиент и сервер должны оба знать, что соединение завершается, для того чтобы избежать атаки усечения ( truncation ). Оба партнера могут запустить обмен сообщениями закрытия.

close_notify Это сообщение обращает внимание получателя, что отправитель не будет посылать более каких-либо данных через это соединение. Сессия становится не возобновляемой (unresumable), если любое соединение разорвано без соответствующих сообщений close_notify с уровнем, равным предупреждению.

Оба партнера могут инициализировать закрытие, послав уведомление close_notify. Любые данные, полученные после оповещения о закрытии, игнорируются.

Каждый из партнеров обязан послать уведомление close_notify, прежде чем разрывать соединение со стороны записи. Требуется, чтобы другой партнер реагировал своим уведомлением close_notify и закрывал соединение немедленно, аннулируя все незавершенные записи. Для инициатора закрытия не требуется ждать получения отклика close_notify, прежде чем закрыть соединение со стороны чтения. Если прикладной протокол, использующий TLS, гарантирует, что любые данные могут быть переданы через используемое TLS -соединение после его закрытия, реализация TLS должна получить уведомление-отклик close_notify до оповещения прикладного уровня о том, что соединение TLS завершает свою работу. Если прикладной протокол не передает никаких дополнительных данных, но лишь закрывает нижележащее транспортное соединение, тогда реализация может выбрать вариант закрытия транспорта, не дожидаясь отклика close_notify.

Предполагается, что закрытие соединения надежно доставляет все данные, ждущие передачи, прежде чем транспортная система будет блокирована.

Оповещения об ошибках

Обработка ошибок в протоколе диалога TLS очень проста. Когда обнаруживается ошибка, партнер посылает сообщение другому партнеру. При передаче или получении сообщения о фатальной ошибке оба партнера немедленно закрывают соединение. Серверы и клиенты должны забыть любые идентификаторы сессии, ключи и секретные коды, связанные с неудачным соединением. Определены следующие оповещения об ошибках:

unexpected_message Получено непредусмотренное сообщение. Это оповещение является всегда фатальным и не должно встречаться при обменах между корректными реализациями.
bad_record_mac Это оповещение присылается, если получена запись с неверным MAC. Это сообщение всегда вызывает фатальную ошибку.
decryption_failed TLSCiphertext дешифрован неверно: либо текст не имел длину, четную и кратную размеру блока, либо их значения (заполнители) при проверке оказались некорректными. Это сообщение всегда вызывает фатальную ошибку.
record_overflow Получена запись TLSCiphertext, которая имеет длину больше 214+2048 байт, запись дешифрована TLSCompressed в запись с более чем 214+1024 байтов. Это сообщение всегда вызывает фатальную ошибку.
decompression_failure Функция декомпрессии получила неприемлемые данные (напр., данные, которые после восстановления будут иметь слишком большой объем). Это сообщение вызывает фатальную ошибку.
handshake_failure Получение сообщения оповещения handshake_failure указывает, что отправитель не мог согласовать приемлемый набор параметров безопасности из числа предлагаемых опций. Это фатальная ошибка.
bad_certificate Сертификат был поврежден, содержал подписи, которые не прошли проверку, и т.д..
unsupported_certificate Сертификат имел не поддерживаемый тип.
certificate_revoked Сертификат был отозван его подписантом.
certificate_expired Сертификат имеет истекший срок годности или не пригоден по другой причине.
certificate_unknown Некоторая другая, не специфицированная причина при обработке сертификата, делающая его неприемлемым.
illegal_parameter Поле при диалоге оказалось вне диапазона допустимых значений или не согласуется с другими полями. Это фатальная ошибка.
unknown_ca Получена корректная сертификатная последовательность или ее часть, но сертификат не был воспринят из-за того, что CA-сертификата не может быть обнаружен или не согласуется с известным проверенным CA. Это сообщение всегда вызывает фатальную ошибку.
access_denied Получен правильный сертификат, но при проверке доступа отправитель решил не продолжать согласование. Это сообщение всегда вызывает фатальную ошибку.
decode_error Сообщение не может быть дешифровано из-за того, что некоторое поле выходит за пределы допустимого или сообщение имеет неверный размер. Это сообщение всегда вызывает фатальную ошибку.
decrypt_error Диалог криптографической операции не прошел, это может включать неудачу проверки подписи, обмена ключами или контроль завершающего сообщения.
export_restriction Согласование параметров вошло в противоречие с экспортными регламентациями. Например: попытка передать 1024 битов краткосрочного RSA -ключа для метода диалога RSA_EXPORT. Это сообщение всегда вызывает фатальную ошибку.
protocol_version Протокольная версия клиента распознана, но не поддерживается. Например, старые версии протокола могут отвергаться по соображениям безопасности. Это сообщение всегда вызывает фатальную ошибку.
insufficient_security Возвращается вместо handshake_failure, когда согласование не прошло, в частности, из-за того, что сервер требует более секретного шифра, чем может поддержать клиент. Это сообщение всегда вызывает фатальную ошибку.
internal_error Внутренняя ошибка, не связанная с партнером, или требования протокола не допускают продолжения процедуры (например, ошибка при выделении памяти). Это сообщение всегда вызывает фатальную ошибку.
user_canceled Этот диалог аннулирован по какой-то причине, не связанной с протокольной ошибкой. Если пользователь аннулирует операцию после завершения диалога, закрытие соединения путем посылки close_notify является более приемлемым.
no_renegotiation Посылается клиентом в ответ на запрос hello или сервером — в ответ на hello клиента после стартового диалога. Любое из этих сообщений должно, в норме, вызывать повторное согласование параметров. Когда это не приемлемо, получатель должен реагировать посылкой этого уведомления ( alert ). В этой точке отправитель исходного запроса может решить, следует ли сохранять соединение. Случаем, когда это приемлемо, может оказаться ситуация, когда сервер запускает процесс в ответ на запрос. Процесс может получить параметры безопасности (длину ключа, аутентификацию и т.д.) при запуске, и может быть трудно сообщить об изменении этих параметров в этой точке процесса. Это сообщение всегда является предупреждением.

Для всех ошибок, где уровень оповещения не специфицирован явно, отправитель может сам определить, является ли ошибка фатальной. Если получено оповещение с уровнем предупреждения, получатель может сам решить, воспринимать ли ее как фатальную. Однако все сообщения, которые переданы с фатальным уровнем, должны рассматриваться как фатальные.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

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

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

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989