Pular para o conteúdo
buybitcoinsmart

Glossário / Lightning e camada 2

Chave de revogação

O que é uma chave de revogação?
Uma chave de revogação é a chave pública cegada que bloqueia as saídas com atraso e as saídas HTLC de uma transação de compromisso Lightning, que seu parceiro de canal pode gastar no momento em que você revela o segredo que retira aquele estado.

Toda transação de compromisso Lightning carrega um ramo de revogação que ninguém pode assinar até que um dos lados revele um segredo por compromisso. O BOLT 3 numera esses segredos de 281.474.976.710.655 para baixo, e o nó receptor pode guardar todos em um vetor de 49 posições. Publicar um estado que você já revogou permite que seu par fique com todo o saldo do canal, e é por isso que uma frase de recuperação não pode fazer o backup da Lightning.

Como funciona

Uma chave de revogação é construída de propósito para que nenhum dos dois lados de um canal possa calcular sozinho a sua metade privada.

Quando seu nó prepara um novo compromisso para o seu par, ele pega o próprio revocation_basepoint e o per_commitment_point do seu par, multiplica cada um dos dois pelo SHA256 do par concatenado com esse ponto escrito primeiro, e soma os resultados. O BOLT 3 enuncia a propriedade em uma linha: a construção garante que nem o nó que fornece o ponto base nem o nó que fornece o ponto podem conhecer a chave privada sem o segredo do outro nó. A chave privada não existe em lugar nenhum até a segunda metade chegar.

Essa chegada é uma mensagem. Depois que seu par verifica sua assinatura no novo compromisso dele, ele responde com revoke_and_ack, tipo de mensagem 133, trazendo um per_commitment_secret de 32 bytes para o estado que acabou de ser aposentado, mais o ponto do próximo estado. A partir daí você pode calcular a revocationprivkey do estado antigo, e seu par não pode voltar atrás.

A chave aparece em dois tipos de saída. Uma saída to_local é um P2WSH cujo script de testemunha é OP_IF, a revocationpubkey, OP_ELSE, to_self_delay, OP_CHECKSEQUENCEVERIFY, OP_DROP, a local_delayedpubkey, OP_ENDIF, OP_CHECKSIG: o dono tem que esperar to_self_delay blocos, enquanto quem tem a chave de revogação gasta imediatamente com a pilha de testemunha de uma assinatura e um 1. Cada saída HTLC carrega a mesma chave reduzida a hash de 20 bytes com RIPEMD160 sobre SHA256, e o BOLT 5 exige que o nó que pune varra também com essa chave as transações HTLC-success e HTLC-timeout do trapaceiro.

O armazenamento é onde o desenho fica engenhoso. Um canal pode consumir 281.474.976.710.655 segredos por compromisso, um por estado, todos gerados a partir de uma única semente de 256 bits impossível de adivinhar, invertendo bits e aplicando hash, com o índice contando para baixo em vez de para cima. Como de um segredo cujo índice termina em zeros se derivam todos os segredos dali até o próximo limite de potência de dois, o nó receptor guarda apenas 49 pares de valor e índice e reconstrói o resto sob demanda. O BOLT 3 também faz o receptor rederivar seus segredos anteriores a partir de cada nova chegada, como verificação, de modo que um par que trocou de semente discretamente é descoberto na hora, e não no momento do fechamento.

Por que isso importa quando você compra bitcoin

As chaves de revogação são a razão pela qual um saldo em Lightning não se comporta em nada como os bitcoins on-chain que uma corretora envia a você.

Das 41 carteiras analisadas neste site, as que colocam você na Lightning tratam o problema de estado de formas visivelmente diferentes, e essa divisão explica suas notas. A Phoenix roda um nó autônomo de verdade no celular, atrás de uma frase de recuperação BIP39 padrão em um caminho BIP84, e nossa análise deixa explícito que a frase de recuperação é a alternativa de reserva on-chain, e não o canal: se a ACINQ desaparecesse, você faria um fechamento forçado, esperaria cerca de 720 blocos, aproximadamente cinco dias, e recuperaria on-chain com a Electrum. A Muun recusa a lista de palavras por completo e entrega a você um arquivo Emergency Kit com as duas chaves multiassinatura mais os descritores de saída, com o raciocínio publicado de que um mnemônico faz backup de chaves enquanto seus bitcoins vivem em scripts sobre os quais a carteira também precisa ser informada. O modo custodial padrão da Wallet of Satoshi elimina o problema eliminando você dele: a empresa guarda todos os segredos, e por isso ela tem status de cautela e nota 2,7 aqui, e por isso pôde parar de atender clientes dos Estados Unidos em 23 de novembro de 2023 e retirar o serviço em toda a União Europeia na virada de 2026, deixando aos titulares na UE o modo de autocustódia. A BlueWallet é de autocustódia on-chain e tem nota 4,2 por isso, enquanto um saldo Lightning nela fica em uma conta LNDHub que sua frase de recuperação on-chain não cobre.

O protocolo oferece sim uma rede de segurança, e vale conhecê-la com precisão. Se você se reconectar com um estado obsoleto, channel_reestablish o expõe: a mensagem do seu par indica um número de revogação mais alto do que você esperava e devolve o último per_commitment_secret que você enviou, o que prova que a alegação é honesta. O BOLT 2 então diz que você não deve transmitir sua própria transação de compromisso e deve enviar um erro pedindo ao seu par que faça o canal falhar. Essa é uma regra que o software honesto segue, não uma garantia de consenso, e ela protege você apenas enquanto você se abstém de publicar o estado obsoleto por conta própria. O BOLT 5 enuncia o dever correspondente em termos claros: um nó não deve transmitir uma transação de compromisso para a qual já tenha exposto o per_commitment_secret.

Na prática, o risco fica dentro da sua carteira de recebimento e em nenhum outro lugar. Comprar em qualquer uma das 63 corretoras acompanhadas aqui e sacar via Lightning não expõe você a ele, porque os canais da corretora são problema da corretora. Sua exposição começa no momento em que os bitcoins chegam a um lugar onde quem deve rodar o nó é você.

O vetor de teste do BOLT 3, chave por chave

O BOLT 3 traz no apêndice uma derivação resolvida, e lê-la é a forma mais rápida de ver que as duas metades de uma chave de revogação são essenciais.

Comece com um revocation_basepoint de 036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2 e um per_commitment_point de 025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486. Aplicar hash primeiro ao ponto base dá efbf7ba5a074276701798376950a64a90f698997cce0dff4d24a6d2785d20963, e aplicar hash primeiro ao ponto dá cbcdd70fcfad15ea8e9e5c5a12365cf00912504f08ce01593689dd426bca9ff0. Multiplique cada ponto pelo hash que começa com ele, some os dois resultados, e sai a revocationpubkey 02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0.

Nada nessa chave pública revela a privada. Ela aparece apenas quando o par divulga o per_commitment_secret correspondente, 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100, momento em que os mesmos dois hashes se combinam com esse segredo e com o segredo do ponto base para dar a revocationprivkey d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110. Uma atualização de canal, uma divulgação, e uma chave pública que um instante antes era decoração se torna um direito sobre toda a saída.

Chave de revogação vs frase de recuperação

Uma chave de revogação e uma frase de recuperação são dois segredos dos quais seu dinheiro depende, e só um deles pode ser escrito no papel.

Uma frase de recuperação é estática. Doze ou vinte e quatro palavras fixam todas as chaves que a carteira vai derivar, cópias extras deixam você mais seguro, e uma cópia antiga vale exatamente o mesmo que uma nova. Os segredos de revogação invertem as três propriedades. Eles chegam um por atualização de canal, dentro do revoke_and_ack, vindos do outro lado; as cópias que importam são as divulgações do seu par, que sua própria frase de recuperação não consegue regenerar; e uma cópia antiga do estado do canal não é um backup, mas um passivo, porque agir com base nela é indistinguível de trapacear. O esquema de armazenamento de 49 posições existe justamente porque esses segredos mudam com frequência excessiva para serem anotados.

A consequência prática é o aviso que toda carteira Lightning repete. Restaure uma carteira Lightning apenas a partir das palavras e comece a gastar, e você terá republicado um estado que já revogou, que é a única coisa que o BOLT 5 proíbe de forma categórica e a única coisa que a chave de revogação do seu parceiro de canal estava esperando.

Não confundir com

Perguntas frequentes

Minha frase de recuperação faz backup dos meus canais Lightning?

Não, uma frase de recuperação restaura chaves e endereços, mas não os segredos por compromisso que o seu parceiro de canal enviou a você, que o BOLT 3 faz o nó receptor guardar à medida que chegam, de modo que uma carteira restaurada apenas a partir das palavras tem uma visão desatualizada de cada canal. A Muun contorna a confusão fazendo backup de um arquivo Emergency Kit que contém tanto as chaves quanto os descritores de saída, em vez de uma lista de palavras.

O que acontece se eu transmitir por acidente um estado antigo de um canal Lightning?

O seu parceiro de canal pode ficar com todo o saldo do canal, porque o segredo por compromisso que você entregou quando aquele estado foi aposentado permite assinar de uma só vez o ramo de revogação de cada saída, sem nenhum período de espera a cumprir.

O meu parceiro de canal pode usar uma chave de revogação contra mim se eu não tiver feito nada de errado?

Não, porque a chave privada de revogação do seu estado atual ainda não existe. Ela precisa de um segredo por compromisso que você não revelou, e o BOLT 3 constrói a chave a partir de material fornecido pelos dois lados, de modo que nenhum deles pode derivá-la sozinho.

Leia a seguir

Termos relacionados

Mais em Lightning e camada 2

Ler esta página em inglês