SSL/TLS — различия между версиями
Heatwave (обсуждение | вклад) (→Источники информации) |
Heatwave (обсуждение | вклад) (Добавил сертификаты и состав записи) |
||
Строка 40: | Строка 40: | ||
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи. | После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи. | ||
+ | |||
+ | ====Состав записи==== | ||
+ | [[Файл:TLS-Record.png|right|Схема записи]] | ||
+ | * ''Content type'': тип сообщения {{---}} подтверждение связи (22), обычное сообщение (23) или оповещение (21). | ||
+ | * ''Version'': версия SSL/TLS. | ||
+ | * ''Length'': длина оставшейся части сообщения. | ||
+ | * ''Payload'': собственно зашифрованные данные. | ||
+ | * ''MAC'': код аутентификации. | ||
+ | * ''Padding'': "отступ" для получения нужного размера сообщения. | ||
+ | |||
+ | ==Цифровые сертификаты (стандарт X.509)== | ||
+ | [[Файл:Cert-structure.png|right|Структура X.509]] | ||
+ | * Удобный способ показать, что кто-то владеет публичным ключом. | ||
+ | * Выпускаются центрами сертификации ('''Certificate Authority, CA'''): GlobalSign, Comodo и др. | ||
+ | * PKI (public key infrastructure) {{---}} механизм, регулирующий распространение и использование сертификатов (включая создание, отзыв и проверку подлинности). | ||
+ | * Список доверенных CA поддерживается приложением (у браузеров свои списки). | ||
+ | * Сертификаты подписываются другими сертификатами, что повышает надежность. | ||
+ | * Сертификат может быть отозван. Система поддерживает список таких сертификатов ('''Certificate Revocation List, CRL'''). На стороне CA список обновляется каждые несколько часов. | ||
+ | |||
+ | ===Получение сертификата=== | ||
+ | # Пользователь генерирует ключ и посылает запрос серверу CA. | ||
+ | # CA отвечает сообщением со своим сертификатом. | ||
+ | # Пользователь собирает данные, необходимые для выдачи сертификата (email, отпечаток ключа и т.д.). | ||
+ | # Пользователь отправляет данные в CA, зашифровав их публичным ключом CA. | ||
+ | # CA проверяет полученные данные и отправляет сертификат пользователю. | ||
+ | |||
+ | ===Структура сертификата=== | ||
+ | * Собственно сертификат | ||
+ | ** Версия | ||
+ | ** Серийный номер | ||
+ | ** Эмитент (тот, кто выпустил сертификат) | ||
+ | ** Субъект | ||
+ | ** Публичный ключ субъекта | ||
+ | ** Период действия | ||
+ | ** Дополнительные поля | ||
+ | * Алгоритм подписи сертификата | ||
+ | * Значение подписи сертификата | ||
==Меры безопасности в TLS== | ==Меры безопасности в TLS== |
Версия 15:43, 12 декабря 2016
Содержание
Протоколы SSL и TLS
SSL (Secure Sockets Layer) и TLS (Transport Level Security) — криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети. Они широко используются в веб-браузерах, а также при работе с электронной почтой, обмене мгновенными сообщениями и в IP-телефонии.
Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:
- Безопасность: симметричное шифрование защищает передаваемую информацию от прочтения посторонними лицами.
- Аутентификация: "личность" участника соединения можно проверить с помощью асимметричного шифрования.
- Целостность: каждое сообщение содержит код (Message Authentication Code, MAC), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.
Так как большинство протоколов связи могут быть использованы как с TLS/SSL, так и без него, при установке соединения необходимо явно указать серверу, хочет ли клиент устанавливать TLS. Один способ добиться этого — использовать порт, по которому соединение всегда устанавливается с использованием TLS (например, 443 для HTTPS). Другой способ — использовать специальную команду серверу от клиента переключить соединение на TLS (например, STARTTLS для протоколов электронной почты).
Механизм работы протокола
Протокол TLS делится на два слоя: TLS Record и TLS Handshake.
Подтверждение связи (handshake)
- Клиент посылает сообщение ClientHello, указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. CipherSuite). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.
- Сервер отвечает сообщением ServerHello, которое содержит метод шифрования, выбранный сервером из списка, предложенного клиентом, а также идентификатор сессии и еще одно случайное число. Также сервер посылает свой цифровой сертификат. Если серверу нужен сертификат для аутентификации клиента, на этом шаге он может послать клиенту запрос такого сертификата.
- Клиент проверяет сертификат сервера.
- Клиент отправляет случайное число, которое клиент и сервер используют для шифрования последующих сообщений. Сама строка из байт шифруется публичным ключом сервера.
- Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.
- Сервер проверяет сертификат клиента.
- Клиент и сервер отправляют друг другу сообщение ChangeCipherSpec, объявляя об изменении режима передачи данных с незащищенного на защищенный.
- Клиент отправляет сообщение Finished, зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.
- Аналогичные действия производит сервер.
- На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.
Возобновление сессии
- Клиент посылает сообщение ClientHello, используя ID сессии, которую нужно возобновить.
- Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение ServerHello с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.
- Клиент и сервер обмениваются сообщениями ChangeCipherSpec, а затем Finished.
- Передача данных по защищенному каналу возобновляется.
Протокол записи (TLS Record)
Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:
- Разбиение исходящих сообщений на блоки нужного размера и "склеивание" входящих сообщений.
- Сжатие исходящих сообщений и распаковку входящих (используется не всегда).
- Применение кода аутентификации к исходящим сообщениям и проверку входящих с помощью MAC.
- Шифрование исходящих сообщений и дешифровку входящих.
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.
Состав записи
- Content type: тип сообщения — подтверждение связи (22), обычное сообщение (23) или оповещение (21).
- Version: версия SSL/TLS.
- Length: длина оставшейся части сообщения.
- Payload: собственно зашифрованные данные.
- MAC: код аутентификации.
- Padding: "отступ" для получения нужного размера сообщения.
Цифровые сертификаты (стандарт X.509)
- Удобный способ показать, что кто-то владеет публичным ключом.
- Выпускаются центрами сертификации (Certificate Authority, CA): GlobalSign, Comodo и др.
- PKI (public key infrastructure) — механизм, регулирующий распространение и использование сертификатов (включая создание, отзыв и проверку подлинности).
- Список доверенных CA поддерживается приложением (у браузеров свои списки).
- Сертификаты подписываются другими сертификатами, что повышает надежность.
- Сертификат может быть отозван. Система поддерживает список таких сертификатов (Certificate Revocation List, CRL). На стороне CA список обновляется каждые несколько часов.
Получение сертификата
- Пользователь генерирует ключ и посылает запрос серверу CA.
- CA отвечает сообщением со своим сертификатом.
- Пользователь собирает данные, необходимые для выдачи сертификата (email, отпечаток ключа и т.д.).
- Пользователь отправляет данные в CA, зашифровав их публичным ключом CA.
- CA проверяет полученные данные и отправляет сертификат пользователю.
Структура сертификата
- Собственно сертификат
- Версия
- Серийный номер
- Эмитент (тот, кто выпустил сертификат)
- Субъект
- Публичный ключ субъекта
- Период действия
- Дополнительные поля
- Алгоритм подписи сертификата
- Значение подписи сертификата
Меры безопасности в TLS
- Защита от downgrade-атаки — понижения версии протокола к предыдущей (менее защищённой) версии или менее надёжному алгоритму шифрования;
- Нумерация последовательных записей приложения и использование порядкового номера в коде аутентификации сообщения (MAC);
- Использование ключа в идентификаторе сообщения (только владелец ключа может сгенерировать код аутентификации сообщения).
- Сообщение, которым заканчивается подтверждение связи («Finished»), содержит хэш всех handshake-сообщений, отправленных обеими сторонами, что позволяет проверить подлинность выбранных параметров TLS-соединения.
- Псевдослучайная функция делит подаваемые ей на вход данные пополам, применяет к половинкам разные хэш-алгоритмы (MD5 и SHA-1), а затем XOR'ит результаты для получения MAC. Это повышает безопасность в случае, если в одном из алгоритмов обнаружится уязвимость.
Ключевые отличия SSL и TLS
- Аутентификация сообщений: в TLS используется HMAC, работающий с любой хэш-функцией (а не только с MD5 или SHA, как в SSL).
- Генерация ключа: в TLS при создании ключа используется псевдослучайная функция стандарта HMAC; в SSL — RSA, Diffie-Hellman или Fortezza/DMS.
- Проверка сертификата: в SSL проверка требует передачи сложной последовательности сообщений; в TLS информация о проверке полностью передается в сообщениях во время handshake.
- Методы шифрования: SSL поддерживает только алгоритмы RSA, Diffie-Hellman и Fortezza/DMS. В TLS отказались от поддержки Fortezza/DMS, но возможно добавление новых методов шифрования в последующих версиях.