Path: mv.asterisco.pt!mvalente
From: mvale…@ruido-visual.pt (Mario Valente)
Newsgroups: mv
Subject: Chaves, Assinaturas e Certificados
Date: Sun, 22 Jul 07 20:35:21 GMT
  No ambito da montagem da PKI para o Cartao de
 Cidadao e da PKI para o Ministerio da Justica, assim
 como no ambito do uso do proprio Cartao e das chaves
 e certificados que contem, tenho visto alguma confusao
 sobre o que sao cada uma destas coisas, como funcionam
 e para que servem. Chega-se a pensar que uma assinatura
 digital e a digitalizacao (scanning) da assinatura
 manuscrita…
  Para tentar ajudar na compreensao da coisa, e na
 sequencia de algumas explicacoes que ja dei sobre o
 assunto, vou tentar reproduzir aqui as mesmas, sendo
 que e certo que e mais facil de explicar em regime
 presencial :-)
  Comecando pelo principio e pelo problema base: como
 e que o Antonio (A) envia uma mensagem ao Bruno (B)tendo
 ambos (ou pelo menos o Bruno) a garantia de que a mensagem
 nao foi falsificada e vem mesmo (mas mesmo, *mesmo*) do A?
  A primeira opcao, desde os tempos dos imperadores romanos,
 e codificar (criptar) a mensagem. Digamos que A quer enviar
 a B o texto “A verdadeira mensagem”. Em vez de enviar assim
 o texto, escrito a papo seco num bocado de papel, envia
 antes o texto “B xfsebefjsb nfotbhfn”; o Bruno so tem de
 saber que para obter a mensagem original basta andar uma
 letra para tras no ABCdario.
  Este “esquema”, com mais ou menos complexidades de metodo
 e acrescido de palavras chave (passwords) e outros tantos,
 sofre sempre de um problema: tem de haver a partilha entre
 A e B sobre qual a forma/metodo usada para codificar a
 mensagem. Isto significa que se C, um dos maus da fita,
 souber essa forma ou metodo (nota: mais tarde ou mais cedo
 acaba por saber), podera enviar mensagens codificadas da
 mesma forma. E la se vai a garantia que o Bruno queria: ao
 receber uma mensagem, ter a certeza de que esta nao foi
 alterada de qualquer forma e que vem mesmo (*mesmo*) do
 Antonio.
  O sistema acima referido e tao mau que foi assim que os
 Alemaes perderam a guerra…
  Como resolver o problema? Sera que nao existe uma maneira
 de obter uma especie de “impressao digital” de um documento,
 uma especie de ADN do documento? Se houvesse, enviava-se o
 documento junto com a sua “impressao digital” e qualquer
 alteracao ao mesmo podia ser detectata reobtendo essa mesma
 “impressao”.
  Por exemplo: o Antonio passa a enviar todas as mensagens
 ao Bruno acrescentadas do total de letras em cada mensagem.
  Para enviar “A verdadeira mensagem”, escreve num papel
 “A verdadeira mensagem – 19”. O Bruno recebe a mensagem,
 conta as letras da mensagem, verifica que sao 19 e conclui
 que a mensagem nao foi alterada. Se tivesse recebido um
 papel a dizer “A falsa mensagem – 19”, sabia que o texto
 original tinha sido alterado.
  Pode parecer que o problema esta resolvido. Infelizmente
 tem de se assumir que C (um dos maus da fita) teria, claro,
 conhecimento desta historia de mandar com a mensagem o
 numero de letras. E assim C, se quisesse enviar ou alterar
 uma mensagem de A para B a dizer “A falsa mensagem”, trataria
 de enviar “A falsa mensagem – 14”. E voltamos ao ponto zero:
 o Bruno nao tem certezas quanto ao conteudo nem quanto a
 proveniencia da mensagem.
  No entanto o conceito acima (“impressao digital” de um
 documento) e meio caminho andado na resolucao do problema.
  Este numero (no exemplo acima “numero total de letras da
 mensagem”) e aquilo que e chamado de checksum (somatorio
 literalmente, embora seja mais uma especie de prova dos
 nove; va, vao relembrar a aritmetica da 4a classe); este
 numero e tambem chamado de hash (mistura) e muitas vezes
 de fingerprint (impressao digital).
  Obviamente que o metodo usado na realidade para calcular
 a impressao digital de um documento nao e algo tao simplista
 como “o total das letras da mensagem”. Quanto mais nao seja
 porque este metodo tem varias colisoes possiveis: existem
 varios documentos com 50 letras; portanto 50 nao seria com
 certeza forma de “identificar” um documento de forma unica.
  Os metodos usados para gerar “impressoes digitais” de
 documentos tem nomes complicados como SHA, MD5, CRC32; e
 sao tambem metodos mais complicados do que “o total de
 letras da mensagem”; e geram resultados finais muito mais
 complicados do que 50; geram coisas tipo 7213E1C0 ou
 858997B06E6537A581C8ABB0019758C3. Numeros que de alguma
 forma sao garantidos como unicos para aquele documento ou
 aquela mensagem.
  O problema no entanto mantem-se, mesmo complicando o
 sistema: temos de assumir que C (e o Carlos, pronto) sabe
 qual o sistema. E quando altera uma mensagem de A para B
 ou envia uma mensagem falsa, enviara tambem o checksum/hash/
 fingerprint da mensagem falsa. O Bruno continua sem garantias
 de que uma mensagem recebida veio mesmo do Antonio.
  A ideia de usar uma password/chave para codificar o
 checksum enferma do mesmo problema. Se o Antonio combinar
 que envia ao Bruno as mensagens com o total das letras mas
 somado com 7 (aqui o 7 funciona como chave/password partilhada),
 temos de assumir que a mensagem “A verdadeira mensagem – 25”
 (25=19+7), vai continuar a correr o risco de que a mensagem
 seja alterada pelo Carlos para “A falsa mensagem – 21″…
  Mas imagine-se que o Antonio envia a mensagem para o
 Bruno na seguinte forma: “A verdadeira mensagem – 703”; e
 diz ao Bruno “para obteres o checksum/hash/fingerprint
 da mensagem multiplica por 0,027027”. O Bruno recebe a
 mensagem “A verdadeira mensagem – 703”, pega no 703 e
 multiplica por 0,027027, obtem 19 e como isso e igual
 ao numero de letras da mensagem sabe que a mesma nao foi
 alterada.
  O que e que o Carlos pode fazer? Pode tentar alterar
 a mensagem. Pode saber que o metodo para fazer o
 checksum e “o total de letras”. Mas ja nao e tao simples
 descobrir como colocar o valor final correcto (checksum +
 calculo). Ja nao e tao simples perceber que valor colocar
 no fim de “A falsa mensagem”. Mesmo que saiba que o
 metodo usado e “multiplicar o total de letras pelo tamanho
 do sapato” (e o Antonio calca o 37; 19*37=703), nao serve
 a C multiplicar 14 (o total de letras da falsa mensagem)
 por 38 (o seu tamanho de sapato). “A falsa mensagem – 532”
 e uma mensagem valida, mas quando 532 e multiplicado por
 0,027027 obtem-se 14,37 que nao coincide direito com o
 numero de letras da mensagem. A mesma nao veio, portanto,
 do Antonio. Se fosse multiplicada por 0,0263, obter-se-ia
 14.
  Para todos os efeitos o que foi descrito acima e um
 sistema de chaves publicas e chaves privadas (PKI).
  A chave privada do Antonio e 37 (o tamanho do sapato);
 a sua chave publica e 0,027027. Quem receber mensagens
 do Antonio, codificadas com a sua chave privada, pode
 descodifica-las com a sua (do Antonio) chave publica.
  Como e obvio este metodo de criacao de chaves privadas
 (o tamanho do sapato) e de criacao de chaves publicas
 (a chave publica, caso ainda nao tenham deduzido, e o
 inverso do tamanho do sapato) e fraco. Primeiro porque
 tem uma serie de colisoes (varias pessoas calcam o mesmo
 tamanho, logo teriam a mesma chave privada); segundo porque
 sendo mais complicado, e relativamente facil partir de
 uma chave publica (0,027027 por exemplo) e inverter a
 mesma com uma calculadora com a funcao 1/x.
  Os sistemas de PKI utilizados na vida real usam metodos
 muito mais complexos para criacao de chaves privadas. As
 chaves geradas sao linhas e linhas de valores alfanumericos
 tipo “00:f6:9c:64:49:18:7f:c7:47:db:07:b6:a3:43:2e” cujo
 conjunto e garantido unico para cada utilizador (ao contrario
 do tamanho do sapato) e cuja inversao (ou seja, passar da
 chave publica para a chave privada) e completamente impossivel
 em termos matematicos.
  O que temos entao ate agora? Temos que para cada
 cidadao portugues, no momento da emissao do Cartao
 de Cidadao, e emitido um par de chaves: a sua chave
 publica e a sua chave privada. A chave publica, como
 e obvio, e publica, pode ser divulgada e e legivel
 directamente do cartao. A chave privada apenas e do
 conhecimento e posse do cidadao, sendo apenas possivel
 de ser gerada pelo seu cartao (aquele cartao) e com
 a introducao do seu PIN. Nao e possivel, a partir da
 chave publica, obter a chave privada.
  O Antonio, na posse do Cartao de Cidadao, pode agora
 enviar um documento ao Bruno, com “A verdadeira mensagem”,
 assinando-o digitalmente.
  O que isto significa e que, para o documento em causa,
 sera calculado o checksum/hash/fingerprint (um 19 mais
 complicado) e o mesmo sera codificado usando a chave
 privada do Antonio (tamanho 37, mais complicado). O Bruno,
 ao receber a mensagem, pode descodificar o valor final
 (703, mais complicado) usando a chave publica do Antonio
 (0,027027, mas mais complicado). Se o resultado nao for
 igual ao checksum (19), que o Bruno tambem pode calcular,
 entao a mensagem nao vem do Antonio ou entao foi alterada.
  Se o resultado for 19 entao o documento nao foi alterado
 e veio, garantidamente, do Antonio.
  Note-se: para o documento em causa. O que significa que
 nao existe uma assinatura digital igual para todos os
 documentos. Cada documento sera assinado digitalmente
 por cada cidadao de forma diferente; cada cidadao tera
 diferentes assinaturas por cada documento (o que faz
 sentido: uma assinatura num cheque nao e o mesmo que
 uma assinatura num contrato ou num recado); cada documento
 tera uma assinatura diferente quando assinado por
 diferentes cidadaos (esta era obvia).
  Falta explicar o que e um certificado digital: um
 certificado digital nao e mais do que um documento,
 com um conjunto de texto e propriedades, assinado (de
 forma digital, obviamente; vide acima) por alguem
 que garante que a informacao contida nesse documento
 e verdadeira. Assim, o Cartao de Cidadao, para alem
 de conter as chaves publicas e privadas de cada cidadao
 (o que lhe permite assinar documentos digitalmente),
 contem tambem um texto/documento/bloco, com os seus
 dados pessoais (basicamente numero BI e nome), sendo
 este documento assinado digitalmente pelo Ministerio
 da Justica que garante assim a verdade desses dados.
  Este “bloco de informacao”, assinado por uma entidade
 que garante a verdade da mesma, e o certificado digital.
  Os dados sao assinados com uma chave privada (a chave
 privada do sistema de PKI do Cartao de Cidadao, guardada
 a sete chaves na Casa da Moeda) podendo qualquer cidadao
 ou qualquer sistema verificar a validade dos dados do
 certificado digital usando a chave publica correspondente.
  Desta forma, com a existencia do certificado digital e
 com a existencia das chaves (e portanto possibilidade de
 assinaturas), vamos passar a ter em Portugal um sistema
 de autenticacao (por via do certificado) e de prova (por
 via das chaves e das assinaturas digitais) para todas
 as comunicacoes elctronicas que trara um maior nivel de
 seguranca e privacidade as mesmas.
— MV
PS – Porque privacidade? Porque a chave privada de cada
 cidadao pode tambem ser usada para codificar/criptar
 documentos, mensagens e emails. A quem recebe a mensagem
 basta usar a chave publica do emissor para descodificar
 a mensagem criptada e obter a mensagem original.
