Il funzionamento interno della rete Bitcoin: il protocollo P2P al lavoro

(Questo titolo è stato generato da ChatGPT)

@danielabrozzoni - SatoshiSpritz

Oggi parliamo di...

  • Com'è strutturata la rete Bitcoin
  • Come i nodi Bitcoin comunicano fra di loro
    • Struttura dei messaggi
    • Scambiarsi indirizzi, transazioni e blocchi
  • Attacchi alla rete P2P e mitigazioni

La rete P2P

  • Bitcoin è una rete peer to peer basata su internet
  • In una rete P2P non c'è una struttura gerarchica, ma non vuol dire che tutti i nodi siano uguali!

Tipi di nodi

  • Fully validating node
  • Archive node
  • Pruned node
  • Mining node
  • Light client

Comunicazione P2P

  • Socket TCP
    • Canale di comunicazione bidirezionale
    • Garantita la consegna dei messaggi
    • Non cifrato (proposta: BIP324)

Comunicazione P2P

Connessioni in entrata e uscita

  • Se A inizia la connessione verso B:
    • A ha una connessione in uscita
    • B ha una connessione in entrata
  • Default di Bitcoin Core
    • Fino a 8 connessioni in uscita
    • Connessioni in entrata disabilitate
    • Massimo 125 connessioni totali

Connessione in uscita

Connessione in entrata

Connessioni in entrata e uscita

  • Se volete aiutare la rete Bitcoin è importante accettare connessioni in entrata
    • Nuovi nodi possono collegarsi a voi
    • https://bitcoin.org/en/full-node#enabling-connections

Connessione in uscita

Connessione in entrata

Messaggi

  • I nodi comunicano utilizzando messaggi definiti dal protocollo P2P
  • Ogni messaggio è composto da
    • 4 magic bytes
      • identificano la network (mainnet, testnet ecc)
    • 12 bytes command
      • id contenuto del pacchetto (tx, block, ...)
    • payload length
    • payload checksum
    • payload
      • contenuto vero e proprio

Network discovery

  • Per potersi connettere alla rete Bitcoin, un nodo deve scoprire gli indirizzi IP di altri nodi
    • DNS seeds: server DNS che forniscono IP di nodi Bitcoin
  • Dopo aver stabilito la connessione TCP, due nodi devono mandarsi un "handshake", che contiene:
    • Versione del protocollo P2P
    • Versione del software (es. Bitcoin Core 0.21.0)
    • Block height
    • Servizi supportati dal nodo (bloom filters, compact filters, etc)

Network discovery

  • addr -> usato per annunciare indirizzi IP
  • getaddr -> usato per richiedere indirizzi IP

Scambiarsi tx/blocchi

  • Messaggi P2P vengono usati anche per scambiarsi blocchi e transazioni, in maniera molto simile a come vengono scambiati gli indirizzi
    • Nodi mandano messaggi `inv` ("ho qualcosa in inventario che forse non avete")
    • Nodi interessati rispondono con `getdata` ("sono interessato, mandami quel blocco/tx")
  • Metodo piú "furbo" per scambiarsi blocchi: compact block
    • Riduce l'uso di banda

Caratteristiche P2P

  • La rete P2P è una parte molto delicata dell'infrastruttura Bitcoin
  • Ogni nodo deve gestire bene le connessioni per assicurarsi che la rete sia:
    • Affidabile
    • Accessibile
    • Privata
    • Aggiornabile

Affidabile

  • Niente partizioni
  • Ogni messaggio inviato eventualmente raggiungerà tutti i nodi della rete 

Accessibile

  • Semplice partecipare alla rete
  • Un avversario non deve poter escludere qualcuno dalla rete

Privata

  • Non deve essere possibile collegare la tua identità onchain con la tua identità peer to peer

Aggiornabile

  • Possibile rilasciare aggiornamenti al protocollo P2P
    • Compact block: ridurre l'uso di banda nella trasmissione dei blocchi
    • Compact block filters: metodo di sincronizzazione per light client
  • Importante non escludere i nodi non aggiornati dalla rete

Eclipse attack

Vittima

Eclipse attack

  • La vittima di un eventuale eclipse attack ha la visione della rete completamente manipolata da un attaccante
  • Questo può portare a conseguenze molto gravi per la vittima
    • Perdita di privacy
    • Lightning watchtower
    • Double spending attack

Perdita di privacy

Lightning watchtower

Double spend attack

Mitigazioni

  • Bitcoin Core implementa una serie di euristiche per assicurarsi che i nodi non vengano eclipse-attaccati:
    • Cambiare spesso peers
    • Collegarsi a peer vari, localizzati in zone diverse del mondo
    • Al riavvio i nodi si collegano ad alcuni dei vecchi peer
    • Se il nodo non vede un blocco da 30 minuti, si collega a un nuovo peer

Conclusioni

  • P2P is cool
  • È importante avere un nodo Bitcoin a casa che accetti connessioni in entrata
  • Exchange e merchant dovrebbero avere piú nodi collegati fra di loro, in modo da diminuire la probabilitá di un eclipse attack
  • Much ❤️ a tutti gli sviluppatori che lavorano su P2P

Domande?

Non troppo difficili, grazie

Made with Slides.com