Files
p2pk-bf/README.md

7.9 KiB
Raw Permalink Blame History

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.

# 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:

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):

    cd databases
    python3 scan_blockchain.py
    # Scansiona blocchi 1-10000 (ricchi di P2PK)
    
  2. Analisi Dati (Visualizzatore):

    python3 view_db.py
    # Genera report HTML interattivo
    
  3. Estrazione Target (Preparazione Bruteforce):

    cd ../bruteforce
    python3 extract_p2pk_utxo.py
    # Estrae P2PK non spesi dal database
    
  4. Dimostrazione Sicurezza (Bruteforce):

    ./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
# 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

Contributi

Sviluppato con assistenza di Claude Code (Anthropic).


⚠️ Ricorda: La sicurezza di Bitcoin si basa sull'impossibilità computazionale del bruteforce. Questo progetto lo dimostra in pratica.