YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
KangarooPy — solver Pollard's Kangaroo pentru puzzle-uri publice pe blockchain
Solver ECDLP (metoda Pollard's Kangaroo / lambda) pe secp256k1, în Python pur, pentru puzzle-uri publice sancționate — ex. Bitcoin Puzzle Transactions, unde creatorul a publicat deliberat intervalul și cheia publică, invitând la rezolvare.
⚠ Etică/legale: instrumentul rezolvă DOAR intervale cu cheie publică ȘI interval cunoscut/autorizat. NU poate descoperi chei private de portofele străine dintr-o adresă — matematic imposibil (2^256 chei) și furt.
Utilizare
# 1. validează nucleul criptografic contra 4 vectori REALI on-chain (instant)
python kangaroo_solver.py verify
# 2. test end-to-end: k sintetic generat și recuperat exact
python kangaroo_solver.py selftest --bits 40 --threads 2
# 3. rezolvă un puzzle din tabel (necesită pubkey cunoscut)
python kangaroo_solver.py solve --puzzle 40 --threads 8
# 4. pubkey + interval propriu
python kangaroo_solver.py solve --pubkey 03... --bits 50 --threads 8
python kangaroo_solver.py solve --pubkey 03... --a 0x100000 --b 0x200000
# 5. listează puzzle-urile cunoscute
python kangaroo_solver.py puzzles
Cum funcționează
- 2 herzi (tame:
d·G, d∈[a,b); wild:P + d·G, d∈[−W/2, W/2)) — porniri după pseudocodul JeanLucPons/Kangaroo - 256 sărituri cu distribuție geometrică, media ≈ √W/2, alese determinist din
x - Distinguished Points (
x % 2^dp == 0) partajate între procese - Inversare modulară în lot (Montgomery trick) — o singură inversare per pas de turmă
- Coliziune tame/wild →
k ∈ {±(d_t−d_w), ±(d_t+d_w)}, filtrat pe interval, verificat cuk·G == pubkey - Multiprocessing (un proces per nucleu), gmpy2 opțional pentru viteză
Performanță măsurată (sandbox cpu-basic, 2 nuclee)
| Test | Rezultat |
|---|---|
verify — 4 vectori reali (#85, #105, #110, #115) |
PASS |
| selftest 32-bit | PASS — cheie recuperată exact |
| selftest 36-bit | PASS — cheie recuperată exact |
| selftest 40-bit | PASS în 8s, 2.6M pași (teorie: 2.1·√W ≈ 1.5M) ✓ |
| Viteză | ~315k pași/s pe 2 nuclee |
Limite onește (Python pur, CPU)
| Lățime interval W | Timp estimat per nucleu |
|---|---|
| 2^36 | secunde |
| 2^40 | ~10 s |
| 2^44 | ~1 min |
| 2^48 | ~3 min |
| 2^52 | ~11 min |
| 2^60 | ~3 ore |
| 2^84+ | ani — necesită CUDA (RCKangaroo) |
Status live puzzle-uri (verificat on-chain, octombrie 2026)
#120, #125, #130, #135: CHERCHITE (rezolvate de altcineva). #140–#160: NESOLVATE, pubkey cunoscut. Cel mai mic target: #140 (14 BTC) — ~1.6×10²¹ operații așteptate → milioane de ani pe laptop; realist doar ferme de GPU-uri în pool. Comandă de verificare status:
python kangaroo_solver.py fetchpub --address <addr>
Adresele non-multiplu de 5 nu au pubkey → nerezolvabile cu kangaroo.
Unde ai șanse REALE pe un laptop
În seriile clasice, toate țintele mici sunt rezolvate — dar în community apar constant puzzle-uri noi de 40–70 biți cu premii (fezabile pe laptop). Urmărește:
- bitcointalk thread 5517607 (RCKangaroo) — hub-ul actual al vânătorilor
- bitcointalk thread 5244940 (JeanLucPons Kangaroo)
- bitcointalk thread 5322040 (keyhunt — BTC + Ethereum)
Workflow când apare o țintă nouă:
python kangaroo_solver.py fetchpub --address <addr> # status + pubkey
python kangaroo_solver.py solve --pubkey <hex> --bits <N> --threads 8
Starea curentă a seriei oficiale (verificată on-chain): #140–#160 nesolvate, cel mai mic target #140 (~1.6×10²¹ op) → infezabil pe laptop.
Validare
verify: soluțiile publicate ale puzzle-urilor #85, #105, #110, #115 reproduc pubkey-urile on-chain — nucleul secp256k1 + parsarea pubkey verificate contra datelor reale.selftest: k aleator generat în interval, pubkey derivat, apoi recuperat exact de solver (32/36/40 biți) — algoritmul de căutare verificat end-to-end.