
Этот репозиторий содержит код и детали отправки для призового задания QDay от https://www.projecteleven.com/.
Квантовый решатель задачи дискретного логарифма на эллиптической кривой (ECDLP), созданный для конкурса Q-Day Prize компанией 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(). Матрица кодирует полное групповое действие: верхний левый блок — тождественная матрица (управление=0), нижний правый блок переставляет базисные состояния согласно отображению P -> P+S (управление=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 = точка на бесконечности)Каждое управляемое «добавление S» вычисляется на основе формулы сложения на эллиптической кривой для всех допустимых кодировок координат, создавая перестановку на регистре координат. Эта перестановка разлагается на транспозиции с использованием той же инфраструктуры сокращения 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) |