Chaves

Chaves privadas, chaves públicas, endereços

Diagrama mostrando como as chaves (chave privada e chave pública) são usadas para travar e destravar bitcoins em transações.

As chaves são usadas para controlar a posse dos bitcoins.

Para "enviar" e "receber" bitcoins, tudo o que você precisa é gerar um par de chave privada e chave pública.

O par de chave privada e chave pública está matematicamente conectado. Assim como as assinaturas.

Então, quando você fornece uma assinatura junto de uma chave pública, haverá uma conexão matemática entre as duas, e é isso que "destrava" os bitcoins para serem gastos em transações.

Em outras palavras, a assinatura permite que você forneça uma prova de uso único de que é o dono da chave privada da qual a chave pública foi criada. Ninguém consegue produzir uma assinatura que tenha conexão matemática com a chave pública a menos que tenha acesso à chave privada original.

Usar assinaturas significa que você não precisa revelar a chave privada original, o que impede que alguém roube quaisquer outros bitcoins travados à mesma chave pública.

Esse mecanismo é conhecido como criptografia de chave pública. Ele já existia antes de o Bitcoin ser criado, e o Satoshi simplesmente o usou como forma de controlar a posse das moedas.

Diagrama mostrando uma chave pública sendo convertida em um endereço por conveniência ao fazer transações de bitcoin com outras pessoas.

Por fim, no Bitcoin convertemos essas chaves públicas em endereços, que são simplesmente codificações amigáveis das chaves públicas.

Então, quando você "envia" bitcoins para o endereço de alguém, na verdade está apenas travando bitcoins à chave pública dessa pessoa.

Chave Privada

Diagrama mostrando uma chave privada como simplesmente um número aleatório.
Ícone Ferramenta Chave Privada

Chave Privada

Gere um número aleatório de 256 bits.

Bits

0b
0 bits
0d
0x
0 bytes

Nunca use uma chave privada gerada por um site, nem digite sua chave privada em um site. Sites podem facilmente salvar a chave privada e usá-la para roubar seus bitcoins.

Exemplo de chave privada

f34a00a9033e58dd31398ec281c7edb670d4f2d4dbd826238b4510a3d3120336

Uma chave privada é um número de 256 bits gerado aleatoriamente.

O intervalo de chaves privadas válidas vai de 0 a 115792089237316195423570985008687907852837564279074904382605163141518161494336.

As chaves privadas são normalmente exibidas como strings hexadecimais de 32 bytes. Mas, em última análise, ainda é só um número aleatório.

O intervalo válido de chaves privadas é ligeiramente menor que o máximo valor possível de 256 bits. Isso se deve à matemática envolvida em como a chave pública subsequente é calculada.

Há tantas chaves privadas possíveis que gerar uma aleatoriamente já é suficiente para garantir que ninguém mais vá gerar a mesma que você. Parece difícil de acreditar, mas, honestamente, um número de 256 bits é tão grande que é efetivamente impossível que dois indivíduos gerem o mesmo número aleatório dentro desse intervalo.

As chaves privadas também podem ser convertidas para o formato WIF (Wallet Import Format). É como um formato de endereço para chaves privadas, e às vezes é usado ao importá-las para carteiras.

Chave Pública

Diagrama mostrando uma chave pública sendo criada a partir de uma chave privada usando matemática de curva elíptica.
Ícone Ferramenta Chave Pública

Chave Pública

Calcule a chave pública a partir de uma chave privada.

0 bytes

Chave Pública

Coordenadas
0d
0d

Uma chave pública é apenas um ponto em uma curva elíptica. A chave pública final são essas coordenadas em hexadecimal.

Compressão

A curva é simétrica no eixo x, então a chave comprimida guarda só a coordenada x e se o y é par ou ímpar. A x-only é usada em saídas Taproot.

0 bytes

Nunca digite sua chave privada em um site, nem use uma chave privada gerada por um site. Sites podem facilmente salvar a chave privada e usá-la para roubar seus bitcoins.

Exemplo de chave pública (comprimida)

03359f98bd3d98d7b6478ab0cef926a62c2e589bdbfbea5c0dc43d3e8b3d06ecda

Uma chave pública é um conjunto de coordenadas calculado a partir de uma chave privada.

Esse conjunto de coordenadas é calculado usando criptografia de curva elíptica, que é o que cria uma conexão matemática entre a chave privada e a chave pública.

Essa conexão matemática especial é o que nos permite gerar assinaturas a partir da chave privada também, as quais terão igualmente uma conexão matemática com a chave pública. Isso significa que podemos provar que temos a chave privada sem precisar revelá-la.

De qualquer forma, quando você vê uma chave pública, está na verdade olhando para um conjunto de coordenadas x e y em um gráfico muito grande.

Chaves públicas comprimidas. Embora a chave pública seja um conjunto de coordenadas x e y, devido à matemática da criptografia de curva elíptica não precisamos de fato armazenar a coordenada y completa da chave pública. Em vez disso, podemos simplesmente armazenar o valor x de 32 bytes (256 bits), junto de um prefixo de 1 byte para indicar se a coordenada y é par ou ímpar. Isso é conhecido como chave pública comprimida, e é o tipo mais comum de chave pública que você vai ver e usar no Bitcoin.

Endereço

Diagrama mostrando uma chave pública sendo convertida em um endereço por conveniência ao fazer transações de bitcoin com outras pessoas.

Um endereço é basicamente uma codificação amigável de uma chave pública.

Há algumas vantagens em usar um endereço em vez de uma chave pública bruta:

Agora, existem na verdade tipos diferentes de endereços que você pode usar no Bitcoin. O tipo que você usa depende do tipo de trava que você quer colocar em uma saída:

Endereço Base58 (P2PKH)

Este é um formato de endereço legado. Esse formato era comumente usado até 2016, antes de a atualização Segregated Witness ser introduzida. Você ainda pode usá-lo, mas agora é mais comum usar endereços Bech32 (veja abaixo).

Diagrama mostrando a estrutura de um P2PKH.

Um endereço base58 corresponde a um script de travamento P2PKH legado.

Para criar um endereço base58, você primeiro precisa encurtar a chave pública passando-a por um HASH160. Isso a reduz de 33 bytes para um hash de chave pública de 20 bytes:

Ícone Ferramenta HASH160

HASH160

SHA-256 + RIPEMD-160. Usado para encurtar uma chave pública ou script antes de converter em um endereço.

Uma chave pública ou script, por exemplo

0 bytes
SHA-256
RIPEMD-160

RIPEMD-160(SHA-256(dados))

0 bytes

Exemplo de hash de chave pública

0777b9e7e78778c1a68b70e9c0760c25ef5f08e2

Você então passa esse hash de chave pública pela codificação Base58Check, que adiciona um checksum ao hash de chave pública e depois converte tudo em caracteres base58.

Há também um prefixo 00 de 1 byte no início, usado para identificar que o endereço contém um hash de chave pública e deve ser usado para criar uma trava P2PKH:

Ícone Ferramenta Endereço (Base58)

Endereço (Base58)

Codifique el hash160 de una clave pública o script en una dirección heredada.

1 byte
0 bytes
0 bytes
Tipo de dirección

Codificación Base58 de los datos anteriores

0 caracteres

Exemplo de endereço (Base58)

1gVA4kYG2ELTeHFUon7AbEKPgwxHVwn58

Então, se você "enviar" bitcoins para este endereço usando uma carteira de bitcoin, a carteira vai criar um script de travamento P2PKH usando o hash de chave pública contido no endereço.

O formato de endereço base58 também é usado para P2SH, que contém um hash de script em vez de um hash de chave pública.

Endereço Bech32 (P2WPKH)

Diagrama mostrando a estrutura de um P2WPKH.

Um endereço bech32 corresponde a um script de travamento P2WPKH.

Para criar um endereço bech32, você começa encurtando uma chave pública comprimida de 33 bytes, passando-a por um HASH160 para obter um hash de chave pública de 20 bytes:

Ícone Ferramenta HASH160

HASH160

SHA-256 + RIPEMD-160. Usado para encurtar uma chave pública ou script antes de converter em um endereço.

Uma chave pública ou script, por exemplo

0 bytes
SHA-256
RIPEMD-160

RIPEMD-160(SHA-256(dados))

0 bytes

Exemplo de hash de chave pública

0777b9e7e78778c1a68b70e9c0760c25ef5f08e2

Você só pode usar chaves públicas comprimidas ao criar um endereço bech32.

Antes de converter esse hash de chave pública em um endereço bech32, você precisa construir o ScriptPubKey P2WPKH completo.

Em resumo, é um prefixo 0014 seguido do hash de chave pública de 20 bytes. Por exemplo:

00140777b9e7e78778c1a68b70e9c0760c25ef5f08e2

Você pode então converter esse ScriptPubKey P2WPKH completo em bech32:

Ícone Ferramenta Endereço (Bech32)

Endereço (Bech32)

Codifique um script de travamento P2WPKH, P2WSH ou P2TR em um endereço.

ScriptPubKey
Versão
0 bytes
0 bytes Tipo:
Rede

Codificação Bech32 do ScriptPubKey

0 caracteres

    Exemplo de endereço (Bech32)

    bc1qqammnel8sauvrf5twr5uqasvyhh47z8zkta6nm

    Então, se você "enviar" bitcoins para este endereço usando uma carteira de bitcoin, a carteira vai criar um script de travamento P2WPKH usando o hash de chave pública contido no endereço.

    Enquanto um endereço base58 é criado usando apenas o hash de chave pública, um endereço bech32 é criado a partir de um hash de chave pública dentro de um ScriptPubKey completo.

    O formato de endereço bech32 também é usado para scripts de travamento P2WSH, que contêm um hash de script em vez de um hash de chave pública.

    Resumo

    Para enviar e receber bitcoins você precisa ser capaz de gerar um par de chaves: uma chave privada e uma chave pública.

    Essas chaves privadas e chaves públicas são apenas números que você pode gerar no seu próprio computador. Elas estão matematicamente conectadas, e é essa conexão matemática que nos permite "enviar" e "receber" bitcoins. Esse tipo especial de matemática é conhecido como criptografia de curva elíptica, e já existia antes do Bitcoin.

    No Bitcoin, normalmente convertemos a chave pública em um endereço, o que a torna mais curta e mais amigável ao enviar bitcoins usando carteiras.

    Esses endereços contêm o hash de chave pública, e correspondem ao tipo específico de trava que queremos colocar em alguns bitcoins (por exemplo, P2PKH ou P2WPKH). O tipo de endereço, portanto, indica como o hash de chave pública é travado e destravado usando a linguagem Script interna do Bitcoin.

    Mas, em última análise, é mais fácil pensar em um endereço como uma codificação amigável de uma chave pública.

    Os endereços não são usados internamente no bitcoin. Se você navegar pelos dados brutos na blockchain, vai encontrar apenas chaves públicas e assinaturas.

    Se você tem interesse em fazer alguma programação de Bitcoin por conta própria, gerar suas próprias chaves (e endereços) é uma forma divertida de começar. Só esteja preparado para perder bitcoins se fizer algo errado… não me pergunte como eu sei.

    Mas, se você tomar cuidado, deve ficar tudo bem.