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
- 4 magic bytes
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
P2P
By Daniela Brozzoni
P2P
- 676