Pular para o conteúdo
buybitcoinsmart

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.

Não confundir com

Perguntas frequentes

Uma chave pública pode ser convertida de volta em chave privada?

Não por nenhum método conhecido. Recuperar o multiplicador a partir de um ponto da curva é o problema do logaritmo discreto, e os melhores ataques publicados precisam de cerca de 2 elevado a 128 operações, algo que nenhum hardware atual ou previsível consegue realizar.

Por que uma xpub pode gerar endereços sem uma chave privada?

Porque a multiplicação de pontos é distributiva em relação à adição. Um passo de derivação soma um ajuste à chave privada, e o mesmo ajuste pode ser aplicado diretamente à chave pública, então um servidor que tem apenas uma xpub pode produzir endereços novos.

Leia a seguir

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês