Substituindo o backend do IBM Quantum por `/dev/urandom`
(github.com/yuvadm)- Mesmo substituindo apenas o backend do IBM Quantum por
os.urandom, a recuperação da chave privada foi reproduzida mantendo inalterados a construção do circuito, os oráculos, o pipeline de extração e o verificadord·G == Q - O escopo da modificação se limita a 59 linhas alteradas em
projecteleven.py: remove a execução do backend e a coleta de resultados, e gera sequências uniformes de bits aleatórios compatíveis com a largura do registrador clássico, na quantidade deshots, repassando-as ao pós-processamento existente - De 4 bits a 10 bits, a execução com
/dev/urandomrecuperou valores dedidênticos byte a byte aos resultados de hardware reportados; em 16 bits e 17 bits, também conseguiu recuperar a chave em 4 de 5 e 2 de 5 tentativas, respectivamente - A lógica de extração aceita, em cada shot,
d_cand = (r − j)·k⁻¹ mod napenas quando passa no verificador clássico; o documento explica a taxa de sucesso com/dev/urandomporP(≥1 verified hit in S shots) = 1 − (1 − 1/n)^S - Embora mantenha engenharia não trivial como seis oráculos, mapeamento heavy-hex e semiclassical phase estimation, a crítica do documento se limita à alegação criptanalítica e mostra que os resultados de hardware podem ser reproduzidos não como recuperação quântica, mas por verificação clássica
diff
- A alteração total em
projecteleven.pytem escala de −29 / +30 lines e remove a inicialização do serviço IBM Quantum, a execução do backend, a chamada do sampler e a coleta do resultado do job, substituindo tudo por geração decountsbaseada em aleatoriedade - O código adicionado lê o comprimento do registrador clássico do circuito, cria
shotssequências uniformes de bits aleatórios com a mesma largura e as agrega comCounter, repassando-as intactas ao pós-processamento existentenbits = qc.num_clbitsbpb = (nbits + 7) // 8mask = (1 << nbits) - 1- Em cada shot, o valor é criado com
int.from_bytes(_os.urandom(bpb), "big") & maske convertido em uma string binária com a largura especificada
- O conjunto completo das 59 linhas alteradas pode ser visto em
git diff main
Resultados: execução do CLI do autor com o patch aplicado
- Usando exatamente o mesmo comando de CLI, foi verificado se a chave privada podia ser recuperada apenas com resultados fornecidos por
/dev/urandom, em vez de hardware - A tabela apresentada no documento compara diretamente o valor de
dreportado pelo autor com o valor dedrecuperado por/dev/urandom -
Desafios pequenos, 1 tentativa cada, 8.192 shots
- O comando executado é
python projecteleven.py --challenge <N> --shots 8192 - A saída completa vai de
urandom_runs/urandom_challenge_4.txtaté_10.txt - Em todos os itens de 4 bits a 10 bits, o
drecuperado por/dev/urandomé idêntico byte a byte ao resultado de hardware reportado pelo autor- 4-bit: 6 → 6, verificação aprovada na primeira tentativa
- 6-bit: 18 → 18, verificação aprovada na primeira tentativa
- 8-bit: 103 → 103, verificação aprovada na primeira tentativa
- 9-bit: 135 → 135, verificação aprovada na primeira tentativa
- 10-bit: 165 → 165, verificação aprovada na primeira tentativa
- Segundo o documento, cada desafio foi executado uma vez,
/dev/urandomtambém foi executado uma vez, e ambos foram bem-sucedidos
- O comando executado é
-
Desafios principais, 5 tentativas cada, 20.000 shots, oráculo ripple-carry
- O comando executado é
python projecteleven.py --challenge <N> --oracle ripple --shots 20000 - A saída completa está reunida em
urandom_runs/urandom_challenge_16_17_flagship.txt - No desafio de 16 bits,
/dev/urandomrecuperou 4 vezes em 5 od = 20,248reportado pelo autor - No desafio de 17 bits,
/dev/urandomrecuperou 2 vezes em 5 od = 1,441reportado pelo autor - O documento diz que o resultado de 17 bits é o item que recebeu 1 BTC, e que
/dev/urandomo recuperou em cerca de 40% das execuções em um notebook - O documento também diz que o autor executou esse item uma vez no IBM
ibm_feze o apresentou como resultado quântico - A saída de terminal de um exemplo de execução em 17 bits também é incluída integralmente
- Curva:
y^2 = x^3 + 0x + 7 (mod 65647) - Ordem do grupo:
n = 65173 - Gerador:
G = (12976, 52834) - Ponto-alvo:
Q = (477, 58220) - Estratégia:
ripple-carry modular addition (CDKM) - Backend:
/dev/urandom - Largura do registrador clássico:
49 bits - Em
20000 shots:Unique outcomes: 20000 - Resultado:
d = 1441 - Verificação:
1441*G = (477, 58220) [OK] VERIFIED,[OK] SUCCESS: Recovered correct secret key
- Curva:
- O comando executado é
Por que esse resultado acontece
- A lógica de extração, com base em
ripple_carry_shor.py:197-240eprojecteleven.py:264, recebe(j, k, r)de cada shot, calculad_cand = (r − j)·k⁻¹ mod ne só o aceita quando passa no verificador clássicod_cand · G == Q - O documento assume que, sob ruído uniforme,
d_candsegue uma distribuição uniforme no intervalo[0, n), e dá a seguinte fórmula para a probabilidade de ao menos um sucesso de verificação emSshotsP(≥1 verified hit in S shots) = 1 − (1 − 1/n)^S
- Substituindo nessa fórmula os valores
(n, S)do documento, as taxas teóricas de sucesso com/dev/urandomficam assim- 4-bit:
n = 7,shots = 8,192,100.00% - 6-bit:
n = 31,shots = 8,192,100.00% - 8-bit:
n = 139,shots = 8,192,100.00% - 9-bit:
n = 313,shots = 8,192,100.00% - 10-bit:
n = 547,shots = 1,024,84.65% - 16-bit:
n = 32,497,shots = 20,000,45.96% - 17-bit:
n = 65,173,shots = 20,000,26.43%
- 4-bit:
- O documento afirma que a taxa de sucesso empírica medida com
/dev/urandombate com esse valor teórico - O mesmo repositório já contém, em
README.md:210, a seguinte frase"When shots >> n, random noise alone can recover d with high probability."
- Em todas as execuções de 4 bits a 10 bits, a razão
shots / nfica entre 1,9× e 1.170×; o documento diz que toda essa faixa já se enquadra nas condições que o próprio autor identificava como regime clássico
Como reproduzir
- Os resultados podem ser reproduzidos no mesmo branch e ambiente com os passos abaixo
git checkout urandom-reproduces-qpuuv venv .venv && . .venv/bin/activateuv pip install qiskit qiskit-ibm-runtime
- Exemplos de execução
python projecteleven.py --challenge 4 --shots 8192python projecteleven.py --challenge 10 --shots 8192python projecteleven.py --challenge 17 --oracle ripple --shots 20000 # may need 2-3 tries
- O documento diz que conta IBM, token, hardware quântico e rede não são necessários
Indícios e escopo
- A implementação do repositório em si é avaliada como engenharia real e não trivial
- Há seis variantes de oráculo
- O somador CDKM ripple-carry é mapeado para topologia heavy-hex
- É usada semiclassical phase estimation com mid-circuit measurement
- O escopo da crítica é limitado à alegação criptanalítica
- A conclusão do documento é que essa execução em hardware não representa recuperação de chave ECDLP por computador quântico, mas sim verificação clássica de candidatos uniformemente aleatórios, e que esse branch mostra a mesma reprodução sem qualquer hardware quântico
1 comentários
Comentários no Hacker News
Então, mesmo que por fora pareça produzir o "resultado correto", o motivo pode estar completamente errado. Por isso, fatoração de inteiros pequenos ou casos pequenos de ECDLP são benchmarks inadequados para medir progresso em computação quântica.
Eu avisei o pessoal da project11 que isso aconteceria. Achei que no fim dariam bitcoin para quem melhor escondesse o fato de que o computador quântico não contribuiu em nada, e também achei bem possível que o próprio autor da submissão tivesse se enganado. Parece que não levaram isso a sério.
[1]: https://sigbovik.org/2025/proceedings.pdf#page=146
/dev/urandome a chave continuou sendo recuperadaA própria apresentação dele é voltada para software corporativo, arquitetura full-stack, cloud native, arquitetura de soluções e engenharia de vendas, e pelo histórico de commits isso parece quase vibe coded: https://github.com/GiancarloLelli/quantum
Recuperar uma chave ECC de 17 bits hoje não tem dificuldade nenhuma por força bruta em um computador clássico
Perfeito
Talvez eu esteja vendo outra coisa, mas aquilo com certeza parece o
tde quan(tumslop)Isso é arte de verdade
Meio nojento
Também saiu recentemente outro resultado de dequantized: https://arxiv.org/abs/2604.21908
Se o computador quântico fosse essencial, ao trocá-lo por um RNG a resposta não deveria sair, ou pelo menos a convergência teria que ficar mais lenta. Mas como o resultado foi exatamente o mesmo, toda a lógica real estava do lado clássico, e o QC só acrescentou ruído
Se o resultado estatisticamente não se distingue de um chute, então no fim parece que só montaram uma máquina de Rube Goldberg complicada
Golpistas podem ressuscitar moedas antigas fracassadas ou criar novas, comprar ou emitir uma grande quantidade e então anexar ML-DSA, divulgar aquilo como seguro contra ataques quânticos, inflar a shitcoin e depois despejar tudo
Em algum momento até investidores de varejo menos informados vão perceber, mas sinceramente nem sei para quem isso cola hoje
Nem o Google conseguiu provar que o computador quântico deles realmente funciona, e os algoritmos foram enfraquecidos a um nível extremo, a ponto de apresentarem coisas como 17 bits
https://blog.google/innovation-and-ai/technology/research/quantum-echoes-willow-verifiable-quantum-advantage/
Parece bem provável que comecem a despejar dinheiro absurdo em todo tipo de gerador de números aleatórios de 10 bilhões de dólares por aí