Files
p2pk-bf/README.md

304 lines
7.9 KiB
Markdown
Raw Normal View History

2026-01-23 09:06:58 +01:00
# 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:
1. **Scanner Python**: Analizza la blockchain Bitcoin per identificare e catalogare transazioni P2PK
2. **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.
```bash
# 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.
```bash
# 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](databases/README.md)**: Guida completa scanner blockchain
- **[Bruteforce C++](bruteforce/README.md)**: 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
1. **Scansione Blockchain** (Scanner Python):
```bash
cd databases
python3 scan_blockchain.py
# Scansiona blocchi 1-10000 (ricchi di P2PK)
```
2. **Analisi Dati** (Visualizzatore):
```bash
python3 view_db.py
# Genera report HTML interattivo
```
3. **Estrazione Target** (Preparazione Bruteforce):
```bash
cd ../bruteforce
python3 extract_p2pk_utxo.py
# Estrae P2PK non spesi dal database
```
4. **Dimostrazione Sicurezza** (Bruteforce):
```bash
./p2pk_bruteforce
# Dimostra l'impossibilità pratica del bruteforce
```
## Scopo Educativo
Questo progetto insegna:
1. **Struttura Blockchain Bitcoin**:
- Differenza tra P2PK, P2PKH, P2SH, SegWit
- Formato transazioni e ScriptPubKey
- Concetto di UTXO (Unspent Transaction Output)
2. **Crittografia Bitcoin**:
- ECDSA su curva secp256k1
- Generazione chiavi pubbliche da private
- Spazio delle chiavi 2^256
3. **Sicurezza Crittografica**:
- Perché il bruteforce è impossibile
- Importanza dello spazio delle chiavi grande
- Scalabilità esponenziale (ogni bit raddoppia il tempo)
4. **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:
1. **Utente A**: Scansiona blocchi 1-5000
2. **Utente B**: Scansiona blocchi 5001-10000
3. **Utente C**: Scansiona blocchi 10001-15000
```bash
# 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**
```bash
# Aumenta il delay tra richieste
# Nel prompt: delay = 2.0 secondi
```
**Errore: Database locked**
```bash
# Chiudi tutti gli script che usano il database
pkill -f scan_blockchain
```
### Bruteforce C++
**Errore: libsecp256k1 non trovata**
```bash
cd bruteforce
make install-secp256k1
```
**Velocità troppo bassa**
```bash
# Verifica numero thread
htop # Controlla utilizzo CPU
# Ricompila con ottimizzazioni
make clean
make
```
## Crediti
- **Bitcoin**: [bitcoin.org](https://bitcoin.org)
- **API**: [mempool.space](https://mempool.space)
- **libsecp256k1**: [Bitcoin Core](https://github.com/bitcoin-core/secp256k1)
- **Documentazione**: [Bitcoin Wiki](https://en.bitcoin.it/wiki)
## Contributi
Sviluppato con assistenza di Claude Code (Anthropic).
## Link Utili
- [Bitcoin Whitepaper](https://bitcoin.org/bitcoin.pdf)
- [secp256k1 Documentation](https://github.com/bitcoin-core/secp256k1)
- [Mempool.space API](https://mempool.space/docs/api)
- [P2PK Transactions](https://en.bitcoin.it/wiki/Transaction)
---
**⚠️ Ricorda**: La sicurezza di Bitcoin si basa sull'impossibilità computazionale del bruteforce. Questo progetto lo dimostra in pratica.