Glossário / Referência do desenvolvedor
Soma de verificação do descritor
- O que é a soma de verificação do descritor?
- A soma de verificação do descritor é o código de oito caracteres depois da cerquilha em um descritor de saída, um código BCH que detecta erros de digitação e de cópia antes que uma carteira importe as chaves erradas.
Especificação no BIP-380.
O código fica no fim de um descritor, depois de uma única cerquilha, no mesmo alfabeto de 32 caracteres do bech32. O BIP-380 garante que qualquer erro que atinja três símbolos ou menos é detectado em um descritor de até 49.154 caracteres, e um erro aleatório passa sem ser detectado aproximadamente uma vez em um trilhão. Sem essa verificação, um único caractere errado em um backup de multiassinatura deixa você observando endereços que não contêm nada.
Como funciona
A soma de verificação do descritor é um código BCH calculado sobre o texto do descritor, e não um hash dele, e é isso que garante a detecção de erros. O BIP-380 fixa um alfabeto de entrada de 95 caracteres e o divide em três grupos, colocando no primeiro os caracteres sem proteção própria: dígitos, colchetes, barras, o asterisco curinga e as minúsculas de a a h, onde ficam as chaves codificadas em hexadecimal e os caminhos de derivação. A prosa da especificação fala de três grupos de 32, embora seu código de referência use 32, 32 e 31.
Cada caractere contribui com um símbolo, sua posição dentro de seu grupo, e após cada terceiro símbolo é inserido um quarto que carrega os três números de grupo combinados, de modo que três caracteres se expandem em quatro símbolos. Uma mudança que apenas desloca um caractere dentro de seu grupo, ou que apenas muda o grupo em que ele está, altera exatamente um símbolo. É por isso que um erro de maiúscula ou minúscula conta como exatamente um erro de símbolo, e por isso um único caractere em maiúscula é sempre detectado.
As garantias diminuem conforme a cadeia cresce. Um erro de um símbolo é sempre detectado; dois ou três são sempre detectados até 49.154 caracteres, quatro até 507 caracteres e cinco até 77 caracteres, com o código ajustado para minimizar os erros de cinco símbolos não detectados até 387. O arquivo descriptors.md do Bitcoin Core cita o limite de quatro erros como 501 caracteres em vez de 507 e situa o risco residual em aproximadamente um em um trilhão. O descritor de chave única nesse documento ocupa 140 caracteres, dentro de todos os limites; seu exemplo multipath 2 de 3 ocupa 439, além da janela de cinco símbolos e dentro da de quatro.
As chaves estendidas já se defendem sozinhas. O BIP-380 observa que uma xpub sai do primeiro grupo e carrega um mecanismo de soma de verificação próprio, de modo que uma expressão de chave acaba coberta duas vezes.
Onde ela aparece
Os vetores de teste do BIP-380 são a forma mais curta de ver uma soma de verificação de descritor fazendo seu trabalho. A cadeia válida é raw(deadbeef)#89f8spxm, e as quase falhas que a especificação rejeita incluem a ausência de soma de verificação, uma cerquilha sozinha, uma soma de verificação de nove caracteres, uma soma de verificação de sete caracteres, raw(deedbeef) com a soma de verificação antiga intacta e um conteúdo que usa um caractere fora do alfabeto de entrada.
O Bitcoin Core imprime a soma de verificação na saída e a exige na entrada. Toda RPC que devolve um descritor anexa os oito caracteres, enquanto apenas algumas exigem uma na entrada, entre elas deriveaddresses e importdescriptors. Para uma linha que você digitou ou editou à mão, getdescriptorinfo devolve a soma de verificação correta.
A soma de verificação continua opcional para a análise sintática, e o BIP-380 permite que os aplicativos rejeitem descritores sem ela. Espere encontrá-la quando você mover um arranjo de multiassinatura entre um coordenador, uma máquina de reserva e uma folha de papel: esses oito caracteres são a única parte que confirma que o resto chegou intacto.
Soma de verificação do descritor vs bech32
Uma soma de verificação bech32 protege um endereço e uma soma de verificação de descritor protege a definição de uma carteira, e os tamanhos envolvidos explicam a diferença de projeto. O BIP-173 limita uma cadeia bech32 a 90 caracteres e gasta os últimos seis caracteres da parte de dados na soma de verificação, sobre o mesmo alfabeto de 32 símbolos. Um descritor não tem esse limite e precisa cobrir também colchetes, vírgulas, aspas e espaços, então o BIP-380 expande o texto em símbolos de posição com um símbolo de grupo intercalado e gasta oito.
Ambos escrevem esse resultado no mesmo alfabeto, qpzry9x8gf2tvdw0s3jn54khce6mua7l, e é aí que começa a confusão. O que falha é diferente. Um endereço bech32 que não passa em sua soma de verificação não pode receber pagamento; um descritor que não passa na sua é uma carteira que você não consegue restaurar.