
Квантовый решатель задачи дискретного логарифмирования на эллиптических кривых с использованием алгоритма Шора, реализующий несколько стратегий оракула для восстановления закрытых ключей ECC на реальном квантовом оборудовании.
Квантовый решатель задачи дискретного логарифма на эллиптических кривых (ECDLP), созданный для Q-Day Prize Challenge компанией Project Eleven. Цель: восстановить закрытые ключи ECC на реальном квантовом оборудовании с использованием алгоритма Шора.
Все кривые задачи используют y^2 = x^3 + 7 над F_p (a = 0, b = 7), что соответствует семейству secp256k1. Решатель реализует двухрегистровый вариант алгоритма Шора для ECDLP:
Закрытый ключ d восстанавливается путем сбора нескольких выборок (j, k), удовлетворяющих одному и тому же линейному соотношению по модулю порядка группы n. Решатель поддерживает шесть стратегий оракула для контролируемых сложений точек, которые выбираются автоматически в зависимости от размера кривой или вручную с помощью --oracle.
Используется для кривых с порядком группы до ~6 бит. Реализована в projecteleven.py.
Каждое контролируемое сложение точек "add S" представляется в виде матрицы перестановок размером 2^(n+1) x 2^(n+1), применяемой через qc.unitary(). Матрица кодирует полное действие группы: верхний левый блок — единичный (control=0), нижний правый блок переставляет базисные состояния согласно отображению P -> P+S (control=1).
Используется для более крупных кривых. Реализована в quantum_arithmetic.py.
Вместо построения плотных матриц каждая перестановка "add S" разлагается на циклы, которые затем превращаются в транспозиции. Каждая транспозиция (обмен двух базисных состояний |a> <-> |b>) реализуется с помощью:
MCX использует V-цепочное разложение с (n-2) выделенными вспомогательными кубитами, что дает O(n) гейтов Тоффоли на один MCX вместо O(n^2) без вспомогательных кубитов. Каждое контролируемое сложение строится как изолированная подсхема и добавляется в виде одного непрозрачного гейта, что позволяет избежать квадратичного роста DAG в Qiskit.
--oracle coordinate)Доступна для кривых размером до ~6 бит. Реализована в quantum_oracle.py.
Вместо кодирования точек как индексов группы, квантовый регистр хранит фактические (x, y) координаты полярных элементов в двоичном виде плюс флаг тождественности. Разметка регистра точки:
x_reg: f_bits кубитов (f_bits = ceil(log2(p)))y_reg: f_bits кубитовid_flag: 1 кубит (1 = точка на бесконечности)Каждое контролируемое "add S" вычисляется по формуле сложения EC для всех допустимых кодировок координат, порождая перестановку в регистре координат. Эта перестановка разлагается на циклы и транспозиции с использованием той же инфраструктуры CNOT-редукции + MCX, что и Стратегия 2.
--oracle arithmetic)Фреймворк для полиномиально масштабируемого сложения точек. Реализован в quantum_oracle.py и quantum_arithmetic.py.
Использует кодирование координат (аналогично Стратегии 3) с модульными арифметическими примитивами на основе QFT в качестве строительных блоков для полностью арифметического сложения точек. Код включает протестированные реализации:
Арифметические примитивы обеспечивают масштабирование O(n^3) на сложение точки по сравнению с O(N*n) для подхода с перестановками. Однако операции на основе QFT имеют постоянный множитель примерно в 150 раз больше, что делает арифметический подход эффективным только для кривых с порядком группы выше ~20 бит. Для текущих размеров задач (до 12 бит) сумматор на основе перестановок остается более быстрым и используется по умолчанию.
--oracle google)Реализована в google_semiclassical.py. Вдохновлена техникой оценивания фазы с переработкой кубитов от Griffiths & Niu (1996), примененной в масштабе в Babbush et al. (2026) для оценок ресурсов ECDLP на secp256k1. Статья Babbush et al. была опубликована 30 марта 2026 года.
Заменяет два много-кубитных счетных регистра (j, k) и массовое обратное QFT на два одиночных перерабатываемых кубита и классически обусловленные коррекции фазы. Каждый бит счетного регистра обрабатывается последовательно: подготовка в |+>, применение контролируемого сложения точек, коррекция фазы на основе всех ранее измеренных битов, затем измерение. Примитивы динамических схем reset + if_test в Qiskit позволяют реализовать это на оборудовании IBM Quantum.
Оракул для контролируемых сложений точек делегируется существующей инфраструктуре (плотная унитарная для <= 6 бит, эффективная перестановка для > 6 бит), так что экономия кубитов достигается исключительно за счет устранения счетных регистров.
| Размер кривой | Стандартные кубиты | Полуклассические кубиты | Экономия | Проверено на оборудовании |
|---|---|---|---|---|
| 4-бит (n=7) | 11 | 5 | 55% | Да |
| 6-бит (n=31) | 17 | 7 | 59% | Да |
| 7-бит (n=79) | 26 + anc | 14 | 46% | Да |
| 8-бит (n=139) | 25 + anc | 10 + anc | 60% | Нет (накладные расходы синхронизации QPU) |
| 10-бит (n=547) | 31 + anc | 12 + anc | 61% | Нет (накладные расходы синхронизации QPU) |