# Desbloqueando os Mistérios das Chaves Privadas

*A afirmação “knowledge is power” – “conhecimento é poder” – nunca foi tão verdadeira quanto é na criptomoeda.*
De várias formas, possuir criptomoedas se resume a apenas manter uma chave privada. Diferente do mundo “real”, onde possuir propriedade física geralmente envolve possuir uma escritura com seu nome ou ter um recibo de venda, **possuir é equivalente a saber no mundo das criptomoedas**. Em termos mais simples, conhecer uma chave privada equivale a possuir criptoativos, já que as chaves privadas são o que permitem autorizar transações com elas.
No mundo real, transações são geralmente autorizadas com sua assinatura. Entretanto, no mundo das criptomoedas, apenas **as chaves privadas** podem autorizá-las, criptograficamente, concedendo acesso aos fundos. Apesar de que qualquer um pode gerar uma transação envolvendo seus criptoativos, apenas a pessoa que possui a chave privada pode assinar e, portanto, validar a transação.
*Embora as assinaturas falsas sejam um problema no mundo real, o mundo das criptomoedas é protegido por sua natureza criptográfica subjacente. A partir de hoje, nenhum hack conhecido permite que alguém assine transações em seus ativos sem sua chave.*

*A frase poderosa “not your keys, not your coins” – “não são suas chaves, não são suas moedas” – vem do fato de que, por ter uma chave privada, qualquer pessoa pode assinar qualquer transação sobre esses ativos e, assim, transferi-los ou movê-los como quiser (tornando importante a posse exclusiva deles).*
## **O que são chaves privadas e como elas são geradas?**
Chaves privadas são números dentro de um intervalo específico, geralmente muito grande. De uma perspectiva matemática, uma chave privada é apenas um **número inteiro positivo aleatório**. Uma descrição mais técnica e precisa, no entanto, seria: *Uma chave privada é um número aleatório criptograficamente forte que foi obtido usando um gerador de números aleatórios dado um intervalo positivo definido.*
Na maioria das vezes, os computadores usam **geradores de números pseudoaleatórios (PRNGs)** para gerar esses números inteiros positivos aleatórios. (Geradores de números aleatórios verdadeiros são difíceis de encontrar; esses geradores geralmente exigem hardware especializado e usam fontes físicas, como ruído térmico em circuitos elétricos ou o tempo preciso dos cliques do contador Geiger). PRNGs são funções criptograficamente fortes semeadas com um valor que tem **entropia** o suficiente. A entropia é um conceito complexo, mas seu objetivo é simples: dar imprevisibilidade às funções. Ao usar fontes de entropia seguras, os PRNGs podem criar números que são extremamente improváveis de não serem aleatórios (dentro de um determinado intervalo aceitável).

“*/dev/urandom” no Linux ou “rand_s” no Microsoft Windows são fontes de entropia comumente usadas para PRNGs para geração segura e aleatória de números. Neste diagrama, o termo “intervalo” é usado livremente para significar tanto o conceito matemático de alcance quanto o tamanho de bytes que um computador recebe para gerar um número aleatório.*
O intervalo dado a um PRNG para criar com segurança uma chave privada Ethereum ou Bitcoin válida é 2^256-1 (imagine um cadeado de combinação dos números 0-9, que tem 78 dígitos). Devido ao tamanho desse intervalo, a probabilidade de gerar duas chaves privadas com o mesmo número é desprezível. O conjunto de inteiros do qual sua chave é selecionada é um número enorme – é aproximadamente o mesmo que o número total de átomos visíveis no universo.

*O intervalo de 2^256-1 foi definido pelo Bitcoin e pelo Ethereum e funciona devido às estratégias matemáticas que ambas as blockchains usam para criar chaves públicas. Por exemplo, Ethereum usa curvas elípticas (particularmente SECP-256k1) para sua geração da chave pública. Em seu yellowpaper original, o Dr. Davin Wood definiu uma chave privada como um inteiro positivo selecionado aleatoriamente (representado como uma matriz de bytes de comprimento 32 em uma forma big-endian) no intervalo [1, secp256k1n-1]. Para todas as definições formais, consulte o papel amarelo real.*
## **Chaves públicas, endereços e sua relação com chaves privadas**
Uma vez que as chaves privadas devem ser mantidas… Bem… privadas, precisamos de um mecanismo diferente para permitir que outros indivíduos encontrem nossos ativos e para nós encontrarmos os deles. Como resultado, todas as blockchains usam o conceito de endereços – números exclusivos derivados de sua chave privada. Esses endereços são a localização de seus criptoativos e podem ser compartilhados com quem você precisa saber o saldo de seus criptoativos (se você quiser).
Um endereço de blockchain é criado usando sua chave pública para garantir que você seja o proprietário do endereço em questão. Por sua vez, essa chave pública é gerada a partir de sua chave privada. Esse processo é **unidirecional**, o que significa que você pode usar uma chave privada para criar uma conta, mas não uma conta para adivinhar uma chave privada.
*As chaves privadas podem derivar chaves públicas, e as chaves públicas podem derivar endereços de blockchain. Entretanto, os endereços blockchain não podem ser usados para derivar suas chaves públicas, e as chaves públicas não podem ser usadas para derivar suas chaves privadas.*
Esse processo unidirecional é feito por meio de **funções de alçapão criptográfico**. Uma função alçapão é uma função unidirecional que só pode gerar seu valor com base em uma entrada específica e não pode ser usada para derivar a entrada original dela. É como saber fazer um bolo e ter uma ideia aproximada do que está dentro de um bolo; no entanto, é impossível dizer os ingredientes exatas de um bolo específico apenas provando-o.
Dependendo do ecossistema blockchain, essas funções unidirecionais variam. Por exemplo, os sistemas blockchain mais populares usam construções algébricas baseadas em curvas elípticas para gerar suas chaves públicas. Independentemente dessas características, o resultado é sempre **determinístico**: uma chave pública é exclusiva de sua chave privada correspondente, e a chave privada sempre gera a mesma chave pública.

*Embora blockchains populares como Bitcoin ou Ethereum usem um ponto gerador fixo da curva elíptica secp256k1 sobre ECDSA para multiplicar a chave privada para obter sua chave pública, outros projetos de blockchain usam estratégias diferentes. Por exemplo, Monero usa Curve25519 sobre EdDSA, enquanto as cadeias Polkadot e Substrate usam Ed25519 sobre sr25519. Todos eles geram uma chave pública com base em uma determinada chave privada com um intervalo de 2^256-1.*
Os endereços de blockchain também usam funções unidirecionais, chamadas funções de hash. Os endereços Bitcoin e Ethereum são criados a partir de uma ou mais **funções de hash criptograficamente fortes** sobre sua chave pública, além de matemática específica, dependendo do blockchain específico. Por causa de como essas operações de hash funcionam, você pode ter certeza quase absoluta de que seu endereço de blockchain é exclusivo para sua chave pública e, portanto, para sua chave privada.

*Uma conta Ethereum é o hash Keccak-256 de uma chave pública, além de receber os 20 bytes mais à direita desse cálculo. As chaves Bitcoin usam SHA-256 e RIPEMD-160, enquanto Polkadot e Zcash usam Blake2b. Todos esses hashes são resistentes a colisões, reduzindo a possibilidade de gerar uma única conta a partir de duas chaves públicas e garantindo que a única maneira de uma força bruta economicamente ineficiente. Não há garantias de que essas funções de hash não sejam quebradas, mas até hoje nenhuma função de hash conhecida usada em qualquer blockchain foi comprovadamente quebrada.*
## **A linguagem universal de matemática guarda nossos segredos**
A criptografia e a matemática por trás das chaves privadas são a razão pela qual nossos criptoativos são seguros – desde que mantenhamos nossas chaves seguras. É impossível encontrar e forçar qualquer endereço de blockchain conectado às suas chaves privadas devido ao fato de que custaria mais energia do que a armazenada pelo sol.
Em nosso próximo blog, veremos os ecossistemas populares de blockchain e algumas das matemáticas por trás da geração de chave pública. Forneceremos alguns exemplos de código para você tentar calcular as chaves do processo que cada blockchain descreve e usar bibliotecas existentes que facilitam o processo de geração. Fique ligado!
Este documento foi publicado originalmente em 05-03-2021 por Jose Aguinaga e pode ter sido ligeiramente modificado para traduução pelo fluxo de trabalho de Informação e Globalização para um projeto de arquivamento em andamento.
https://docs.shapeshift.one/en/archives/blog/library/march-2021-unlocking-the-mysteries-of-private-keys
###### tags: `PT-Onedao`