ГоловнаСтаттіКриптографія

Криптографія з використанням еліптичних кривих: Швидко вперед, важко назад

Додавання точок перетворює криву на групу; скалярне множення перетворює цю групу на односторонню функцію — основа обміну ключами ECDH та підписів ECDSA.

mysimulator teamОновлено — червень 2026≈ 9 хв читання▶ Відкрити симуляцію

Эллиптическая кривая

Эллиптическая кривая, используемая в криптографии, — это множество точек (x, y), удовлетворяющих уравнению y² = x³ + ax + b, вычисленное не над действительными числами, а над конечным полем целых чисел по модулю большого простого p — то есть «кривая» на самом деле является конетным множеством дискретных пар (x, y) плюс одна дополнительная точка в бесконечности, которая действует как элемент-идентичность. То, что делает ее полезной для криптографии, заключается в том, что этот конечный набор точек можно снабдить групповой структурой: существует хорошо определенный способ «сложить» две точки на кривой и получить третью точку также находящуюся на кривой.

жива демонстрація · пов'язана симуляція● LIVE

Точка додавання: хорда та касатка, над кінцевим полем

Геометрично (найлегше уявити над дійсними числами перед зменшенням mod p): щоб додати дві різні точки P і Q, проведіть пряму лінію через них, знайдіть її третє перетин з кривою та віддзеркаліть цю точку відносно осі x, щоб отримати P + Q. Щоб додати точку самій собі (подвоєння), використовуйте касатку в цій точці замість хорди. На кожному кроці арифметика за модулем p замінює арифметику з дійсними числами, але алгебраїчні формули однакові:

Подвоєння P = (x, y), P ≠ O, y ≠ 0: λ = (3x² + a) / (2y) mod p x³ = λ² - 2x mod p y³ = λ(x - x³) - y mod p

Додавання P=(x1,y1), Q=(x2,y2), x1 ≠ x2: λ = (y2 - y1) / (x2 - x1) mod p x³ = λ² - x1 - x2 mod p y³ = λ(x1 - x³) - y1 mod p Тут ділення означає множення на модульний зворотно-значений, обчислений за допомогою розширеного алгоритму Евкліда. На кожному кроці залишається всередині кінцевого поля, і закритість поля під цими операціями гарантує, що P + Q завжди потрапляє назад на криву, ніколи не виходить з неї.

doubling P = (x, y), P ≠ O, y ≠ 0:
  λ = (3x² + a) / (2y)   mod p
  x3 = λ² − 2x        mod p
  y3 = λ(x − x3) − y   mod p

adding P=(x1,y1), Q=(x2,y2), x1 ≠ x2:
  λ = (y2 − y1) / (x2 − x1)   mod p
  x3 = λ² − x1 − x2         mod p
  y3 = λ(x1 − x3) − y1          mod p

Скалярне множення: легкий напрямок

Приватний ключ є випадковим цілим числом k; відповідний публічний ключ — це точка kG — основа, яка обчислюється ефективно за допомогою подвоєння та додавання: щоб обчислити kG, запишіть k у двійковому вигляді і, переглядаючи біти, повторно множте поточну точку вдвічі та додавайте G кожного разу, коли поточний біт дорівнює 1. Це займає лише приблизно log₂(k) множення та додавання, тому навіть 256-бітовий приватний ключ потребує лише кілька сотень операцій з точками, кожна з яких є просто кількома модульними множеннями — достатньо швидко для запуску на смарт-карті.

double_and_add(k, G):
  R = O                      // point at infinity, the identity
  for bit in binary(k), most significant first:
    R = R + R                // double
    if bit == 1: R = R + G   // add
  return R                   // = kG, computed in O(log k) steps

Почему его обратное преобразование сложно: проблема вычисления дискретного логарифма

При заданном G и публичном ключе Q = kG, восстановление k является проблемой дискретного логарифма эллиптической кривой (ECDLP), и не существует известного алгоритма, который решал бы ее быстрее, чем примерно √p шагов для хорошо подобранной кривой над полем размера p (лучшие общие атаки, например, Pollard's rho, работают за время пропорциональное квадратному корню из порядка группы). Это контрастирует с обычной модульной экспонентой, где аналогичная проблема дискретного логарифма подвержена атакам на подэкспоненциальный индекс-вычисления; групповые эллиптические кривые не имеют известных эквивалентных сокращений, что и объясняет, почему ключ эллиптической кривой длиной 256 бит обеспечивает примерно такую же практическую безопасность, как и ключ RSA длиной 3072 бита — меньшие ключи, более быстрые операции для той же устойчивости к атакам.

Що таке ECC і для чого він використовується

ECDH (Elliptic Curve Diffie-Hellman) дозволяє двома сторонам, які обмінюються лише своїми публічними точками, kG та jG, незалежно обчислювати однакову спільну секретність kjG без передавання k або j, забезпечуючи захист ключового обміну, який лежить в основі майже кожної сучасної HTTPS-зв'язку. ECDSA (Elliptic Curve Digital Signature Algorithm) використовує той самий складний для зворотного розрахунку множення скалярів, щоб власник приватного ключа k міг створити підпис, який будь-хто з публічним ключем kG може перевірити, але ніхто без k не міг би його створити — механізм, що лежить в основі Bitcoin транзакційних підписів та TLS сертифікатів перевірки. Обидва повністю базуються на тій самій асиметрії, яка демонструється в цій симуляції: швидке йти вперед навколо кривої k разів, але неможливо визначити k з того, де ви приземлилися.

Frequently asked questions

Чому використовувати еліптичні криві замість звичайного модульного експонентовання, як RSA?

Це пов'язано з тим, що найкрадено відомий напад на задачу обчислення логарифма відрізка для еліптичних кривих є експоненційним (приблизно √p), тоді як проблема розкладання RSA має під-експоненційні атаки. Ця різниця означає, що ECC досягає такого ж рівня безпеки з набагато меншими ключами, приблизно 256 біт замість 3072 у RSA, що забезпечує швидші обчислення та менший обсяг даних для передачі.

Що таке точка нескінченності, і чому групі це потрібно?

Це формальний додатковий пункт, доданий до кривої, щоб служити як від’ємне число, еліптична крива еквівалентна нулю: P + O = P для будь-якого пункту P. Це необхідно для того, щоб множина точок була справжньою математичною групою, і це те, що перетин вертикальної лінії через дві точки, які є відображеннями один одного та не зустрічаються з кривою ще на кінці, визначено як перетин.

Якщо хтось знає G та мій відкритий ключ Q = kG, чи можуть вони обчислити мій приватний ключ k?

Ні, з використанням будь-якого відомого ефективного алгоритму, за умови, що крива та поле обрані з стандартними параметрами безпеки. Обчислення k з G і Q є задачею обчислення логарифма відрізка для еліптичних кривих, а найшвидші загальні атаки на добре обрані криві все ще займають час пропорційний квадратному кореню з порядку кривої, що робить їх обчислювально неможливими для 256-бітових кривих, які використовуються на практиці.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Elliptic Curve Cryptography і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Elliptic Curve Cryptography

Що ви знайшли?

Додати кроки відтворення (опційно)