Modello di Sicurezza
Primitive Crittografiche
| Primitiva | Algoritmo | Utilizzo |
|---|---|---|
| Firme | Ed25519 (ed25519-dalek) | Firma transazioni, firma blocchi |
| Hash blocchi | SHA-512 | Hash del blocco con tag di dominio "BLK" |
| Hash transazioni | SHA-256 | Hash del messaggio di firma |
| Hash di stato | BLAKE3 | Calcolo della radice di stato |
| Hash storage | Keccak256 | Derivazione degli slot di storage del contract |
| Compressione | snap, lz4 | Compressione 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à
| Livello | Limite | Finestra |
|---|---|---|
| RPC Globale | 200 req/s | Finestra scorrevole di 1 secondo |
| RPC Per-IP | 50 req/s | Finestra scorrevole di 1 secondo |
| Dimensione batch | 100 richieste | Per richiesta HTTP |
| Scansione hash blocco | 1000 blocchi | Per 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):
- Validazione del formato della firma
- Verifica della firma Ed25519
- Controllo derivazione chiave pubblica → indirizzo
Guardie stateful (eseguite dopo il passaggio stateless):
- Nonce >= nonce dell'account
- Saldo >= importo + commissione
- 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 cratezeroize) - 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_lockpreviene 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.