TLS (Transport Layer Security)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:26, 28 июня 2016.

TLS (Transport Layer Security - безопасность транспортного уровня) - криптографический протокол для более безопасной передачи информации, созданный в 1999м году на основе протокола SSL. Данный протокол широко используется в приложениях, работающих с сетью Интернет. TLS использует асимметричную криптографию для аутентификации, симметричное шифрование для конфиденциальности и коды аутентичности сообщений для сохранения целостности сообщений.


Алгоритм

Данный протокол работает на прикладном уровне. Алгоритм его работы таков:

  1. Клиент подключается к серверу, поддерживающему TLS, и запрашивает защищённое соединение.
  2. Клиент предоставляет список поддерживаемых алгоритмов шифрования и хеш-функций.
  3. Сервер выбирает из списка, предоставленного клиентом, наиболее надёжные алгоритмы среди тех, которые поддерживаются сервером, и сообщает о своём выборе клиенту.
  4. Сервер отправляет клиенту цифровой сертификат для собственной аутентификации. Обычно цифровой сертификат содержит имя сервера, имя удостоверяющего центра сертификации и открытый ключ сервера.
  5. Клиент может связаться с сервером доверенного центра сертификации и подтвердить аутентичность переданного сертификата до начала передачи данных.
  6. Для генерации сеансового ключа для защищённого соединения клиент шифрует случайно сгенерированную цифровую последовательность открытым ключом сервера и посылает результат на сервер. Учитывая специфику алгоритма асимметричного шифрования, используемого для установления соединения, только сервер может расшифровать полученную последовательность, используя свой закрытый ключ.

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

Процедура ТLS Handshake является довольно длительной и требует больших вычислительных мощностей, поэтому также применяется технология возообновления сессии. Начиная с первой публичной версии протокола (SSL 2.0), сервер в рамках TLS Handshake (а именно первоначального сообщения ServerHello) может сгенерировать и отправить 32-байтный идентификатор сессии. Естественно, в таком случае у сервера хранится кэш сгенерированных идентификаторов и параметров сеанса для каждого клиента. В свою очередь, клиент хранит у себя присланный идентификатор и включает его (конечно, если он есть) в первоначальное сообщение ClientHello. Если и клиент, и сервер имеют идентичные идентификаторы сессии, то установка общего соединения происходит по упрощённому алгоритму.

Технология TLS False Start, являющаяся опциональным расширением протокола, позволяет отправлять данные, когда TLS Handshake завершён лишь частично. В отличие от возобновления сессии, она позволяет передавать данные при истекшем сеансе связи или при первоначальном установлении соединения.

Технологий TLS Chain of trust служит для аутентификации. Создается цепочка доверия (chain of trust). В протоколе TLS данные цепи доверия основаны на сертификатах подлинности, предоставляемых специальными органами, называемыми центрами сертификации (CA – certificate authorities). Центры сертификации производят проверки и, если выданный сертификат скомпрометирован, то данный сертификат отзывается.

Развитие

  1. SSL 1.0 - не был обнародован
  2. SSL 2.0 - выпущен в 1995м году, имел множество уязвимостей
  3. SSL 3.0 - выпущен в 1996м году
  4. TLS 1.0 - выпущен в 1999м году на основе SSL 3.0
  5. TLS 1.1 - выпущен в 2006м году
  6. TLS 1.2 - выпущен в 2008м году

Стоит отметить, что считающиеся безопасными версии 1.1 и 1.2 поддерживаются малым количеством веб-сайтов. В настоящее время разрабатывается версия TLS 1.3.

Дополнительно

  1. Статья на Хабре, на которой все волшебно и красиво расписано
  2. Множество красивых табличек на английской Вики