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.