0Pricing
Cryptology Academy · Урок

ECDH: эллиптические кривые для обмена ключами

Примените скалярное умножение на эллиптической кривой для согласования ключей ECDH

«ECDH: эллиптические кривые для обмена ключами» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Добро пожаловать

ECDH заменяет мультипликативную группу DH группой эллиптической кривой. Результат: эквивалентная защищённость при ключах, которые в 10 раз меньше, и операциях, выполняющихся в 10 раз быстрее.

Операции в группе EC

В ECDH «умножение» — это скалярное умножение на эллиптической кривой: умножить точку P на скаляр k означает сложить P с самой собой k раз: k×P. Это аналог g^k mod p для EC.

Протокол ECDH

Стороны договариваются о кривой E и базовой точке G (открытых). Alice: закрытый ключ a, открытый ключ A = a×G Bob: закрытый ключ b, открытый ключ B = b×G Alice: S = a×B = a×b×G Bob: S = b×A = b×a×G Обе стороны получают одну и ту же точку S.

ECDLP

По заданной точке A = a×G на эллиптической кривой требуется найти a. Это задача дискретного логарифмирования на эллиптической кривой. Для общих кривых субэкспоненциальный алгоритм неизвестен, поэтому при одинаковом размере ключа ECDLP сложнее DLP.

Curve25519

Кривая разработана Bernstein в 2005 году. Форма Монтгомери: y²=x³+486662x²+x над простым числом 2^255-19. Она спроектирована для высокой скорости и устойчивости к ошибкам реализации. Используется в WireGuard, Signal и SSH.

Обмен ключами X25519

X25519 — это функция ECDH, использующая Curve25519. Применяется только координата x общей точки, а умножение на кофактор обрабатывает крайние случаи. RFC 7748 стандартизировал X25519 и X448.

ECDH на Python

from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey alice_priv = X25519PrivateKey.generate() bob_priv = X25519PrivateKey.generate() alice_pub = alice_priv.public_key() bob_pub = bob_priv.public_key() shared_alice = alice_priv.exchange(bob_pub) shared_bob = bob_priv.exchange(alice_pub) assert shared_alice == shared_bob

От общей точки к симметричному ключу

Необработанную общую точку нельзя напрямую использовать как ключ, поскольку она распределена неравномерно. Используйте HKDF, чтобы получить корректный симметричный ключ: from cryptography.hazmat.primitives.kdf.hkdf import HKDF key = HKDF(SHA256, 32, salt, info).derive(shared_secret)

Размеры ключей ECDH и DH

Уровень защищённости 128 бит: - DH: простое число размером 3072 бита - ECDH: кривая размером 256 бит Соотношение размеров ключей: примерно 12:1. Открытый ключ ECDH: 32 байта (Curve25519). Открытый ключ DH: 384 байта. Операции с закрытым ключом ECDH выполняются примерно в 50 раз быстрее.

Атака с использованием кофактора на небезопасные кривые

Атаки на малые подгруппы используют кривые с нетривиальными кофакторами. У Curve25519 кофактор равен 8, но X25519 корректно обрабатывает этот случай. У P-кривых NIST кофактор равен 1. Всегда используйте стандартизированные реализации.

ECDH в TLS 1.3

TLS 1.3 поддерживает X25519, X448, P-256, P-384 и P-521 для обмена ключами. X25519 используется чаще всего: он быстр, защищён и работает за постоянное время. Оба участника создают эфемерные ключи для каждого сеанса.

Быстрая проверка

В чём состоит главное преимущество ECDH перед классическим Diffie-Hellman?

Итоги

Вы освоили ECDH! Далее Вы разберётесь с прямой секретностью и узнаете, почему эфемерный обмен ключами необходим в TLS.

Часто задаваемые вопросы

Урок «ECDH: эллиптические кривые для обмена ключами» бесплатный?

Да — полный текст урока «ECDH: эллиптические кривые для обмена ключами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «ECDH: эллиптические кривые для обмена ключами»?

Примените скалярное умножение на эллиптической кривой для согласования ключей ECDH Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «ECDH: эллиптические кривые для обмена ключами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проблема распределения ключей
  2. Математика обмена ключами Диффи—Хеллмана
  3. ECDH: эллиптические кривые для обмена ключами
  4. Прямая секретность и эфемерный обмен ключами
← Назад к Cryptology Academy