Pular para o conteúdo
buybitcoinsmart

Glossário / Endereços e chaves

Chave pública comprimida

O que é uma chave pública comprimida?
Uma chave pública comprimida guarda apenas a coordenada x de um ponto da curva mais um indicador de paridade de um byte, o que faz uma chave pública completa caber em 33 bytes em vez de 65.

Todo ponto na secp256k1 tem dois valores possíveis de y para um dado x, então registrar qual deles é custa um único byte em vez de 32. As carteiras geram chaves comprimidas por padrão desde o Bitcoin Core 0.6, lançado em março de 2012, e os bytes economizados saem do tamanho de cada entrada que você gastar depois. Gastar mais barato é todo o ganho, e o formato é invisível no uso diário.

Como funciona

A compressão de chaves públicas é álgebra, não compressão de dados. A equação da curva, em que y ao quadrado é igual a x ao cubo mais 7, tem no máximo duas soluções para y em qualquer x dado, e essas duas soluções são sempre um número par e um número ímpar. Guardar x mais um bit de informação sobre qual solução se aplica é, portanto, suficiente para que qualquer pessoa recupere o ponto exatamente, resolvendo a equação e escolhendo a raiz com a paridade correta.

A codificação coloca esse bit no byte inicial. Um prefixo de 0x02 significa que o valor de y é par, 0x03 significa que é ímpar, e os 32 bytes que vêm depois são a coordenada x. Comprimento total: 33 bytes. O formato antigo se identifica com um prefixo de 0x04 e carrega as duas coordenadas por inteiro, em 65 bytes. Qualquer software que leia uma chave consegue distinguir os dois apenas pelo primeiro byte, e foi assim que as carteiras se mantiveram compatíveis durante a transição.

Os 32 bytes economizados recaem em lugares diferentes conforme o tipo de saída. Em uma entrada legada, a chave fica no script de desbloqueio e é cobrada com peso total, então 32 bytes custam 32 vbytes, cerca de 640 satoshis com uma taxa de 20 sat/vB. Em uma entrada SegWit, a chave fica no witness, que tem desconto de quatro vezes, então os mesmos 32 bytes custam 8 vbytes. Nenhum dos dois números é dramático por si só, e ambos se repetem em cada entrada de cada transação que você assinar.

Onde você vê isso

Você encontra chaves comprimidas nos dados brutos de transações. Abra qualquer gasto recente em um explorador de blocos e a chave pública no witness ou no script começará com 02 ou 03, seguidos de 64 caracteres hexadecimais. Chaves que começam com 04 são relíquias.

O formato também decide a aparência de um endereço. Calcular o hash de uma chave comprimida dá um resultado diferente do hash da versão não comprimida da mesma chave, então uma chave privada pode corresponder a dois endereços legados totalmente separados, com saldos separados. As carteiras resolvem isso por convenção, não por esperteza: tudo o que é derivado pelo BIP-32, que abrange toda carteira com frase de recuperação em uso comum, é comprimido do início ao fim, e uma string no formato Wallet Import Format que começa com K ou L anuncia que a chave pertence ao lado comprimido dessa bifurcação.

O SegWit eliminou a ambiguidade de vez. O BIP-143 proíbe chaves não comprimidas dentro de programas de witness de versão 0, então qualquer endereço bc1q é comprimido por regra, e o Taproot foi além ao definir chaves x-only de 32 bytes que dispensam o byte de paridade por completo.

Chave pública comprimida vs chave pública não comprimida

As formas comprimida e não comprimida codificam o mesmo ponto, e a diferença está apenas no que precisa ser registrado. A forma comprimida guarda x e deriva y quando necessário, o que custa alguns microssegundos de aritmética e economiza 32 bytes para sempre. A forma não comprimida armazena y diretamente, o que poupava cálculo no hardware de 2009 e hoje não traz nada. Como as duas sequências de bytes diferem, o hash de cada uma resulta em endereços diferentes, e é essa divergência, mais do que a contagem de bytes, que ocasionalmente deixa fundos presos em carteiras muito antigas.

Não confundir com

Perguntas frequentes

Usar chaves comprimidas deixa meu bitcoin mais seguro?

Não, a segurança é idêntica, porque os dois formatos descrevem o mesmo ponto da curva. O benefício é o tamanho: 33 bytes em vez de 65 em cada entrada que você gastar, o que reduz a taxa da mesma transação.

Preciso fazer algo para usar chaves comprimidas?

Não. Toda carteira baseada em uma frase de recuperação as usa do início ao fim, e os endereços SegWit nativos as exigem. O formato só se torna uma questão quando você importa uma chave criada antes de 2012.

Termos relacionados

Mais em Endereços e chaves

Ler esta página em inglês