Glossário / Referência do desenvolvedor
Função de ponto
- O que é a função de ponto?
- A função de ponto transforma uma chave privada em chave pública multiplicando o ponto gerador da secp256k1 por esse número, e é o passo unidirecional sobre o qual todo endereço de bitcoin é construído.
Especificação no BIP-32.
O BIP32 dá um nome à operação, point(p), porque a derivação hierárquica de chaves se refere a ela em quase toda linha. Multiplique o gerador fixo da curva por um segredo de 256 bits e o resultado é um par de coordenadas que você pode publicar com segurança; recuperar o segredo a partir desse par exige resolver um logaritmo discreto em um espaço de 78 dígitos. Sua carteira executa a função uma vez por endereço e nunca precisa executá-la ao contrário.
Como funciona
A função de ponto é a multiplicação em curva elíptica com uma de suas duas entradas fixada para sempre.
O Bitcoin usa a curva secp256k1, definida pela equação y ao quadrado igual a x ao cubo mais 7 sobre um corpo primo grande, e padronizada no documento SEC 2, não pelo NIST. A curva traz um ponto gerador G que toda implementação grava no código, e uma ordem de grupo n cujo valor fica logo abaixo de 2 elevado a 256. Uma chave privada é qualquer número inteiro de 1 até n menos 1. A função soma G a si mesmo essa quantidade de vezes por meio de uma escada de duplicações e adições, que termina em bem menos de um milissegundo, e não na idade do universo.
O caminho inverso é toda a suposição de segurança. Dado o ponto resultante, nenhum método publicado recupera o multiplicador mais rápido do que aproximadamente a raiz quadrada do tamanho do grupo, o que coloca o trabalho em cerca de 2 elevado a 128 operações. Nada disso muda se um endereço for reutilizado, publicado ou guardado por décadas.
Uma propriedade torna possíveis as carteiras hierárquicas. A multiplicação de pontos é distributiva em relação à adição, então o ponto de a mais b é igual ao ponto de a somado ao ponto de b. Some um ajuste a uma chave privada e a chave pública correspondente se desloca pelo ponto desse ajuste, um valor que qualquer pessoa pode calcular sem ter a chave. A derivação BIP32 não endurecida se apoia nessa identidade, e também a chave de saída do Taproot, que é uma chave interna deslocada por um compromisso com uma árvore de scripts.
Onde você vê isso
A função de ponto é executada toda vez que uma carteira mostra um novo endereço de recebimento.
É também por isso que uma chave pública estendida é útil por si só. Entregue uma xpub a uma loja online ou a um celular somente leitura e essa máquina poderá gerar um novo endereço por pagamento ajustando uma chave pública, sem nenhuma chave privada presente nela. As carteiras de hardware exploram a mesma assimetria pelo outro lado: o segredo nunca sai do chip e só o ponto resultante volta pelo cabo.
A propriedade tem um lado perigoso. Como a relação é aditiva e pública, uma chave pública estendida combinada com uma única chave privada filha não endurecida vazada permite que qualquer pessoa recupere a chave privada pai e, com ela, toda a ramificação. É por isso que a derivação no nível da conta é endurecida, e por isso uma xpub vazada é um desastre de privacidade, e não um roubo imediato.
Função de ponto vs chave pública comprimida
A função de ponto produz um objeto matemático; uma chave pública comprimida é uma forma de escrever esse objeto. Um ponto é um par de coordenadas, cada uma de 32 bytes. A forma comprimida descarta a coordenada y e mantém um prefixo de um byte que registra se ela era par ou ímpar, o que dá 33 bytes. A forma não comprimida escreve as duas coordenadas por extenso em 65 bytes. A forma x-only do Taproot mantém 32 bytes e nenhum prefixo. Todas elas descrevem o mesmo ponto e, ainda assim, cada codificação gera um hash para um endereço diferente, e é por isso que importar uma chave antiga com o indicador de compressão errado mostra saldo zero enquanto os bitcoins permanecem intactos no outro endereço.