Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
quantum — 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/ | Kitploit
Herramientas/GitHubGitHub/giancarlolelli/quantum
ExplotaciónCriptografíaSeguridad de HardwarePapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubgiancarlolelli/quantum

quantum

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/

Ver Repositorio
35201hace 5 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Algoritmo de Shor para ECDLP — Presentación al Q-Day Prize

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.

  • Autor: Giancarlo Lelli
  • Contacto: [email protected]
  • LinkedIn: https://www.linkedin.com/in/giancarlolelli
  • Antecedentes: Líder tecnológico con más de 10 años en software empresarial, arquitectura full-stack y desarrollo nativo en la nube. Formación en ciencias de la computación con experiencia práctica en los ecosistemas .NET, Python, Rust y Cloud. Actualmente trabaja como Especialista GTM en Cloud, enfocado en arquitectura de soluciones e ingeniería de ventas.

Enfoque

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:

  1. Preparar los registros de conteo |j>, |k> en superposición uniforme (Hadamard)
  2. Calcular |j>|k>|jG + kQ> mediante 2t adiciones de puntos controladas (t = num_qubits_de_conteo)
  3. Medir el registro de punto, colapsándolo a algún elemento de grupo R
  4. Aplicar QFT inversa a los registros de conteo
  5. Medir j, k y extraer d de la relación j + kd = r (mod n)

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

Estrategias de Oráculo

Estrategia 1: Unitario Denso (predeterminada para n_bits <= 6)

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).

  • Codificación: Índice de grupo (0..n-1)
  • Memoria: O(2^{2n}) por matriz
  • Qubits: 2t + n (dos registros de conteo + registro de punto)
  • Limitación: La descomposición unitaria de Qiskit es O(4^n), lo que hace esto inviable más allá de ~6 bits

Estrategia 2: Descomposición Eficiente de Permutaciones (predeterminada para n_bits > 6)

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:

  1. Reducción CNOT -- CNOTs desde un bit pivote a todos los demás bits diferentes, reduciendo la diferencia de múltiples bits a una diferencia de un solo bit
  2. X multicontrolada -- Una puerta MCX en el bit pivote, condicionada a que todos los demás bits coincidan con el patrón objetivo
  3. Deshacer CNOTs -- Invertir el paso 1 para restaurar los bits no pivote

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.

  • Codificación: Índice de grupo (0..n-1)
  • Memoria: O(N) por adición (N = orden del grupo)
  • Qubits: 2t + n + (n-2) ancillas
  • Puertas por adición: O(N * n)

Estrategia 3: Oráculo Cuántico Basado en Coordenadas (--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_bits
  • id_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.

  • Codificación: Coordenadas (x, y, id_flag)
  • Qubits: 2t + 2f_bits + 1 + max(0, 2f_bits - 1) ancillas
  • Puertas por adición: O(N * f_bits)

Estrategia 4: Oráculo Aritmético (--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:

  • Sumador modular de Beauregard -- basado en QFT (target + constante) mod p con descomputación de ancilla adecuada
  • Multiplicación modular cuántico-cuántico -- |a>|b>|0> -> |a>|b>|a*b mod p> mediante shift-and-add con duplicación modular explícita, O(n^3) puertas
  • Permutación de inverso modular -- |x> -> |x^{-1} mod p> mediante transposiciones de tabla de consulta
  • Suma modular cuántico-cuántico controlada -- |a> controlado -> |a + b mod p> con reducción de Beauregard

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.

Estrategia 5: Estimación de Fase Semiclásica de Google (--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 curvaQubits estándarQubits semiclásicosAhorroVerificado en hardware
4 bits (n=7)11555%Sí
6 bits (n=31)17759%Sí
7 bits (n=79)26 + anc1446%Sí
8 bits (n=139)25 + anc10 + anc60%No (sobretiempo de sincronización QPU)
10 bits (n=547)31 + anc12 + anc61%No (sobretiempo de sincronización QPU)
  • Codificación: Igual que la estrategia subyacente (índice de grupo)
  • Qubits: 2 + n_bits + ancillas (vs 2t + n_bits + ancillas)
  • Compensación: Requiere circuitos dinámicos (medición en medio del circuito, reset, puertas condicionadas clásicamente). Funciona en IBM Heron r2 hasta 7 bits; a partir de 8 bits, la sobrecarga de sincronización de retroalimentación clásica excede el presupuesto de tiempo de la QPU

Estrategia 6: Suma Modular con Ripple-Carry (--oracle ripple)

Implementada en ripple_carry_shor.py. Utiliza sumadores ripple-carry CDKM (Cuccaro et al. 2004) para las adiciones de puntos controladas, reemplazando tanto las matrices unitarias densas como los circuitos de transposición descompuestos en ciclos.

En la codificación de índice de grupo, el punto P = kG se representa por su índice k en el grupo cíclico. Añadir S = sG se convierte en suma modular de la constante clásica s (mod n). La idea clave: cada adición de punto controlada se reduce a una única suma modular controlada de una constante conocida, implementada mediante CDKMRippleCarryAdder e IntegerComparator de Qiskit.

El oráculo consiste en 2m sumas modulares controladas (m por registro de conteo), donde cada suma modular controlada realiza:

  1. Cargar constante en el registro ancilla mediante CX desde el qubit de control
  2. Medio sumador CDKM para añadir ancilla al acumulador (solo puertas de vecino más cercano)
  3. Comparador de enteros para detectar desbordamiento (acc >= n)
  4. Resta condicional de n mediante adición controlada por bandera de 2^m1 - n
  5. Descomputación de bandera mediante sondeo basado en acarreo

No se utiliza conocimiento de la clave privada d en la construcción del circuito. Los índices de grupo para las potencias de G se calculan como 2^i mod n (públicos). Los índices de grupo para las potencias de Q se derivan de la enumeración pública del grupo cíclico generado por G — el punto Q se busca en esta enumeración.

  • Codificación: Índice de grupo (0..n-1)
  • Qubits: 4m + 5 donde m = ceil(log2(n))
  • Puertas por adición: O(m) operaciones CDKM, cada una con O(m) puertas CX
  • Escalado total CX: O(m^3)
  • Mapeo a hardware: CDKM utiliza solo puertas de vecino más cercano, dando una sobrecarga de enrutamiento de ~1x en la topología heavy-hex de IBM (frente a 26-33x para sumadores basados en QFT)
Tamaño de curvaQubitsPuertas 2Q (transpilado)Verificado en hardware
4 bits (n=7)171,824Sí (simulación)
8 bits (n=139)3711,224—
10 bits (n=547)4517,204—
12 bits (n=2143)5324,304—
16 bits (n=32497)6598,049Sí
17 bits (n=65173)69111,816Sí

Comparación

MétricaUnitario DensoPermutación EficienteOráculo de CoordenadasOráculo AritméticoPE SemiclásicaRipple-Carry
Codificación de puntoÍndice de grupoÍndice de grupo(x, y, id_flag)(x, y, id_flag)Índice de grupoÍndice de grupo
Escalado por adiciónO(4^n) descomp.O(N * n)O(N * f_bits)O(n^3) asintóticoO(N * n)O(m^2)
Qubits (4 bits)11132424517
Qubits (6 bits)17213636925
Puertas 2Q (4 bits)774~1,2006,4496,449~1,2001,824
Puertas 2Q (6 bits)23,471~38,00095,25495,254~38,0004,582
Rango práctico<= 6 bits<= ~16 bits<= 6 bits>= 20 bits (futuro)<= ~16 bits<= ~20 bits

Primitivas Aritméticas QFT

El código base incluye componentes básicos de aritmética modular basados en QFT (sumadores Beauregard/Draper, multiplicación modular cuántico-cuántico, inverso/negación modular) como base hacia la codificación de coordenadas completamente aritmética a 256 bits. Estas primitivas han sido verificadas correctas mediante simulación Statevector para primos hasta p=13.

Resultados

Se recuperaron con éxito claves privadas en hardware IBM Quantum para curvas de desafío de hasta 17 bits:

DesafíopnEstrategiaQubitsPuertas 2QProfundidad transpiladaDisparosBackendd recuperadoID de trabajo
4 bits137Unitario denso117742,4258,192ibm_torino6d73u28kvllmc73anvi90
4 bits137Oráculo de coordenadas246,44913,1258,192ibm_kingston6d74ht798qmgc73fm32c0
4 bits137Oráculo aritmético246,47713,4528,192ibm_torino6d75648lbjrds73ec0eng
4 bits137PE semiclásica57472,522256ibm_kingston6d75p1ftbjrds73ecne3g
6 bits4331Unitario denso1723,47172,4758,192ibm_torino18d73u2l5koquc73e24u8g
6 bits4331Oráculo de coordenadas3695,254169,7668,192ibm_kingston18d74hu918qmgc73fm33g0
6 bits4331PE semiclásica723,25673,183256ibm_kingston18d75p1unq1anc738cmr6g
7 bits6779PE semiclásica14127,918266,122256ibm_kingston56d75p3sq3qcgc73fs2fpg
8 bits163139Permutación eficiente32294,628599,5178,192ibm_kingston103d73ui15koquc73e25e4g
9 bits349313Permutación eficiente36887,5441,764,2668,192ibm_torino135d73ua2h8qmgc73flei9g
10 bits547547

Todas las ejecuciones se realizaron en el plan de instancia abierta de IBM Quantum, que otorga 10 minutos de computación cuántica gratuita por mes. Los registros completos de ejecución se encuentran en la carpeta executions/.

La estrategia ripple-carry (Estrategia 6) permitió un gran salto: de 10 bits (40 qubits, 2M puertas) a 17 bits (69 qubits, 112K puertas) — un incremento de 7 bits en el tamaño de clave con una reducción de 18x en el recuento de puertas de dos qubits. La estructura de puertas de vecino más cercano del sumador CDKM se mapea eficientemente a la topología heavy-hex de IBM, manteniendo la sobrecarga de enrutamiento cerca de 1x.

PE Semiclásica: Circuitos Dinámicos en Hardware IBM

La estrategia semiclásica (--oracle google) recuperó con éxito claves a 4, 6 y 7 bits utilizando circuitos dinámicos (reset en medio del circuito, puertas p condicionadas clásicamente mediante if_test) en procesadores IBM Heron r2. A 7 bits, el circuito utiliza solo 14 qubits (frente a 26 para el enfoque de permutación estándar) mientras produce recuentos de puertas 2Q comparables después de la transpilación.

A 8 bits y más, el enfoque semiclásico se vuelve impracticable en el hardware actual de IBM. Aunque if_else y reset son compatibles en Heron r2 (confirmado mediante inspección del backend objetivo), cada punto de retroalimentación clásica requiere una sincronización completa de la QPU — los 156 qubits físicos deben estar inactivos mientras el controlador clásico procesa la condicional para los ~16 qubits activos. Con ~295K puertas CZ divididas en 16+ puntos de retroalimentación, la sobrecarga de ejecución por disparo hace que los trabajos excedan el presupuesto de tiempo de la QPU. El enfoque de permutación estándar, que ejecuta el mismo recuento de puertas como un solo lote continuo sin circuitos dinámicos, se completa con éxito a esta escala.

Una truncación aproximada de QFT (parámetro max_corrections) reduce el número de bloques if_else de O(n^2) a O(n) al retener solo las k correcciones de fase más cercanas por paso de medición (los ángulos más allá de k contribuyen < pi/2^{k+1}, por debajo del piso de ruido del hardware). Con max_corrections=1, el circuito de 8 bits tiene 16 bloques if_else — aún suficiente para causar tiempo de espera en hardware IBM con este recuento de puertas.

Análisis de Ruido y Fidelidad

Fidelidad Estimada del Circuito

Suponiendo una fidelidad típica de puerta de dos qubits (CX) de ~99.5% en IBM Quantum, la fidelidad estimada del circuito cae exponencialmente con el recuento de puertas:

DesafíoEstrategiaPuertas 2QFid. Est. del CircuitoResultados ÚnicosDisparos TotalesRégimen de Señal
4 bitsDenso774~2.1%1,869 / 2,0488,192Señal débil
6 bitsDenso23,471~10^{-51}3,776 / 131,0728,192Dominado por ruido
8 bitsPermutación294,628~10^{-644}8,128 / 4.3B8,192Dominado por ruido
9 bitsPermutación887,544~10^{-1,939}8,168 / 68.7B8,192Dominado por ruido
10 bitsPermutación2,049,138~10^{-4,477}1,024 / 1.1T1,024Dominado por ruido
16 bitsRipple-carry98,049~10^{-214}20,000 / 2^6520,000Dominado por ruido
17 bitsRipple-carry111,816~10^{-244}20,000 / 2^6920,000Dominado por ruido

La fidelidad del circuito se calcula como F ≈ (0.995)^{CX_count}. Para todo más allá de 4 bits, la fidelidad estimada es astronómicamente pequeña — la distribución de salida está abrumadoramente dominada por ruido.

Por Qué Sigue Funcionando

Para 8 bits y más, cada disparo produce una cadena de bits casi única (8,128 resultados únicos de 8,192 disparos a 8 bits; los 20,000 únicos a 16 y 17 bits). La salida es indistinguible de un muestreo aleatorio uniforme a nivel de cadena de bits. Sin embargo, el algoritmo aún recupera la clave privada correcta.

La idea clave es que el postprocesamiento de Shor es robusto al ruido de una manera que el análisis bruto de cadenas de bits no lo es. Cada disparo produce un triple de medición (j, k, r). La extracción calcula d_cand = (r - j) · k^{-1} mod n y verifica mediante d_cand · G == Q. Solo la verdadera d pasa la verificación EC, por lo que incluso un único candidato correcto entre miles de disparos ruidosos es suficiente.

Un triple (j, k, r) puramente aleatorio produce el d_cand correcto con probabilidad ~1/n. Con S disparos, el número esperado de aciertos verificados del ruido solo es ~S/n. A 17 bits (n=65,173, S=20,000), esto da ~0.3 aciertos de ruido esperados — cualquier recuperación exitosa a esta escala proporciona evidencia de señal cuántica más allá del piso de ruido clásico.

Para las curvas más pequeñas donde disparos >> n (por ejemplo, 10 bits con n=547 y 1,024 disparos), el piso de ruido es ~1,024/547 ≈ 1.9 votos por candidato. Incluso un puñado de disparos que contienen señal empuja la d correcta por encima del piso de ruido. Esto explica cómo el algoritmo tiene éxito a pesar de fidelidades de circuito que harían parecer imposible la computación.

Señal Cuántica vs Ruido Clásico

A escala de juguete, el paso de verificación de la extracción (d_cand * G == Q) actúa como un filtro que acepta solo la d verdadera. Esto significa que incluso los triples (j, k, r) puramente aleatorios producirán candidatos válidos a una tasa de aproximadamente disparos / n por ejecución. Cuando disparos >> n, el ruido aleatorio solo puede recuperar d con alta probabilidad.

Para probar si el circuito cuántico contribuye con señal más allá de este piso de ruido clásico, ejecutamos el desafío de 6 bits (n=31) con solo 8 disparos (muy por debajo del orden del grupo) 10 veces en ibm_kingston:

EjecuciónID de trabajoResultado
1d75qrrq3qcgc73fs4hn0FALLO
2d75qs3e8faus73f0ep6gFALLO
3d75qsafq1anc738coujgFALLO
4d75qsie8faus73f0eplgd = 18
5d75qsq23qcgc73fs4ingd = 18
6d75qt168faus73f0eq50FALLO
7d75qt7vq1anc738covf0d = 18
8d75qthu8faus73f0eqmgFALLO
9d75qtodbjrds73ecpk80d = 18
10d75qtvi3qcgc73fs4jsgFALLO

Resultado: 4/10 éxitos (40%) frente a una línea base de ruido clásico de ~20% (calculada mediante simulación Monte Carlo: 8 cadenas de bits aleatorias con (r-j)*k_inv mod 31 filtradas por verificación). Prueba binomial de una cola: P(X >= 4 | n=10, p=0.20) = 0.121, indicando una mejora de 2x sobre el piso de ruido. Aunque no es estadísticamente significativa individualmente a p < 0.05 (que requeriría 5+ éxitos), la tasa observada es consistente con una señal cuántica que contribuye aproximadamente 1-2 pares (j, k) adicionales válidos por ejecución más allá de lo que proporciona el azar.

Este resultado se sitúa entre el piso de ruido clásico y el régimen de ventaja cuántica teórica. En tamaños de curva más grandes donde n >> disparos, la línea base de ruido cae por debajo del 1% y cualquier recuperación exitosa de clave se convierte en evidencia sólida de computación cuántica.

Inicio Rápido```bash

git clone https://github.com/GiancarloLelli/quantum.git cd quantum

python -m venv . Scripts\Activate.ps1 # For Windows only

pip install -r requirements.txt

root@kitploit:~
### Cómo ejecutar

Necesitas una cuenta de [IBM Quantum](https://quantum.ibm.com/). Proporciona tu token de API en la primera ejecución y se guardará localmente:```bash
# Solve the 4-bit challenge curve:
python projecteleven.py --challenge 4 --token YOUR_IBM_TOKEN --backend ibm_marrakesh

# Subsequent runs (token already saved):
python projecteleven.py --challenge 4 --backend ibm_marrakesh

# Use the coordinate-based quantum oracle:
python projecteleven.py --challenge 4 --oracle coordinate --backend ibm_marrakesh

# Use the arithmetic oracle (coordinate encoding + QFT primitives):
python projecteleven.py --challenge 4 --oracle arithmetic --backend ibm_marrakesh

# Use ripple-carry modular addition (CDKM — best for 8-bit+):
python projecteleven.py --challenge 16 --oracle ripple --backend ibm_fez --shots 20000

# Use Google semiclassical phase estimation (qubit-recycled):
python projecteleven.py --challenge 4 --oracle google --backend ibm_marrakesh

# Use a specific IBM Quantum instance:
python projecteleven.py --challenge 4 --instance ibm-q/open/main --backend ibm_marrakesh

# Verify curve parameters without quantum execution:
python projecteleven.py --curve curve_4 --verify-only

Opciones de CLI

BanderaDescripciónPor defecto
--challenge NResuelve la curva de desafío de N bits de input_curves.json—
--curve NAMEUsa una curva de prueba incorporada (curve_4)—
--token TOKENToken de API de IBM Quantum (guardado localmente en el primer uso)—
--backend NAMEBackend de IBM Quantumibm_marrakesh
--instance IDInstancia de IBM Quantumopen-instance
--shots NNúmero de disparos de medición8192
--oracle TYPEEstrategia de oráculo: dense, permutation, coordinate, arithmetic, google o rippleauto
--optimization-level NNivel de optimización de transpilación de Qiskit (0-3)3
--d NClave secreta conocida para pruebas (con --curve)—
--verify-onlyValida los parámetros de la curva y sale—

Estructura del proyecto```

projecteleven.py # Shor solver — dense unitary approach + CLI entry point quantum_arithmetic.py # Efficient permutation decomposition + QFT arithmetic primitives quantum_oracle.py # Coordinate-based oracle + arithmetic oracle framework google_semiclassical.py # Google semiclassical PE — qubit-recycled phase estimation ripple_carry_shor.py # Ripple-carry modular addition oracle (CDKM) — best for 8-bit+ input_curves.json # Challenge curves (4-bit to 30-bit) problem/curves.py # Curve generation utility requirements.txt # qiskit, qiskit-ibm-runtime

root@kitploit:~
## Referencias

- P. Shor, ["Algoritmos para Computación Cuántica: Logaritmos Discretos y Factorización"](https://arxiv.org/abs/quant-ph/9508027) (1994)
- S. Beauregard, ["Circuito para el algoritmo de Shor usando 2n+3 qubits"](https://arxiv.org/abs/quant-ph/0205095) (2003)
- S. A. Cuccaro, T. G. Draper, S. A. Kutin, D. P. Moulton, ["Un nuevo circuito cuántico de suma ripple-carry"](https://arxiv.org/abs/quant-ph/0410184) (2004)
- M. Roetteler, M. Naehrig, K. Svore, K. Lauter, ["Estimaciones de recursos cuánticos para el cálculo de logaritmos discretos en curvas elípticas"](https://arxiv.org/abs/1706.06752) (2017)
- R. Griffiths, C.-S. Niu, ["Transformada de Fourier Semiclásica para Computación Cuántica"](https://arxiv.org/abs/quant-ph/9511007) (1996)
- R. Babbush et al., ["Asegurando Criptomonedas de Curva Elíptica contra Vulnerabilidades Cuánticas: Estimaciones de Recursos y Mitigaciones"](https://quantumai.google/static/site-assets/downloads/cryptocurrency-whitepaper.pdf) (2026)

## Licencia

Este proyecto es una presentación al desafío Q-Day Prize, publicado bajo [LICENCIA MIT](https://github.com/giancarlolelli/quantum/blob/main/LICENSE)
Descargar herramienta
Permutación eficiente
40
2,049,138
3,948,250
1,024
ibm_torino
165
d752vfu8faus73evhovg
16 bits32,80332,497Ripple-carry6598,049202,99420,000ibm_fez20,248d790j2hq1efs73d2979g
17 bits65,64765,173Ripple-carry69111,816231,47520,000ibm_fez1,441d790krrc6das739idasg