Sumário
- Chaves e Endereços
- Chaves Privadas
- Gerando uma chave privada a partir de um número aleatório
- Chaves Públicas
- Criptografia de curva elíptica
- Formatos de endereço Ethereum
- Gerando uma chave pública
Como funciona a criptografia? Como as chaves públicas e privadas são criadas?
criptografia
Chaves e Endereços
Ethereum tem dois tipos diferentes de contas: contas de propriedade externa (EOAs) e contratos. A propriedade do ether é estabelecida por meio de chaves privadas, endereços Ethereum e assinaturas digitais. As chaves privadas estão no centro de todas as interações do usuário com a Ethereum. Na verdade, os endereços de contas são derivados diretamente de chaves privadas: que determinam exclusivamente um único endereço Ethereum, também conhecido como conta.
Chaves Privadas
Uma chave privada é um número gerado aleatoriamente que dá ao usuário controle sobre todos os fundos vinculados a um endereço Ethereum correspondente. Isso inclui acesso a contratos que autorizam o endereço. A chave privada é usada para criar assinaturas que comprovam a propriedade dos fundos em uma transação.
A chave privada deve ser mantida em segurança o tempo todo, pois revelá-la a terceiros seria equivalente a dar a eles o controle sobre o ether e os contratos. É importante fazer backup da chave e protegê-la de perda acidental, pois se for perdida, não poderá ser recuperada e os fundos garantidos por ela serão perdidos para sempre.
Gerando uma chave privada a partir de um número aleatório
A primeira e mais importante etapa na geração de chaves é encontrar uma fonte segura de entropia ou aleatoriedade. Criar uma chave privada Ethereum envolve escolher um número entre 1 e 2²⁵⁶. O software Ethereum usa o gerador de números aleatórios do sistema operacional subjacente para gerar 256 bits aleatórios.
Uma chave privada pode ser qualquer número diferente de zero até um número muito grande ligeiramente menor que 2²⁵⁶ - um número enorme de 78 dígitos, aproximadamente 1,158 * 10⁷⁷.
“O espaço de chaves privadas da Ethereum é muito grande, com 2²⁵⁶ chaves. Isto é aproximadamente 1077 em decimal, um número muito grande.” — Andreas Antonopoulo, autor de “Mastering Ethereum: Building Smart Contracts and DApps”
O processo de geração de uma chave privada é offline; nenhuma comunicação com a rede Ethereum é necessária. Escrever seu próprio código para criar um número aleatório ou usar um gerador de número aleatório “simples” oferecido por sua linguagem de programação não é recomendado.
Chaves Públicas
Uma chave pública Ethereum é um ponto em uma curva elíptica, um conjunto de coordenadas x e y que satisfazem a equação da curva elíptica. É formada por dois números, que são gerados a partir da chave privada usando a multiplicação da curva elíptica. Este processo é irreversível, o que significa que a chave privada não pode ser calculada a partir da chave pública.
A chave pública é gerada a partir da chave privada usando a multiplicação da curva elíptica, que é irreversível. A equação é a seguinte: K = k * G
, onde k
é a chave pública, K
é a chave privada e G
é o ponto constante (ponto gerador).
A multiplicação da curva elíptica não é como uma multiplicação normal. É uma função unidirecional: é fácil fazer em uma direção (multiplicação) e impossível fazer na direção inversa (divisão).
Criptografia de curva elíptica
A criptografia assimétrica ou de chave pública pode ser baseada no problema do algoritmo discreto, expresso pela adição e multiplicação nos pontos de uma curva elíptica. Essa criptografia de curva elíptica é uma forma potencial de criptografia que pode ser usada no futuro.
Ethereum usa a mesma curva elíptica, secp256k1, como o Bitcoin.
curva elíptica
A Ethereum usa uma curva elíptica específica e um conjunto de constantes matemáticas, conforme definido em um padrão chamado secp256k1
. A curva secp256k1
é definida pela função subsequente, que produz uma curva elíptica:
y ² = ( x³ + 7 ) sobre ( 𝔽 p )
ou:
y² |p| = ( x³ + 7 ) |p|
O mod p
indica que esta curva está sobre um corpo finito de ordem primária p
, onde p = 2²⁵⁶–2³²–2⁹–2⁸–2⁷–2⁶–2⁴–1
. Este é um número primo muito grande, o que torna esta curva muito confiável.
Formatos de endereço Ethereum
Os endereços Ethereum são gerados a partir do hash Keccak-256 da chave pública e são representados como números hexadecimais. Os últimos 20 bytes do hash Keccak-256 são usados para gerar o endereço.
Gerando uma chave pública
Você pode instalar a ferramenta de linha de comando helpeth usando npm para criar endereços ICAP.
npm install -g helpeth
Se você não tiver o npm, você pode instalá-lo seguindo as instruções em https://nodejs.org.
helpeth keyGenerate
Resultado:
Address: 0xe16c1623c1aa7d919cd2241d8b36d9e79c1be2a2
Address (checksum): 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2
ICAP: XE56 QBY1 TCEL SB4U 7BTR QQRC IOUY 8UNS DK2
Public key: 0xaa931f5ee58735270821b3722866d8882d1948909532cf8ac2b3ef144ae8043363d1d3728b49f10c7cd78c38289c8012477473879f3b53169f2a677b7fbed0c7
Private key: 0x227dbb8586117d55284e26620bc76534dfbd2394be34cf4a09cb775d593b6f2b
Agora usaremos a chave privada fornecida para gerar uma chave pública, conforme mostrado abaixo:
helpeth keyDetails \
-p 0x227dbb8586117d55284e26620bc76534dfbd2394be34cf4a09cb775d593b6f2b
Resultado:
Address: 0xe16c1623c1aa7d919cd2241d8b36d9e79c1be2a2
Address (checksum): 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2
ICAP: XE56 QBY1 TCEL SB4U 7BTR QQRC IOUY 8UNS DK2
Public key: 0xaa931f5ee58735270821b3722866d8882d1948909532cf8ac2b3ef144ae8043363d1d3728b49f10c7cd78c38289c8012477473879f3b53169f2a677b7fbed0c7
“O The Interchange Client Address Protocol (Protocolo de Intercâmbio de Endereço de Cliente ou ICAP) oferece uma codificação flexível, com soma de verificação e interoperabilidade para endereços Ethereum. Os endereços ICAP podem codificar endereços Ethereum ou nomes comuns registrados com um registro de nomes Ethereum. A compatibilidade do ICAP com a codificação do Número Internacional de Conta Bancária (IBAN) o torna uma ferramenta útil para codificar endereços Ethereum.” — Andreas Antonopoulo, autor de “Mastering Ethereum: Building Smart Contracts and DApps”
Referências
[1]: Mastering Ethereum: Building Smart Contracts and DApps por Andreas M. Antonopoulos, Gavin Wood.
Artigo escrito por Abhishek Chauhan e traduzido por Marcelo Panegali
Abrace a oportunidade de elevar sua jornada de desenvolvimento para um nível superior. A matemática por trás da criptografia é apenas o começo; os builds incríveis da WEB3DEV representam a chave de entrada para o emocionante cenário web3. 🚀🧑💻
Não perca tempo, 👉inscreva-se👈 agora mesmo e comece a desbravar o universo Blockchain!
Seja também WEB3DEV!
Oldest comments (0)