2P by GN⁺ 9시간전 | ★ favorite | 댓글 1개
  • IBM Quantum 백엔드os.urandom으로 바꾼 상태에서도 회로 구성, 오라클, 추출 파이프라인, d·G == Q 검증기를 그대로 유지한 채 개인키 복구가 재현됨
  • 수정 범위는 projecteleven.py59줄 변경에 그치며, 백엔드 실행과 결과 수집을 제거하고 classical register 폭에 맞춘 균등 난수 비트열shots 수만큼 생성해 기존 후속 처리에 넘김
  • 4비트부터 10비트까지는 /dev/urandom 실행이 보고된 하드웨어 결과와 바이트 단위로 동일한 d을 복구했고, 16비트와 17비트에서도 각각 5회 중 4회, 5회 중 2회 복구에 성공함
  • 추출 로직은 각 shot에서 계산한 d_cand = (r − j)·k⁻¹ mod n고전적 검증기를 통과할 때만 채택되며, 문서에는 P(≥1 verified hit in S shots) = 1 − (1 − 1/n)^S/dev/urandom 성공률이 설명됨
  • 여섯 가지 오라클, heavy-hex 매핑, semiclassical phase estimation 같은 비자명한 엔지니어링은 유지되지만, 문서의 비판 범위는 암호해석 주장에 한정되며 하드웨어 실행 결과가 양자 복구가 아니라 고전적 검증으로도 재현됨을 보여줌

diff

  • projecteleven.py의 전체 변경은 −29 / +30 lines 규모이며, IBM Quantum 서비스 초기화와 백엔드 실행, 샘플러 호출, 작업 결과 수집 구간을 제거하고 난수 기반 counts 생성으로 대체함
  • 추가된 코드는 회로의 classical register 길이를 읽어 동일한 비트 수의 균등 난수 비트열shots 개수만큼 만들고, 이를 Counter로 집계해 기존 후속 처리에 그대로 넘김
    • nbits = qc.num_clbits
    • bpb = (nbits + 7) // 8
    • mask = (1 << nbits) - 1
    • 각 shot마다 int.from_bytes(_os.urandom(bpb), "big") & mask로 값을 만든 뒤 지정 폭의 이진 문자열로 변환함
  • 전체 59줄 변경 내역은 git diff main에서 확인 가능함

결과: 패치된 상태로 작성자의 CLI 실행

  • 동일한 CLI 명령을 그대로 사용해, 하드웨어 대신 /dev/urandom이 공급한 결과만으로 개인키 복구 여부를 점검함
  • 문서에 제시된 표는 작성자가 보고한 d/dev/urandom으로 복구한 d 값을 직접 비교함
  • 소형 챌린지, 각 1회 시도, 8,192 shots

    • 실행 명령은 python projecteleven.py --challenge <N> --shots 8192
    • 전체 출력은 urandom_runs/urandom_challenge_4.txt부터 _10.txt까지 이어짐
    • 4비트에서 10비트까지 모든 항목에서 /dev/urandom이 복구한 d는 작성자가 보고한 하드웨어 결과와 바이트 단위로 동일
      • 4-bit: 6 → 6, 첫 시도 검증 통과
      • 6-bit: 18 → 18, 첫 시도 검증 통과
      • 8-bit: 103 → 103, 첫 시도 검증 통과
      • 9-bit: 135 → 135, 첫 시도 검증 통과
      • 10-bit: 165 → 165, 첫 시도 검증 통과
    • 문서 기준으로 각 챌린지는 한 번씩 실행됐고, /dev/urandom도 한 번씩 실행됐으며 둘 다 성공
  • 대표 챌린지, 각 5회 시도, 20,000 shots, ripple-carry 오라클

    • 실행 명령은 python projecteleven.py --challenge <N> --oracle ripple --shots 20000
    • 전체 출력은 urandom_runs/urandom_challenge_16_17_flagship.txt에 정리돼 있음
    • 16비트 챌린지에서는 작성자가 보고한 d = 20,248/dev/urandom이 5회 중 4회 복구함
    • 17비트 챌린지에서는 작성자가 보고한 d = 1,441/dev/urandom이 5회 중 2회 복구함
    • 문서에는 17비트 결과가 1 BTC를 받은 항목으로 적혀 있고, /dev/urandom이 노트북에서 약 40% 실행에서 이를 복구했다고 적혀 있음
    • 문서에는 작성자가 IBM ibm_fez에서 이 항목을 한 번 실행하고 양자 결과라고 주장했다고 적혀 있음
    • 17비트 실행 예시의 터미널 출력도 그대로 포함됨
      • 곡선: y^2 = x^3 + 0x + 7 (mod 65647)
      • 군 차수: n = 65173
      • 생성원: G = (12976, 52834)
      • 목표점: Q = (477, 58220)
      • 전략: ripple-carry modular addition (CDKM)
      • 백엔드: /dev/urandom
      • classical register 폭: 49 bits
      • 20000 shots에서 Unique outcomes: 20000
      • 결과: d = 1441
      • 검증: 1441*G = (477, 58220)
      • [OK] VERIFIED, [OK] SUCCESS: Recovered correct secret key

왜 이런 결과가 나오는가

  • 추출 로직은 ripple_carry_shor.py:197-240projecteleven.py:264 기준으로 각 shot의 (j, k, r)를 받아 d_cand = (r − j)·k⁻¹ mod n을 계산한 뒤, 고전적 검증기 d_cand · G == Q를 통과할 때만 받아들임
  • 문서는 균등 잡음 아래에서 d_cand[0, n) 구간의 균등 분포를 따른다고 두고, S shots에서 검증 성공이 한 번 이상 나올 확률을 다음 식으로 적음
    • P(≥1 verified hit in S shots) = 1 − (1 − 1/n)^S
  • 이 식에 문서의 (n, S) 값을 대입한 이론적 /dev/urandom 성공률은 다음과 같음
    • 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%
  • 문서는 위에서 측정한 /dev/urandom의 경험적 성공률이 이 이론값과 맞아떨어진다고 적음
  • 같은 저장소의 README.md:210에는 다음 문장이 이미 들어 있다고 적혀 있음
    • "When shots >> n, random noise alone can recover d with high probability."
  • 4비트부터 10비트까지 모든 실행에서 shots / n 비율은 1.9×에서 1,170× 사이이며, 문서는 이 전 구간이 작성자 스스로도 고전적 구간으로 식별한 조건에 들어간다고 적혀 있음

재현 방법

  • 아래 절차로 같은 브랜치와 환경에서 결과를 재현할 수 있음
    • git checkout urandom-reproduces-qpu
    • uv venv .venv && . .venv/bin/activate
    • uv pip install qiskit qiskit-ibm-runtime
  • 실행 예시는 다음과 같음
    • python projecteleven.py --challenge 4 --shots 8192
    • python projecteleven.py --challenge 10 --shots 8192
    • python projecteleven.py --challenge 17 --oracle ripple --shots 20000 # may need 2-3 tries
  • 문서에는 IBM 계정, 토큰, 양자 하드웨어, 네트워크가 모두 필요 없다고 적혀 있음

단서와 범위

  • 저장소의 구현 자체는 진짜이고 비자명한 엔지니어링으로 평가됨
    • 여섯 가지 오라클 변형이 들어 있음
    • CDKM ripple-carry 가산기를 heavy-hex 토폴로지에 매핑함
    • mid-circuit measurement를 포함한 semiclassical phase estimation을 사용함
  • 비판의 범위는 암호해석 주장으로 한정됨
  • 문서의 결론은, 이 하드웨어 실행이 양자 컴퓨터에 의한 ECDLP 키 복구가 아니라 균등 난수 후보에 대한 고전적 검증이며, 이 브랜치가 보여주듯 양자 하드웨어 없이도 그대로 재현된다는 데 맞춰져 있음
Hacker News 의견들
  • 이건 내가 2025년 sigbovik 만우절 논문에서 정확히 깔아둔 전제와 같음. 작은 수에서는 Shor 알고리즘에 랜덤 샘플을 넣어도 금방 성공하고, 회로가 너무 길어져 양자컴퓨터의 오류율 한계를 넘기면 사실상 난수 생성기처럼 동작함.
    그래서 겉으로는 "올바른 결과"를 내도 이유는 완전히 틀릴 수 있음. 이런 이유 때문에 작은 정수분해나 작은 ECDLP 사례는 양자컴퓨팅 진전을 재는 벤치마크로 부적절함.
    나는 이 일이 벌어질 거라고 project11 쪽에 경고했음. 결국 양자컴퓨터가 기여하지 않았다는 사실을 가장 잘 가린 사람에게 비트코인을 주게 될 거라고 봤고, 제출자 본인도 스스로 속았을 가능성이 크다고 생각했음. 아마 진지하게 받아들이지 않은 듯함.
    [1]: https://sigbovik.org/2025/proceedings.pdf#page=146
  • Project Eleven이 방금 ECC에 대한 최대 규모 양자 공격이라며 1 BTC를 줬는데, IBM Quantum 하드웨어로 17비트 타원곡선 키를 복구했다는 내용이었음. 그런데 Yuval Adam이 양자컴퓨터를 /dev/urandom으로 바꿔도 키가 그대로 복구됨
    • 그래도 양자 하드웨어가 더 빠르게 처리하는지는 봐야 하지 않나
  • 이 챌린지를 이긴 사람이 올린 코드는 꽤 오해를 부르는 코드처럼 보이는데, 정작 본인에게는 양자컴퓨팅 배경이 전혀 없어 보임
    자기 소개도 엔터프라이즈 소프트웨어, 풀스택 아키텍처, 클라우드 네이티브, 솔루션 아키텍처와 세일즈 엔지니어링 쪽이고, 커밋 히스토리를 보면 이건 거의 vibe coded처럼 보임: https://github.com/GiancarloLelli/quantum
    • 맞음. 읽어보자마자 vibe coding 특유의 흔적이 너무 많이 보였고, 나도 제일 먼저 그 생각이 들었음
  • 이건 양자컴퓨팅 자체를 까는 얘기가 아니라 project11과 어쩌면 제출자 쪽을 까는 얘기임. 제출 검증을 제대로 못 했고, 코드가 이미 해법이 고전적 방법이라는 걸 보여줌
    17비트 ECC 키 복구는 지금 고전 컴퓨터로도 브루트포스로 전혀 어렵지 않음
    • 해법이 랜덤보다 빠르다면 그래도 양자컴퓨터 위의 진짜 해법일 가능성은 남아 있음
  • 이 기사 썸네일 크롭이 정말 절묘하게 불행함: https://image.non.io/b3f69546-aeb3-48c3-a76d-723f29b28f48.webp
    • contains the code and submission

      완벽함

    • 내가 다른 걸 보고 있는지 모르겠는데, 저건 분명 quan(tumslop)t 아닌가 싶음

    • 이건 정말 예술임

    • 좀 역함

  • dequantization은 실제로 존재하는 아주 정당한 양자정보 연구 주제임. 뭔가가 진짜 양자인지 아니면 연막인지 가려내는 데 유용하고, 양자와 고전의 경계가 어디인지 이해하는 데 도움을 줌
    최근 나온 다른 dequantized 결과도 있음: https://arxiv.org/abs/2604.21908
  • 17비트 키는 경우의 수가 131072개뿐이라 브루트포스로 너무 쉽게 깰 수 있음. 이걸 양자컴퓨터로 깨는 건 어디까지나 물리 시연에 가깝고, 유용한 계산 작업을 하겠다는 시도와는 거리가 멂
    • 여기서 핵심은 원래 해법의 양자컴퓨터 부분이 아무 일도 안 한다는 데 있음. 전체 알고리즘은 실제로는 양자 알고리즘이 아니라 고전적 확률 알고리즘이라는 뜻임
      양자컴퓨터가 핵심이었다면 RNG로 바꿨을 때 정답이 안 나오거나 최소한 수렴 속도는 느려졌어야 함. 그런데 결과가 완전히 같으니, 실제 로직은 전부 고전 측에 있었고 QC는 노이즈만 더한 셈임
    • 내가 잘 모르는 걸 수도 있지만, 원래 취지는 브루트포스보다 더 빨라야 한다는 것 아닌가
      결과가 통계적으로 추측과 구분이 안 되면 결국 복잡한 Rube Goldberg 장치만 만든 셈으로 보임
    • QC의 기여가 난수 생성기와 구별되지 않는다면, 도대체 뭘 시연한 건지 모르겠음
  • quantum grifting이 암호화폐 쪽에도 세게 들어왔음
    사기꾼들은 망한 옛 코인을 끌어오거나 새 코인을 만들고, 물량을 사 모으거나 발행한 뒤 ML-DSA를 덧붙여서 양자 안전하다고 홍보하며 shitcoin을 펌프한 다음 털어버릴 수 있음
    언젠가는 정보가 적은 개인 투자자들도 눈치채겠지만, 솔직히 지금 이게 누구에게 먹히는지도 잘 모르겠음
    • 영어가 모국어가 아닌 사람들이 주된 타깃인 듯해서 더 씁쓸함
  • 두 구현에서 QM 호출 횟수가 서로 맞는지도 확인해야 함
  • 양자컴퓨팅은 30년짜리 사기라고 봄
    Google조차 자기네 양자컴퓨터가 제대로 작동한다는 걸 증명 못 했고, 알고리즘도 극단적으로 약화시켜서 17비트 같은 걸 들고 오는 수준임