O que é uma Private Key (Chave Privada)?
O Bitcoin, assim como a maior parte das criptomoedas, usa um sistema criptográfico assimétrico. Ou seja, um sistema baseado em pares de chaves: uma chave pública e uma chave privada.
Desse modo, uma carteira de Bitcoin consiste em um conjunto de chaves públicas e privadas. De modo simplificado, a chave pública (public key) é usada para você receber bitcoins e verificar saldos, enquanto a chave privada (private key) serve para assinar transações a fim de gastar bitcoins.
A pessoa que possui a chave privada tem total controle sobre os fundos daquele endereço. Dessa maneira, ela deve ser guardada em segurança, pois caso uma pessoa tenha acesso à sua chave privada, seus fundos estarão permanentemente perdidos.
Contudo, é aí que entra a genialidade do protocolo: Diferentemente de uma senha bancária, a qual precisa ser constantemente digitada na rede (se tornando um grande vetor para ataques), esse conjunto de chaves pode ser gerado e manuseado sem nenhum contato com a internet. Na realidade, as carteiras mais seguras são aquelas nas quais as chaves privadas nunca entraram em um ambiente com acesso à internet, como hardware wallets, paper wallets e computadores air-gapped (permanentemente offline).
Relação entre Chaves Privadas, Chaves Públicas e Endereços (Public Address)
Conforme explicado, as chaves privadas são usadas para gastar os fundos de um endereço. Além disso, elas também são usadas para gerar a chave pública e o endereço correspondente. A chave privada (private key) é a raiz do endereço bitcoin e da chave pública (public key), sendo ambos derivados da mesma.
Partindo da chave privada, primeiramente é feita uma multiplicação da curva elíptica (uma função criptográfica de sentido único). O resultado dessa operação é a chave pública.
Posteriormente, essa chave pública é submetida a um duplo hashing (outra função criptográfica de sentido único) gerando o endereço bitcoin. Esse endereço é que é usado para receber fundos. Para ver como um hash funciona, veja esse artigo.
Como essas funções criptográficas são de sentido único, a partir do endereço, ou da chave pública, é impossível gerar a chave privada.
Assim podemos seguir com a private key, o foco do artigo.
Private Keys em números
Uma private key é simplesmente um número muito grande. E bota grande nisso. As carteiras de Bitcoin que geram private keys têm 256 bits de entropia. Em outras palavras, uma private key é um número escolhido aleatoriamente entre 1 e 2256.
À primeira vista pode não parecer, mas 2256 é um número incomensuravelmente grande. Usando uma calculadora de números grandes (Big Number Calculator), chegamos a esse número:
115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.913.129.639.936
Dessa forma, é muito simples gerar uma private key: basta escolher um número aleatório entre 1 e essa monstruosidade.
O mais importante ao gerar uma private key (ou chave privada) é conseguir uma boa fonte de entropia, isto é, de aleatoriedade. Assim sendo, qualquer número serve desde que esse número não tenha um padrão previsível.
Seres humanos são péssimas fontes de entropia, dessa forma não é recomendável que você escolha um número aleatoriamente da sua cabeça. Por exemplo, números como 1010101010… são péssimos e colocam seus fundos em risco. Desse modo, seus fundos podem ser roubados se você utilizar uma chave insegura.
Não apenas a chave privada deve ser gerada com segurança, por meio de boas fontes de entropia, como também deve ser guardada com segurança. Os fundos não poderão ser recuperados sem a chave privada, caso ela seja perdida.
Gerando uma Private Key fora de um ambiente computacional
No livro Mastering Bitcoin Andreas Antonopoulos sugeriu que é possível gerar uma chave privada (private key) usando somente uma moeda, um papel e uma caneta. Vamos detalhar esse processo passo a passo, que será uma boa forma de entender a formação de uma chave privada.
O processo consiste em jogar uma moeda 256 vezes com a fim de gerar uma private key em formato binário. Vamos ao passo a passo:
- Pegue uma moeda e jogue 256 vezes. Considere cara como 0, e coroa como 1. Anote cada resultado em um papel.
- Ao final você terá uma private key em formato binário. Algo como 1110001101011101… (256 vezes)
- Separe em grupos de 4. Assim você terá 1110 0011 0101 1101…
- Agora use a tabela abaixo para converter seus valores para o formato hexadecimal.
0000 = 0 | 0100 = 4 | 1000 = 8 | 1100 = C |
0001 = 1 | 0101 = 5 | 1001 = 9 | 1101 = D |
0010 = 2 | 0110 = 6 | 1010 = A | 1110 = E |
0011 = 3 | 0111 = 7 | 1011 = B | 1111 = F |
- Alternativamente, você pode inserir seus valores no formato binário no campo abaixo para ver o resultado em hexadecimal.
Comentários