terça-feira, 31 de outubro de 2017

Chaves e Criptografia do Bitcoin

Criptografia do Bitcoin

A posse do bitcoin é estabelecida através de chaves digitais, endereços bitcoin e assinaturas digitais. Na realidade, as chaves digitais não são armazenadas na rede, mas ao invés disso, são criadas e armazenadas pelo usuário em um arquivo, um banco de dados simples, chamado de wallet (carteira). 

As chaves digitais em uma carteira de um usuário são completamente independentes do protocolo bitcoin e podem ser geradas e gerenciadas pelo software de carteira do usuário sem qualquer referência à blockchain ou acesso à internet. As chaves permitem muitas das interessantes propriedades do bitcoin, incluindo confiança descentralizada e controle, atestação de posse e o modelo de segurança por prova criptográfica. 


ASSINATURA E CONFIRMAÇÃO


Toda transação de bitcoin requer uma assinatura válida para ser incluída na blockchain, as quais só podem ser geradas com chaves digitais válidas; portanto, qualquer um com uma cópia destas chaves tem o controle sobre os bitcoins daquela conta. Chaves são apresentadas em pares que consistem em uma chave privada (secreta) e uma chave pública. 

Imagine que a Chave Pública é similar ao número de uma conta bancária e a Chave Privada similar a um PIN secreto ou uma assinatura em um cheque que provê controle sobre a conta. Estas chaves digitais são raramente vistas pelos usuários do bitcoin. Para a maioria, elas são armazenadas dentro de arquivos de carteiras e gerenciadas por um software de carteira bitcoin. 

Na porção de pagamento de uma transação bitcoin, a chave pública do destinatário é representada pela sua impressão digital, denominada endereço bitcoin, que é usada da mesma maneira como o nome de um beneficiário em um cheque (ou seja, "Pague à ordem de"). Na maioria dos casos, um endereço bitcoin é gerado a partir de uma chave pública correspondente. 

No entanto, nem todos os endereços bitcoin representam chaves públicas; eles também podem representar outros beneficiários, tais como scripts, como veremos mais adiante neste capítulo. Desta forma, os endereços bitcoin abstraem o destinatário dos fundos, tornando destinos de transação flexíveis, semelhante a cheques em papel: um único instrumento de pagamento pode ser usado para depósito em contas pessoais, depósito em contas da empresa, pagar contas ou converter em dinheiro. 

O endereço bitcoin é a única representação das chaves que os usuários vão rotineiramente ver porque esta é a parte que eles precisam compartilhar com o mundo. Neste capítulo iremos apresentar Carteiras, as quais contém Chaves Criptográficas. Nós iremos aprender como as chaves são geradas, armazenadas e gerenciadas. 

Iremos revisar os vários formatos de codificação usados para representar chaves privadas e públicas, endereços e endereços baseados em script. Finalmente iremos considerar usos especiais para as chaves: para assinar mensagens, comprovar propriedade, criar endereços exclusivos e carteiras em papel. 

Criptografia de Chave Pública e Criptomoeda 


A criptografia de chave pública foi inventada nos anos 1970s e é uma base matemática para a segurança da computação e informação. 1 Desde a invenção da criptografia de chave pública, muitas funções matemáticas adequadas foram descobertas, como exponenciação de números primos e multiplicação de curva elíptica. Essas funções matemáticas são praticamente irreversíveis, significando que elas são fáceis de calcular em uma direção, e inviáveis de serem calculadas na direção oposta. 

Baseada nessas funções matemáticas, a criptografia permite a criação de segredos digitais e assinaturas digitais que não podem ser esquecidas. O bitcoin usa multiplicação de curva elíptica como base para sua criptografia de chave pública. No bitcoin, nós usamos criptografia de chave pública para criar um par de chaves que controla o acesso aos bitcoins. 

O par de chave consiste em uma chave privada e — derivada dessa chave — uma chave pública única. A chave pública é usada para receber os bitcoins, e a chave privada é usada para assinar transações para gastar esses bitcoins. Existe uma relação matemática entre a chave pública e a privada que permite que a chave privada seja usada para gerar assinaturas nas mensagens. 

Essa assinatura pode ser validada em relação à chave pública, sem a necessidade de se revelar a chave privada. Ao gastar bitcoins, o atual dono dos bitcoins apresenta sua chave pública e uma assinatura (diferente a cada vez, mas criada a partir da mesma chave privada) em uma transação para gastar esses bitcoins. 

Através da apresentação da chave pública e da assinatura, todos na rede bitcoin podem verificar e aceitar a transação como válida, confirmando que a pessoa que está transferindo os bitcoins realmente os possui no momento da transferência. 

Na maioria das implementações de carteira, as chaves privadas e públicas são armazenadas juntas como um par de chaves, por conveniência. No entanto, a chave pública pode ser calculada a partir da chave privada, então também é possível se armazenar apenas a chave privada. 

Chaves Privada e Pública 


Uma carteira bitcoin contém um grupo de pares de chaves, cada um consistindo de uma chave privada e uma chave pública. 

A chave privada (k) é um número, geralmente escolhido ao acaso. A partir da chave privada, nós usamos multiplicação em curva elíptica, uma função criptográfica de um único sentido, para gerar a chave pública (K). A partir da chave pública (K), nós iremos usar uma função hash criptográfica de um sentido para gerar um endereço bitcoin (A). 

Nessa seção, nós iniciaremos com a geração da chave privada, analisaremos a matemática de curva elíptica que é usada para torná- la em uma chave pública e, finalmente, a geração do endereço bitcoin a partir da chave pública. A relação entre a chave privada, chave pública e endereço bitcoin está demonstrada em Chave privada, chave pública e endereço bitcoin.

Chaves Privadas 


Uma chave privada nada mais é do que um número, escolhido ao acaso. A posse e o controle da chave privada é tudo o que o usuário precisa para controlar todos os fundos associados ao endereço bitcoin correspondente. A chave privada é usada para criar assinaturas que são necessárias para se gastar bitcoins ao comprovar a posse dos fundos usados em uma transação. 

A chave privada deve sempre ser mantida em segredo, pois revelá-la a terceiros é equivalente a fornecê-los o controle sobre todos os bitcoins protegidos por aquela chave. Também deve ser feito backup da chave privada, além de protegê-la de perdas acidentais, pois ao ser perdida a chave não pode ser recuperada, e todos os fundos protegidos por ela também serão perdidos para sempre. 

A chave privada bitcoin é apenas um número. Você pode escolher suas chaves privadas aleatoriamente usando uma moeda, um lápis e um papel: jogue a moeda 256 vezes e você terá os dígitos binários de uma chave privada aleatória que você pode usar em uma carteira bitcoin. A chave pública pode então ser gerada a partir de sua chave privada. 

Gerando uma chave privada a partir de um número aleatório 

O primeiro e mais importante passo na geração de chaves é encontrar uma fonte segura de entropia, ou aleatoriedade. Criar uma chave bitcoin é essencialmente a mesma coisa que pedir para alguém "Escolha um número entre 1 e 2256". O método exato que você usa para escolher esse número não importa, contanto que não seja previsível ou repetível. 

O software Bitcoin baseia-se em geradores de números aleatórios do sistema operacional subjacente para produzir 256 bits de entropia (aleatoriedade). Normalmente, o gerador de números aleatórios do sistema operacional é inicializado por uma fonte humana de aleatoriedade, razão pela qual você pode ser convidado para mexer o mouse por alguns segundos. Para quem é paranóico, nada é melhor do que jogar dados e depois anotar os resultados com caneta e papel. 

Mais precisamente, a chave privada pode ser qualquer número entre 1 e n - 1, onde n é uma constante (n = 1,158 * 1077, ligeiramente menor que 2256), definido como a ordem da curva elíptica usada no bitcoin (veja Explicando a Criptografia de Curva Elíptica). Para criar tal chave, nós escolhemos aleatoriamente um número de 256 bits e verificamos se ele é menor do que n - 1. 

Em termos de programação, isto é geralmente obtido alimentando-se uma seqüência maior de bits aleatórios, coletados a partir de uma fonte de aleatoriedade criptograficamente segura, ao algoritmo de hash SHA256 que irá produzir convenientemente um número de 256 bits. Se o resultado for inferior a n - 1, 3 temos uma chave privada adequada. Caso contrário, nós simplesmente tentamos novamente com outro número aleatório. 

Não escreva o seu próprio código para criar um número aleatório, nem utilize um gerador de números aleatório "simples" oferecido pela sua linguagem de programação. Use um gerador de números pseudo-aleatórios criptograficamente seguro (CSPRNG) com uma semente com fonte de entropia suficiente. Estude a documentação da biblioteca geradora de números aleatórios que você escolher para se certificar de que é criptograficamente segura. O correto emprego do CSPRNG é crítico para a segurança das chaves.

Chaves Públicas 


A chave pública é calculada a partir da chave privada usando uma multiplicação de curva elíptica, que é irreversível: \(K = k * G\) onde k é a chave privada, G é um ponto constante chamado de ponto gerador e K é a chave pública resultante. 

A operação inversa, conhecida como "encontrando o logaritmo discreto"—calculando k se você sabe o K—é tão difícil quanto tentar todos os possíveis valores de k, ou seja, uma busca de força bruta. Antes de nós demonstrarmos como gerar uma chave pública a partir de uma chave privada, vamos analisar a criptografia de curva elíptica em um pouco mais de detalhes. 

FONTE - Esse é um trecho do livro 'Mastering Bitcoin


EmoticonEmoticon