Экстернат |
Безопасность на транспортном уровне: SSL и TLS
Протокол ChangeCipherSpec
Мы видели, что переговоры о наборе шифров и генерация криптографической секретности формируются постепенно по ходу выполнения протокола установления соединения. Возникает вопрос: когда две стороны могут использовать эти параметры секретности? SSL утверждает, что стороны не могут использовать эти параметры или секретность, пока они не передали или не получили специальное сообщение: ChangeCipherSpec - сообщение, которым обмениваются клиент и сервер в ходе выполнения протокола установления соединения и которое определено в протоколе ChangeCipherSpec. По этой причине объекты не посылают или не получают сообщение. Передатчик и приемник нуждаются не в одном, а в двух состояниях. Одно - состояние ожидания, при котором сохраняются параметры и секретности. Другое - активное состояние, при котором параметры и секретность используются протоколом передачи записей, чтобы подписаться/проверить или зашифровать/расшифровывать сообщения. Кроме того, каждое состояние содержит два множества значений: читать (входящее), писать (исходящее).
Протокол ChangeCipherSpec определяет процесс перемещения значений между состоянием ожидания и активным состоянием. рис. 7.20 показывает гипотетическую ситуацию, с гипотетическими значениями, чтобы только проиллюстрировать концепцию.
На рисунке показано только несколько параметров. Перед обменом сообщениями ChangeCipherSpec в состоянии ожидания заполнены только значения столбцов.
Сначала клиент передает ChangeCipherSpec-сообщение. После этого клиент перемещает параметры "писать" (исходящие) из состояния ожидания в активное состояние. Теперь он может использовать эти параметры, чтобы подписаться или зашифровать исходящее сообщение. После получения этого сообщения сервер перемещает параметры "читать" (входящие) из состояния ожидания в активное состояние. Теперь сервер может верифицировать и расшифровывать сообщение. Это означает, что сообщение Finished, передаваемое клиентом, может быть подписано клиентом и расшифровано сервером.
Сервер передает сообщение ChangeCipherSpec после получения от клиента сообщения Finished. После передачи этого сообщения он перемещает параметры "писать" (входящие) из состояния ожидания в активное состояние. Сервер может теперь использовать эти параметры для того, чтобы подписать или зашифровать исходящие сообщения. После того как клиент получает это сообщение, он перемещает первый абзац (входящий) из состояний ожидания в активное состояние. Теперь клиент может проверить (верифицировать) и расшифровать сообщения.
Конечно, после обмена сообщениями Finished обе стороны могут работать в обоих направлениях, используя активные параметры для чтения/записи.
Аварийный протокол
SSL использует аварийный протокол для того, чтобы известить об ошибках и ненормальном состоянии устройств. Имеется только один тип аварийного сообщения, которое описывает проблему и ее уровень (опасное или полный выход из строя). табл. 7.4 показывает типы аварийных сообщений, определенных для SSL.
Цифровое обозначение | Описание | Значение |
---|---|---|
0 | CloseNotify | Передатчик больше не будет посылать сообщений |
10 | UnexpectedMessage | Получено несоответствующее сообщение |
20 | BadRecordMAC | Получено некорректное MAC |
30 | DecompressionFailure | Невозможно получить несжатый текст |
40 | HandshakeFailure | Передатчик не может закончить установление соединения |
41 | NoCertificate | Клиент не сертифицировал послание |
42 | BadCertificate | Полученный сертификат искажен |
43 | UnsupportedCertificate | Тип полученного сертификата не поддерживается |
44 | CertificateRevoked | Подписавший аннулирует сертификат |
45 | CertificateExpired | Сертификат просрочен |
46 | CertificateUnknown | Сертификат неизвестен |
47 | Illegal Parameter | Поле не может быть обработано |
Протокол передачи записей
Протокол передачи записей доставляет сообщения от верхнего уровня (протокол установления соединения, ChangeCipherSpec-протокол, аварийный протокол) или прикладных уровней. Сообщения фрагментированы и произвольно сжаты; MAC добавляется к сжатому сообщению, используя согласованный алгоритм хэш. Сжатый фрагмент и MAC зашифрованы с применением согласованного алгоритма шифрования. В конце к зашифрованному сообщению добавляется заголовок SSL. рис. 7.21 иллюстрирует этот процесс в передатчике. Процесс в приемнике имеет обратный порядок.
Обратите внимание, однако, что этот процесс может быть выполнен, только когда криптографические параметры находятся в активном состоянии. Сообщения, передаваемые перед перемещением из состояния ожидания в активное состояние, не подписаны и не зашифрованы.
В следующих секциях мы увидим некоторые другие сообщения в протоколе установления соединения, которые используются некоторыми определенными типами хэширования для обеспечения целостности сообщения.
Фрагментация/Объединение
В передатчике сообщение от прикладного уровня фрагментируется в блоки по 2 байта, при этом последний блок может быть меньше. В приемнике фрагменты объединяются вместе, чтобы создать точную копию первоначального сообщения.
Сжатие/Расширение
В передатчике все фрагменты прикладного уровня сжаты с использованием метода сжатия, о котором договариваются во время процедуры установления связи. Метод сжатия не должен вносить потери (расширенный фрагмент должен быть точной копией первоначального фрагмента). Размер фрагмента не должен превысить 1024 байта. Некоторые методы сжатия работают только с заранее заданными размерами блоков, и если размер блока меньше, то блок дополняется. Поэтому размер сжатого фрагмента может быть больше, чем размер первоначального фрагмента. В приемнике сжатый фрагмент расширяется, чтобы создать точную копию оригинала. Если размер расширенного фрагмента превышает 214, вырабатывается аварийное сообщение "неправильное расширение" (fatal decompression). Обратите внимание, что сжатие/расширение в SSL - дополнительные функции.
Подписание/Подтверждение
В передатчике метод подтверждения подлинности определяется в течение установления соединения (NULL, MD5 или SHA-1) и создает подпись (MAC), как это показано на рис. 7.22.
Алгоритм хэширования применяется дважды. Сначала хэширование создается путем последовательных соединений (конкатенации) следующих значений:
- секретный MAC (писать) (ключ подтверждения подлинности для исходящих сообщений);
- заполнение 1, которое представляет байт 0x36, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
- порядковый номер этого сообщения;
- тип сжатия, который определяет протокол верхнего уровня, обеспечившего сжатие фрагмента;
- длина сжатия, которая указывает длину сжатого фрагмента;
- сжатый фрагмент.
Второй раз завершающее хэширование (MAC) создается последовательным соединением (конкатенацией) следующих значений:
- секретный MAC (писать);
- заполнение 2, которое представляет байт 0x5C, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
- создание хэша из результата первого шага.
В приемнике проводится верификация - вычисление нового хэша и сравнение его с полученным хэшированием.
Шифрование/Дешифрование
В передатчике сжатый фрагмент и хэш зашифрованы с применением секретного шифра (писать). В приемнике полученное сообщение расшифровывается с использованием секретного шифра (читать). При шифровании к блоку добавляется заполнение, чтобы сделать размер сообщения пригодным для шифрования - кратным числом размера блока.
Создание кадра
В передатчике после шифрования добавляется заголовок протокола передачи записей. Заголовок удаляется в приемнике перед дешифрованием.