Autor(es):
Gonçalves, Luís Filipe dos Santos
Data: 2010
Identificador Persistente: http://hdl.handle.net/10400.21/651
Origem: Repositório Científico do Instituto Politécnico de Lisboa
Assunto(s): Assinatura digital; XML; XML-DSIG; Assinaturas avançadas; XAdES; Java
Descrição
As comunicações electrónicas são cada vez mais o meio de eleição para negócios entre entidades e para as relações entre os cidadãos e o Estado (e-government). Esta diversidade de transacções envolve, muitas vezes, informação sensível e com possível valor legal. Neste contexto, as assinaturas electrónicas são uma importante base de confiança, fornecendo garantias de integridade e autenticação entre os intervenientes.
A produção de uma assinatura digital resulta não só no valor da assinatura propriamente
dita, mas também num conjunto de informação adicional acerca da mesma, como o algoritmo
de assinatura, o certificado de validação ou a hora e local de produção. Num cenário heterogéneo como o descrito anteriormente, torna-se necessária uma forma flexível e interoperável de descrever esse tipo de informação. A linguagem XML é uma forma adequada de representar uma assinatura neste contexto, não só pela sua natureza estruturada, mas principalmente por ser baseada em texto e ter suporte generalizado.
A recomendação XML Signature Syntax and Processing (ou apenas XML Signature) foi o
primeiro passo na representação de assinaturas em XML. Nela são definidas sintaxe e regras de processamento para criar, representar e validar assinaturas digitais. As assinaturas XML podem ser aplicadas a qualquer tipo de conteúdos digitais identificáveis por um URI, tanto
no mesmo documento XML que a assinatura, como noutra qualquer localização. Além disso,
a mesma assinatura XML pode englobar vários recursos, mesmo de tipos diferentes (texto
livre, imagens, XML, etc.).
À medida que as assinaturas electrónicas foram ganhando relevância tornou-se evidente
que a especificação XML Signature não era suficiente, nomeadamente por não dar garantias de validade a longo prazo nem de não repudiação. Esta situação foi agravada pelo facto da especificação não cumprir os requisitos da directiva 1999/93/EC da União Europeia, onde é estabelecido um quadro legal para as assinaturas electrónicas a nível comunitário.
No seguimento desta directiva da União Europeia foi desenvolvida a especificação XML
Advanced Electronic Signatures que define formatos XML e regras de processamento para
assinaturas electrónicas não repudiáveis e com validade verificável durante períodos de tempo extensos, em conformidade com a directiva. Esta especificação estende a recomendação XML Signature, definindo novos elementos que contêm informação adicional acerca da assinatura e dos recursos assinados (propriedades qualificadoras).
A plataforma Java inclui, desde a versão 1.6, uma API de alto nível para serviços de
assinaturas digitais em XML, de acordo com a recomendação XML Signature. Contudo, não
existe suporte para assinaturas avançadas. Com este projecto pretende-se desenvolver uma
biblioteca Java para a criação e validação de assinaturas XAdES, preenchendo assim a lacuna existente na plataforma.
A biblioteca desenvolvida disponibiliza uma interface com alto nível de abstracção, não
tendo o programador que lidar directamente com a estrutura XML da assinatura nem com os
detalhes do conteúdo das propriedades qualificadoras. São definidos tipos que representam os principais conceitos da assinatura, nomeadamente as propriedades qualificadoras e os recursos assinados, sendo os aspectos estruturais resolvidos internamente.
Neste trabalho, a informação que compõe uma assinatura XAdES é dividia em dois grupos:
o primeiro é formado por características do signatário e da assinatura, tais como a
chave e as propriedades qualificadoras da assinatura. O segundo grupo é composto pelos
recursos assinados e as correspondentes propriedades qualificadoras. Quando um signatário produz várias assinaturas em determinado contexto, o primeiro grupo de características será semelhante entre elas. Definiu-se o conjunto invariante de características da assinatura e do signatário como perfil de assinatura. O conceito é estendido à verificação de assinaturas englobando, neste caso, a informação a usar nesse processo, como por exemplo os certificados raiz em que o verificador confia. Numa outra perspectiva, um perfil constitui uma configuração do serviço de assinatura correspondente.
O desenho e implementação da biblioteca estão também baseados no conceito de fornecedor de serviços. Um fornecedor de serviços é uma entidade que disponibiliza determinada informação ou serviço necessários à produção e verificação de assinaturas, nomeadamente: selecção de chave/certificado de assinatura, validação de certificados, interacção com servidores
de time-stamp e geração de XML. Em vez de depender directamente da informação em
causa, um perfil — e, consequentemente, a operação correspondente — é configurado com
fornecedores de serviços que são invocados quando necessário. Para cada tipo de fornecedor de serviços é definida um interface, podendo as correspondentes implementações ser configuradas de forma independente. A biblioteca inclui implementações de todos os fornecedores
de serviços, sendo algumas delas usadas for omissão na produção e verificação de assinaturas.
Uma vez que o foco do projecto é a especificação XAdES, o processamento e estrutura relativos ao formato básico são delegados internamente na biblioteca Apache XML Security, que disponibiliza uma implementação da recomendação XML Signature.
Para validar o funcionamento da biblioteca, nomeadamente em termos de interoperabilidade,
procede-se, entre outros, à verificação de um conjunto de assinaturas produzidas por
Estados Membros da União Europeia, bem como por outra implementação da especificação
XAdES.