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

Сегодня TLS является одним из фундаментальных компонентов современного Интернета. Без него невозможно представить безопасную работу веб-приложений, API, почтовых сервисов, VPN и множества других технологий.


Немного истории: от SSL к TLS

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

- SSL - начало защищенного интернета

В 1994 году компания Netscape разработала протокол SSL (Secure Sockets Layer). Его основной задачей было создание защищенного канала связи между браузером пользователя и сервером.

Первые версии протокола были несовершенными:

  • SSL 1.0 никогда не публиковался из-за большого количества уязвимостей;
  • SSL 2.0 содержал серьезные проблемы безопасности;
  • SSL 3.0 значительно улучшил архитектуру и стал широко использоваться.

Однако со временем и SSL 3.0 оказался недостаточно защищенным. В 2014 году была обнаружена атака POODLE, окончательно поставившая крест на использовании SSL. Сегодня использование любых версий SSL считается небезопасным.

Передача стандарта в IETF

Поскольку Интернет уже перестал быть продуктом одной компании, дальнейшее развитие протокола было передано организации IETF (Internet Engineering Task Force) - международному сообществу, занимающемуся разработкой интернет-стандартов. Чтобы подчеркнуть, что протокол больше не принадлежит Netscape и является открытым стандартом, его переименовали в TLS (Transport Layer Security).

Фактически:

  • SSL 3.0 стал основой TLS 1.0;
  • дальнейшие версии развивались уже как самостоятельный протокол.

Эволюция TLS

- TLS 1.0

Первая версия появилась в 1999 году.

Она была значительно безопаснее SSL 3.0, однако со временем также устарела.

TLS 1.1

Исправила часть криптографических недостатков предыдущей версии.

Широкого распространения практически не получила.

TLS 1.2

На протяжении многих лет именно TLS 1.2 был основным стандартом безопасного Интернета.

Он:

  • поддерживает современные алгоритмы шифрования;
  • использует более надежные хэш-функции;
  • позволяет выбирать различные криптографические наборы (Cipher Suites);
  • широко применяется до сих пор.

Большинство современных веб-сайтов поддерживают TLS 1.2.

TLS 1.3

В 2018 году появился TLS 1.3.

Это крупнейшее обновление протокола за последние годы.

Основные изменения:

  • значительно сокращено время установки соединения;
  • удалены небезопасные алгоритмы шифрования;
  • упрощен процесс согласования параметров;
  • повышена устойчивость к современным атакам;
  • улучшена производительность.

Сегодня именно TLS 1.3 считается рекомендуемой версией протокола.


Какие задачи решает TLS

TLS обеспечивает три фундаментальных свойства безопасного соединения.

Конфиденциальность (Confidentiality)

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

Например:

  • пароль;
  • номер банковской карты;
  • JWT-токен;
  • содержимое электронной почты.

Без TLS вся эта информация могла бы передаваться в открытом виде.

Целостность (Integrity)

Недостаточно просто скрыть данные. Важно убедиться, что никто не изменил их по пути.

Представим ситуацию:

Клиент отправляет запрос: Перевести 100 рублей.

Злоумышленник изменяет пакет: Перевести 100000 рублей.

Если бы не существовало механизма проверки целостности, сервер выполнил бы измененную команду.

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

Аутентификация (Authentication)

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

Представим следующую ситуацию.

Пользователь хочет открыть сайт банка: https://my-bank.com

Но злоумышленник подменяет DNS или подключается к сети Wi-Fi и перенаправляет пользователя на собственный сервер.

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

Именно такую атаку называют Man-in-the-Middle (MITM).

TLS предотвращает подобные атаки за счет проверки цифрового сертификата сервера.

Если сертификат недействителен, браузер покажет предупреждение и заблокирует соединение.


Как работает TLS

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

Шаг 1. Клиент подключается к серверу

Браузер отправляет запрос: Я хочу установить защищенное соединение. Вот версии TLS и алгоритмы, которые я поддерживаю.

Шаг 2. Сервер отвечает

Сервер сообщает:

  • версию TLS;
  • выбранный алгоритм шифрования;
  • отправляет свой цифровой сертификат.

Шаг 3. Проверка сертификата

Браузер проверяет:

  • срок действия сертификата;
  • кем он выдан;
  • соответствует ли доменное имя;
  • доверяет ли удостоверяющему центру.

Если проверка не проходит, соединение считается небезопасным.

Шаг 4. Согласование общего секрета

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

Шаг 5. Начало защищенного обмена

После получения общего секретного ключа обе стороны начинают использовать симметричное шифрование.

С этого момента весь HTTP-трафик становится HTTPS.


Немного о шифровании

В TLS используются два типа криптографии.

  • Асимметричное шифрование
  • Симметричное шифрование

Асимметричное шифрование

Используется пара ключей:

  • открытый (Public Key);
  • закрытый (Private Key).

Все, что зашифровано открытым ключом, может быть расшифровано только соответствующим закрытым ключом. Наоборот это не работает.

Преимущества:

  • позволяет безопасно обмениваться секретами;
  • обеспечивает цифровые подписи;
  • используется при аутентификации.

Недостаток - высокая вычислительная стоимость.

Поэтому асимметричное шифрование применяется только во время установки соединения.

Симметричное шифрование

После завершения рукопожатия (TLS Handshake) клиент и сервер используют один общий секретный ключ.

Этот метод значительно быстрее. Именно поэтому весь дальнейший трафик шифруется уже симметричными алгоритмами, например AES или ChaCha20.

Именно комбинация асимметричного и симметричного шифрования делает TLS одновременно безопасным и быстрым.


Инфраструктура открытых ключей (PKI)

Возникает логичный вопрос: Как браузер понимает, что открытый ключ действительно принадлежит нужному серверу?

Для этого существует инфраструктура открытых ключей - PKI (Public Key Infrastructure).


Цифровой сертификат

Каждый защищенный сервер имеет цифровой сертификат.

В сертификате содержатся:

  • доменное имя;
  • открытый ключ сервера;
  • срок действия;
  • информация о владельце;
  • цифровая подпись удостоверяющего центра.

Сертификат можно представить как электронный паспорт сайта.


Удостоверяющий центр (Certificate Authority)

Удостоверяющий центр (CA) - это организация, которая проверяет владельца домена и выпускает цифровые сертификаты.

Перед выдачей сертификата центр подтверждает, что заявитель действительно контролирует указанный домен. В зависимости от типа сертификата могут также проверяться сведения об организации. После успешной проверки CA подписывает сертификат своим закрытым ключом. Эта подпись позволяет браузеру убедиться, что сертификат не был подделан или изменен.

Среди известных удостоверяющих центров можно назвать Let's Encrypt, DigiCert, GlobalSign и Sectigo (aka Comodo).


Корневой удостоверяющий центр (Root CA)

Но почему браузер доверяет самому удостоверяющему центру?

Ответ заключается в наличии корневых удостоверяющих центров (Root CA). Операционные системы и браузеры содержат встроенное хранилище доверенных корневых сертификатов.

Когда браузер получает сертификат сайта, он проверяет цепочку доверия:

Сайт => Промежуточный сертификат => Корневой сертификат

Если цепочка заканчивается корневым сертификатом, которому доверяет операционная система или браузер, соединение считается подлинным.

Именно эта модель доверия позволяет миллиардам пользователей безопасно подключаться к сайтам по всему миру без необходимости вручную проверять каждый сервер.


Заключение

TLS - это один из ключевых протоколов современного Интернета, обеспечивающий безопасную передачу данных между клиентом и сервером. Он вырос из разработанного Netscape протокола SSL, а затем превратился в открытый стандарт, который сегодня развивается под эгидой IETF.

Без TLS невозможно представить работу интернет-банкинга, облачных сервисов, API, корпоративных систем и практически любого современного веб-приложения. Протокол одновременно решает три критически важные задачи: обеспечивает конфиденциальность передаваемых данных, гарантирует их целостность и позволяет убедиться в подлинности сервера, защищая пользователей от атак типа Man-in-the-Middle.

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

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


Source: Orkhan Alishov's notes