Chaves Privadas, Chaves Públicas e Assinaturas Digitais

Chaves Privadas, Chaves Públicas e Assinaturas Digitais

O que querem dizer todos estes termos? Chave privada, chave pública, assinatura... vamos descobrir o seu significado e importância para o Bitcoin.

Uma chave privada é apenas um número secreto. Um número aleatório muito grande, que não pode ser adivinhado por ninguém.

Em Bitcoin, uma chave privada pode ser qualquer número entre 0 e 2^256. Para teres uma noção de quanto é 2^256, é aproximadamente o número de átomos no Universo conhecido! Se usares um bom gerador de números aleatórios, e gerares um número entre o e 2^256, é practicamente impossível de alguém descobrir qual é.

Quando tiveres uma Chave Privada, Private Key, podes gerar uma Chave Pública, ou Public Key.

Fazes isso multiplicando a Chave Privada por um número definido que todos concordaram (chamamos este número definido G - o ponto "Gerador"). Há algumas nuances aqui...

Esta não é uma multiplicação normal. É um tipo de multiplicação avançada que usa um sistema de números especiais (que sai um pouco fora do âmbito do post). Neste sistema de números, a multiplicação é fácil, mas a divisão é IMPOSSÍVEL!

O importante é que se tens apenas uma Chave Pública, não há como descobrir a Chave Privada. Não podes simplesmente dividi-la por G, porque neste sistema de números, a divisão é impossível. Este sistema de números é uma Curva Elíptica sobre um Campo Finito, também conhecido como "matemática para crescidos".

Não vamos entrar muito na matemática, mas recapitulando:

  • Chave Privada é apenas um número secreto
  • Chave Pública é também apenas um número, que obténs multiplicando a Chave Privada por G
  • A divisão é impossível, logo não podes descobrir a Chave Privada se apenas conheceres a Chave Pública

A coisa fixe da Chave Pública é que a podes partilhar com toda a gente! Funciona mais ou menos como a tua identidade digital.

O que podes agora fazer com isso?

Ainda bem que perguntas e que ainda aí estás!

Imagina que tenho 1 bitcoin e gostava de enviá-lo ao meu amigo @talvasconcelos. Para enviar esta moeda, preciso de uma forma de "provar", perante a rede, que sou o legítimo proprietário desta moeda e autorizo a sua transferência.

É aqui que entram as Assinaturas Digitais. Primeiro crio uma mensagem (neste caso uma transacção de bitcoin) que diz:

"Eu, o proprietário da Chave Pública de Sparkpay, autorizo o envio este 1 bitcoin (100 milhões de satoshis, para ser mais preciso) ao proprietário da Chave Pública de Talvasconcelos"

Agora, preciso provar a todos que fui eu que criei realmente esta mensagem. Esta prova chama-se Assinatura Digital. Basicamente, coloco a minha Chave Privada e a Mensagem numa equação, e sai outro número - a Signature!

O bom deste número (Signature), é que qualquer pessoa pode olhar para a Assinatura, a Mensagem e a Chave Pública, ligá-los a outra simples equação e se a matemática o verificar, podem ter 100% de certeza que o dono da chave privada foi quem criou a assinatura.

Por outras palavras, a Assinatura é a prova matemática de que o proprietário da Chave Privada autorizou a Mensagem!

Estes são os fundamentos de Chaves Privadas, Chaves Públicas e Assinaturas Digitais. Estes elementos da criptografia são usados comummente em software e na internet (não apenas no Bitcoin), e são um grande exemplo dos poderes que a matemática extravagante nos dá!

Infelizmente o meu conhecimento de matemática é, digamos simpaticamente, parco! Se quiseres saber mais sobre tudo isto, podes fazer uma busca por "curvas eliptícas sobre um campos finitos" ou em inglês, "Elliptic Curves over Finite Fields". A matemática, ao que parece, não é muito difícil. É apenas muito diferente daquilo que nos ensinam na escola.