Chave Privada

Um número aleatório muito grande

Diagrama mostrando uma chave privada como simplesmente um número aleatório.

Uma chave privada é um número aleatório muito grande.

Ela é usada como fonte para criar uma chave pública.

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.

Gerando

Como você cria uma chave privada?

Para criar uma chave privada, você só precisa gerar um número aleatório de 256 bits*.

A parte crítica ao gerar uma chave privada é usar uma fonte confiável de aleatoriedade. Se você usa Linux, uma fonte confiável de aleatoriedade é /dev/urandom:

# gera 256 bits de dados aleatórios
urandom = File.open("/dev/urandom")    # urandom é um "arquivo"
bytes = urandom.read(32)               # lê 32 bytes dele (256 bits)
privatekey = bytes.unpack("H*")[0]     # os dados são binários, então converta para hexadecimal

# imprime a chave privada
puts privatekey

Intervalo da chave privada

Uma chave privada válida é qualquer número entre (e incluindo) o seguinte intervalo de números:

mín: 1
máx: 115792089237316195423570985008687907852837564279074904382605163141518161494336

Esse valor máximo é n−1, onde n é o número de pontos na curva elíptica usada no Bitcoin (secp256k1). Isso é ligeiramente menor que o valor máximo de um número de 256 bits.

Então, ao gerar um número aleatório de 256 bits (32 bytes), você deve verificar se ele não está acima do valor máximo antes de usá-lo.

Números aleatórios criptograficamente seguros

As funções de número aleatório padrão das linguagens de programação normalmente não são seguras o suficiente para gerar chaves privadas.

As funções "rand()" padrão na maioria das linguagens são apenas formas rápidas e fáceis de gerar números que "parecem" aleatórios, mas eles não são aleatórios o suficiente para usos criptográficos, como gerar chaves privadas.

Por exemplo:

# número aleatório simples (não use para gerar chaves privadas)
puts rand(1..115792089237316195423570985008687907852837564279074904382605163141518161494336)

# número aleatório criptograficamente seguro (pode usar para gerar chaves privadas)
require 'securerandom'
puts SecureRandom.random_number(1..115792089237316195423570985008687907852837564279074904382605163141518161494336)

# NOTA: Essas funções de número aleatório incluem os valores mínimo e máximo informados como parte do intervalo de resultados possíveis.

Então, seja qual for a linguagem de programação que você usa, certifique-se de pesquisar como gerar "números aleatórios criptograficamente seguros" para descobrir qual função você deve usar (em vez das funções padrão com as quais você talvez esteja acostumado).

Por exemplo, a biblioteca libbitcoin (especificamente a ferramenta de linha de comando bx seed) causou a perda de mais de US$ 900.000 em bitcoin em 2023 por não usar números aleatórios criptograficamente seguros para gerar frases-semente. Para uma explicação completa do que aconteceu e por quê, veja Milk Sad.

Às vezes é mais fácil gerar bytes aleatórios em vez de números aleatórios. Então você sempre pode simplesmente gerar 32 bytes aleatórios e usá-los como sua chave privada, já que isso é equivalente a gerar um número de 256 bits.

Se você usa Linux, os números aleatórios seguros normalmente já vêm de /dev/urandom de qualquer forma, então é mais direto obter seus bytes diretamente dessa fonte.

Formatos

Como é uma chave privada?

Decimal

Uma chave privada é, em última análise, só um número aleatório, então é perfeitamente válido armazená-la como um número decimal. Por exemplo:

110042773445099904558203578237526801169451987770397836580947393600403023201078

Hexadecimal (mais comum)

Você normalmente verá chaves privadas brutas exibidas como strings hexadecimais de 32 bytes em tutoriais e em sites. Por exemplo:

f34a00a9033e58dd31398ec281c7edb670d4f2d4dbd826238b4510a3d3120336

É o mesmo número aleatório, só uma forma diferente de exibi-lo (usando dígitos hexadecimais em vez de dígitos decimais).

Ícone Ferramenta Conversor de Números

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

WIF (Wallet Import Format)

Uma chave privada pode ser convertida para WIF (Wallet Import Format) por conveniência. Por exemplo:

L5NdfpfpxE8Xp7eqQGx1hcB7BoZphb3BSMFZPDXRM3YifN46eWro

É como um formato de endereço para chaves privadas. Às vezes é usado ao importar uma chave privada em uma carteira (ex.: Electrum).

Ícone Ferramenta WIF

Chave Privada WIF

crua e o Wallet Import Format.>Converta entre uma

1 byte
Red
0 bytes
1 byte
Comprimida
0 bytes

Base58 dos dados anteriores

0 caracteres

    Nunca introduza sua chave privada em um site, nem use uma chave privada gerada por um site. Os sites podem guardar facilmente a chave privada e usá-la para roubar seus bitcoins.

    Uso

    Como as chaves privadas são usadas no Bitcoin?

    Diagrama mostrando como uma chave privada é usada para criar uma chave pública e assinaturas, e como elas são usadas para travar e destravar bitcoins em transações.

    Uma chave privada é o ponto de partida para calcular uma chave pública.

    Uma chave privada também é usada para gerar assinaturas, e essas assinaturas têm uma conexão matemática com a chave pública. Essas conexões matemáticas são o que permite travar e destravar bitcoins ao fazer transações.

    As chaves privadas em si não aparecem publicamente na blockchain. O propósito de uma chave privada é ser mantida privada (daí o nome), então elas devem ser armazenadas com segurança no seu computador e usadas apenas para gerar assinaturas que destravam bitcoins (que é o que uma carteira de bitcoin faz quando você cria uma transação).

    Segurança

    Quão seguras são as chaves privadas?

    Nunca revele sua chave privada.

    A única coisa que impede alguém de roubar seus bitcoins é o fato de que ela não consegue adivinhar ou gerar aleatoriamente a mesma chave privada que você.

    O intervalo de chaves privadas possíveis (o "espaço de chaves") é tão inconcebivelmente grande que é efetivamente impossível que duas pessoas/computadores diferentes gerem a mesma chave privada (desde que tenham sido geradas com segurança).

    Isso pode parecer difícil de acreditar, mas, para lhe dar alguma perspectiva, existem aproximadamente 2256 ou 1077 chaves privadas possíveis, e existem aproximadamente 1078 átomos no universo[1]. Então é como pedir a duas pessoas diferentes que selecionem aleatoriamente um átomo no universo e que ambas escolham exatamente o mesmo.

    # número de chaves privadas (aproximadamente)
    10^77 = 100000000000000000000000000000000000000000000000000000000000000000000000000000
    
    # número de átomos no universo (aproximadamente)
    10^78 = 1000000000000000000000000000000000000000000000000000000000000000000000000000000

    Dito de outra forma, é como duas pessoas escolherem o mesmo grão de areia de qualquer lugar da Terra (1018)[2]. Exceto que cada grão de areia contém outra Terra inteira de areia, e cada grão dessa areia contém outra Terra inteira de areia, e cada grão dessa areia também contém outra Terra inteira de areia.

    E mesmo essa quantidade de areia ainda é muito, muito menor que o número de chaves privadas possíveis.

    # grãos de areia na Terra (aproximadamente)
    10^18 = 1000000000000000000
    
    # grãos de areia na Terra onde cada grão de areia contém uma Terra de areia (4 vezes recursivamente)
    10^18 * 10^18 * 10^18 * 10^18
    = 1000000000000000000000000000000000000000000000000000000000000000000000000

    Então, como você pode ver, é muito difícil conceber o quão grande esse número é.

    De qualquer forma, a moral da história é que você nunca deve digitar sua chave privada em um site nem deixá-la em algum lugar onde alguém possa acessá-la; porque essa é a única forma de alguém vir a descobrir sua chave privada.

    keys.lol é um site divertido que permite navegar por todas as chaves privadas possíveis que existem. Tirando as chaves privadas obviamente inseguras de número baixo que já foram usadas no passado, boa sorte para encontrar uma chave privada genuinamente aleatória com saldo nela.

    Resumo

    Se você consegue gerar números aleatórios com segurança no seu computador, você consegue gerar suas próprias chaves privadas.

    O ponto-chave (trocadilho), porém, é descobrir como gerar números aleatórios criptograficamente seguros, então vale a pena dedicar um tempo para descobrir como fazer isso corretamente na linguagem de programação de sua escolha. Porque, se seus números aleatórios não forem aleatórios o suficiente, você vai perder bitcoins.

    Mas não deixe que isso o desencoraje. Tenho certeza de que muitos guias vão desaconselhar gerar suas próprias chaves privadas, mas isso é só porque eles não querem ser responsáveis por quaisquer erros que você cometa. Mas, se você for cuidadoso e descobrir como fazer corretamente, não há nada de errado em gerar suas próprias chaves privadas se você quiser. E, ei, todo mundo tem que começar de algum lugar.

    Eu faço isso o tempo todo ao fazer transações de teste, e nunca tive problema.

    Além disso, é bem legal conseguir gerar suas próprias chaves e enviar bitcoins para elas. E, se você tem interesse em programar coisas de bitcoin, gerar suas próprias chaves privadas é um bom ponto de partida.

    Boa sorte.

    Eu uso uma carteira para guardar meus bitcoins. É mais fácil do que gerar e gerenciar chaves privadas individuais.

    Agradecimentos