# IBM Quantum 백엔드를 /dev/urandom으로 교체

> Clean Markdown view of GeekNews topic #28894. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28894](https://news.hada.io/topic?id=28894)
- GeekNews Markdown: [https://news.hada.io/topic/28894.md](https://news.hada.io/topic/28894.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-26T09:48:21+09:00
- Updated: 2026-04-26T09:48:21+09:00
- Original source: [github.com/yuvadm](https://github.com/yuvadm/quantumslop/blob/25ad2e76ae58baa96f6219742459407db9dd17f5/URANDOM_DEMO.md)
- Points: 2
- Comments: 1

## Topic Body

- **IBM Quantum 백엔드**만 `os.urandom`으로 바꾼 상태에서도 회로 구성, 오라클, 추출 파이프라인, `d·G == Q` 검증기를 그대로 유지한 채 개인키 복구가 재현됨
- 수정 범위는 `projecteleven.py`의 **59줄 변경**에 그치며, 백엔드 실행과 결과 수집을 제거하고 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`](https://github.com/yuvadm/quantumslop/compare/main...urandom-reproduces-qpu)에서 확인 가능함

### 결과: 패치된 상태로 작성자의 CLI 실행
- 동일한 CLI 명령을 그대로 사용해, 하드웨어 대신 `/dev/urandom`이 공급한 결과만으로 개인키 복구 여부를 점검함
- 문서에 제시된 표는 **작성자가 보고한 `d` 값**과 `/dev/urandom`으로 복구한 `d` 값을 직접 비교함
- ## 소형 챌린지, 각 1회 시도, 8,192 shots
  - 실행 명령은 `python projecteleven.py --challenge &lt;N&gt; --shots 8192`임
  - 전체 출력은 [`urandom_runs/urandom_challenge_4.txt`](https://github.com/yuvadm/quantumslop/blob/25ad2e76ae58baa96f6219742459407db9dd17f5/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 &lt;N&gt; --oracle ripple --shots 20000`임
  - 전체 출력은 [`urandom_runs/urandom_challenge_16_17_flagship.txt`](https://github.com/yuvadm/quantumslop/blob/25ad2e76ae58baa96f6219742459407db9dd17f5/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-240`와 `projecteleven.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`](https://github.com/yuvadm/quantumslop/blob/25ad2e76ae58baa96f6219742459407db9dd17f5/README.md#L210)에는 다음 문장이 이미 들어 있다고 적혀 있음
  - `"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 키 복구가 아니라 **균등 난수 후보에 대한 고전적 검증**이며, 이 브랜치가 보여주듯 양자 하드웨어 없이도 그대로 재현된다는 데 맞춰져 있음

## Comments



### Comment 56315

- Author: neo
- Created: 2026-04-26T09:48:23+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47897647) 
- 이건 내가 **2025년 sigbovik 만우절 논문**에서 정확히 깔아둔 전제와 같음. 작은 수에서는 **Shor 알고리즘**에 랜덤 샘플을 넣어도 금방 성공하고, 회로가 너무 길어져 양자컴퓨터의 오류율 한계를 넘기면 사실상 난수 생성기처럼 동작함.  
  그래서 겉으로는 "올바른 결과"를 내도 이유는 완전히 틀릴 수 있음. 이런 이유 때문에 작은 정수분해나 작은 ECDLP 사례는 양자컴퓨팅 진전을 재는 벤치마크로 부적절함.  
  나는 이 일이 벌어질 거라고 project11 쪽에 경고했음. 결국 양자컴퓨터가 기여하지 않았다는 사실을 가장 잘 가린 사람에게 비트코인을 주게 될 거라고 봤고, 제출자 본인도 스스로 속았을 가능성이 크다고 생각했음. 아마 진지하게 받아들이지 않은 듯함.  
  [1]: [https://sigbovik.org/2025/proceedings.pdf#page=146](<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](<https://github.com/GiancarloLelli/quantum>)
  - 맞음. 읽어보자마자 **vibe coding** 특유의 흔적이 너무 많이 보였고, 나도 제일 먼저 그 생각이 들었음
- 이건 **양자컴퓨팅 자체를 까는 얘기**가 아니라 project11과 어쩌면 제출자 쪽을 까는 얘기임. 제출 검증을 제대로 못 했고, 코드가 이미 해법이 **고전적 방법**이라는 걸 보여줌  
  17비트 ECC 키 복구는 지금 고전 컴퓨터로도 브루트포스로 전혀 어렵지 않음
  - 해법이 랜덤보다 빠르다면 그래도 **양자컴퓨터 위의 진짜 해법**일 가능성은 남아 있음
- 이 기사 썸네일 크롭이 정말 절묘하게 불행함: [https://image.non.io/b3f69546-aeb3-48c3-a76d-723f29b28f48.webp](<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](<https://arxiv.org/abs/2604.21908>)
- **17비트 키**는 경우의 수가 131072개뿐이라 브루트포스로 너무 쉽게 깰 수 있음. 이걸 양자컴퓨터로 깨는 건 어디까지나 물리 시연에 가깝고, 유용한 계산 작업을 하겠다는 시도와는 거리가 멂
  - 여기서 핵심은 원래 해법의 **양자컴퓨터 부분이 아무 일도 안 한다**는 데 있음. 전체 알고리즘은 실제로는 양자 알고리즘이 아니라 고전적 확률 알고리즘이라는 뜻임  
    양자컴퓨터가 핵심이었다면 RNG로 바꿨을 때 정답이 안 나오거나 최소한 수렴 속도는 느려졌어야 함. 그런데 결과가 완전히 같으니, 실제 로직은 전부 고전 측에 있었고 QC는 노이즈만 더한 셈임
  - 내가 잘 모르는 걸 수도 있지만, 원래 취지는 **브루트포스보다 더 빨라야 한다**는 것 아닌가  
    결과가 통계적으로 추측과 구분이 안 되면 결국 복잡한 **Rube Goldberg 장치**만 만든 셈으로 보임
  - QC의 기여가 난수 생성기와 구별되지 않는다면, 도대체 뭘 시연한 건지 모르겠음
- **quantum grifting**이 암호화폐 쪽에도 세게 들어왔음  
  사기꾼들은 망한 옛 코인을 끌어오거나 새 코인을 만들고, 물량을 사 모으거나 발행한 뒤 **ML-DSA**를 덧붙여서 양자 안전하다고 홍보하며 shitcoin을 펌프한 다음 털어버릴 수 있음  
  언젠가는 정보가 적은 개인 투자자들도 눈치채겠지만, 솔직히 지금 이게 누구에게 먹히는지도 잘 모르겠음
  - **영어가 모국어가 아닌 사람들**이 주된 타깃인 듯해서 더 씁쓸함
- 두 구현에서 **QM 호출 횟수**가 서로 맞는지도 확인해야 함
- 양자컴퓨팅은 **30년짜리 사기**라고 봄  
  Google조차 자기네 양자컴퓨터가 제대로 작동한다는 걸 증명 못 했고, 알고리즘도 극단적으로 약화시켜서 **17비트** 같은 걸 들고 오는 수준임
  - Google이 최근에 **검증 가능한 양자 우위**를 보고하지 않았나  
    [https://blog.google/innovation-and-ai/technology/research/quantum-echoes-willow-verifiable-quantum-advantage/](<https://blog.google/innovation-and-ai/technology/research/quantum-echoes-willow-verifiable-quantum-advantage/>)
  - 가능성은 있다고 보지만, AI 거품이 꺼지고 나면 이게 다음 **주식시장 슬롭**이 될 가능성이 큼  
    여기저기서 정체불명의 **100억 달러짜리 난수 생성기**에 터무니없는 돈을 쏟아붓게 될 듯함
