Passa al contenuto principale

Modello di Sicurezza

Primitive Crittografiche

PrimitivaAlgoritmoUtilizzo
FirmeEd25519 (ed25519-dalek)Firma transazioni, firma blocchi
Hash blocchiSHA-512Hash del blocco con tag di dominio "BLK"
Hash transazioniSHA-256Hash del messaggio di firma
Hash di statoBLAKE3Calcolo della radice di stato
Hash storageKeccak256Derivazione degli slot di storage del contract
Compressionesnap, lz4Compressione messaggi P2P

Sicurezza del Trasporto

Livello P2P

  • Cifratura: Protocollo Noise di libp2p (cifratura autenticata)
  • Multiplexing: Yamux
  • Identità: Chiavi peer Ed25519
  • Dimensione massima di trasmissione: 256KB per messaggio

Livello RPC

  • TLS: Non terminato dal server RPC. I deployment in produzione devono utilizzare un proxy inverso con terminazione TLS.
  • CORS: Limitato alle origini localhost. Configura le origini consentite per la produzione.
  • Limite corpo: Corpo della richiesta massimo di 1MB.

Limitazione della Velocità

LivelloLimiteFinestra
RPC Globale200 req/sFinestra scorrevole di 1 secondo
RPC Per-IP50 req/sFinestra scorrevole di 1 secondo
Dimensione batch100 richiestePer richiesta HTTP
Scansione hash blocco1000 blocchiPer chiamata chain_getBlockByHash

Validazione degli Input

RPC

  • La versione JSON-RPC deve essere esattamente "2.0"
  • I messaggi di errore vengono sanificati prima di essere restituiti ai client
  • Gli errori interni restituiscono messaggi generici (senza stack trace o formati interni)
  • I dettagli di rifiuto del mempool vengono rimossi dalle risposte di errore

Mempool

  • Validazione nonce: Richiesti nonce sequenziali (tolleranza gap fino a 5000 per il recupero da burst)
  • Controllo saldo: Il mittente deve avere saldo sufficiente per importo + commissione
  • Verifica firma: Firma Ed25519 verificata prima dell'ammissione
  • Sistema di quote: Limiti per classe (Finanziario: 50K, IoT: 100K, Globale: 100K)
  • Limite per mittente: Massimo 512 transazioni in attesa per mittente

Pipeline delle Transazioni

Guardie stateless (eseguite per prime):

  1. Validazione del formato della firma
  2. Verifica della firma Ed25519
  3. Controllo derivazione chiave pubblica → indirizzo

Guardie stateful (eseguite dopo il passaggio stateless):

  1. Nonce >= nonce dell'account
  2. Saldo >= importo + commissione
  3. Account non in lista nera

Commit atomico: la deduzione del saldo e l'incremento del nonce avvengono in modo atomico.

Sicurezza del Consenso

Quorum BFT

  • Quorum: 2f+1 (67%) dei validatori devono firmare il Certificato di Accettazione del Blocco
  • Tolleranza bizantina: Fino a f = (n-1)/3 nodi bizantini
  • Verifica del certificato: I Masternode verificano tutte le firme di attestazione

Anti-Gaming PoU

  • Smorzamento del punteggio: La media mobile esponenziale previene la manipolazione del punteggio tramite comportamento transitorio
  • Rotazione del proposer: Dopo 50 blocchi, il proposer deve cedere il passo (previene il monopolio)
  • Soglia minima del punteggio: Punteggio < 300 esclude dalle ricompense

Sicurezza dell'Elezione

  • ID di gruppo deterministici: Basati sull'epoca, non sul tempo di sistema (previene disaccordi tra MN)
  • Deduplicazione delle elezioni: Solo il primo risultato per round viene committato
  • Rifiuto soft dei gruppi sconosciuti: I Masternode avvisano ma continuano l'elaborazione per ID di gruppo sconosciuti

Gestione delle Chiavi

Portafoglio SDK

  • Azzeramento: Le chiavi private vengono azzerate al Drop (tramite crate zeroize)
  • Nessuna persistenza: Il portafoglio SDK non salva le chiavi su disco
  • Applicazione HTTPS: Gli endpoint RPC remoti richiedono HTTPS per impostazione predefinita

Faucet

  • Chiavi round-robin: 10 coppie di chiavi ruotate per prevenire la contesa del nonce
  • Reclami serializzati: Il mutex faucet_lock previene race condition TOCTOU
  • Limiti di reclamo: 5 SAVT per reclamo, cooldown di 24 ore per indirizzo

Sicurezza del Nodo

Liveness dei Peer

  • Keepalive Gossipsub: La condivisione del punteggio PoU viene pubblicata tramite gossipsub per aggiornare last_seen
  • Timeout di inattività: 600 secondi (configurabile) prima della rimozione del peer
  • Disconnessione SlowPeer: I nodi vengono disconnessi se la coda di invio gossipsub è satura

Limiti delle Risorse

  • Coda gestore connessioni: 50.000 messaggi (LN + MN)
  • Mesh Gossipsub: mesh_n=8, mesh_n_high=12, mesh_n_low=4
  • Dimensione stack: 8MB per prevenire stack overflow
  • Memoria: Pool mempool limitati con backpressure

Divulgazione Responsabile

Segnala le vulnerabilità di sicurezza tramite il processo di divulgazione responsabile del progetto. Non aprire issue pubbliche per bug di sicurezza.