Vai al contenuto

Una firma per la delega di governance è sicura?

Scopri cosa autorizza una firma per la delega di governance, come la separazione del dominio EIP-712, i nonce e la scadenza riducono il rischio di replay e cosa verificare prima di firmare.

Aggiornato

Solo a scopo educativo; non costituisce consulenza finanziaria. Le transazioni e le firme relative ad asset digitali possono causare perdite irreversibili.

Risposta diretta

Una firma per la delega di governance è sicura solo quando il messaggio decodificato corrisponde esattamente alla delega voluta e il contratto di governance applica un’adeguata protezione dal replay. In un tipico modello di token di voto, la delega cambia chi può esercitare il potere di voto del firmatario; non trasferisce il saldo dei token né concede l’autorizzazione a spenderli. Tuttavia, il contratto distribuito è l’autorità definitiva su ciò che la firma produce.

Una firma off-chain può essere inviata da un relayer, quindi il firmatario può non pagare il gas pur autorizzando una modifica dello stato on-chain. Considera la firma un’istruzione eseguibile, non un accesso o una richiesta innocua di collegamento del wallet.

Come funziona

Un comune flusso delegateBySig prevede quattro passaggi:

  1. L’applicazione prepara dati tipizzati EIP-712 contenenti l’indirizzo del delegato, un nonce e una scadenza.
  2. Il wallet firma un digest vincolato al messaggio tipizzato e a un dominio EIP-712.
  3. Qualsiasi account può inoltrare la firma al contratto del token o di governance.
  4. Il contratto recupera o convalida il firmatario, controlla il nonce e la scadenza e registra il nuovo delegato.

Il dominio EIP-712 può includere name, version, chainId e verifyingContract. Questi campi separano messaggi altrimenti identici tra applicazioni, versioni, reti e contratti. La stessa EIP-712 dichiara espressamente di non fornire protezione dal replay; il contratto deve consumare un nonce o rendere in altro modo ogni autorizzazione monouso, mentre una scadenza limita il periodo solo se il contratto la controlla effettivamente.

Prima di firmare, verifica tutti gli elementi seguenti tramite un’interfaccia di governance ufficiale, la documentazione o dati del contratto verificati in modo indipendente:

  • primaryType e i nomi dei campi descrivono una delega, non un permesso, un trasferimento di token, un ordine o un’autorizzazione alla gestione dell’account.
  • verifyingContract è il contratto del token o di governance previsto sulla chainId attiva.
  • delegatee è l’indirizzo del rappresentante che hai scelto, verificato per esteso e non tramite il nome visualizzato.
  • nonce corrisponde al nonce attuale del contratto per il firmatario e expiry è sufficientemente breve per il flusso previsto.
  • Il wallet mostra tutti i dati tipizzati. Rifiuta le richieste di firma cieca o gli hash grezzi di cui non puoi riprodurre autonomamente il significato.

Le implementazioni variano. Ad esempio, il contratto COMP di Compound calcola l’hash di delegato, nonce e scadenza, richiede che il nonce corrisponda a quello memorizzato per il firmatario, incrementa tale nonce e rifiuta una firma scaduta. Anche l’interfaccia Votes di OpenZeppelin espone delegateBySig, la gestione dei nonce e i controlli di scadenza. Non presumere che una funzione con un nome simile in un altro contratto offra protezioni identiche.

Esempio

Mira vuole delegare 10.000 voti all’indirizzo 0xAB...1234. Il suo wallet mostra primaryType: Delegation, il contratto verificato del token di voto, l’ID della chain attiva, delegatee: 0xAB...1234, il nonce corrente e una scadenza tra 20 minuti. Dopo aver controllato l’indirizzo tramite una seconda fonte affidabile, firma; un relayer invia il messaggio e il contratto emette l’evento di delega. Il saldo dei token rimane nel suo wallet, mentre il rappresentante riceve il potere di voto associato secondo le regole del protocollo.

Ora cambia un dettaglio: la pagina richiede primaryType: Permit e indica un soggetto autorizzato a spendere token, oppure verifyingContract è un contratto non correlato. Non è la stessa istruzione di delega. Potrebbe invece autorizzare la spesa di token, anche se la pagina etichetta il pulsante come «Delega» e il firmatario non paga il gas. Mira deve rifiutarla.

Rischi e contromisure

  • Delegato sbagliato: l’address poisoning, i messaggi privati e i nomi visualizzati copiati possono sostituire delegatee con un indirizzo controllato da un aggressore. Verifica l’indirizzo completo tramite una proposta ufficiale o il profilo del delegato.
  • Azione sbagliata: un’interfaccia dannosa può richiedere un altro tipo EIP-712, come un permesso. Leggi primaryType, ogni campo e il contratto di verifica; l’etichetta del pulsante non ha alcun valore di sicurezza.
  • Replay: controlli del nonce deboli o assenti possono consentire di riutilizzare una firma. Un dominio privo del collegamento alla chain o al contratto previsti può inoltre consentirne l’uso in un contesto indesiderato. Controlla il codice di verifica effettivo, perché EIP-712 da sola non protegge dal replay.
  • Firma di lunga durata: un messaggio firmato e inutilizzato può restare eseguibile finché non scade o il suo nonce non diventa invalido. Scegli una scadenza breve, non pubblicare la firma e, se è necessario annullarla, usa solo il metodo di invalidazione documentato dal protocollo.
  • Visualizzazione ingannevole del wallet: campi troncati, un dominio sconosciuto o la firma cieca impediscono un consenso informato. Annulla e analizza la richiesta di dati tipizzati con un wallet o un decoder che mostri il messaggio completo.
  • Differenze degli account di contratto: i wallet basati su smart contract possono convalidare le firme tramite ERC-1271, dove la validità può dipendere dallo stato del wallet e dalla sua politica di autorizzazione. Verifica il supporto sia del wallet sia del contratto di governance, anziché presumere il recupero tipico di un EOA.
  • Conseguenze sulla governance: la delega può concentrare il potere di voto o consentire a un delegato inaffidabile di votare contro i tuoi interessi. Esamina l’identità, lo storico di voto e i conflitti del delegato, oltre alla procedura del protocollo per una nuova delega.

Dopo l’invio, verifica la transazione sulla chain corretta: controlla il contratto di destinazione, la funzione decodificata, il firmatario recuperato o indicato dall’evento, il nuovo delegato e il nonce. Il successo di una transazione del relayer dimostra soltanto che il contratto ha accettato la chiamata; non dimostra che l’intenzione firmata fosse sicura.

Se hai firmato ma non hai visto alcun invio, smetti di condividere la firma e consulta il percorso documentato dal protocollo per l’annullamento o l’invalidazione del nonce. Se è stata eseguita una delega indesiderata, effettua una nuova delega tramite il contratto ufficiale e verifica il nuovo stato. La sola delega normalmente non crea un’approvazione di token, quindi non confondere una nuova delega con la revoca delle approvazioni. Se hai anche firmato un permesso o esposto una seed phrase o una chiave privata, trattalo come un incidente del wallet distinto e più grave.

Idee sbagliate comuni

  • «Niente gas significa nessuna autorizzazione.» Il relayer può pagare il gas mentre la firma fornisce l’autorizzazione del firmatario.
  • «EIP-712 rende sicura ogni firma.» Standardizza l’hashing dei dati tipizzati e la separazione del dominio, ma lo standard non include la protezione dal replay e non può verificare che l’utente intendesse eseguire l’azione mostrata.
  • «La delega trasferisce i miei token.» La normale delega di voto sposta o assegna potere di voto, non la proprietà dei token, ma solo il contratto distribuito e il messaggio decodificato possono stabilire l’effetto reale.
  • «Posso sempre revocare una firma off-chain.» Non esiste una transazione universale per revocare una firma. Scadenza, consumo o invalidazione del nonce e nuova delega sono meccanismi specifici del contratto.
  • «Cambiare delegato cancella i voti precedenti.» Una nuova delega modifica il potere di voto futuro o attuale secondo le regole del protocollo; potrebbe non annullare i voti già espressi né modificare gli snapshot storici.

Argomenti correlati

Fonti

Navigazione

Cerca nella wiki...