7.9 KiB
Bitcoin P2PK Research Suite
Suite completa di strumenti per ricerca educativa su transazioni Bitcoin Pay-to-Public-Key (P2PK) e sicurezza crittografica.
⚠️ Disclaimer Importante
Questo progetto è ESCLUSIVAMENTE per scopi educativi e di ricerca.
- Non utilizzare per attività illegali o tentativi di accesso non autorizzato
- La ricerca di chiavi private altrui è illegale
- Lo scopo è dimostrare la sicurezza crittografica di Bitcoin (ECDSA secp256k1)
- La probabilità di trovare chiavi per bruteforce è praticamente zero (1 su 2^256)
Panoramica
Questo repository contiene due componenti principali:
- Scanner Python: Analizza la blockchain Bitcoin per identificare e catalogare transazioni P2PK
- Bruteforce C++: Dimostra l'impossibilità pratica di trovare chiavi private per bruteforce
Quick Start
1. Scanner Python - Analisi Blockchain
Scansiona la blockchain Bitcoin per trovare transazioni P2PK e verificare UTXO.
# Installa dipendenze Python
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
# Esegui lo scanner
cd databases
python3 scan_blockchain.py
# Genera report HTML
python3 view_db.py
Output:
- Database SQLite con tutte le transazioni P2PK trovate
- Report HTML interattivo con statistiche e ricerca
- Esportazione CSV dei dati
2. Bruteforce C++ - Dimostrazione Sicurezza
Dimostra l'impossibilità pratica del bruteforce su chiavi Bitcoin.
# Installa dipendenze C++
cd bruteforce
make install-deps
# Compila con ottimizzazioni massime
make
# Estrai chiavi P2PK non spese dal database
python3 extract_p2pk_utxo.py
# Esegui il bruteforce (dimostrazione)
./p2pk_bruteforce
Performance: ~50-100K keys/sec su hardware comune
Documentazione Dettagliata
Ogni componente ha la sua documentazione specifica:
- Scanner Python: Guida completa scanner blockchain
- Bruteforce C++: Guida completa programma bruteforce
Componenti
Scanner Python (Database)
Scopo: Analizzare la blockchain Bitcoin per identificare transazioni P2PK storiche.
Caratteristiche:
- Scansione blocchi Bitcoin via API mempool.space
- Salvataggio in database SQLite normalizzato
- Verifica UTXO in tempo reale (speso/non speso)
- Report HTML interattivo con statistiche
- Scansione incrementale (riprende da dove si ferma)
- Rate limiting intelligente per rispettare le API
- Esportazione dati in CSV
Tecnologie:
- Python 3.x
- SQLite3
- Requests (HTTP API)
- HTML/CSS/JavaScript (report)
Blocchi interessanti:
- Blocchi 1-10000: Era di Satoshi, quasi tutti P2PK
- Blocchi 10000-100000: Transizione verso P2PKH
- Blocchi 100000+: Prevalentemente P2PKH, P2SH, SegWit
Bruteforce C++ (Ricerca Chiavi)
Scopo: Dimostrare l'impossibilità pratica del bruteforce su Bitcoin.
Caratteristiche:
- Ottimizzato per massima velocità (C++ con secp256k1)
- Multi-threading automatico (usa tutti i core CPU)
- Partizionamento spazio chiavi 2^256 tra thread
- Generazione chiavi casuali con seed robusti
- Statistiche in tempo reale (velocità, tentativi, tempo)
- Logging progresso in CSV
- Zero sovrapposizione tra thread (efficienza massima)
- Formato numeri leggibile (K, M, G, T)
Tecnologie:
- C++11
- libsecp256k1 (libreria Bitcoin Core)
- pthread (multi-threading)
- Makefile (build system)
Ottimizzazioni:
- Compilazione nativa (
-march=native -mtune=native) - Link-Time Optimization (
-flto) - Profile-Guided Optimization (opzionale)
- Partitioning dello spazio delle chiavi
- Seed XOR-based per zero correlazione
Statistiche e Performance
Scanner Python
- Velocità: ~1-5 blocchi/sec (dipende da delay API)
- API calls: ~3-5 per blocco
- Database size: ~100KB per 1000 blocchi P2PK
- Rate limit: Configurabile (default 1.0s tra blocchi)
Bruteforce C++
- Raspberry Pi 5 (4 core): ~50-60K keys/sec
- CPU moderna (8 core): ~100-500K keys/sec
- CPU high-end (16+ core): ~1M+ keys/sec
- Efficienza threading: Lineare (100% utilizzo core)
Matematica della (Im)Probabilità
Spazio delle chiavi: 2^256 ≈ 1.16 × 10^77 chiavi possibili
Con 1 milione di chiavi/sec:
- 1 anno = 3.15 × 10^13 tentativi
- Probabilità successo = 2.7 × 10^-64 (praticamente zero)
- Tempo per testare tutto = 3.67 × 10^63 anni
- Età dell'universo = 1.38 × 10^10 anni
Conclusione: È più probabile vincere la lotteria 10 volte consecutive che trovare una chiave per caso.
Workflow Completo
Ricerca Educativa Tipica
-
Scansione Blockchain (Scanner Python):
cd databases python3 scan_blockchain.py # Scansiona blocchi 1-10000 (ricchi di P2PK) -
Analisi Dati (Visualizzatore):
python3 view_db.py # Genera report HTML interattivo -
Estrazione Target (Preparazione Bruteforce):
cd ../bruteforce python3 extract_p2pk_utxo.py # Estrae P2PK non spesi dal database -
Dimostrazione Sicurezza (Bruteforce):
./p2pk_bruteforce # Dimostra l'impossibilità pratica del bruteforce
Scopo Educativo
Questo progetto insegna:
-
Struttura Blockchain Bitcoin:
- Differenza tra P2PK, P2PKH, P2SH, SegWit
- Formato transazioni e ScriptPubKey
- Concetto di UTXO (Unspent Transaction Output)
-
Crittografia Bitcoin:
- ECDSA su curva secp256k1
- Generazione chiavi pubbliche da private
- Spazio delle chiavi 2^256
-
Sicurezza Crittografica:
- Perché il bruteforce è impossibile
- Importanza dello spazio delle chiavi grande
- Scalabilità esponenziale (ogni bit raddoppia il tempo)
-
Ottimizzazione Software:
- Multi-threading efficiente
- Partizionamento dati
- Eliminazione race conditions
- Profiling e misurazione performance
Requisiti di Sistema
Minimi
- OS: Linux, macOS, Windows (WSL)
- RAM: 512MB
- Storage: 100MB
- CPU: Single core
- Python: 3.7+
- Compiler: GCC 7+ o Clang 8+
Raccomandati
- OS: Linux (migliore performance)
- RAM: 2GB+
- Storage: 1GB+
- CPU: Multi-core (4+)
- Python: 3.10+
- Compiler: GCC 11+ o Clang 14+
Collaborazione Multi-Utente
Scansione Distribuita
Più utenti possono collaborare per scansionare blocchi diversi:
- Utente A: Scansiona blocchi 1-5000
- Utente B: Scansiona blocchi 5001-10000
- Utente C: Scansiona blocchi 10001-15000
# Sincronizza database via Git
git pull
python3 scan_blockchain.py # Scansiona il tuo range
git add databases/*.db
git commit -m "Scansionati blocchi X-Y"
git push
Best Practices
- Coordinarsi sui range di blocchi
- Usare delay ≥ 1.0s per non sovraccaricare API
- Fare pull prima di ogni nuova scansione
- Committare database dopo scansioni complete
Risoluzione Problemi
Scanner Python
Errore: API timeout
# Aumenta il delay tra richieste
# Nel prompt: delay = 2.0 secondi
Errore: Database locked
# Chiudi tutti gli script che usano il database
pkill -f scan_blockchain
Bruteforce C++
Errore: libsecp256k1 non trovata
cd bruteforce
make install-secp256k1
Velocità troppo bassa
# Verifica numero thread
htop # Controlla utilizzo CPU
# Ricompila con ottimizzazioni
make clean
make
Crediti
- Bitcoin: bitcoin.org
- API: mempool.space
- libsecp256k1: Bitcoin Core
- Documentazione: Bitcoin Wiki
Contributi
Sviluppato con assistenza di Claude Code (Anthropic).
Link Utili
⚠️ Ricorda: La sicurezza di Bitcoin si basa sull'impossibilità computazionale del bruteforce. Questo progetto lo dimostra in pratica.