Обмен ключами и гибридное шифрование
Узнайте, как обмен ключами Диффи — Хеллмана и TLS объединяют симметричные и асимметричные методы для достижения одновременно высокой производительности и безопасности.
«Обмен ключами и гибридное шифрование» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Проблема обмена ключами
Для симметричного шифрования обе стороны должны заранее иметь один и тот же секретный ключ, чтобы безопасно обмениваться данными. Но как безопасно передать этот ключ, если защищённого канала ещё нет? Эта проблема распределения ключей считалась нерешаемой до 1976 года, когда Уитфилд Diffie и Мартин Hellman опубликовали революционную научную работу. Их решение — обмен ключами Diffie-Hellman — позволяет двум сторонам установить общий секретный ключ через незащищённый канал, ни разу не передав сам ключ в открытом виде, доступном перехватчикам.
Концепция обмена ключами Diffie-Hellman
Diffie-Hellman (DH) использует остроумный математический приём, основанный на задаче дискретного логарифмирования. Обе стороны договариваются о двух общедоступных значениях (большом простом числе p и генераторе g). Каждая сторона создаёт случайное закрытое число, вычисляет на его основе открытое значение и обменивается открытыми значениями. Затем каждая сторона может вычислить один и тот же общий секрет, используя своё закрытое число и открытое значение другой стороны. При этом перехватчик, видящий только открытые значения, не может вычислить общий секрет без решения задачи дискретного логарифмирования, что вычислительно невозможно для больших чисел.
# Diffie-Hellman conceptual flow:
# 1. Agree on public parameters: prime p=23, generator g=5
# 2. Alice picks private a=6: computes A = g^a mod p = 5^6 mod 23 = 8
# 3. Bob picks private b=15: computes B = g^b mod p = 5^15 mod 23 = 19
# 4. Alice sends A=8 to Bob; Bob sends B=19 to Alice
# 5. Alice: s = B^a mod p = 19^6 mod 23 = 2
# 6. Bob: s = A^b mod p = 8^15 mod 23 = 2
# Shared secret = 2 (without either party transmitting it!)ECDH: эллиптический вариант Diffie-Hellman
Elliptic Curve Diffie-Hellman (ECDH) — это современный и более эффективный вариант обмена ключами Diffie-Hellman. Вместо модульного возведения в степень он использует математику эллиптических кривых и обеспечивает тот же уровень безопасности при значительно меньших параметрах. Ключ ECDH длиной 256 бит обеспечивает уровень безопасности, эквивалентный ключу DH длиной 3072 бита. ECDHE (буква «E» означает Ephemeral) создаёт новую пару ключей для каждого сеанса, обеспечивая совершенную прямую секретность. TLS 1.3 требует использования ECDHE для обмена ключами, поэтому этот механизм доминирует в современной веб-безопасности.
Совершенная прямая секретность (PFS)
Совершенная прямая секретность (PFS) гарантирует, что ключи сеансов не будут скомпрометированы, даже если долгосрочный закрытый ключ сервера впоследствии будет украден. PFS достигается за счёт использования эфемерных пар ключей для обмена ключами каждого сеанса: ключ сеанса выводится из временной пары ключей, которая удаляется после завершения сеанса. Без PFS (при использовании обмена ключами RSA) злоумышленник, записавший зашифрованный трафик сегодня и позднее похитивший закрытый ключ, может задним числом расшифровать весь прошлый трафик. При использовании PFS прошлые сеансы остаются защищёнными даже после компрометации ключа.
# Check if a website uses Perfect Forward Secrecy
openssl s_client -connect google.com:443 2>/dev/null | grep 'Cipher'
# Cipher : TLS_AES_256_GCM_SHA384 (TLS 1.3 - always has PFS)
# Or look for ECDHE in cipher name:
# Cipher : ECDHE-RSA-AES256-GCM-SHA384 (TLS 1.2 with PFS)
# DHE-RSA-AES256-GCM-SHA384 (DHE = also PFS)
# RSA-AES256-SHA (NO PFS - static RSA key exchange)Гибридное шифрование: лучшее из двух подходов
Гибридное шифрование сочетает асимметричную и симметричную криптографию, объединяя преимущества управления ключами асимметричного шифрования с производительностью симметричного. Процесс выглядит так: (1) генерируется случайный симметричный сеансовый ключ; (2) основной объём данных шифруется этим симметричным ключом (быстро); (3) симметричный ключ шифруется открытым ключом получателя (для безопасной передачи ключа); (4) отправляются и зашифрованные данные, и зашифрованный ключ. Получатель расшифровывает симметричный ключ с помощью своего закрытого ключа, а затем расшифровывает данные с помощью восстановленного симметричного ключа.
# Hybrid encryption example with OpenSSL
# 1. Generate a random AES-256 session key
openssl rand -out session.key 32
# 2. Encrypt the large file with the symmetric session key
openssl enc -aes-256-cbc -pbkdf2 -in largefile.tar -out largefile.enc -pass file:session.key
# 3. Encrypt the session key with recipient's RSA public key
openssl rsautl -encrypt -inkey recipient_public.pem -pubin -in session.key -out session.key.enc
# Send: largefile.enc + session.key.encУстановление TLS-соединения: гибридное шифрование на практике
Установление TLS-соединения — наиболее распространённая реализация гибридного шифрования в реальных системах. В TLS 1.3: (1) клиент отправляет поддерживаемые наборы шифров и общедоступное значение ключа (открытое значение ECDHE); (2) сервер отвечает своим общедоступным значением ключа, certificate (содержащим его открытый ключ) и подписью; (3) обе стороны вычисляют один и тот же общий секрет с помощью ECDH; (4) весь последующий трафик шифруется симметричным ключом, полученным из общего секрета (AES-256-GCM). Весь процесс устанавливает зашифрованный канал за один обмен данными, при этом симметричный ключ никогда не передаётся напрямую.
# Observe the TLS 1.3 handshake
openssl s_client -connect example.com:443 -tls1_3
# You'll see:
# TLSv1.3, Handshake [length 0002], ServerHello
# Cipher : TLS_AES_256_GCM_SHA384
# Session-ID: (no session ID in TLS 1.3, uses PSK)
# Verify return code: 0 (ok)Механизмы инкапсуляции ключей (KEM)
Современная криптография использует механизмы инкапсуляции ключей (KEM) как более формальный и безопасный подход к обмену ключами по сравнению с прямым асимметричным шифрованием сеансового ключа. KEM позволяет одной стороне сгенерировать симметричный ключ и «инкапсулировать» его с помощью открытого ключа получателя так, чтобы только получатель мог выполнить декапсуляцию (восстановить ключ). Постквантовый стандарт NIST CRYSTALS-Kyber — это KEM, основанный на задачах теории решёток, а не на разложении целых чисел на множители или эллиптических кривых, поэтому он устойчив к атакам квантовых компьютеров.
Обмен ключами RSA и ECDHE
До TLS 1.3 часто применялся обмен ключами RSA: клиент генерировал предварительный главный секрет, шифровал его открытым ключом RSA сервера и отправлял серверу. Проблема заключалась в том, что такой подход не обеспечивает прямую секретность. Если закрытый ключ сервера позднее будет скомпрометирован, все прошлые сеансы, зашифрованные таким способом, можно расшифровать. TLS 1.3 полностью исключает обмен ключами RSA (разрешён только ECDHE), чтобы обеспечить прямую секретность для всех соединений. Поэтому отключение TLS 1.0 и TLS 1.2 (в которых всё ещё допускается статический RSA) и обязательное использование TLS 1.3 повышают безопасность.
Выведение сеансового ключа
Общий секрет, полученный в результате обмена Диффи—Хеллмана, не используется непосредственно как ключ шифрования. Вместо этого он передаётся в функцию выведения ключа (KDF), которая создаёт фактические ключи шифрования и векторы инициализации. TLS 1.3 использует HKDF (функцию выведения ключа на основе HMAC) для получения отдельных ключей шифрования в каждом направлении. KDF увеличивают вычислительные затраты (что усложняет перебор), расширяют короткие секреты до требуемого количества байтов ключа и обеспечивают хорошие статистические свойства полученных ключей для использования в качестве симметричных.
Шифрование электронной почты с помощью PGP: гибридный подход
PGP и его эквивалент с открытым исходным кодом OpenPGP используют гибридное шифрование для электронной почты. Когда Alice отправляет Bob зашифрованное письмо, PGP генерирует случайный симметричный сеансовый ключ, шифрует им текст письма (AES), шифрует сеансовый ключ открытым ключом RSA или ECC Bob и отправляет оба ключа вместе. Для подписанных писем PGP вычисляет хеш сообщения и подписывает хеш закрытым ключом Alice, обеспечивая неотрекаемость. Модель PGP, основанная на сети доверия (пользователи подписывают ключи друг друга), является альтернативой PKI на основе центра сертификации.
# Encrypt and sign an email file with GPG (OpenPGP)
# Encrypt to Bob using his public key, sign with Alice's private key
gpg --encrypt --sign --recipient bob@example.com --armor message.txt
# Decrypt (Bob uses his private key)
gpg --decrypt message.txt.asc
# List available keys
gpg --list-keys
gpg --list-secret-keysРиск атаки «человек посередине» при обмене ключами
Обмен ключами Диффи—Хеллмана защищён от пассивных перехватчиков, но уязвим для активных атак «человек посередине» (MITM), если стороны не подтверждают подлинность друг друга. Злоумышленник может перехватить общедоступное значение Alice, подставить собственное и установить отдельные сеансы DH с Alice и Bob — при этом каждый из них будет считать, что общается с другим. Поэтому TLS сочетает обмен ключами DH с аутентификацией certificate: certificate сервера (подписанный доверенным CA) подтверждает личность сервера и не позволяет подменить открытый ключ во время установления соединения.
Быстрая проверка
Проверьте своё понимание концепций CompTIA Security+ (SY0-701), рассмотренных в этом уроке.
Итоги урока
В этом уроке Вы узнали, что Диффи—Хеллман решает проблему обмена ключами, позволяя сторонам получить общий секрет через небезопасный канал; ECDHE (эфемерный) обеспечивает совершенную прямую секретность; гибридное шифрование сочетает асимметричный обмен ключами с симметричным шифрованием больших объёмов данных для повышения эффективности; а TLS 1.3 требует использования ECDHE для всех соединений. Далее мы рассмотрим центры сертификации и цепочки доверия.
Изучай Cloud & IT Cert Prep с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 150
- Уроки
- 600
Часто задаваемые вопросы
Урок «Обмен ключами и гибридное шифрование» бесплатный?
Да — полный текст урока «Обмен ключами и гибридное шифрование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Обмен ключами и гибридное шифрование»?
Узнайте, как обмен ключами Диффи — Хеллмана и TLS объединяют симметричные и асимметричные методы для достижения одновременно высокой производительности и безопасности. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Обмен ключами и гибридное шифрование»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Алгоритмы симметричного шифрования
- Асимметричное шифрование и пары ключей
- Хеширование и целостность данных
- Обмен ключами и гибридное шифрование