
Este repositorio contiene el código y los detalles de la presentación para el desafío del premio QDay de https://www.projecteleven.com/
Solucionador cuántico para el Problema del Logaritmo Discreto de Curva Elíptica (ECDLP), construido para el Q-Day Prize Challenge por Project Eleven. El objetivo: recuperar claves privadas ECC en hardware cuántico real utilizando el algoritmo de Shor.
Todas las curvas del desafío usan y^2 = x^3 + 7 sobre F_p (a = 0, b = 7), coincidiendo con la familia secp256k1. El solucionador implementa la variante de dos registros del algoritmo de Shor para ECDLP:
La clave privada d se recupera recolectando múltiples muestras (j, k) que satisfacen la misma relación lineal módulo el orden del grupo n. El solucionador admite seis estrategias de oráculo para las adiciones de puntos controladas, seleccionadas automáticamente según el tamaño de la curva o manualmente mediante --oracle.
Usada para curvas con orden de grupo de hasta ~6 bits. Implementada en projecteleven.py.
Cada adición de punto controlada "añadir S" se representa como una matriz de permutación de 2^(n+1) x 2^(n+1) aplicada mediante qc.unitary(). La matriz codifica la acción completa del grupo: el bloque superior izquierdo es identidad (control=0), el bloque inferior derecho permuta los estados base según el mapa P -> P+S (control=1).
Usada para curvas más grandes. Implementada en quantum_arithmetic.py.
En lugar de construir matrices densas, cada permutación "añadir S" se descompone en ciclos como transposiciones. Cada transposición (intercambio de dos estados base |a> <-> |b>) se implementa con:
La MCX utiliza descomposición en cadena V con (n-2) qubits ancilla dedicados, proporcionando O(n) puertas Toffoli por MCX en lugar de O(n^2) sin ancillas. Cada adición controlada se construye como un subcircuito aislado y se agrega como una sola puerta opaca, evitando el crecimiento cuadrático del DAG en Qiskit.
--oracle coordinate)Disponible para curvas de hasta ~6 bits. Implementada en quantum_oracle.py.
En lugar de codificar puntos como índices de grupo, el registro cuántico contiene coordenadas reales (x, y) de elementos de campo en binario más una bandera de identidad. El diseño del registro de punto es:
x_reg: qubits f_bits (f_bits = ceil(log2(p)))y_reg: qubits f_bitsid_flag: 1 qubit (1 = punto en el infinito)Cada "añadir S" controlado se calcula a partir de la fórmula de adición EC sobre todas las codificaciones de coordenadas válidas, produciendo una permutación en el registro de coordenadas. Esta permutación se descompone en ciclos como transposiciones utilizando la misma infraestructura de reducción CNOT + MCX que la Estrategia 2.
--oracle arithmetic)Marco para la adición de puntos con escalado polinomial. Implementada en quantum_oracle.py y quantum_arithmetic.py.
Utiliza codificación de coordenadas (igual que la Estrategia 3) con primitivas de aritmética modular basadas en QFT como componentes básicos hacia la adición de puntos completamente aritmética. El código base incluye implementaciones probadas de:
Las primitivas aritméticas logran un escalado O(n^3) por adición de punto frente a O(N*n) para el enfoque de permutación. Sin embargo, las operaciones basadas en QFT conllevan un factor constante ~150 veces mayor, lo que hace que el enfoque aritmético sea más eficiente solo para curvas por encima del orden de grupo de ~20 bits. Para los tamaños de desafío actuales (hasta 12 bits), el sumador basado en permutación sigue siendo más rápido y se utiliza por defecto.
--oracle google)Implementada en google_semiclassical.py. Inspirada en la técnica de estimación de fase con reciclaje de qubits de Griffiths & Niu (1996), aplicada a escala en Babbush et al. (2026) para estimaciones de recursos de ECDLP en secp256k1. El artículo de Babbush et al. fue publicado el 30 de marzo de 2026.
Reemplaza los dos registros de conteo multiqubit (j, k) y la QFT inversa masiva con dos qubits reciclados individuales y correcciones de fase condicionadas clásicamente. Cada bit del registro de conteo se procesa secuencialmente: preparar en |+>, aplicar adición de punto controlada, corregir fase según todos los bits medidos previamente, luego medir. Los primitivos de circuito dinámico reset + if_test en Qiskit permiten esto en hardware IBM Quantum.
El oráculo para las adiciones de puntos controladas se delega en la infraestructura existente (unitario denso para <= 6 bits, permutación eficiente para > 6 bits), por lo que el ahorro de qubits proviene completamente de eliminar los registros de conteo.
| Tamaño de curva | Qubits estándar | Qubits semiclásicos | Ahorro | Verificado en hardware |
|---|---|---|---|---|
| 4 bits (n=7) | 11 | 5 | 55% | Sí |
| 6 bits (n=31) | 17 | 7 | 59% | Sí |
| 7 bits (n=79) | 26 + anc | 14 | 46% | Sí |
| 8 bits (n=139) | 25 + anc | 10 + anc | 60% | No (sobretiempo de sincronización QPU) |
| 10 bits (n=547) | 31 + anc | 12 + anc | 61% | No (sobretiempo de sincronización QPU) |