Commit Graph

25 Commits

Author SHA1 Message Date
davide ac68b6aa88 Aggiungi versione GPU (CUDA) del bruteforce
Porta la stessa strategia algoritmica della versione CPU (batch EC in
coordinate Jacobiane con Z1=1 + un'unica inversione di campo per batch
via trucco di Montgomery) su GPU NVIDIA, dove però GMP non è
disponibile: l'aritmetica a 256 bit mod il primo di secp256k1 è scritta
a mano (limb a 64 bit + __int128, riduzione veloce sfruttando
2^256 ≡ 2^32+977 mod p), e ogni thread CUDA agisce come una lane di
ricerca indipendente con la propria chiave privata iniziale casuale —
esattamente come un thread CPU, ma migliaia in parallelo invece di una
manciata.

La moltiplicazione scalare su device è un semplice double-and-add
(nessun wNAF/tabelle precalcolate come in libsecp256k1 lato host), il
principale margine di ottimizzazione futura. Il matching usa un Bloom
filter + ricerca binaria su un array di target ordinato, entrambi
caricati una volta sola in memoria device.

Aggiunge i target `make gpu` / `make gpu-info` al Makefile (NVCC_ARCH
configurabile, default sm_61/Pascal) e documenta in README che su WSL2
il driver NVIDIA arriva dall'host Windows: dentro WSL serve installare
solo il CUDA Toolkit, mai un driver.

Verificato: aritmetica di campo, moltiplicazione scalare e batch add
confrontati bit-per-bit con secp256k1_ec_pubkey_create (nessuna
discrepanza su ~30 valori di test); run end-to-end con privkey nota
trova la chiave corretta; nessun falso positivo su chiavi pubbliche
valide casuali. Su una Quadro P4000 (Pascal): ~15M keys/sec, contro
~3.5-4M keys/sec della CPU con 11 thread nello stesso ambiente.
2026-07-03 15:58:26 +02:00
davide adb608df38 Ottimizza batch EC del bruteforce con Jacobiane + batch inversion GMP
Sostituisce le N chiamate a secp256k1_ec_pubkey_combine per batch (una
per chiave, ciascuna con una inversione di campo interna) con addizione
EC in coordinate Jacobiane calcolata a mano (formule madd specializzate
per Z1=1) e un'unica inversione modulare per l'intero batch di 256
chiavi tramite il trucco di Montgomery (GMP, già linkata via -lgmp). Il
matching ora confronta byte grezzi X||Y invece di oggetti
secp256k1_pubkey, eliminando overhead di parse/serialize nel loop caldo.

Corregge inoltre due bug:
- off-by-one nel codice combine-based originale: usava
  precomputed_G[i] invece di precomputed_G[i-1], per cui una chiave
  trovata sarebbe stata riportata con la privkey sbagliata
- add_to_privkey (che tratta l'array a 32 byte come 4 word native a
  64 bit, non big-endian) veniva usata per ricostruire la privkey
  esatta di un match nel batch; sostituita con add_small_be256, la
  cui aritmetica big-endian corrisponde a quella usata da secp256k1
  e dai punti EC precalcolati

Migliora inoltre il reporting a terminale:
- aggiornamento ogni 2s (PROGRESS_INTERVAL_SEC) invece di 10s
- velocità istantanea (tentativi nella finestra trascorsa, via
  gettimeofday) invece della media cumulata dall'avvio, così il
  numero riflette il ritmo reale anche su run lunghe
- corretto il sync dei contatori per-thread: usava una maschera
  bitwise che assumeva SYNC_BATCH potenza di due (100000 non lo è),
  ora un modulo esplicito

Verificato con test standalone (formule EC confrontate con
secp256k1_ec_pubkey_create indipendente), test end-to-end con privkey
nota, e nessun falso positivo su chiavi pubbliche valide casuali.
2026-07-03 15:41:57 +02:00
davide 1a91b81de5 Aggiungi CLAUDE.md per future istanze di Claude Code
Documenta comandi di build/run per scanner Python e bruteforce C++, il
flusso dati tra i due componenti e i dettagli architetturali non ovvi
(partizionamento keyspace, euristica di rilevamento P2PK, accoppiamento
tra formati file).
2026-07-03 15:41:51 +02:00
davide 7d6f7b7712 Aggiorna database P2PK con nuove chiavi scansionate [7000] 2026-01-26 23:22:04 +01:00
davide 342f5a3d3e Fix: include di immintrin solo su x86 2026-01-23 23:25:13 +01:00
davide a0303fe01c Ottimizza bruteforce con batch EC e build avanzata 2026-01-23 22:59:26 +01:00
davide 80132740bd Aggiorna database P2PK con nuove chiavi scansionate [4500] 2026-01-23 21:48:04 +01:00
davide 60cabb03d4 Semplifica build e ottimizza bruteforce P2PK
- Makefile: setup automatico libreria alla prima compilazione
- Bruteforce: ottimizzazioni multi-threading con CPU affinity
2026-01-23 20:05:02 +01:00
davide 7f2fdf250a Risolve warning di compilazione in p2pk_bruteforce 2026-01-23 18:33:03 +01:00
davide bf9dbdf870 Aggiorna database P2PK con nuove chiavi scansionate [2500] 2026-01-23 18:16:23 +01:00
davide ad77348a8b Aggiorna database P2PK con nuove chiavi scansionate [1000] 2026-01-23 13:32:58 +01:00
davide 96e495ba11 Aggiorna database P2PK con nuove chiavi scansionate 2026-01-23 10:42:51 +01:00
davide 3540fb9058 Aggiorna database P2PK con nuove chiavi scansionate 2026-01-23 10:04:05 +01:00
davide e23c91c1b1 Aggiorna database P2PK con nuove chiavi scansionate 2026-01-23 09:50:54 +01:00
davide 08693746a6 Aggiorna database P2PK con nuove chiavi scansionate 2026-01-23 09:44:51 +01:00
davide 97320dade3 Aggiorna database P2PK con nuove chiavi scansionate 2026-01-23 09:28:02 +01:00
davide 3098bbfa7d Aggiunge visualizzazione chiavi compresse/non compresse in report HTML 2026-01-23 09:19:42 +01:00
davide 9dda40ab87 Aggiunge README.md generale 2026-01-23 09:06:58 +01:00
davide bbded38ea0 Ottimizza bruteforce con partizionamento keyspace 2026-01-23 08:59:53 +01:00
davide 4faea99426 Aggiunge programma C++ di bruteforce P2PK con secp256k1 2026-01-23 08:48:08 +01:00
davide 9dd990ec9c Sposta README.md 2026-01-23 08:28:36 +01:00
davide 48f8b31e13 Riorganizza i file e rinomina main.py in scan_blockchain.py
Aggiunge un piccolo db per test
2026-01-23 07:57:53 +01:00
davide 275b7d4c5f Aggiunge filtri UTXO interattivi nel report HTML 2026-01-22 16:21:52 +01:00
davide 7f21839ebb Aggiunge README.md 2026-01-22 15:52:23 +01:00
davide 6e365067eb Commit iniziale 2026-01-22 15:46:58 +01:00