Aggiunge README.md generale
This commit is contained in:
303
README.md
Normal file
303
README.md
Normal file
@@ -0,0 +1,303 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user