As carteiras são ferramentas essenciais que permitem aos usuários gerenciar suas contas de blockchain, armazenar com segurança seus ativos e assinar transações para fazer alterações no estado do blockchain.
Neste post, vamos abordar o que é uma carteira, como as carteiras são feitas e como elas usam a criptografia de curva elíptica para gerar e proteger pares de chaves privadas-públicas, derivar frases-semente e facilitar interações seguras com blockchain.
Uma carteira é um aplicativo que permite visualizar e interagir com sua(s) conta(s) de blockchain; essas contas permitem que você envie transações para realizar ações como enviar tokens ou interagir com contratos inteligentes.
Cada conta na blockchain é composta por um par de chaves criptográficas; um conjunto de 2 chaves que estão vinculadas entre si. No contexto das blockchains, este tipo de conta é tipicamente chamado de Conta de Propriedade Externa (EOA) e consiste em uma chave pública e uma chave privada:
Este par de chaves tem um recurso poderoso, chamado de função de alçapão; o que significa que é:
Carteiras são usadas para assinar mensagens ou transações usando a chave privada da carteira para serem enviadas para um blockchain.
As carteiras fornecem uma maneira de saber quais mensagens ou transações uma carteira concordou; uma vez que a chave pública do remetente da transação pode ser recuperada da assinatura da transação. Isso é essencial para evitar que transações falsas/maliciosas sejam aceitas na blockchain.
Por exemplo, Jarrod poderia enviar uma transação alegando que Abril lhe enviou 5 ETH, mesmo que ela nunca tenha concordado com essa transação. No entanto, como a blockchain verifica a assinatura de cada transação, ela rapidamente rejeita a transação, pois o endereço recuperado da assinatura não corresponde ao 'remetente' da transação (ou seja, Abril).
Blockchains como o Ethereum usam ECDSA (Elliptic Curve Digital Signature Algorithm) para verificar se a chave pública recuperada da assinatura da transação corresponde à chave pública da pessoa que enviou a transação para a rede.
Para criar uma carteira, você precisa criar um par de chaves pública-privada. No entanto, os valores deste par de chaves precisam seguir algumas regras para que ele funcione em um blockchain.
Este processo de 3 etapas é o fluxo principal de como as contas são geradas na blockchain.
Em seguida, vamos mergulhar em como uma chave pública é derivada usando uma curva elíptica e uma chave privada. Mas antes disso, vamos responder algumas outras perguntas que você possa ter sobre carteiras, como:
Embora seja possível gerar um valor hexadecimais aleatório de 64 caracteres como acabamos de demonstrar, geralmente as chaves privadas são geradas usando padrões específicos que se originaram do Bitcoin. Esses padrões permitem que os usuários memorizem uma frase-semente, que é uma frase de 12 a 24 palavras que pode ser usada para criar qualquer número de novas contas associadas a ela.
Isso permite que os usuários lembrem um único conjunto de palavras para acessar todas as suas contas; cada uma com um par de chaves público-privadas individuais. Qualquer número de novas chaves privadas pode ser derivado de uma única frase-semente usando uma função de derivação de chave específica (KDF).
Então, vamos primeiro cobrir como as frases-semente são geradas por meio de entropia aleatória e como as chaves privadas podem ser derivadas de uma frase-semente, antes de finalmente revisitar como as chaves públicas são derivadas das chaves privadas.
Quando você instala um aplicativo de carteira pela primeira vez, geralmente ele pedirá para você anotar e armazenar com segurança uma frase-semente em algum lugar; geralmente uma combinação de 12 ou 24 palavras. Você pode ver uma lista de exemplo de possíveis palavras em inglês.aquique você perceberá que tem 2048 palavras de comprimento (voltaremos a esse número em breve).
Essa ideia de armazenar frases-semente mnemônicas foi introduzida em 2013 com um BIP (Proposta de Melhoria do Bitcoin); BIP-39. Essa proposta fornece uma maneira padronizada de gerar entropia aleatória e traduzi-la em uma série de palavras fáceis de lembrar.
Primeiro, precisamos garantir que nossa frase-semente seja gerada aleatoriamente, afinal, não queremos que outra pessoa acesse acidentalmente nossa carteira e tenha acesso aos nossos fundos.
Para fazer isso, um número aleatório é gerado usando CSPRNG (Gerador de Números Pseudorrandômicos Criptograficamente Seguro), que você pode fazer em seu navegador:
Este número aleatório é chamado de entropia. Esta entropia é usada para criar o conjunto de palavras que formam uma frase semente. No nosso caso, 128 bits correspondem a 12 palavras, mas também é possível utilizar outros comprimentos, como:
Então, como usamos esses bits para criar uma frase de semente? Qual é a relação entre bits e palavras? Primeiro, é criado um checksum para a entropia e anexado aos 128 bits; este é um hash de 4 bits da entropia criada para garantir sua integridade.
Então, agora temos 128 bits de entropia + 4 bits de checksum, totalizando 132 bits. Em seguida, os 132 bits são convertidos em binário; especificamente, são divididos em pedaços de 11 bits.
Agora temos um conjunto de 12 números binários, cada um com 11 bits de comprimento. Dica: temos 12 números e nossa frase semente será composta por 12 palavras!
Lembre-se de que temos 2048 palavras em nossa lista e que 2048 foi escolhido porque 2048 é 2^11, uma vez que existem 2048 números binários diferentes possíveis que você pode fazer com 11 bits.
Agora só precisamos converter esses números binários em palavras da nossa lista de palavras. Isso é feito usando o número binário como um índice para procurar uma palavra na lista de palavras. Ou seja, se o número binário for 10, usamos a nona palavra na lista (já que começamos no índice 0), por exemplo:
Repita isso 12 vezes, uma para cada número de 11 bits para formar uma frase-semente contendo 12 palavras.
Ao gerar um valor de entropia aleatório, dividi-lo em pedaços binários e usar esses valores binários como um índice para procurar palavras em uma lista de palavras, acabamos com uma frase de semente aleatória.
Sua reação imediata a isso pode ser: "Se são apenas 2048 palavras possíveis, alguém não consegue adivinhar minha frase semente?" Bem, tecnicamente sim, mas é realmente... realmente, improvável. Quão improvável você pergunta?
Imagine que nos esqueçamos da etapa de geração aleatória de 128 bits e simplesmente selecionemos manualmente 12 palavras da lista. Cada vez que selecionamos uma palavra, estamos escolhendo uma opção em um grupo de 2048 palavras.
Então, podemos dizer que para outra pessoa adivinhar a mesma sequência de palavras, ela precisa adivinhar corretamente a mesma palavra que nós com uma chance de 1/2048, 12 vezes seguidas. Agora mesmo, você provavelmente está pensando: 'ok, isso não parece tão difícil ...', certo?” Mas, vamos jogar isso:
Isto é 2048 x 2048 x 2048 ... 12 vezes. Ou, 2048^12. O que é... um número absurdamente grande. Grosso modo, 5 septilhões, ou 5 quatrilhões de bilhões. Isso é insondável para a gente entender, mas vamos tentar...
Imagine que você começou a adivinhar agora, usando um computador insanamente poderoso que pode adivinhar 1 trilhão de frases-semente por segundo. Levaria a essa máquina 159 trilhões de anos para adivinhar uma frase-semente. Ou, (dependendo no que você acredita), aproximadamente 11.000 vezes mais longo do que a idade atual do universo.
São frases de semente de 24 palavras melhores do que 12?
Algumas carteiras optam por 128 bits (12 palavras), mas carteiras mais modernas pedem que você lembre de 24 palavras para a sua frase-semente! O que, novamente, é absurdamente grande.
Agora temos uma frase semente de 12 palavras, como ela é usada para criar chaves privadas para contas? Para fazer isso, precisamos converter nossa frase semente em uma semente binária que pode ser usada para gerar carteiras. Esse processo envolve as seguintes etapas:
Este processo (chamado de função de derivação de chave) produz um valor de hash de 64 bytes, chamado de semente binária, usando outro algoritmo chamado HMAC-SHA512 como função pseudo-aleatória.
O valor de hash de 64 bytes gerado pode ser usado para gerar contas usando a lógica que se originou de outros padrões do Bitcoin; nomeadamente BIP-32 e, opcionalmente, uma extensão do BIP-32, BIP-44.
BIP-32 introduz carteiras determinísticas hierárquicas (HD); onde muitas carteiras podem ser derivadas de uma única semente, e mais carteiras podem ser derivadas dessas carteiras, criando uma 'árvore' de carteiras.
BIP-44 fornece uma maneira padronizada de criar uma hierarquia para estruturas de carteiras a partir de uma única semente binária, implementando um caminho de derivação específico seguindo a estrutura: m / propósito’ / tipo_moeda’ / conta’ / mudança / índice_endereço:
Nem todas as carteiras usam o BIP-44, mas é uma forma comum de padronizar como as contas são derivadas de uma semente binária.
Como mencionamos anteriormente, as chaves privadas têm 64 caracteres hexadecimais, o que equivale a 32 bytes. E, acabamos de gerar uma semente binária de 64 bytes por meio do processo PBKDF2 - então como usamos esse valor de hash de 64 bytes para criar chaves privadas?
Primeiro, o hash é dividido em duas metades, cada uma com 32 bytes de tamanho:
Agora entendemos como as chaves privadas se parecem, como são geradas aleatoriamente e como várias chaves podem ser derivadas de uma única frase de semente. Em seguida, vamos explorar como as chaves públicas são derivadas das chaves privadas.
Usando a criptografia de curva elíptica (ECC), podemos descobrir a chave pública para uma determinada chave privada. Existem diferentes tipos de curvas elípticas, mas aquela usada tanto pelo Bitcoin quanto pelo Ethereum é chamada secp256k1.
A especificação para esta curva elíptica inclui um ponto base, G, que é usado como ponto de partida para criarmos outros pontos na curva. A partir desse ponto de partida, "movemos" a curva um certo número de vezes (determinado por nossa chave privada), de uma maneira específica. O ponto da curva em que acabamos quando pararmos esse processo será nossa chave pública.
A maneira como "nos movemos" pela curva é chamada de multiplicação escalar. Ao trabalhar com curvas elípticas, um escalar refere-se a um número usado para escalar um ponto na curva. Tomamos o ponto base G e aplicamos o número escalar a ele para alcançar um novo ponto na curva, "esticando" esse ponto.
O número escalar que aplicamos ao ponto base é nossa chave privada; simplificando, pegamos nosso ponto de partida G e o multiplicamos escalarmente por nossa chave privada para chegar à nossa chave pública.
Na realidade, como a curva é definida sobre o campo primo ℤp, ela se parece mais com um monte de pontos espalhados... mas ainda tem as mesmas propriedades da curva elíptica.
No final deste processo de multiplicação escalar (saltando em torno de um número de chaves privadas), vamos acabar em um novo ponto na curva, que é a nossa chave pública. Você pode imaginar que este processo se parece com isso:
Chaves públicas, como o nome sugere, podem ser compartilhadas publicamente com qualquer pessoa. Elas são úteis para:
As carteiras são um componente essencial das blockchains que usam criptografia de curva elíptica para permitir que os usuários enviem transações e assinem mensagens de suas contas.
No entanto, algumas blockchains como a Abstract também suportam novos tipos de carteiras, chamadas de contas de contratos inteligentes, que oferecem mais recursos e permitem mecanismos de segurança, recuperação mais robustos e muito mais.
Este artigo é reproduzido de [ https://abs.xyz/blog], Encaminhe o título original 'O que é uma Carteira?', Todos os direitos autorais pertencem ao autor original [ Jarrod Watts ]. Se houver objeções a esta reprodução, entre em contato com o Gate Aprenderequipe e eles vão lidar com isso prontamente.
Aviso de Responsabilidade: As opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
As traduções do artigo para outros idiomas são feitas pela equipe Gate Learn. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.
As carteiras são ferramentas essenciais que permitem aos usuários gerenciar suas contas de blockchain, armazenar com segurança seus ativos e assinar transações para fazer alterações no estado do blockchain.
Neste post, vamos abordar o que é uma carteira, como as carteiras são feitas e como elas usam a criptografia de curva elíptica para gerar e proteger pares de chaves privadas-públicas, derivar frases-semente e facilitar interações seguras com blockchain.
Uma carteira é um aplicativo que permite visualizar e interagir com sua(s) conta(s) de blockchain; essas contas permitem que você envie transações para realizar ações como enviar tokens ou interagir com contratos inteligentes.
Cada conta na blockchain é composta por um par de chaves criptográficas; um conjunto de 2 chaves que estão vinculadas entre si. No contexto das blockchains, este tipo de conta é tipicamente chamado de Conta de Propriedade Externa (EOA) e consiste em uma chave pública e uma chave privada:
Este par de chaves tem um recurso poderoso, chamado de função de alçapão; o que significa que é:
Carteiras são usadas para assinar mensagens ou transações usando a chave privada da carteira para serem enviadas para um blockchain.
As carteiras fornecem uma maneira de saber quais mensagens ou transações uma carteira concordou; uma vez que a chave pública do remetente da transação pode ser recuperada da assinatura da transação. Isso é essencial para evitar que transações falsas/maliciosas sejam aceitas na blockchain.
Por exemplo, Jarrod poderia enviar uma transação alegando que Abril lhe enviou 5 ETH, mesmo que ela nunca tenha concordado com essa transação. No entanto, como a blockchain verifica a assinatura de cada transação, ela rapidamente rejeita a transação, pois o endereço recuperado da assinatura não corresponde ao 'remetente' da transação (ou seja, Abril).
Blockchains como o Ethereum usam ECDSA (Elliptic Curve Digital Signature Algorithm) para verificar se a chave pública recuperada da assinatura da transação corresponde à chave pública da pessoa que enviou a transação para a rede.
Para criar uma carteira, você precisa criar um par de chaves pública-privada. No entanto, os valores deste par de chaves precisam seguir algumas regras para que ele funcione em um blockchain.
Este processo de 3 etapas é o fluxo principal de como as contas são geradas na blockchain.
Em seguida, vamos mergulhar em como uma chave pública é derivada usando uma curva elíptica e uma chave privada. Mas antes disso, vamos responder algumas outras perguntas que você possa ter sobre carteiras, como:
Embora seja possível gerar um valor hexadecimais aleatório de 64 caracteres como acabamos de demonstrar, geralmente as chaves privadas são geradas usando padrões específicos que se originaram do Bitcoin. Esses padrões permitem que os usuários memorizem uma frase-semente, que é uma frase de 12 a 24 palavras que pode ser usada para criar qualquer número de novas contas associadas a ela.
Isso permite que os usuários lembrem um único conjunto de palavras para acessar todas as suas contas; cada uma com um par de chaves público-privadas individuais. Qualquer número de novas chaves privadas pode ser derivado de uma única frase-semente usando uma função de derivação de chave específica (KDF).
Então, vamos primeiro cobrir como as frases-semente são geradas por meio de entropia aleatória e como as chaves privadas podem ser derivadas de uma frase-semente, antes de finalmente revisitar como as chaves públicas são derivadas das chaves privadas.
Quando você instala um aplicativo de carteira pela primeira vez, geralmente ele pedirá para você anotar e armazenar com segurança uma frase-semente em algum lugar; geralmente uma combinação de 12 ou 24 palavras. Você pode ver uma lista de exemplo de possíveis palavras em inglês.aquique você perceberá que tem 2048 palavras de comprimento (voltaremos a esse número em breve).
Essa ideia de armazenar frases-semente mnemônicas foi introduzida em 2013 com um BIP (Proposta de Melhoria do Bitcoin); BIP-39. Essa proposta fornece uma maneira padronizada de gerar entropia aleatória e traduzi-la em uma série de palavras fáceis de lembrar.
Primeiro, precisamos garantir que nossa frase-semente seja gerada aleatoriamente, afinal, não queremos que outra pessoa acesse acidentalmente nossa carteira e tenha acesso aos nossos fundos.
Para fazer isso, um número aleatório é gerado usando CSPRNG (Gerador de Números Pseudorrandômicos Criptograficamente Seguro), que você pode fazer em seu navegador:
Este número aleatório é chamado de entropia. Esta entropia é usada para criar o conjunto de palavras que formam uma frase semente. No nosso caso, 128 bits correspondem a 12 palavras, mas também é possível utilizar outros comprimentos, como:
Então, como usamos esses bits para criar uma frase de semente? Qual é a relação entre bits e palavras? Primeiro, é criado um checksum para a entropia e anexado aos 128 bits; este é um hash de 4 bits da entropia criada para garantir sua integridade.
Então, agora temos 128 bits de entropia + 4 bits de checksum, totalizando 132 bits. Em seguida, os 132 bits são convertidos em binário; especificamente, são divididos em pedaços de 11 bits.
Agora temos um conjunto de 12 números binários, cada um com 11 bits de comprimento. Dica: temos 12 números e nossa frase semente será composta por 12 palavras!
Lembre-se de que temos 2048 palavras em nossa lista e que 2048 foi escolhido porque 2048 é 2^11, uma vez que existem 2048 números binários diferentes possíveis que você pode fazer com 11 bits.
Agora só precisamos converter esses números binários em palavras da nossa lista de palavras. Isso é feito usando o número binário como um índice para procurar uma palavra na lista de palavras. Ou seja, se o número binário for 10, usamos a nona palavra na lista (já que começamos no índice 0), por exemplo:
Repita isso 12 vezes, uma para cada número de 11 bits para formar uma frase-semente contendo 12 palavras.
Ao gerar um valor de entropia aleatório, dividi-lo em pedaços binários e usar esses valores binários como um índice para procurar palavras em uma lista de palavras, acabamos com uma frase de semente aleatória.
Sua reação imediata a isso pode ser: "Se são apenas 2048 palavras possíveis, alguém não consegue adivinhar minha frase semente?" Bem, tecnicamente sim, mas é realmente... realmente, improvável. Quão improvável você pergunta?
Imagine que nos esqueçamos da etapa de geração aleatória de 128 bits e simplesmente selecionemos manualmente 12 palavras da lista. Cada vez que selecionamos uma palavra, estamos escolhendo uma opção em um grupo de 2048 palavras.
Então, podemos dizer que para outra pessoa adivinhar a mesma sequência de palavras, ela precisa adivinhar corretamente a mesma palavra que nós com uma chance de 1/2048, 12 vezes seguidas. Agora mesmo, você provavelmente está pensando: 'ok, isso não parece tão difícil ...', certo?” Mas, vamos jogar isso:
Isto é 2048 x 2048 x 2048 ... 12 vezes. Ou, 2048^12. O que é... um número absurdamente grande. Grosso modo, 5 septilhões, ou 5 quatrilhões de bilhões. Isso é insondável para a gente entender, mas vamos tentar...
Imagine que você começou a adivinhar agora, usando um computador insanamente poderoso que pode adivinhar 1 trilhão de frases-semente por segundo. Levaria a essa máquina 159 trilhões de anos para adivinhar uma frase-semente. Ou, (dependendo no que você acredita), aproximadamente 11.000 vezes mais longo do que a idade atual do universo.
São frases de semente de 24 palavras melhores do que 12?
Algumas carteiras optam por 128 bits (12 palavras), mas carteiras mais modernas pedem que você lembre de 24 palavras para a sua frase-semente! O que, novamente, é absurdamente grande.
Agora temos uma frase semente de 12 palavras, como ela é usada para criar chaves privadas para contas? Para fazer isso, precisamos converter nossa frase semente em uma semente binária que pode ser usada para gerar carteiras. Esse processo envolve as seguintes etapas:
Este processo (chamado de função de derivação de chave) produz um valor de hash de 64 bytes, chamado de semente binária, usando outro algoritmo chamado HMAC-SHA512 como função pseudo-aleatória.
O valor de hash de 64 bytes gerado pode ser usado para gerar contas usando a lógica que se originou de outros padrões do Bitcoin; nomeadamente BIP-32 e, opcionalmente, uma extensão do BIP-32, BIP-44.
BIP-32 introduz carteiras determinísticas hierárquicas (HD); onde muitas carteiras podem ser derivadas de uma única semente, e mais carteiras podem ser derivadas dessas carteiras, criando uma 'árvore' de carteiras.
BIP-44 fornece uma maneira padronizada de criar uma hierarquia para estruturas de carteiras a partir de uma única semente binária, implementando um caminho de derivação específico seguindo a estrutura: m / propósito’ / tipo_moeda’ / conta’ / mudança / índice_endereço:
Nem todas as carteiras usam o BIP-44, mas é uma forma comum de padronizar como as contas são derivadas de uma semente binária.
Como mencionamos anteriormente, as chaves privadas têm 64 caracteres hexadecimais, o que equivale a 32 bytes. E, acabamos de gerar uma semente binária de 64 bytes por meio do processo PBKDF2 - então como usamos esse valor de hash de 64 bytes para criar chaves privadas?
Primeiro, o hash é dividido em duas metades, cada uma com 32 bytes de tamanho:
Agora entendemos como as chaves privadas se parecem, como são geradas aleatoriamente e como várias chaves podem ser derivadas de uma única frase de semente. Em seguida, vamos explorar como as chaves públicas são derivadas das chaves privadas.
Usando a criptografia de curva elíptica (ECC), podemos descobrir a chave pública para uma determinada chave privada. Existem diferentes tipos de curvas elípticas, mas aquela usada tanto pelo Bitcoin quanto pelo Ethereum é chamada secp256k1.
A especificação para esta curva elíptica inclui um ponto base, G, que é usado como ponto de partida para criarmos outros pontos na curva. A partir desse ponto de partida, "movemos" a curva um certo número de vezes (determinado por nossa chave privada), de uma maneira específica. O ponto da curva em que acabamos quando pararmos esse processo será nossa chave pública.
A maneira como "nos movemos" pela curva é chamada de multiplicação escalar. Ao trabalhar com curvas elípticas, um escalar refere-se a um número usado para escalar um ponto na curva. Tomamos o ponto base G e aplicamos o número escalar a ele para alcançar um novo ponto na curva, "esticando" esse ponto.
O número escalar que aplicamos ao ponto base é nossa chave privada; simplificando, pegamos nosso ponto de partida G e o multiplicamos escalarmente por nossa chave privada para chegar à nossa chave pública.
Na realidade, como a curva é definida sobre o campo primo ℤp, ela se parece mais com um monte de pontos espalhados... mas ainda tem as mesmas propriedades da curva elíptica.
No final deste processo de multiplicação escalar (saltando em torno de um número de chaves privadas), vamos acabar em um novo ponto na curva, que é a nossa chave pública. Você pode imaginar que este processo se parece com isso:
Chaves públicas, como o nome sugere, podem ser compartilhadas publicamente com qualquer pessoa. Elas são úteis para:
As carteiras são um componente essencial das blockchains que usam criptografia de curva elíptica para permitir que os usuários enviem transações e assinem mensagens de suas contas.
No entanto, algumas blockchains como a Abstract também suportam novos tipos de carteiras, chamadas de contas de contratos inteligentes, que oferecem mais recursos e permitem mecanismos de segurança, recuperação mais robustos e muito mais.
Este artigo é reproduzido de [ https://abs.xyz/blog], Encaminhe o título original 'O que é uma Carteira?', Todos os direitos autorais pertencem ao autor original [ Jarrod Watts ]. Se houver objeções a esta reprodução, entre em contato com o Gate Aprenderequipe e eles vão lidar com isso prontamente.
Aviso de Responsabilidade: As opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
As traduções do artigo para outros idiomas são feitas pela equipe Gate Learn. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.