terça-feira, 24 de maio de 2011

O Cartão de Cidadão e a falsificação de assinaturas

Surgiu hoje na Exame Informática uma notícia com o título “Cartão do Cidadão permite falsificar assinaturas desde 2007”. Lendo melhor a notícia verificamos que, afinal, o problema não é do cartão mas (sic) “no software criado inicialmente para integrar os serviços dos portais das Finanças, do Cidadão e da Empresa”. E qual é o problema (sic): “a arquitetura do software usado pelo CC ter sido criada sem ter em conta eventuais infeções nos computadores dos utilizadores, que poderiam ser aproveitadas por hackers para obter o PIN que desbloqueia as assinaturas digitais”.

O Cartão de Cidadão (CC) é um mecanismo de autenticação dito “de dois factores”: (1) o que se tem, ou seja, o objecto físico, o CC propriamente dito; e (2) o que se sabe, ou seja, o PIN que permite realizar uma assinatura, e que tem de ser fornecido sempre que é realizada uma assinatura. Para se falsificar uma assinatura de alguém é preciso, simultaneamente, (1) ter acesso ao seu CC e (2) saber o código PIN correcto. O que o texto da Exame Informática afirma, então, é que o PIN pode ser capturado por ciberpragas e que estas podem usar o CC, se ao mesmo tiverem acesso, para efectuar assinaturas fraudulentas em nome do seu dono. O que é totalmente verdade; eu diria mesmo que não é novidade nenhuma para quem sabe do assunto. Mas que também não é fácil de evitar.

Tal como está construído, o software do CC não permite que uma aplicação guarde internamente o PIN de assinatura e o use para realizar várias assinaturas sem intervenção humana (i.e. sem pedir o PIN ao dono do CC para cada assinatura). No entanto, o software pode ser subvertido de duas maneiras, ambas igualmente fáceis: (1) pode-se fornecer o PIN através da simulação de eventos do teclado para a janela de entrada de dados do software do CC ou (2) pode-se usar a interface de baixo nível de acesso ao CC, através de umas mensagens especiais denominadas APDU (Application Protocol Data Unit), cujo formato para o CC não foi publicitado mas que não é difícil de obter experimentalmente. Eu próprio já realizei, com o auxílio de trabalhos realizados por alunos, as duas formas de introdução do PIN de assinatura sem intervenção humana: a primeira para testar a robustez do CC a uma carga máxima de assinaturas (o que deixaria um humano cansado) e a segunda para realizar a introdução do PIN através de um terminal seguro externo ao computador onde se executa a aplicação que pretende obter a assinatura.

Como o software do CC usa uma interface gráfica convencional, com entrada de dados via teclado para ler o PIN de assinatura, este pode ser facilmente capturado por uma ciberpraga. E como depois pode ser usado sem intervenção humana, a ciberpraga poderá abusar do CC, caso o mesmo esteja disponível, para realizar assinaturas em nome do seu dono. Os teclados virtuais não tornariam o trabalho da ciberpraga mais complexo, uma vez que é possível obter o PIN de assinatura através da análise dos APDU enviados para o CC.

Mas será, então, que estes riscos podem ou poderiam ter sido evitados? Dificilmente. E, mesmo assim, subsistiriam problemas.

Uma solução consistiria em fazer o que um aluno meu fez: usar um leitor de CC com capacidade de entrada de dados e capacidade para executar programas à medida, os quais poderiam tratar da obtenção do PIN e do seu envio, via APDU, para o CC. Tal minimiza em muito o problema, porque (1) o PIN não pode ser capturado por uma ciberpraga e (2) cada assinatura requer sempre a introdução do PIN por um humano. Mas obrigaria ao uso do tal terminal especial.

No entanto, os problemas não desaparecem todos, nem é previsível que alguma vez venham a desaparecer. Nomeadamente, quando se realiza uma assinatura é muito difícil (impossível?) garantir ao utente que está a assinar aquilo que julga (ou gostaria de) estar a assinar. Com efeito, uma assinatura é basicamente uma transformação criptográfica realizada pelo CC sobre um valor que de síntese (digest, ou cryptographic hash) calculado a partir do documento a assinar. Mas nenhum humano consegue assegurar que o valor de síntese que irá cifrar corresponde, de facto, ao documento que pretende assinar. Logo, poderá assinar valores de síntese de outros documentos, valores esses fornecidos por ciberpragas, sem poder evitar o problema. Poderá eventualmente detectar a fraude à posteriori, mas entretanto já realizou assinaturas que não pretendia.

Actualmente, este problema cria um risco real de roubo de identidade. Mas as assinaturas manuscritas possuem muitos outros riscos, e alguns bem piores, pelo que não creio que fiquemos pior com as assinaturas digitais do que estávamos com as manuscritas.

Nenhum comentário:

Postar um comentário

Atire a sua pedra, vá!