← Назад к вопросам

Как устроено шифрование в HTTPS?

2.0 Middle🔥 111 комментариев
#Сети и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как устроено шифрование в HTTPS?

Обзор архитектуры HTTPS

HTTPS (HyperText Transfer Protocol Secure) — это HTTP поверх слоя TLS/SSL (Transport Layer Security / Secure Sockets Layer). Он обеспечивает конфиденциальность, целостность и аутентификацию данных.

Архитектура шифрования

HTTPS использует комбинацию двух типов шифрования:

  1. Асимметричное (RSA, ECDH) — для безопасного обмена ключами
  2. Симметричное (AES) — для шифрования данных

Процесс TLS Handshake

Шаг 1: ClientHello Клиент отправляет поддерживаемые версии TLS, список cipher suites и случайное число.

Шаг 2: ServerHello Сервер выбирает версию TLS, cipher suite и отправляет свой сертификат с публичным ключом.

Шаг 3: Key Exchange Клиент генерирует pre-master secret и шифрует его открытым ключом сервера (RSA). Сервер расшифровывает своим приватным ключом.

Вычисление сессионных ключей

Обе стороны используют PRF (Pseudo Random Function) для вывода ключей:

  • master_secret = PRF(pre_master_secret, client_random, server_random)
  • client_write_key = PRF(master_secret, client_random, server_random)
  • server_write_key = PRF(master_secret, client_random, server_random)

Эти ключи используются для AES-256 шифрования.

Шифрование данных

Для каждого пакета:

  1. Вычисляется MAC (HMAC-SHA256) для целостности
  2. Данные + MAC шифруются AES-256-CBC
  3. Добавляется TLS Record Header
  4. Отправляется в сеть

Защита от атак

Man-in-the-Middle (MITM):

  • Сертификат сервера подписан центром сертификации (CA)
  • Клиент проверяет подпись с помощью публичного ключа CA
  • Невозможно подделать без приватного ключа CA

Перебор ключа:

  • AES-256 имеет 2^256 возможных ключей (~10^77)
  • На практике невозможно перебрать

Replay атаки:

  • Sequence number в MAC
  • Инициализирующий вектор (IV) для каждого блока

TLS 1.3 (современный подход)

ТLS 1.3 упростил процесс:

  1. ClientHello включает ephemeral public key
  2. ServerHello с key share
  3. Обе стороны вычисляют shared secret через ECDH
  4. Данные шифруются немедленно

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

  • Меньше round trips (быстрее)
  • Perfect forward secrecy — даже если ключ скомпрометирован, старые сессии безопасны

Практический пример (OpenSSL в C++)

SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
SSL_CTX_load_verify_locations(ctx, "/etc/ssl/certs/ca-bundle.crt", nullptr);

SSL *ssl = SSL_new(ctx);
int sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, ...);

SSL_set_fd(ssl, sock);
SSL_connect(ssl);  // TLS handshake

const char* request = "GET / HTTP/1.1\r\n\r\n";
SSL_write(ssl, request, strlen(request));  // Зашифровано

char response[4096];
SSL_read(ssl, response, sizeof(response));  // Расшифровано

SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(ctx);

Итоговая схема

HTTPS = HTTP + TLS/SSL, где:

  1. TLS Handshake использует асимметричное шифрование для обмена ключами
  2. Вычисляются сессионные ключи через PRF
  3. Данные шифруются симметричным AES
  4. Целостность проверяется MAC (HMAC)
  5. Сертификаты и последовательные номера защищают от атак

Эта архитектура обеспечивает безопасность современного веб-трафика.