Firmare un messaggio: cosa dimostra davvero «accedi con il tuo wallet»

·5 min di lettura·Di SSP Editorial Team
Copertina SSP Academy: firmare messaggi e accedere con il tuo wallet

Firmare un messaggio: cosa dimostra davvero «accedi con il tuo wallet»

Prima o poi un sito ti chiederà di «firmare un messaggio» invece di inviare una transazione. Niente gas, nessuna conferma on-chain, niente di visibile nella tua cronologia. Sembra innocuo, e molto spesso lo è. Ma una firma è la tua chiave che garantisce per qualcosa, e la domanda da porsi ogni volta è semplice: garantisce per che cosa?

Cosa dimostra una firma

Una firma digitale dimostra una sola cosa: chi controlla una determinata chiave privata ha approvato un determinato dato. Chiunque può verificarla tramite il tuo indirizzo pubblico senza scoprire nulla della tua chiave.

Questo rende le firme utili ben oltre l’invio di monete. Un sito può confermare che possiedi un indirizzo senza farti pagare alcuna commissione. Uno sviluppatore può dimostrare di aver pubblicato una release. Un operatore di nodi può dimostrare che un server gli appartiene. Nulla di tutto ciò tocca la blockchain, e tutto si basa sulla stessa garanzia: la chiave ha firmato esattamente questi byte.

Il punto critico è proprio «esattamente questi byte». Una firma non porta con sé alcuna intenzione. Non sa se pensavi di effettuare l’accesso o di approvare un pagamento. Si limita a legare la tua chiave ai dati, e chiunque possieda quella firma può usarla per tutto ciò che quei dati consentono.

«Accedi con il tuo wallet»

Il messaggio più comune che vedrai è un accesso. Invece di una password, il sito ti invia un testo, tu lo firmi e il sito verifica la firma tramite il tuo indirizzo. Se corrisponde, sei dentro.

Un messaggio di accesso ben costruito si legge come un piccolo contratto, e il formato standard per Ethereum (noto come Sign-In with Ethereum, EIP-4361) lo descrive nel dettaglio:

  • Il dominio che fa la richiesta, che dovrebbe corrispondere al sito nella barra degli indirizzi.
  • L’indirizzo con cui si accede.
  • Una dichiarazione in parole semplici, come «Accedi a Example».
  • Un nonce: un valore casuale monouso, così la firma non può essere riutilizzata in seguito.
  • Data di emissione e di scadenza, così una firma vecchia smette di valere.

Quando tutti questi elementi sono presenti e corrispondono, una firma di accesso è a basso rischio: concede una sessione su un solo sito e nient’altro. Se il dominio nel messaggio non corrisponde al sito su cui ti trovi, fermati. Quella discrepanza è esattamente ciò che produrrebbe una pagina di phishing che cerca di riutilizzare la tua firma altrove.

Firme che spostano denaro

È qui che il ragionamento «niente gas, quindi innocuo» crolla. Diversi tipi di firma off-chain possono essere inviati in seguito da qualcun altro per spostare i tuoi fondi:

  • Permit dei token. Molti token consentono di concedere un’autorizzazione di spesa con una firma invece che con un’approvazione on-chain. Chi spende la invia poi e può trasferire fino all’importo consentito. Dal tuo lato, sembrava di firmare un messaggio. È un’approvazione in tutto tranne che nel nome.
  • Ordini sui marketplace. Annunci e offerte firmati possono essere eseguiti da chiunque li possieda, alle condizioni che hai firmato, comprese condizioni che un sito malevolo ha compilato al posto tuo.
  • Firma di hash grezzi. Alcuni metodi legacy firmano un hash arbitrario di 32 byte senza contenuto leggibile e senza alcun prefisso che lo contrassegni come «solo un messaggio». Un hash può essere l’impronta di una transazione reale. Firmarne uno che non puoi leggere è firma alla cieca nella sua forma più pura.

La regola che ne deriva è breve: se non puoi leggere ciò che firmi, non puoi sapere cosa autorizza.

Come leggere una richiesta di firma

Prima di approvare qualsiasi messaggio, ripercorri le stesse quattro domande:

  1. Chi lo chiede? Confronta il sito richiedente con quello che intendevi usare.
  2. Quale indirizzo e quale rete? Una richiesta per un indirizzo o una chain diversi da quelli che ti aspetti è un segnale d’allarme.
  3. Riesci a leggerlo? Un testo semplice che capisci è una cosa. Esadecimale, hash o un lungo JSON senza spiegazioni sono un’altra.
  4. Cosa permetterebbe di fare a qualcuno? Accedere, dimostrare la proprietà: va bene. Spendere, mettere in vendita, trasferire, approvare: trattalo come una transazione, perché è esattamente questo.

Cosa ti mostra SSP

Quando una dApp collegata tramite WalletConnect chiede a SSP di firmare un messaggio, la richiesta mostra il sito richiedente, l’indirizzo e la rete, oltre al messaggio stesso. I messaggi codificati in esadecimale vengono prima decodificati in testo leggibile, con i byte grezzi in una sezione espandibile se vuoi controllarli.

I normali messaggi di testo ricevono il prefisso standard di Ethereum per i «messaggi firmati», che li contrassegna come messaggi e non come transazioni, così non possono essere riutilizzati come tali. Le richieste di dati tipizzati strutturati mostrano il loro contenuto grezzo completo prima che tu le approvi.

Come tutto in SSP, una firma di messaggio dal tuo wallet richiede entrambe le chiavi: approvi in SSP Wallet, poi confermi su SSP Key. Quel secondo passaggio è un vero secondo sguardo su un dispositivo separato, e vale la pena usarlo come tale.

Ciò che SSP non può fare è dirti cosa un sito intende fare con una firma. Ti mostra i dati fedelmente: leggerli resta compito tuo.

Il riepilogo onesto

Firmare un messaggio è il modo per dimostrare qualcosa con la tua chiave senza spendere nulla, e la maggior parte delle volte è esattamente innocuo come sembra. Le eccezioni sono le firme che autorizzano a spendere, mettere in vendita o trasferire, e spesso sembrano identiche finché non le leggi.

Quindi leggile. Controlla il dominio, l’indirizzo, la chain e il contenuto. Firma ciò che capisci e considera un «no» tutto ciò che non riesci a leggere.

Condividi questo articolo

Articoli correlati