Glossário / Lightning e camada 2
Rota cega
- O que é uma rota cega?
- Uma rota cega é uma rota até um nó da Lightning Network em que o destinatário substitui a chave pública de cada salto por uma chave ajustada, de modo que o remetente nunca descobre o destino real.
O destinatário constrói o caminho e o entrega, de modo que o pagador roteia até um ponto de introdução público e não além dele. Uma fatura BOLT 12 é rejeitada se não carregar nenhuma rota cega, e os saltos cegados compartilham com o restante da rota a carga útil fixa de 1300 bytes da cebola. Se você publica um destino Lightning, o cegamento mantém o id do seu nó fora dele.
Como funciona
Uma rota cega é construída de trás para frente, pelo nó que quer ser alcançado, e não pelo nó que paga.
O destinatário começa com uma rota real até si mesmo e uma chave efêmera aleatória, a partir da qual deriva uma cadeia de chaves de caminho dispostas de modo que cada salto consiga calcular a seguinte sem que ninguém a informe. Cada salto acaba compartilhando um segredo ECDH com o destinatário, e desse segredo saem duas coisas. A primeira é um fator de cegamento, o HMAC da string blinded_node_id sob o segredo compartilhado, que o destinatário multiplica pela chave pública desse salto. O salto ainda consegue assinar o resultado, porque deriva o mesmo fator e o aplica à própria chave privada, mas ninguém mais consegue casar essa chave com o grafo publicado. A segunda é uma chave de criptografia, usada para selar um pequeno bloco de instruções para esse salto com ChaCha20-Poly1305 sob um nonce todo de zeros.
O que é publicado é curto: o ponto de introdução em claro, uma chave de caminho inicial e depois uma lista de chaves ajustadas, cada uma emparelhada com seu bloco selado. Dentro de um bloco estão os campos que esse salto lê: short_channel_id ou next_node_id para onde o pagamento segue, payment_relay para a taxa e o delta de CLTV que ele deve aplicar, payment_constraints para uma expiração máxima e um tamanho mínimo de HTLC, preenchimento e, no último salto, um path_id.
Três dessas escolhas são defensivas, não funcionais. O destinatário, e não o pagador, fixa a taxa e o timelock de cada salto cegado, de modo que um nó intermediário não pode aumentar seu preço no meio da rota e observar quais pagamentos falham. Ele preenche todos os blocos até um mesmo comprimento e pode acrescentar saltos fictícios que depois descarta, de modo que o comprimento real não seja legível pela forma. E o path_id contém dados privados, a pré-imagem por exemplo, para que o destinatário possa confirmar um caminho que ele mesmo construiu em vez de aceitar um que um atacante disparou contra cada nó de que suspeita.
O BOLT 12 acrescenta uma última peça de camuflagem. Em vez de uma taxa por salto cegado, uma fatura carrega exatamente um blinded_payinfo por caminho: uma taxa base em milisatoshis, uma taxa proporcional em milionésimos, um delta de CLTV agregado, um tamanho mínimo e máximo de HTLC e um vetor de recursos. A razão declarada é que o detalhe por salto revelaria trivialmente uma falta de uniformidade que distinguiria o caminho.
Por que isso importa quando você compra bitcoin
Os caminhos cegos mudam o que o meio da rede Lightning aprende sobre você, e não mudam nada sobre o que o seu próprio primeiro salto aprende.
O cegamento de rotas oculta os saltos após o ponto de introdução e não diz nada sobre o nó pelo qual sua carteira se conecta, que é o que vê seus valores e destinos. A Phoenix, que nossa classificação coloca em 4,0 entre nossas 41 análises de carteiras, é incomumente honesta quanto a isso: as próprias perguntas frequentes da ACINQ dizem que a carteira não oferece nenhuma vantagem de privacidade em relação a uma carteira custodial hospedada e que a ACINQ conhece o destino final e o valor dos pagamentos. Um caminho cego em uma oferta que você paga não mexe nisso.
A custódia elimina a questão por completo. A Wallet of Satoshi, que nossa classificação coloca em 2,7 e marca com um aviso, guarda as chaves em seu modo custodial, então as duas pontas de um pagamento são registros dela; ela deixou de atender clientes dos Estados Unidos em 23 de novembro de 2023 e desde então encerrou o serviço custodial em toda a União Europeia. Nada seu fica cego quando o pagamento nunca sai dos livros do provedor.
Onde o cegamento traria algum benefício a você é no próprio saque. A Strike, a plataforma com foco em Lightning com a melhor classificação neste site, com 4,6, não acrescenta taxa própria nas transferências e paga a um destino Lightning que você informar. Entregue a ela uma fatura BOLT 11 e você entrega seu nó: a assinatura carrega um id de recuperação, então a chave do beneficiário pode ser recuperada a partir dela. Uma oferta coloca ali, em vez disso, um ponto de introdução, onde quer que o pagador aceite uma.
O custo é de diagnóstico. Saltos dentro de um caminho cego retornam falhas sem dados de atribuição, e o ponto de introdução é instruído a acrescentar um atraso aleatório antes de repassar um erro, de modo que o teste não consiga medir a que distância está o destinatário. Por isso, um saque que falha para um destino cego quase não diz nada, então teste-o a partir de uma carteira que você controla antes de culpar a plataforma.
Dave entrega a Alice um caminho através de Bob e Carol
A especificação da Lightning desenvolve a ideia do caminho cego com quatro nomes, o que é mais rápido de acompanhar do que a álgebra.
Dave quer ser pago sem que Alice saiba que é ele. Ele escolhe uma rota até si mesmo através de dois nós públicos, primeiro Bob e depois Carol, e constrói a cadeia de chaves de caminho para que os três derivem a sua. Depois sela três blocos: um que diz a Bob para encaminhar a Carol, um que diz a Carol para encaminhar a ele e um para si mesmo com metadados e o path_id. Por fim, deriva os fatores que transformam Bob em Bob linha, Carol em Carol linha e Dave em Dave linha.
Alice recebe três linhas: o primeiro nó é Bob, aqui está a primeira chave de caminho, e aqui está a sequência Bob linha, Carol linha, Dave linha, com um bloco selado junto a cada uma. Ela chega a Bob pelo grafo público comum, o que é deliberado: a especificação recomenda um trecho não cego até o ponto de introdução, porque não precisa de apoio dos nós intermediários e retorna erros que podem ser lidos. Bob abre seu bloco, fica sabendo apenas que Carol é a próxima, e repassa a chave de caminho derivada junto com a cebola. Carol usa essa chave duas vezes: uma para ajustar a cebola, que Alice criptografou para Carol linha e não para Carol, e outra para abrir seu próprio bloco. Dave a recebe por último e verifica o path_id antes de aceitar.
Conte o que cada um acaba sabendo. Alice conhece Bob. Bob sabe que é um ponto de introdução e que Carol é a próxima. Carol sabe que um pagamento cego passou por ela e não consegue dizer se Dave é o destinatário ou outro retransmissor. Dave sabe tudo, porque é o único que o construiu.
Rota cega vs dica de rota
Um caminho cego e uma dica de rota respondem à mesma pergunta, como chegar a um nó que o grafo público não consegue ver, e revelam quantidades opostas ao fazê-lo.
Uma dica de rota é o campo r de uma fatura BOLT 11, e é texto claro. Cada entrada carrega uma chave pública de 264 bits, um id curto de canal de 64 bits, uma taxa base, uma taxa proporcional e um delta de CLTV, tudo em claro, então qualquer um que tenha a fatura sabe de qual nó bem conectado você depende. Um caminho cego nomeia o ponto de introdução e depois escurece: cada salto posterior é uma chave ajustada que não casa com nada no grafo, e as taxas chegam agregadas em vez de detalhadas. Os caminhos cegos também assumem uma tarefa que as dicas de rota nunca tiveram: fazer as vezes dos campos payment_secret e payment_metadata de uma fatura BOLT 11.
Rota cega vs roteamento cebola
O roteamento cebola oculta o pagador dos saltos; um caminho cego oculta o beneficiário do pagador.
No roteamento cebola simples, o remetente escolhe cada salto do grafo público e envolve uma camada de criptografia por salto, de modo que nenhum nó que encaminha saiba quem está pagando nem em que ponto da rota ele está. O remetente ainda conhece a rota inteira, incluindo o id de nó real do destino, o que serve para pagar a uma loja e é inútil para publicar um destino reutilizável. O cegamento de rotas fornece a metade que faltava sem substituir nada: um pagamento por um caminho cego continua sendo uma cebola, e o cegamento é um ajuste de chave sobreposto. Eles são separáveis o bastante para que um destinatário que não queira a privacidade possa construir um caminho de um só salto contendo apenas a si mesmo e revelar o id do seu nó mesmo assim.