TLS

TLS

TLS (англ. Transport Layer Security — безопасность транспортного уровня), как и его предшественник SSL (англ. Secure Socket Layers — уровень защищенных сокетов) — криптографические протоколы, обеспечивающие защищённую передачу данных между узлами в сети Интернет[1]. TLS и SSL используют асимметричную криптографию для обмена ключами, симметричное шифрование для конфиденциальности и коды аутентичности сообщений для сохранения целостности сообщений.

Данный протокол широко используется в приложениях, работающих с сетью Интернет, таких как Веб-браузеры, работа с электронной почтой, обмен мгновенными сообщениями и IP-телефония (VoIP)

TLS-протокол основан на спецификации протокола SSL версии 3.0, разработанной компанией Netscape Communications[2]. Сейчас развитием стандарта TLS занимается IETF. Последние обновление протокола было в RFC 5246.

Содержание

Описание

TLS дает возможность клиент-серверным приложениям осуществлять связь в сети таким образом, чтобы предотвратить прослушивание и несанкционированный доступ.

Так как большинство протоколов связи могут быть использованы как с, так и без TLS (или SSL), при установке соединения необходимо явно указать серверу, хочет ли клиент устанавливать TLS. Это может быть достигнуто либо с помощью использования унифицированного номера порта, по которому соединение всегда устанавливается с использованием TLS (как например порт 443 для HTTPS), либо с использованием произвольного порта и специальной команды серверу со стороны клиента на переключение соединения на TLS с использованием специальных механизмов протокола (как например STARTTLS для протоколов электронной почты). Как только клиент и сервер договорились об использовании TLS, им необходимо установить защищенное соединение. Это делается с помощью процедуры подтверждения связи (англ. Secure Socket Layers).[3] Во время этого процесса клиент и сервер принимают соглашение относительно различных параметров, необходимых для установки безопасного соединения.

Основные шаги процедуры англ. Secure Socket Layers:

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

На этом заканчивается процедура подтверждения связи. Между клиентом и сервером установлено безопасное соединение, данные передаваемые по нему шифруются и расшифровываются с использованием ключа шифрования до тех пор, пока соединение не будет завершено.

При возникновении ошибки на любом из вышеуказанных шагов подтверждение связи завершится с ошибкой и соединение не будет установлено.

Безопасность

TLS имеет множество мер безопасности:

  • Защита от понижения версии протокола к предыдущей (менее защищенной) версии или менее надежному алгоритму шифрования;
  • Нумерация последовательных записей приложения и использование порядкового номера в коде аутентификации сообщения (MAC);
  • Использование ключа в идентификаторе сообщения (только владелец ключа может проверить код аутентификации сообщения). Хеш-код идентификации сообщений (HMAC), используемый в большинстве шифров из набора шифров TLS был определен в RFC 2104;
  • Сообщение, которым заканчивается подтверждение связи («Finished»), содержит в себе хэш всех сообщений, которыми обменялись стороны в процессе подтверждения связи;
  • Псевдослучайная функция разбивает входные данные на две части и обрабатывает каждую разной хэш-функцией (MD5 и SHA-1), а затем вычисляет XOR от двух полученных сверток чтобы создать код аутентификации сообщения. Это обеспечивает безопасность даже в случае уязвимости одной из хэш-функций.

Уязвимость протокола TLS 1.0 которая считалась теоретической была продемонстрирована на конференции Ekoparty в сентябре 2011 года. Демонстрация включала в себя дешифрование cookies использованных для аутентификации пользователя[4].

Уязвимость в фазе возобновления соединения, обнаруженная в августе 2009 года позволяла криптоаналитику, способному взломать https-соединение добавлять собственные запросы в сообщения отправленные от клиента к серверу[5]. Так как криптоаналитик не может дешифровать переписку сервера и клиента, этот тип атаки отличается от стандартной атаки, типа человек посередине. В случае, если пользователь не обращает внимания на индикацию браузера о том, что сессия является безопасной (обычно значок замка) уязвимость может быть использована для атаки типа человек посередине .[6]. Для устранения этой уязвимости было предложено как на стороне клиента, так и на стороне сервера добавлять информацию о предыдущем соединении и осуществлять проверку при возобновлении соединения. Это было представлено в стандарте RFC 5746, а также реализовано в последних версиях OpenSSL[7] и других библиотеках [8][9].

Также существуют варианты атак, основанные непосредственно на программной реализации протокола, а не на его алгоритме[10].

Процедура подтверждения связи в TLS в деталях

Согласно протоколу TLS приложения обмениваются записями, инкапсулирующими (хранящими внутри себя) информацию, которая должна быть передана. Каждая из записей может быть сжата, дополнена, зашифрована или идентифицирована MAC (код аутентификации сообщения) в зависимости от текущего состояния соединения (состояния протокола). Каждая запись в TLS содержит следующие поля: content type (определяет тип содержимого записи), поле, указывающее длину пакета, и поле, указывающее версию протокола TLS.

Когда соединение только устанавливается, взаимодействие идет по протоколу TLS handshake, content type которого 22.

Простое подтверждение связи в TLS

Далее показан простой пример установления соединения, при котором сервер (но не клиент) проходит аутентификацию по его сертификату.

  1. Фаза переговоров:
    • Клиент посылает сообщение ClientHello, указывая последнюю версию поддерживаемого TLS протокола, случайное число и список поддерживаемых методов шифрования и сжатия, подходящих для работы с TLS;
    • Сервер отвечает сообщением ServerHello, содержащим: выбранную сервером версию протокола, случайное число, посланное клиентом, подходящий алгоритм шифрования и сжатия из списка предоставленного клиентом;
    • Сервер посылает сообщение Certificate, которое содержит цифровой сертификат сервера (в зависимости от алгоритма шифрования этот этап может быть пропущен);
    • Сервер отсылает сообщение ServerHelloDone, идентифицирующее окончание подтверждения связи;
    • Клиент отвечает сообщением ClientKeyExchange, которое содержит открытый ключ PreMasterSecret(Этот PreMasterSecret шифруется с помощью открытого ключа сертификата сервера.) или ничего (опять же зависит от алгоритма шифрования);
    • Клиент и сервер, используя ключ PreMasterSecret и случайно сгенерированные числа, вычисляют общий секретный ключ. Вся остальная информация о ключе будет получена из общего секретного ключа (и сгенерированных клиентом и сервером случайных значений);
  2. Клиент посылает сообщение ChangeCipherSpec, которое указывает на то, что вся последующая информация будет зашифрована установленным в процессе подтверждения связи алгоритмом, используя общий секретный ключ. Это сообщения уровня записей и поэтому имеет тип 20, а не 22;
    • Клиент посылает сообщение Finished, которое содержит хеш и MAC, сгенерированные на основе предыдущих сообщений процедуры подтверждения связи;
    • Сервер пытается расшифровать Finished-сообщение клиента и проверить хеш и МАС. Если процесс расшифровки или проверки не удается, подтверждение связи считается неудавшимся, и соединение должно быть оборвано;
  3. Сервер посылает ChangeCipherSpec и зашифрованное сообщение Finished, и в свою очередь клиент тоже выполняет расшифровку и проверку.

С этого момента подтверждение связи считается завершённым, протокол установленным. Все последующее содержимое пакетов идет с типом 23, а все данные будут зашифрованы.

Подтверждение связи с аутентификацией клиента

В данном примере показана полная аутентификация клиента (в дополнение к аутентификации сервера, как в предыдущем примере) с помощью обмена сертификатами между сервером и клиентом.


  1. Фаза переговоров:
    • Клиент посылает сообщение ClientHello, указывая последнюю версию поддерживаемого TLS протокола, случайное число и список поддерживаемых методов шифрования и сжатия, подходящих для работы с TLS;
    • Сервер отвечает сообщением ServerHello, содержащим: выбранную сервером версию протокола, случайное число, посланное клиентом, подходящий алгоритм шифрования и сжатия из списка предоставленного клиентом;
    • Сервер посылает сообщение Certificate, которое содержит цифровой сертификат сервера (в зависимости от алгоритма шифрования этот этап может быть пропущен);
    • Сервер посылает сообщение CertificateRequest, которое содержит запрос сертификата клиента для взаимной проверки подлинности;
    • [Не хватает пункта получения и проверки сертификата клиента];
    • Сервер отсылает сообщение ServerHelloDone, идентифицирующее окончание подтверждения связи;
    • Клиент отвечает сообщением ClientKeyExchange, которое содержит открытый ключ PreMasterSecret или ничего (опять же зависит от алгоритма шифрования);
    • Клиент и сервер, используя ключ PreMasterSecret и случайно сгенерированные числа, вычисляют общий секретный ключ. Вся остальная информация о ключе будет получена из общего секретного ключа (и сгенерированных клиентом и сервером случайных значений);
  2. Клиент посылает сообщение ChangeCipherSpec, которое указывает на то, что вся последующая информация будет зашифрована установленным в процессе подтверждения связи алгоритмом, используя общий секретный ключ. Это сообщения уровня записей и поэтому имеет тип 20, а не 22;
    • Клиент посылает сообщение Finished, которое содержит хеш и MAC, сгенерированные на основе предыдущих сообщений процедуры подтверждения связи;
    • Сервер пытается расшифровать Finished-сообщение клиента и проверить хеш и МАС. Если процесс расшифровки или проверки не удается, подтверждение связи считается неудавшимся, и соединение должно быть оборвано.
  3. Сервер посылает ChangeCipherSpec и зашифрованное сообщение Finished, и в свою очередь клиент тоже выполняет расшифровку и проверку.

С этого момента подтверждение связи считается завершённым, протокол установленным. Все последующее содержимое пакетов идет с типом 23, а все данные будут зашифрованы.

Возобновление TLS-соединения

Алгоритмы асимметричного шифрования использующиеся при генерации сеансового ключа обычно являются дорогими с точки зрения вычислительных мощностей. Для того чтобы избежать их повторения при возобновлении соединения TLS создает специальный ярлык при подтверждении связи использующийся для возобновления соединения. При этом при обычном подтверждении связи клиент добавляет в сообщение ClientHello идентификатор предыдущей сессии session id. Клиент связывает идентификатор session id с IP-адресом сервера и TCP-портом так, чтобы при соединении к серверу можно было использовать все параметры предыдущего соединения. Сервер сопоставляет идентификатор предыдущей сессии session id c параметрами соединения, такими как использованный алгоритм шифрования и master secret. Обе стороны должны иметь одинаковый master secret, иначе соединение не будет установлено. Это предотвращает использование session id криптоаналитиком для получения несанкцианированного доступа. Случайные цифровые последовательности в сообщениях ClientHello и ServerHello позволяют гарантировать, что сгенерированный сеансовый ключ будет отличаться от сеансового ключа при предудущем соединении. В RFC такой тип подтверждения связи называется сокращенным.


  1. Фаза переговоров:
    • Клиент посылает сообщение ClientHello, указывая последнюю версию поддерживаемого TLS протокола, случайное число и список поддерживаемых методов шифрования и сжатия, подходящих для работы с TLS; Также в сообщение добавляется идентификатор предыдущего соединения session id.
    • Сервер отвечает сообщением ServerHello, содержащим: выбранную сервером версию протокола, случайное число, посланное клиентом, подходящий алгоритм шифрования и сжатия из списка предоставленного клиентом. Если сервер узнал идентификатор сессии session id, то он добавляет в сообщение ServerHello тот же самый идентификатор session id. Это является сигналом для клиента о том, что можно использовать возобновление предыдущей сессии. Если сервер не узнал идентификатор сессии session id, то он добавляет в сообщение ServerHelloдругое значение вместо session id. Для клиента это означает, что использовать возобновленное соединение нельзя. Таким образом, сервер и клиент должны иметь одинаковый master secret и случайные числа для генерации сеансового ключа;
  2. Клиент посылает сообщение ChangeCipherSpec, которое указывает на то, что вся последующая информация будет зашифрована установленным в процессе подтверждения связи общим секретным ключом. Это сообщения уровня записей и поэтому имеет тип 20, а не 22;
  3. Клиент посылает сообщение ChangeCipherSpec, которое указывает на то, что вся последующая информация будет зашифрована установленным в процессе подтверждения связи алгоритмом, используя общий секретный ключ. Это сообщения уровня записей и поэтому имеет тип 20, а не 22;
    • Клиент посылает сообщение Finished, которое содержит хеш и MAC, сгенерированные на основе предыдущих сообщений процедуры подтверждения связи;
    • Сервер пытается расшифровать Finished-сообщение клиента и проверить хеш и МАС. Если процесс расшифровки или проверки не удается, подтверждение связи считается неудавшимся, и соединение должно быть оборвано;
  4. Сервер посылает ChangeCipherSpec и зашифрованное сообщение Finished, и в свою очередь клиент тоже выполняет расшифровку и проверку.

С этого момента подтверждение связи считается завершённым, протокол установленным. Все последующее содержимое пакетов идет с типом 23, а все данные будут зашифрованы.

Кроме преимуществ с точки зрения производительности[11] алгоритм возобновления соединения может быть использован для реализации единого входа, поскольку гарантируется, что исходной сессия как и любая возобновленной сессия инициированы одним и тем же клиентом (RFC 5077). Это имеет особенно важное значение для реализации FTP через TLS/SSL протокола, который в противном случае был бы уязвим к атаке типа человек посередине, при которой злоумышленник мог бы перехватить содержание данных при установлении повторного соединения[12].

Алгоритмы, использующиеся в TLS

В данной текущей версии протокола доступны следующие алгоритмы:

  • Для обмена ключами и проверки их подлинности применяются комбинации алгоритмов: RSA (асимметричный шифр), Diffie-Hellman (безопасный обмен ключами), DSA (алгоритм цифровой подписи) и алгоритмы технологии Fortezza;
  • Для симметричного шифрования: RC2, RC4, IDEA, DES, Triple DES или AES;
  • Для хеш-функций: MD5 или SHA.

Алгоритмы могут дополняться в зависимости от версии протокола.

Сравнение с аналогами

Одной из областей применения TLS-соединения является соединение узлов в виртуальной частной сети. Кроме TLS также могут использоваться набор протоколов IPSec и SSH-соединение. Каждый из этих подходов к реализации виртуальной частной сети имеет свои преимущества и недостатки.[13].

  1. TLS/SSL
    • Преимущества:
      • Невидим для протоколов более высокого уровня;
      • Популярность использования в Интернет-соединениях и приложениях электронной коммерции;
      • Отсутствие постоянного соединения между сервером и клиентом;
      • Позволяет создать туннель для приложений, использующих TCP/IP, таких как электронная почта, инструменты программирования и т. д.
    • Недостатки:
      • Невозможность использования с протоколами UDP и ICMP;
      • Необходимость отслеживания состояния соединения;
      • Наличие дополнительные требований к программному обеспечению о поддержке TLS.
  2. IPsec
    • Преимущества:
      • Безопасность и надежность защиты данных протокола проверена и доказана, так как протокол был принят как Интернет-стандарт;
      • Работа в верхнем слое сетевого протокола и шифрование данных над уровнем сетевого протокола.
    • Недостатки:
      • Сложность реализации;
      • Дополнительные требования к оборудованию сети (маршрутизаторы и т. п.);
      • Существует много различных реализаций не всегда корректно взаимодействующих друг с другом.
  3. SSH
    • Преимущества:
      • Позволяет создать туннель для приложений, использующих TCP/IP, таких как электронная почта, инструменты программирования и т. д.;
      • Слой безопасности невидим для пользователя.
    • Недостатки:
      • Трудность использования в сетях с большим числом шлюзов, таких как маршрутизаторы или брандмауэры;
      • Большая нагрузка на внутрисетевой трафик;
      • Невозможность использования с протоколами UDP и ICMP.

См. также

Ссылки

  1. T. Dierks, E. Rescorla The Transport Layer Security (TLS) Protocol, Version 1.2 (August 2008). Архивировано из первоисточника 9 февраля 2012.
  2. The SSL Protocol: Version 3.0 Netscape’s final SSL 3.0 draft (November 18, 1996)
  3. «SSL/TLS in Detail». Microsoft TechNet. Updated July 31, 2003.
  4. Dan Goodin Hackers break SSL encryption used by millions of sites. The Register (19 сентября 2011). Архивировано из первоисточника 9 февраля 2012. Проверено 7 декабря 2011.
  5. Eric Rescorla Understanding the TLS Renegotiation Attack. Educated Guesswork (5 ноября 2009). Архивировано из первоисточника 9 февраля 2012. Проверено 7 декабря 2011.
  6. McMillan, Robert. Security Pro Says New SSL Attack Can Hit Many Sites, PC World (20 ноября 2009). Проверено 7 декабря 2011.
  7. SSL_CTX_set_options SECURE_RENEGOTIATION. OpenSSL Docs (25 февраля 2010). Архивировано из первоисточника 9 февраля 2012. Проверено 7 декабря 2010.
  8. GnuTLS 2.10.0 released. GnuTLS release notes (25 июня 2010). Архивировано из первоисточника 9 февраля 2012. Проверено 7 декабря 2011.
  9. NSS 3.12.6 release notes. NSS release notes (3 марта 2010). Проверено 24 июля 2011.
  10. Various IE SSL Vulnerability. Educated Guesswork (10 августа 2002). Архивировано из первоисточника 9 февраля 2012. Проверено 7 декабря 2010.
  11. A. Pehhrson TLS session resumption impact on HTTP performance (March 2008). Архивировано из первоисточника 9 февраля 2012.
  12. vsftpd-2.1.0 released Using TLS session resume for FTPS data connection authentication. Retrieved on 2009-04-28.
  13. O. M. Dahl Limitations and Differencies of using IPsec, TLS/SSL or SSH as VPN-solution (October 2004). Архивировано из первоисточника 9 февраля 2012.



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "TLS" в других словарях:

  • TLS — may refer to:Computing* Transport Layer Security, successor to Secure Sockets Layer (SSL) * Thread local storage, a mechanism for allocating variables in computer science * Thread Level Speculation (also known as speculative multithreading), a… …   Wikipedia

  • TLS — protokolas statusas T sritis informatika apibrėžtis ↑Transporto lygmens protokolas, skirtas saugumui užtikrinti TCP/IP tinkluose. Reglamentuoja abipusį tapatumo nustatymą tarp ↑kliento ir ↑serverio, kad būtų užtikrintas ↑šifruotas ryšys tarp… …   Enciklopedinis kompiuterijos žodynas

  • TLS — steht für: Flughafen Toulouse Blagnac in Frankreich (IATA Code) Suzuki TL1000 in der S Version, ein Motorrad von Suzuki Target Level of Safety, Grenzwerte in der Risikoanalyse Technische Lieferbedingungen für Streckenstationen, Bestandteil des… …   Deutsch Wikipedia

  • TLS — puede referirse a: Transport Layer Security (Seguridad en la Capa de Transporte), un protocolo criptográfico empleado en redes. The Times Literary Supplement, una revista literaria. Aeropuerto de Toulouse Blagnac (Francia), en su código IATA.… …   Wikipedia Español

  • TLS — (Transport Layer Security en castellano Capa de Transporte Segura) es una version estandarizada por el IETF del protocolo SSL que pretende abarcar toda la capa de transporte de la pila OSI …   Enciclopedia Universal

  • TLS — TLS, the the abbreviation of the Times Literary Supplement …   Dictionary of contemporary English

  • TLS — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom.   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres …   Wikipédia en Français

  • TLS — abbr. Times Literary Supplement. * * * abbrev Times Literary Supplement * * * TLS [TLS] » ↑Times Literary Supplement …   Useful english dictionary

  • TLS — ● ►en sg. m. ►PROT Transport Layer Security. Protocole de sécurisation de la couche transport, défini par la RFC 2246. La version 1.0 de TLS est en fait SSL v3 (signalé pas François Désarménien) …   Dictionnaire d'informatique francophone

  • TLS protokolas — statusas T sritis informatika apibrėžtis ↑Transporto lygmens protokolas, skirtas saugumui užtikrinti TCP/IP tinkluose. Reglamentuoja abipusį tapatumo nustatymą tarp ↑kliento ir ↑serverio, kad būtų užtikrintas ↑šifruotas ryšys tarp kompiuterių.… …   Enciklopedinis kompiuterijos žodynas


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»