Chaves Privadas

O que é uma chave privada?

Uma chave privada é um número grande gerado aleatoriamente.

Por exemplo:

Ícone Ferramenta

Chave Privada

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

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0b
0 bits
0d
0x
0 bytes

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

108165236279178312660610114131826512483935470542850824183737259708197206310322

Mas, para ser mais preciso, uma chave privada é um número aleatório de 256 bits:

1110111100100011010110101010110011111001000011011001111101001010101011011101100011001001001011100100101100100101011000101110000111011001111010111001011111110000110111111001101110100011101101010000100000100101100001110011100111001011000000010011110110110010

Sim, isso ainda é um número. Está só em binário, que é como os números são armazenados em um computador. Porque, sabe, o Bitcoin é um programa de computador, afinal.

Enfim, podemos converter facilmente essa chave privada de binário para decimal:

108165236279178312660610114131826512483935470542850824183737259708197206310322

Ou para hexadecimal:

ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2

Não faz diferença. Todos são o mesmo número, e todos são a mesma chave privada.

Ícone Ferramenta Conversor de Números
Ícone Ferramenta

Conversor de Números

Converta um número entre bases diferentes (binário, decimal, hexadecimal).

0b
0 dígitos
0d
0 dígitos
0x
0 dígitos

Porque, afinal, uma chave privada é só um número.

Uma chave privada bruta normalmente é exibida em formato hexadecimal.

O que é um número de 256 bits?

Um número de 256 bits é um número que pode ser armazenado dentro de 256 bits de dados.

O que é um bit?

Um bit é a menor unidade de dados dentro de um computador.

UnidadeTamanho
gigabyte1000 megabytes
megabyte1000 kilobytes
kilobyte1000 bytes
byte8 bits
bit 

Na verdade, um bit é tão pequeno que só pode guardar um valor de 1 ou 0:

Diagrama mostrando um único bit como sendo 1 ou 0.

Mesmo assim, você ainda pode usar bits para representar outros tipos de dados, como números do dia a dia.

Por exemplo, aqui está como você armazenaria os números decimais de 0 a 8 em um computador usando bits:

Diagrama mostrando bits sendo usados para representar os números decimais de 1 a 8.

Portanto, um número de 256 bits é um número que pode ser representado usando 256 desses bits:

Diagrama mostrando o número decimal máximo que pode ser representado por 256 bits.

Ou, em outras palavras, um número de 256 bits está entre:

mín: 0
máx: 115792089237316195423570985008687907853269984665640564039457584007913129639935

Então, como você pode ver, 256 bits te dão espaço para usar números bem grandes.

E é só isso que números de 256 bits são; números que cabem dentro de 256 bits de dados.

A quantidade máxima de números de 256 bits é igual a 2256.

De onde vêm as chaves privadas?

Eu não estava mentindo quando disse que elas são geradas aleatoriamente.

Honestamente, quando você usa qualquer tipo de software de bitcoin para gerar uma chave privada, ele não está fazendo mágica – está só te dando um número aleatório de 256 bits.

Uma ilustração mal desenhada de uma máquina imaginária geradora de chaves privadas.

Portanto, não há razão para você não poder criar sua própria chave privada. Tudo o que você precisa é conseguir gerar um número aleatório de 256 bits de forma segura.

Você pode fazer isso de várias (rá) formas:

1. Jogue uma moeda 256 vezes.

Jogar uma moeda 256 vezes permite gerar uma chave privada de 256 bits em binário:

Ilustração de usar o lançamento de uma moeda para gerar um 1 ou 0.

Esse resultado binário de 256 bits pode então ser convertido para hexadecimal.

Ícone Ferramenta Conversor de Números
Ícone Ferramenta

Conversor de Números

Converta um número entre bases diferentes (binário, decimal, hexadecimal).

0b
0 dígitos
0d
0 dígitos
0x
0 dígitos

2. Use sua linguagem de programação favorita.

Isso te dará uma chave privada em decimal:

# é preciso usar o gerador de números aleatórios do sistema operacional por segurança
import random
random.SystemRandom().randint(1, 115792089237316195423570985008687907852837564279074904382605163141518161494336)

Tenha cuidado ao gerar números aleatórios usando uma linguagem de programação. As funções "aleatórias" padrão da maioria das linguagens normalmente não são aleatórias o suficiente, então certifique-se de que a função que você está usando é descrita como "criptograficamente segura".

3. Faça o hash de alguns dados aleatórios usando a função de hash SHA-256.

Inserir dados aleatórios no SHA-256 retorna um resultado hexadecimal de 32 bytes (256 bits), que pode ser usado como chave privada:

Ilustração mostrando o resultado de passar a string 'learnmeabitcoin' pela função de hash SHA-256.
Ícone Ferramenta SHA-256 (Texto)
Ícone Ferramenta

SHA-256 (Texto)

Faz o hash de uma string de texto usando a função de hash SHA-256.

0 bytes
Ícone Função de Hash SHA-256
0 bytes

Os dados que você fizer o hash precisam ser suficientemente grandes e aleatórios. Colocar a palavra "bitcoin" na função de hash SHA256 (e usar isso como chave privada) não será seguro.

Todos esses métodos te darão um número de 256 bits. E se você tem um número de 256 bits, você tem uma chave privada.

Suas chaves privadas precisam ser aleatórias.

Se você usar um gerador de números aleatórios que não seja confiavelmente aleatório (ou seja, que tenha padrões na forma como gera os números), você fica vulnerável a qualquer um que conheça as fraquezas do gerador que você usou.

E se alguém conseguir recriar a mesma chave privada que você, pode pegar os seus bitcoins.

Como resultado, a maioria dos guias te deixa com medo de gerar suas próprias chaves privadas, porque ninguém quer ser responsável pelos seus erros.

Mas não deixe esse alarmismo te impedir. Desde que você seja cauteloso, vai ficar tudo bem.

Uma chave privada válida é, na verdade, um pouco menor que o número máximo de 256 bits. Então, se você está gerando uma chave privada, vai precisar verificar se ela está dentro do intervalo válido antes de tentar usá-la. É raro isso acontecer, mas é importante verificar.

O fato de qualquer um poder criar a própria "conta" simplesmente gerando um número aleatório é um recurso importante do Bitcoin. Significa que ninguém controla a emissão de contas, o que torna o bitcoin acessível a qualquer um que consiga gerar um número aleatório grande.

E se alguém gerar a mesma chave privada que eu?

Então essa pessoa conseguirá roubar seus bitcoins.

Mas não se preocupe, ninguém vai gerar aleatoriamente a mesma chave privada que você.

Mas com certeza poderiam?

Certo, teoricamente poderiam, mas devido ao intervalo de chaves privadas possíveis, é algo "improvável".

Por exemplo, se eu tivesse um milhão de macacos que pudessem cada um gerar um milhão de chaves privadas por segundo (eu os treinei bem), levaria cerca de 3.671.743.063.080.803.235.470.924.132.853.876.261.056.103.149.731.840 milhões de anos para gerarem todas as chaves privadas possíveis.

Agora, se você está tentando uma busca por força bruta para encontrar a chave privada de outra pessoa, em média você precisará percorrer metade de todas as chaves privadas possíveis antes de encontrar a que procura, o que significa que esses macacos estão diante de 1.835.871.531.540.401.617.735.462.066.426.938.130.528.051.574.865.920 milhões de anos de trabalho se quiserem gerar exatamente a mesma chave privada que você.

chaves = 115792089237316195423570985008687907852837564279074904382605163141518161494336
macacos = 1000000
taxa = 1000000

chavesPorSegundo = macacos * taxa

segundos = chaves / chavesPorSegundo
minutos = segundos / 60
horas = minutos / 60
dias = horas / 24
anos = dias / 365
milhoesDeAnos = anos / 1000000

print(round(milhoesDeAnos))     #=> 3671743063080803235470924132853876261056103149731840 (todas as chaves)
print(round(milhoesDeAnos / 2)) #=> 1835871531540401617735462066426938130528051574865920 (tempo médio p/ achar a chave de outra pessoa)

Então, como você pode ver, eu não tenho bem o tempo nem o poder de macacos do meu lado. E ninguém mais tem.

Há tantas chaves privadas possíveis que escolher uma aleatoriamente já é seguro o suficiente por si só.

Justo.

Ainda não terminei.

O intervalo de números de 256 bits (e, portanto, a quantidade de chaves privadas possíveis) é inimaginavelmente grande. Assim como é impossível para a mente humana visualizar a verdadeira escala do universo, é impossível para a mente humana compreender o tamanho absurdo dos números de 256 bits.

Então, se você tem qualquer dúvida sobre a segurança do seu número de 256 bits, é porque você não usou um gerador de números aleatórios confiável o suficiente, ou porque você não aprecia a magnitude dos números com que estamos lidando.

Agora saia do meu escritório.

Ícone Ferramenta

Chave Privada

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

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0b
0 bits
0d
0x
0 bytes

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