못 믿겠으면, 직접 돌려보세요.
아래 탐색기는 시뮬레이션이 아닙니다. 당신의 CPU가 실제로 secp256k1 스칼라 곱을 돌려 개인키에서 공개키를 만들고, SHA-256과 RIPEMD-160으로 비트코인 주소를 유도한 뒤, 아직 아무도 못 푼 퍼즐 77개의 주소와 한 개씩 대조합니다.
시작 버튼을 누르면 진짜 secp256k1 연산이 돌아갑니다.
“복권이랑 비슷한 거 아냐?”
무작위로 돌리다 보면 자연스럽게 이런 생각이 듭니다 — 어차피 복권도 확률 낮은데 사람들이 사잖아. 맞는 감각입니다. 그래서 실제 로또 6/45 옆에 나란히 세워봤습니다. 결과는 “둘 다 낮다”가 아닙니다.
45개 중 6개를 고르는 경우의 수. 흔히 “벼락 맞을 확률보다 낮다”고 말하는 그 숫자입니다.
1 / 1180591620717411303424
로또 1등이 1.45×10^14배 (약 145조 배) 쉽습니다.
로또 1등에 3주 연속 당첨되는 것과 비슷합니다. 엄밀히는 퍼즐 쪽이 그보다 2.2배 더 어렵습니다.
이만큼의 키를 봐야 천 원짜리 로또 한 장과 같은 확률이 됩니다.
로또 1등 약 20억 원, 퍼즐 #71은 7.1 BTC. 시세에 따라 엎치락뒤치락하는 수준입니다. 상금은 비슷한데 확률만 145조 배 차이납니다.
로또는 돈을 더 써도 확률이 선형으로만 늘어납니다. 열 장 사면 딱 열 배입니다. 그리고 아무리 많이 사도 1주일에 한 번, 정해진 시각에만 뽑습니다.
퍼즐은 다릅니다. 장비를 늘리면 늘린 만큼 계속 돌아가고, 이미 확인한 구간은 다시 안 봐도 됩니다. 위 버튼을 4090 × 1,000으로 바꿔보세요 — 로또 한 장어치 확률이 1분마다 쌓입니다. 하루면 로또 1,400장, 1년이면 50만 장입니다.
이게 퍼즐이 복권이 아닌 유일한 이유이고, 83개가 실제로 풀린 이유이고, 사람들이 풀(pool)을 만드는 이유입니다. 다만 그 규모의 장비가 없다면 — 대부분 없습니다 — 이건 그냥 아주 나쁜 복권입니다.
계산 근거: 로또 6/45 1등은 C(45,6) = 8,145,060분의 1 (= 1.228e-7). 퍼즐 #71의 개인키는 270 ~ 271 구간에 하나 있으므로 무작위 키 하나가 맞을 확률은 1/270입니다. 1등 당첨금은 회차와 당첨자 수에 따라 크게 달라져 대략치로만 썼습니다. 계산기에서 다른 퍼즐과 장비로도 계산해볼 수 있습니다.
“그래도 GPU는 초당 25억 개잖아”
여기까지 읽고 나면 당연히 이런 반박이 나옵니다. 로또는 5천 원에 다섯 장이지만, GPU는 5천 원어치 전기로 수천억 개를 본다. 그럼 GPU가 압도적으로 유리한 거 아닌가?
완전히 합리적인 직관이고, 실제로 “초당 25억 개”는 사실입니다. 함정은 다른 데 있습니다 — 그 25억 개가 공짜가 아니라는 것. 로또도 돈으로 사고 GPU 시간도 돈으로 삽니다. 그러니 같은 예산으로 환산해서 비교해야 답이 나옵니다. 아래 슬라이더에 본인 조건을 넣어보세요.
450W · 2.5×10^9 keys/s · 약 250만원
가정용은 누진 포함 150~350원, 산업용은 100원대. 0으로 두면 전기가 공짜인 경우입니다.
기본값은 실시간 시세입니다. 퍼즐 #71 상금 7.1 BTC = 약 7.5억원
- 1등 확률
- 1.6×10^6분의 1
- 기댓값
- 2,500원
- 환급률
- 50.0%
- 1등 확률
- 4.9×10^6분의 1
- 기댓값
- 155원
- 환급률
- 3.1%
GPU 탐색의 환급률은 3.1%, 로또는 약 50%입니다. 같은 돈이면 로또가 16배 낫습니다. “초당 25억 개”는 사실이지만, 그 25억 개가 공짜가 아니라 전기요금과 감가상각으로 나온다는 게 함정입니다.
- 누적됩니다. 로또는 100주를 사도 101주차 확률이 그대로 1/8,145,060입니다. 매주 처음부터입니다. 퍼즐은 구간을 나눠 기록하며 순차로 훑으면 남은 공간이 실제로 줄어듭니다. — 다만 무작위로 찍으면 누적되지 않습니다. 이미 본 곳을 계속 다시 봅니다. 풀이 범위를 배정하는 이유가 이겁니다.
- 자본에 상한이 없습니다. 로또는 돈이 아무리 많아도 주 1회, 정해진 시각에만 뽑습니다. GPU는 1,000장을 사면 1,000배가 그냥 계속 돌아갑니다.
- 독식입니다. 로또 1등은 당첨자가 여럿이면 나눠 갖습니다. 퍼즐은 먼저 찾은 사람이 전부 가져갑니다 — 인출에 성공한다면요.
- 대신 뺏길 수 있습니다. 로또는 당첨되면 확실히 받습니다. 퍼즐은 찾아도 인출 과정에서 RBF 봇에게 털릴 수 있고, 실제로 #66·#69가 그랬습니다. 위 기댓값은 그 위험을 반영하지 않은 값입니다.
계산 근거: 시간당 비용 = (GPU 소비전력 × 전기요금) + (GPU 가격 ÷ 감가 기간). 그 예산으로 돌릴 수 있는 시간 × 초당 키 수 = 볼 수 있는 키 개수. 확률 = 키 개수 ÷ 270. 기댓값 = 확률 × 상금. 로또 환급률 50%는 판매액 대비 총 당첨금 비율의 대략치입니다. GPU 속도·가격·전기요금은 전부 대략치이니 슬라이더로 본인 조건을 넣어보세요.
돌려놓고 이걸 읽으세요
왜 순차가 무작위보다 빠른가
개인키 k에서 공개키를 얻으려면 타원곡선 위에서 k번의 곱셈을 해야 합니다. 그런데 k를 1 늘리는 건 점 하나를 더하는 것과 같습니다 — P(k+1) = P(k) + G. 곱셈 한 번보다 덧셈 한 번이 훨씬 쌉니다.
그래서 keyhunt든 BitCrack이든 실제 탐색기는 전부 구간을 순차로 훑습니다. “무작위로 찍는 게 로또 같아서 좋다”는 감각과, 실제로 빠른 방법은 다릅니다.
얼마나 빠른지는 위 탐색기에서 직접 재보세요. 두 모드를 번갈아 돌리면 브라우저·구간 크기에 따라 대략 1.5~3배 차이가 납니다. 구간이 좁을수록 큰 수 연산이 가벼워져 격차가 줄어듭니다.
왜 주소가 아니라 HASH160으로 비교하나
주소 문자열(1PWo3Je…)은 HASH160에 체크섬을 붙여 Base58로 인코딩한 결과입니다. 인코딩은 비싸고, 비교에는 필요 없습니다. 그래서 이 탐색기는 실제 도구들처럼 20바이트 HASH160 단계에서 끊습니다. Base58 인코딩은 적중했을 때 딱 한 번만 합니다.
만들어진 개인키는 Web Worker 메모리 안에서만 존재하고 즉시 버려집니다. 메인 스레드로 넘어오는 건 시도 횟수·속도·현재 위치뿐입니다.
믿지 말고 확인하세요. F12 → 네트워크 탭을 열고 탐색을 시작해보면 요청이 하나도 늘지 않습니다. 페이지를 저장해서 인터넷을 끊고 열어도 똑같이 돌아갑니다.
확률상 오지 않을 화면이지만, 만에 하나 떴다면 출금부터 하면 안 됩니다.퍼즐 주소에서 자금을 옮기는 트랜잭션을 방송하는 순간, 그 안에 공개키와 서명이 들어가고 봇들이 즉시 같은 자금을 더 높은 수수료로 채갑니다. 실제로 #66과 #69가 그렇게 털렸습니다.
미해결 퍼즐 77개 전부. 가장 작은 게 #71(270~271, 7.1 BTC), 가장 큰 게 #160 (2159~2160, 16 BTC)입니다. 합쳐서 903 BTC.
“전체 개인키 공간” 모드로 두면 사실상 이 과녁들을 맞힐 방법이 없습니다. 퍼즐 범위 모드로 바꾸면 최소한 올바른 구간은 뒤지게 됩니다. 그 차이가 2185배입니다.