Перейти к основному содержимому

Как HTTPS защищает данные

·2186 слов·11 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

Что такое HTTPS?
#

HTTPS (HyperText Transfer Protocol Secure) — это защищённая версия HTTP, которая использует шифрование для безопасной передачи данных между клиентом (браузером) и сервером.

TCP/IP Stack

Технически HTTPS = HTTP + TLS
Протокол шифрования называется TLS (Transport Layer Security) — современная версия SSL.

В истории защищённых веб-соединений всё началось не с TLS, а с SSL. Именно так назывался протокол, разработанный в 1994 году Netscape для шифрования HTTP-трафика. Он прошёл через три версии: 1.0, 2.0 и 3.0

Позже в 1999 году развитие SSL перешло под управление IETF. Существенных изменений в архитектуре не произошло, однако у SSL обнаружились серьёзные уязвимости, из-за которых протоколу дали новое имя — TLS. Старое название к тому времени уже прочно вошло в обиход, поэтому и сегодня SSL и TLS часто используют как взаимозаменяемые термины (например, в nginx включение TLS выполняется через параметр ssl).

В этой статье я буду использовать корректное и актуальное название — TLS.

На момент написания материала существует четыре версии TLS: 1.0, 1.1, 1.2 и 1.3. В дальнейшем мы сосредоточимся на разборе версии TLS 1.2

Основные задачи HTTPS
HTTPS обеспечивает три ключевых свойства безопасности:

  • Конфиденциальность - данные передаются в зашифрованном виде и недоступны при перехвате трафика. Даже если злоумышленник перехватит пакеты в публичной Wi-Fi сети, он увидит лишь набор зашифрованных байтов, а не логины, пароли или номера карт.
  • Целостность - любые изменения данных в пути будут обнаружены. В TLS 1.2 целостность обеспечивается с помощью HMAC (в режимах CBC) или встроенных механизмов AEAD (например, GCM). Если хотя бы один байт будет изменён, проверка не пройдёт, и соединение будет разорвано.
  • Аутентификация - подтверждается подлинность сервера. Цифровой сертификат доказывает, что вы подключились именно к нужному домену. Браузер проверяет подпись центра сертификации (CA), срок действия сертификата и соответствие доменного имени.

Таким образом, HTTPS защищает данные во время передачи по сети, создавая безопасный канал между клиентом и сервером.

Атака «человек посередине» (MITM)
Как выглядит пакет с HTTP + TLS

HTTPS защищает от атак типа MITM (Man-in-the-Middle), когда злоумышленник может перехватить и подменить передаваемую информацию.
Однако важно понимать: HTTPS защищает данные в процессе передачи, но не защищает сервер от взлома и не гарантирует безопасность самого приложения.

Что происходит при открытии сайта по HTTPS
#

Когда пользователь заходит на сайт https://asterisker.com, происходит несколько последовательных этапов.

TLS 1.2 Handshake
TLS 1.2 RSA

TLS 1.2 Handshake Process

Шаг 1. Установка TCP-соединения
Браузер сначала устанавливает обычное TCP-соединение с сервером:

  • выполняется TCP 3-way handshake
  • используется порт 443
  • создаётся транспортный канал для дальнейшего TLS-обмен

После этого начинается криптографическая часть.

Шаг 2. TLS Handshake (рукопожатие)
Это ключевой этап, во время которого стороны:

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

Во время TLS-handshake:

  1. ClientHello (клиент → сервер)
    Браузер отправляет:
    • поддерживаемые версии TLS
    • список поддерживаемых cipher suites
    • случайное число (Client Random)
    • дополнительные расширения (SNI, ALPN и др.)
  2. ServerHello (сервер → клиент)
    Сервер отвечает:
    • выбранной версией TLS
    • выбранным набором шифров
    • своим цифровым сертификатом
    • случайным числом (Server Random)
  3. Проверка сертификата
    Браузер проверяет:
    • подпись центра сертификации (CA)
    • срок действия сертификата
    • соответствие доменного имени
    • цепочку доверия

Если проверка не проходит — соединение прерывается.

  1. Теперь стороны должны договориться об общем секрете.
    Формирование общего секрета (Pre-Master Secret)
    Возможные механизмы:
    • RSA — в устаревших схемах (без PFS). Клиент генерирует Pre-Master Secret и шифрует его публичным ключом сервера.
    • ECDHE — в современных версиях (обеспечивает PFS). Клиент и сервер генерируют временные (ephemeral) ключи и вычисляют общий секрет с помощью алгоритма Диффи-Хеллмана на эллиптических кривых.

В TLS 1.2 обмен общим секретом может выполняться через RSA или ECDHE. В TLS 1.3 используется только ECDHE.

PFS (Perfect Forward Secrecy) - даже если в будущем приватный ключ сервера будет скомпрометирован, ранее перехваченный трафик невозможно расшифровать, потому что каждая сессия использует уникальные временные ключи, которые не сохраняются.

В TLS 1.2 после согласования Pre-Master Secret стороны применяют псевдослучайную функцию PRF (Pseudo-Random Function) на основе HMAC, чтобы последовательно вычислить Master Secret и затем рабочие ключи сессии.

Важно: различаем секреты и ключи

Не путаем:

  • Pre-Master Secret — общий секрет, полученный в результате механизма обмена ключами (RSA или ECDHE)
  • Master Secret — вычисляется из Pre-Master Secret
  • Session Keys — реальные рабочие ключи для шифрования и проверки целостности
1. RSA / ECDHE → Pre-Master Secret

2. Pre-Master Secret + Client Random + Server Random
                ↓ PRF
           Master Secret

3. Master Secret
        ↓ PRF
   Session Keys

Как вычисляются Master Secret
Из следующих значений:

  • Client Random
  • Server Random
  • Pre-Master Secret

с помощью PRF вычисляется Master Secret

⚠️ Ни Pre-Master Secret, ни Master Secret не используются напрямую для шифрования данных.

Из Master Secret с помощью PRF выводятся рабочие ключи сессии (session keys):

  • ключ шифрования клиента (client_write_key)
  • ключ шифрования сервера (server_write_key)
  • MAC-ключи (client/server MAC keys, в режимах CBC)
  • дополнительные параметры (IV)

Именно эти session keys используются для:

  • шифрования данных
  • проверки целостности
  • защиты всего HTTP-трафика

После завершения TLS handshake начинается передача зашифрованных HTTP-сообщений.

В TLS 1.3 процесс упрощён:

  • RSA больше не используется для обмена ключами
  • всегда применяется ECDHE
  • PFS является обязательным
  • количество сообщений в handshake сокращено
  • используется современная схема вывода ключей (HKDF на основе HMAC)

Почему в HTTPS используется симметричное шифрование
#

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

Асимметричное шифрование (RSA, ECDSA)
Особенности:

  • Использует пару ключей: публичный и приватный
  • Позволяет безопасно обменяться секретом через открытую сеть
  • Математически сложное и вычислительно затратное

Недостаток:

  • Значительно медленнее симметричного шифрования
  • Неподходит для шифрования больших объёмов данных

Используется для:

  • аутентификации сервера
  • безопасного обмена ключами сессии

Симметричное шифрование (AES)
Особенности:

  • Один общий секретный ключ
  • Очень высокая скорость работы
  • Минимальная нагрузка на процессор

Используется для:

  • шифрования всего HTTP-трафика после установки соединения

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

Если бы каждый пакет шифровался RSA:

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

Поэтому используется схема:

  1. Асимметричное шифрование → безопасно договориться о ключе
  2. Симметричное шифрование → быстро передавать данные

Какая разница между механизмами получения общего секрета - RSA и ECDHE
#

Если используется RSA (старый вариант TLS 1.2)

  • Клиент генерирует Pre-Master Secret
  • Шифрует его публичным ключом сервера (из сертификата)
  • Отправляет серверу
  • Сервер расшифровывает своим приватным ключом

В этом случае общий секрет фактически создаёт клиент, а сервер его просто расшифровывает.
В RSA отсутствует PFS, если приватный ключ сервера украдут — можно расшифровать старый трафик.

Если используется ECDHE (современный вариант)

  • Клиент и сервер обмениваются временными публичными ключами
  • Каждый вычисляет общий секрет независимо
  • Секрет никогда не передаётся по сети

В этом случае используется алгоритм Диффи–Хеллмана (ECDHE) на эллиптических кривых.
В ECDHE есть PFS, даже если ключ сервера украдут — старые сессии останутся защищёнными.

Что такое Cipher Suite
#

Cipher suite — это набор алгоритмов, которые TLS использует для безопасного соединения. В него обычно входят три компонента:

  1. Алгоритм шифрования (encryption algorithm) — шифрует данные, чтобы их нельзя было прочитать третьим лицам.
  2. Алгоритм аутентификации/подписи (authentication/MAC algorithm) — проверяет целостность и подлинность данных.
  3. Алгоритм обмена ключами (key exchange algorithm) — отвечает за безопасную генерацию и обмен ключами между клиентом и сервером.

Примеры:
TLS_RSA_WITH_AES_128_CBC_SHA:

  • TLS — протокол, версия 1.0–1.2
  • RSA — алгоритм обмена ключами и аутентификации сервера
  • AES_128_CBC — симметричный алгоритм шифрования данных
  • SHA — хэш-функция для проверки целостности данных через HMAC-SHA1

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:

  • TLS — протокол версии 1.0–1.2 (чаще используется в TLS 1.2)
  • ECDHE — Elliptic Curve Diffie-Hellman Ephemeral, алгоритм обмена ключами с поддержкой PFS
  • ECDSA — алгоритм аутентификации сервера на основе эллиптических кривых
  • AES_128_GCM — симметричный алгоритм AES с ключом 128 бит в режиме GCM (шифрование + встроенная проверка целостности)
  • SHA256 — хэш-функция для PRF и создания ключевого материала (в GCM отдельный HMAC не используется)

У современного Cipher Suite из TLS 1.3 структура немного другая:
TLS_AES_128_GCM_SHA256:

  • TLS — протокол, версия 1.3
  • AES_128 — симметричный алгоритм шифрования AES с ключом 128 бит
  • GCM — режим шифрования Galois/Counter Mode, который одновременно шифрует и проверяет целостность данных (интегрирует функции MAC)
  • SHA256 — хэш-функция, используемая для создания ключей (не для отдельной проверки целостности, как в старых версиях TLS)

Ключевые отличия Cipher Suite

Особенность TLS_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_AES_128_GCM_SHA256
Версия протокола TLS 1.0–1.2 TLS 1.2 TLS 1.3
Алгоритм обмена ключами RSA (нет PFS) ECDHE (есть PFS) Всегда (EC)DHE
Аутентификация сервера RSA ECDSA Отдельно от cipher
Шифрование данных AES-128 в CBC AES-128 в GCM (AEAD) AES-128 в GCM (AEAD)
Проверка целостности HMAC-SHA1 встроена в GCM встроена в GCM
PFS ❌ Нет ✅ Да ✅ Да
Уязвимости padding oracle, SHA-1 слабый существенно безопаснее современный стандарт

Особенность TLS 1.3: в нём нет явного алгоритма обмена ключами в названии Cipher Suite — обмен ключами теперь всегда ведётся через ECDHE (Ephemeral Diffie-Hellman), что делает соединение более безопасным.

Протокол обмена ключами Диффи-Хеллмана (DH)
#

В 1976 году Уитфилд Диффи и Мартин Хеллман представили алгоритм, позволяющий двум незнакомым сторонам безопасно обмениваться ключами через публичные каналы связи. Эта разработка заложила основу для асимметричного шифрования, также известного как криптография с открытым ключом.

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

Как работает алгоритм Диффи-Хеллмана?

Обмен ключами — алгоритм Diffie–Hellman (DH)

На схеме показан классический механизм обмена ключами по алгоритму Diffie–Hellman.
Его цель — безопасно получить общий секретный ключ, даже если весь обмен проходит по открытому каналу.

Шаг 1. Публичные параметры
Стороны заранее договариваются (в открытом виде) о двух числах:

  • P = 13 — простое число (prime number)
  • G = 6 — генератор

Шаг 2. Приватные числа
Каждая сторона выбирает свой секрет:

  • Алиса выбирает private = 5
  • Боб выбирает private = 4

Эти числа никому не передаются.

Шаг 3. Вычисление публичных ключей
Каждая сторона вычисляет свой публичный ключ по формуле:

Public = (G ^ Private) mod P

Можно использовать калькулятор в инженерном режиме.

  • Алиса: (6^5) mod 13 = 2
  • Боб: (6^4) mod 13 = 9

Затем они обмениваются этими числами (2 и 9) по открытому каналу.

Шаг 4. Вычисление общего секрета
Теперь каждая сторона использует:

  • полученный публичный ключ соседа
  • свой приватный ключ

Формула:

Shared Secret = (Public_other ^ Private_self) mod P
  • Алиса: (9^5) mod 13 = 3
  • Боб: (2^4) mod 13 = 3

В результате обе стороны получают одинаковый секрет = 3.

Почему это безопасно?
Злоумышленник видит:

  • P = 13
  • G = 6
  • 2 и 9 (публичные ключи)

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

Зачем это нужно?
Diffie–Hellman:

  • используется в TLS/HTTPS
  • позволяет безопасно договориться о симметричном ключе
  • после этого применяется быстрое симметричное шифрование (например, AES)

📌 Важно: сам Diffie–Hellman не шифрует данные, он только позволяет безопасно создать общий секретный ключ.

Основы криптографии
#

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

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

В верхней части схемы изображён механизм, при котором:

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

📌 Особенность: алгоритмы работают быстро и подходят для шифрования больших объёмов данных (например, VPN, TLS-сессии после установки соединения).
⚠️ Проблема: если ключ будет перехвачен, злоумышленник сможет и зашифровать, и расшифровать данные.

AES (Advanced Encryption Standard): AES - это широко используемый симметричный алгоритм шифрования. Он поддерживает ключи размером 128, 192 или 256 бит. AES известен своей скоростью и безопасностью и широко используется в различных приложениях.
DES (Data Encryption Standard): DES - это старый симметричный алгоритм шифрования, использующий ключ размером 56 бит. Хотя DES был широко использован в прошлом, сейчас он считается небезопасным из-за малого размера ключа.
3DES (Triple DES): 3DES применяет алгоритм DES три раза с разными ключами, что приводит к более сильному методу шифрования. Однако 3DES медленнее AES и в настоящее время в большинстве случаев заменяется на AES.
Blowfish: Blowfish - это симметричный блочный шифр, поддерживающий переменную длину ключа (до 448 бит). Он известен своей простотой и скоростью, что делает его подходящим для многих приложений.

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

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

  • Открытый ключ (Public Key) — можно передавать кому угодно
  • Закрытый ключ (Private Key) — хранится в секрете владельцем

Ключи математически связаны между собой.

1. Шифрование для передачи данных

  • Сообщение шифруется открытым ключом получателя
  • Расшифровать его может только владелец закрытого ключа

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

2. Подпись

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

Это используется для:

  • TLS-сертификатов
  • Электронной подписи
  • Проверки подлинности ПО

RSA (Rivest-Shamir-Adleman): RSA - это широко используемый асимметричный алгоритм шифрования для безопасной передачи данных и создания цифровых подписей. Он опирается на математическую сложность факторизации больших простых чисел.
DSA (Digital Signature Algorithm): DSA - это алгоритм цифровой подписи, используемый для создания и проверки цифровых подписей. Он часто используется в сочетании с симметричным шифрованием для обеспечения безопасной связи.
DH (Diffie-Hellman): DH - это алгоритм обмена ключами, используемый для безопасного обмена криптографическими ключами через открытый канал. Он позволяет двум сторонам установить общий секретный ключ без его прямой передачи.

Хэш-функции
#

SHA (Secure Hash Algorithm): SHA - это семейство криптографических хэш-функций, включая SHA-1, SHA-256, SHA-384 и SHA-512. Эти хэш-функции генерируют фиксированный хэш-значение из входных данных, часто используемых для проверки целостности данных и хэширования паролей.

Главное отличие
#

Симметричное Асимметричное
Один ключ Два разных ключа
Быстрое Медленнее
Проблема передачи ключа Безопасная передача через public key
Подходит для шифрования трафика Подходит для обмена ключами и подписи

TLS (Transport Layer Security): TLS - это протокол, который комбинирует симметричное и асимметричное шифрование для безопасной связи через сеть. Он использует асимметричное шифрование для обмена ключами (например, RSA) и симметричное шифрование (например, AES) для передачи данных.

Related

Использование TLS клиента OpenSSL для тестирования HTTPS
·1010 слов·5 минут
Настройка Policy-based и Route-based VPN через strongSwan с swanctl
·834 слов·4 минут
Простейший HTTP-сервер на Python
·163 слов·1 минута