Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
10/12/2007

< Atributos digitais II: Assinatura digital >


Encerramos a coluna da semana passada comentando que cifrar um documento com uma chave privada garante apenas sua autenticidade, não sua confidencialidade. E lembrando que os programas de criptografia usados para este fim são relativamente lentos e consomem demasiados recursos da máquina. Então, quando se precisa apenas garantir a autenticidade (ou seja, a autoria e a integridade) de um documento, não há necessidade de criptografá-lo inteiro. Tudo o que é preciso é conceber um meio de tornar indiscutível o fato de que ele foi gerado pela pessoa que o assina. E concluímos que este é justamente o conceito de “assinatura digital”. Vamos ver como esta coisa funciona.

A idéia é a seguinte: se criptografar o documento inteiro exige muito tempo e poder de processamento, porque não criar um “resumo criptográfico” do documento e criptografar apenas este resumo com a chave privada do autor? Se o algoritmo usado para gerar o resumo for conhecido por ambas as partes (remetente e destinatário), um novo resumo pode ser gerado no destino e comparado com o resultado da decifração daquele gerado na origem. Se houver coincidência, tanto a integridade do documento foi preservada (pelo fato de os dois resumos coincidirem) quanto sua autoria foi garantida (pelo fato de a criptografia ter sido feita com a chave pública do autor). Não entendeu? Pois destrinchemos.

Para ver como a coisa funciona teremos que examinar o conceito de “resumo criptográfico” (ou “hash”) e discutir a forma de criá-lo usando uma “função resumo” (ou “função hash”).

Então vamos por partes.

O conceito de “resumo criptográfico” ou “hash” é bastante conhecido. Só que a maioria dos que o conhecem não sabem que o conhecem. Quer ver?

Já reparou que todo CPF (Cadastro de Pessoa Física) é composto por onze algarismos separados em dois conjuntos (de nove e dois algarismos respectivamente) e que muitas vezes os dois últimos algarismos são separados dos demais por um traço ou ponto e são designados como “controle”?

E já reparou que algumas vezes, quando se entra com um número de CPF incorreto em uma caixa de entrada de formulário eletrônico, o programa que apresentou o formulário imediatamente emite uma janela de erro informando que aquele número não é correto?

Como é que o programa “soube” que houve um erro?

Simples: os dois últimos algarismos do CPF não fazem parte do número de cadastro propriamente dito, que consiste apenas dos nove primeiros. Os últimos dois algarismos servem apenas para garantir a integridade dos nove anteriores.

No caso do CPF, os dois últimos algarismos (ou “controle”) são gerados a partir de um algoritmo razoavelmente complexo aplicado aos nove primeiros. Eles são, portanto, o resultado numérico de um determinado conjunto de operações aritméticas executadas em certa ordem sobre os demais, algarismo a algarismo. Do ponto de vista conceitual, os dois algarismos de “controle” nada mais são que o “resumo criptográfico” ou hash do número formado pelos demais nove algarismos. Então, quando se fornece um número de CPF a um programa que “conhece” o algoritmo de geração do número de controle (a “função hash”), ele simplesmente aplica este algoritmo sobre os nove primeiros algarismos para gerar o “controle” e o compara com os dois últimos algarismos do CPF fornecido. Se não conferir, certamente algum dos primeiros nove algarismos fornecidos está incorreto ou situado fora da posição original.

A eficácia do “hash” depende da complexidade do algoritmo usado para criá-lo. Uma forma primária de verificar se houve ou não um erro em um dos nove algarismos do CPF poderia consistir na simples soma de todos eles (e neste caso a “função hash” seria constituída apenas por uma soma). Por exemplo, para o CPF fictício 123.456.789 o hash seria 45 (soma 1+2+3+4+5+6+7+8+9=45). O problema é que com funções hash de baixo nível de complexidade há erros que passam despercebidos. No caso da soma, se eu trocar a posição de dois algarismos do número original ou se eu substitui-los por dois outros cuja soma seja a mesma obterei o mesmo hash, o que me levará a crer que não houve erro. Por isso os algoritmos usados para gerar os resumos criptográficos são bastante mais complexos. E padronizados, para que todos possam aplicá-los (um deles, muito usado, é o SHA, de Secure Hash Algorithm e quem estiver interessado nos detalhes pode consultar o verbete correspondente da Wikipedia).

Pois bem: um texto gravado em meio eletrônico (texto “digitalizado”) nada mais é que um “vetor”, ou uma sucessão de números binários, cada um representando um caractere ou sinal gráfico (inclusive o espaço). Pode ser uma sucessão muito longa, é verdade, mas não deixa de ser uma sucessão de números ou um “vetor”. E, sendo assim, nada impede que se aplique um algoritmo a este vetor para gerar um novo número ou conjunto de números muito menor que o texto original, que funcionará exatamente como o “número de controle” do CPF: será seu “resumo criptográfico” ou hash. Como este hash foi obtido através de operações aritméticas aplicadas a todos os números que formam o documento original digitalizado levando em conta sua posição, a alteração de uma única vírgula ou da posição de qualquer caractere neste documento original dará origem a um hash diferente. Assim, conhecida a “função hash” (o algoritmo usado para gerar o “resumo criptográfico”) e conhecido o hash por ele gerado, qualquer pessoa pode validar o documento (verificar se corresponde ou não a uma cópia exata do original).

O problema é que para permitir a verificação é preciso que eu envie o hash juntamente com o documento. O que permitiria que algum pilantra altere o documento, gere o novo hash correspondente e o envie juntamente com ele.

Para evitar isso pode-se recorrer à criptografia: o autor produz o documento original, gera um hash ou “resumo criptográfico” usando um algoritmo conhecido, criptografa o hash com sua chave privada e o envia juntamente com o documento. O destinatário recebe o documento, usa o mesmo algoritmo para gerar seu hash, decifra o hash enviado juntamente com o documento usando a chave pública do autor e compara os dois resultados. Se ambos coincidirem o documento é válido porque os hashes coincidem. Mas a coisa vai ainda além: como a decifração do hash foi feita com a chave pública do autor, a autoria também fica estabelecida. Veja, na Figura 1, uma representação esquemática do procedimento passo a passo.

Clique e amplie...
Figura 1: aposição e validação de assinatura digital.

Percebeu a idéia? É simples e engenhosa: com uma única operação criptográfica aplicada a um objeto relativamente pequeno (o hash ou “resumo criptográfico”) consegue-se não apenas validar (garantir a integridade) como também autenticar (garantir a autoria) do documento. O hash criptografado com a chave privada do autor funciona então como sua assinatura naquele documento pois, além de garantir sua autenticidade, garante também sua integridade. Este é o conceito de “assinatura digital”.

Não entendeu o porquê do termo “assinatura”? Pois então compare dois procedimentos semelhantes. O primeiro consiste em produzir um documento eletrônico (texto, planilha ou qualquer outro que possa ser digitalizado e gravado em um meio de armazenamento sob a forma de arquivo binário) anexando a ele seu hash criptografado com a chave privada do autor. O segundo consiste em gerar um documento em papel ou qualquer outro meio físico (tela, pergaminho, etc.) apondo a ele a assinatura manuscrita do autor.

No segundo procedimento o que garante a autoria é a presença da assinatura manuscrita, que contém características próprias, pessoais e biométricas do indivíduo que a produziu. Um procedimento tão seguro que funciona há séculos para autenticar documentos, quadros, obras de arte, cheques e o diabo a quatro. A autoria do documento é comprovada pela veracidade da assinatura que pode ser verificada por comparação com um exemplar sabidamente verdadeiro, eventualmente registrado em cartório na presença de um tabelião. Já a integridade do documento (ou seja, a certeza de que ele não foi alterado) pode ser garantida com um exame físico detalhado à procura de rasuras ou manchas suspeitas e que, quando para fins judiciais, pode ser feito por peritos em laboratórios especializados.

Então a autenticidade e integridade de um documento físico podem ser atestadas por um exame detalhado de seu estado e da assinatura a ele aposta.

Mas como fazer o mesmo em um documento eletrônico composto apenas por uma sucessão de bits “um” e “zero” devidamente ordenados e gravados em suportes físicos como meios de armazenamento magnético cujo conteúdo pode ser alterado sem deixar vestígios? Simples: gerando um hash do documento original com um algoritmo conhecido, criptografando este hash com a chave privada do autor e anexando o resultado ao documento. Como este hash criptografado com a chave privada pode servir tanto para garantir a autenticidade quanto a integridade do documento, ele exerce função análoga à da assinatura manuscrita aposta a um documento físico. E como ele é anexado ao documento também em forma digital, pode ser considerado uma “assinatura digital”.

Tudo o que se viu até agora demonstra apenas que, do ponto de vista técnico, não há qualquer impedimento para que se garanta a autenticação e integridade de documentos eletrônicos. Mas daí até que isto funcione na prática, a diferença é grande.

Para isto seria necessário o estabelecimento de um marco legal, uma forma institucionalizada oficialmente e regulada por lei para que as assinaturas digitais possam ter validade jurídica, ou seja, possam ser reconhecidas oficialmente.

Mas como fazer isso? Um bom meio de descobrir é comparar como funciona na prática o sistema de autenticação de documentos por assinaturas manuscritas. Pois não basta apor sua assinatura a um documento para que isso o autentique indiscutível, inquestionável e oficialmente. É preciso que ela seja “reconhecida” em um ofício de notas. O que exigiu a implementação oficial de todo um sistema de cartórios onde funcionam tabelionatos, ofícios de notas, registros públicos e seus arquivos, tudo isto operado por tabeliães, escreventes e mais uma legião de serventuários e funcionários afins. Sistema este devidamente estabelecido por lei e minuciosamente regulado.

É este arcabouço físico e jurídico que permite a um cidadão comparecer a um ofício de notas, se identificar junto a um tabelião e, de corpo presente, registrar sua assinatura ou “firma”. Isto feito, mais tarde qualquer pessoa pode levar um documento assinado por aquele cidadão ao mesmo estabelecimento para que, por comparação com o original lá arquivado, tenha sua firma ou assinatura “reconhecida” ou validada pelo tabelião. Que, por sua vez, somente pode fazer isto porque os documentos por ele expedidos têm “fé pública”, ou seja, merecem crédito simplesmente por terem emanado de uma autoridade pública investida de tais direitos após cumprir todo um conjunto de formalidades legais (esta, pelo menos, é a idéia que faço do sistema; porém, como não sou advogado e não gosto de dar pitaco em assunto que não conheço, solicito humildemente aos especialistas que eventualmente vierem a encontrar alguma barbaridade jurídica no que foi dito acima que a tragam a meu conhecimento oferecendo os devidos esclarecimentos, que prontamente serão levados em consideração e divulgados).

Mas como fazer isto ou algo equivalente quando os documentos não são gravados em papel ou qualquer meio físico, como os arquivos binários?

Bem, meio caminho já foi andado. Na verdade bem mais de meio caminho: em agosto de 2001 a Medida Provisória 2.200 garantiu a validade jurídica de documentos eletrônicos e a utilização de certificados digitais para validar sua autenticidade e integridade. E isto oficialmente, posto que medidas provisórias têm força de lei. Para tanto ela instituiu a Infra-Estrutura de Chaves Públicas Brasileira - ICP-Brasil, definiu sua estrutura (“será composta por uma autoridade gestora de políticas e pela cadeia de autoridades certificadoras composta pela Autoridade Certificadora Raiz - AC Raiz, pelas Autoridades Certificadoras - AC e pelas Autoridades de Registro – AR”), criou sua autoridade gestora de políticas (“Gestor da ICP-Brasil, vinculado à Casa Civil da Presidência da República”) e definiu suas atribuições. Em resumo: estabeleceu todo um sistema legal para validar documentos eletrônicos através de assinaturas digitais.

Como é que esta coisa funciona? Qual é o equivalente eletrônico de uma “firma reconhecida”? Como “registrar” uma assinatura eletrônica para fins de futura comparação?

Bem, este será justamente o assunto de nossa próxima coluna. Que, incidentalmente, voltará ao ponto inicial e o mais importante: a proposta conjunta da SERASA e Microsoft para a implementação de atributos digitais.

 

B. Piropo