Files
p2pk-bf/README.md

304 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.