Chave Privada
Um número aleatório muito grande
Uma chave privada é um número aleatório muito grande.
Ela é usada como fonte para criar uma chave pública.
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).
Conversor de Números
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).
WIF
Uso
Como as chaves privadas são usadas no Bitcoin?
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
- David Plotz – Apontou um erro de copiar e colar que cometi no valor máximo de uma chave privada. David tem um site legal com planilhas Excel úteis para Bitcoin.