Glossario / Lightning e layer 2
Chiave di revoca
- Che cos'è la chiave di revoca?
- La chiave di revoca è la chiave pubblica offuscata che blocca gli output ritardati e gli output HTLC di una transazione di commitment Lightning: la controparte del canale può spenderli nel momento in cui riveli il segreto che revoca quello stato.
Ogni transazione di commitment Lightning porta un ramo di revoca che nessuno può firmare finché una delle due parti non rivela un segreto per commitment. BOLT 3 numera quei segreti a partire da 281.474.976.710.655 verso il basso, e il ricevente può conservarli tutti in un array di 49 posizioni. Pubblicare uno stato che hai già revocato permette al tuo peer di prendere l'intero saldo del canale, ed è per questo che una frase di recupero non può fare da backup a Lightning.
Come funziona
Una chiave di revoca è costruita di proposito in modo che nessuno dei due lati di un canale possa calcolarne da solo la metà privata.
Quando il tuo nodo prepara un nuovo commitment per il tuo peer, prende il proprio revocation_basepoint e il per_commitment_point del peer, moltiplica ciascuno dei due per lo SHA256 della coppia concatenata con quel punto scritto per primo, e somma i risultati. BOLT 3 enuncia la proprietà in una riga: la costruzione garantisce che né il nodo che fornisce il basepoint né il nodo che fornisce il punto possono conoscere la chiave privata senza il segreto dell'altro nodo. La chiave privata non esiste da nessuna parte finché non arriva la seconda metà.
Quell'arrivo è un messaggio. Una volta che il tuo peer ha verificato la tua firma sul suo nuovo commitment, risponde con revoke_and_ack, tipo di messaggio 133, che porta un per_commitment_secret di 32 byte per lo stato appena ritirato più il punto per il suo stato successivo. Da quel momento puoi calcolare la revocationprivkey per lo stato vecchio, e il tuo peer non può più ritirarla.
La chiave compare in due tipi di output. Un output to_local è un P2WSH il cui witness script recita OP_IF, la revocationpubkey, OP_ELSE, to_self_delay, OP_CHECKSEQUENCEVERIFY, OP_DROP, la local_delayedpubkey, OP_ENDIF, OP_CHECKSIG: il proprietario deve attendere to_self_delay blocchi, mentre chi detiene la chiave di revoca spende subito con lo stack del witness formato da una firma e un 1. Ogni output HTLC porta la stessa chiave ridotta a hash di 20 byte con RIPEMD160 su SHA256, e BOLT 5 richiede al nodo che punisce di riscattare con quella chiave anche le transazioni HTLC-success e HTLC-timeout di chi bara.
L'archiviazione è il punto in cui il progetto diventa ingegnoso. Un canale può consumare 281.474.976.710.655 segreti per commitment, uno per stato, tutti generati da un unico seed di 256 bit non indovinabile invertendo bit e calcolando hash, con l'indice che conta verso il basso invece che verso l'alto. Poiché da un segreto il cui indice termina in zeri finali si derivano tutti i segreti da lì fino al confine successivo di potenza di due, il nodo ricevente conserva solo 49 coppie di valore e indice e ricostruisce il resto su richiesta. BOLT 3 fa anche ricalcolare al ricevente i propri segreti precedenti a partire da ogni nuovo arrivo come controllo, così un peer che ha cambiato seed di nascosto viene scoperto sul momento e non al momento della chiusura.
Perché questo conta quando compri bitcoin
Le chiavi di revoca sono il motivo per cui un saldo Lightning non si comporta affatto come i bitcoin on-chain che un exchange ti invia.
Dei 41 wallet recensiti su questo sito, quelli che ti portano su Lightning affrontano il problema dello stato in modi visibilmente diversi, e questa distinzione spiega le loro valutazioni. Phoenix esegue sullo smartphone un vero nodo autonomo, dietro una frase di recupero BIP39 standard su un percorso BIP84, e la nostra recensione è esplicita sul fatto che la frase di recupero è il fallback on-chain e non il canale: se ACINQ sparisse, forzeresti la chiusura, attenderesti circa 720 blocchi, cioè circa cinque giorni, e recupereresti on-chain con Electrum. Muun rifiuta del tutto la lista di parole e ti consegna un file Emergency Kit che contiene entrambe le chiavi multisig più i descrittori degli output, sulla base del ragionamento pubblicato che un mnemonico fa da backup alle chiavi mentre i suoi bitcoin vivono in script di cui bisogna anche informare il wallet. La modalità custodiale predefinita di Wallet of Satoshi elimina il problema eliminando te: la società detiene ogni segreto, ed è per questo che qui ha lo stato di cautela e una valutazione di 2,7, e che ha potuto smettere di servire i clienti statunitensi il 23 novembre 2023 e ritirare il servizio in tutta l'Unione europea all'inizio del 2026, lasciando invece ai titolari nell'UE la modalità in autocustodia. BlueWallet è in autocustodia on-chain e ha una valutazione di 4,2 per questo, mentre un saldo Lightning lì si trova in un conto LNDHub che la tua frase di recupero on-chain non copre.
Il protocollo ti offre comunque una rete di sicurezza, e vale la pena conoscerla con precisione. Se ti riconnetti portando uno stato obsoleto, channel_reestablish lo espone: il messaggio del tuo peer indica un numero di revoca più alto di quello che ti aspettavi e ti restituisce l'ultimo per_commitment_secret che hai inviato, il che dimostra che la rivendicazione è onesta. BOLT 2 dice allora che non devi trasmettere la tua transazione di commitment e che dovresti inviare un errore chiedendo al tuo peer di far fallire il canale. È una regola che il software onesto rispetta, non una garanzia del consenso, e ti protegge solo finché ti astieni dal pubblicare tu stesso lo stato obsoleto. BOLT 5 enuncia in termini chiari il dovere corrispondente: un nodo non deve trasmettere una transazione di commitment per la quale ha già rivelato il per_commitment_secret.
In pratica, il rischio vive dentro il wallet che riceve e da nessun'altra parte. Comprare su uno qualsiasi dei 63 exchange seguiti qui e prelevare via Lightning non ti espone, perché i canali dell'exchange sono un problema dell'exchange. La tua esposizione inizia nel momento in cui i bitcoin arrivano in un posto dove dovresti essere tu a eseguire il nodo.
Il test vector di BOLT 3, chiave per chiave
BOLT 3 include in appendice una derivazione svolta, e leggerla è il modo più rapido per vedere che entrambe le metà di una chiave di revoca sono essenziali.
Parti da un revocation_basepoint pari a 036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2 e da un per_commitment_point pari a 025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486. Calcolare l'hash del basepoint per primo dà efbf7ba5a074276701798376950a64a90f698997cce0dff4d24a6d2785d20963, e calcolare l'hash del punto per primo dà cbcdd70fcfad15ea8e9e5c5a12365cf00912504f08ce01593689dd426bca9ff0. Moltiplica ciascun punto per l'hash che inizia con quel punto, somma i due risultati e ottieni la revocationpubkey 02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0.
Niente di quella chiave pubblica rivela quella privata. Compare solo quando il peer divulga il per_commitment_secret corrispondente, 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100, e a quel punto gli stessi due hash si combinano con quel segreto e con il segreto del basepoint per dare la revocationprivkey d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110. Un aggiornamento del canale, una divulgazione, e una chiave pubblica che un attimo prima era decorativa diventa un diritto sull'intero output.
Chiave di revoca vs frase di recupero
Una chiave di revoca e una frase di recupero sono entrambe segreti da cui dipendono i tuoi soldi, e solo uno dei due può essere scritto su carta.
Una frase di recupero è statica. Dodici o ventiquattro parole fissano ogni chiave che il wallet deriverà mai, le copie in più ti rendono più al sicuro e una copia vecchia vale esattamente quanto una recente. I segreti di revoca invertono tutte e tre le proprietà. Arrivano uno per ogni aggiornamento del canale, dentro revoke_and_ack, dall'altra parte; le copie che contano sono le divulgazioni del tuo peer, che la tua frase di recupero non può rigenerare; e una copia vecchia dello stato del canale non è un backup ma un rischio, perché agire su di essa è indistinguibile dal barare. Lo schema di archiviazione a 49 posizioni esiste proprio perché questi segreti cambiano troppo spesso per essere scritti.
La conseguenza pratica è l'avvertimento che ogni wallet Lightning ripete. Ripristina un wallet Lightning dalle sole parole e inizia a spendere, e hai ripubblicato uno stato che avevi già revocato, cioè l'unica cosa che BOLT 5 vieta in modo assoluto e l'unica cosa che la chiave di revoca del tuo partner di canale stava aspettando.