Certificação Digital no Open XML

O Microsoft Office suporta a assinatura digital de documentos desde a versão Office XP de 2001. O usuário podia a partir desta versão usar um certificado digital de assinatura (com os da ICP-Brasil, criada no ano seguinte) para assinar digitalmente documentos Word, Excel e Powerpoint. O Office XP incluia também suporte a múltiplas assinaturas no mesmo documento, a revogação e ao uso de smart cards/tokens para carregar a chave privada.

Uma pequena digressão técnica aqui: o Office XP e os posteriores geram o que se chama de assinatura digital envelopada, ou seja, a assinatura digital está contida no próprio documento. Ã outra forma de assinatura digital é a chamada detachada, onde a assinatura fica em um outro arquivo externo ao documento, e que tem os seus próprios problemas de usabilidade ("onde está a assinatura que estava aqui?") e no suporte a múltiplas assinaturas.

Um problema no entanto é que nesse caso a assinatura fica embutida dentro dos arquivos binários do Office, um formato que apesar de ter as especificações disponíveis é notoriamente complexo de ser gerado e trabalhado. Além disso, as assinaturas digitais dentro do formato binário não seguem a especificação XML-DSig, adotada como padrão pelo ePing e pela ICP-Brasil. Para cenários envolvendo várias organizações e interação com órgãos governamentais isto representava um sério empecilho.

Assinatura no Office 2007/Open XML

O Office 2007 traz entre as suas novidates o suporte ao formato de documentos Office Open XML. O Open XML é um formato aberto, baseado em XML, e que mantém toda a compatibilidade com os formatos binários do Office. O novo formato também está disponível para versões anteriores do Office, usando o Compatibility Pack fornecido gratuitamente no site da Microsoft.

Os documentos Office Open XML são compatíveis com o padrão XML-DSig para assinaturas digitais, permitindo que agora um documento Word, Excel ou Powerpoint possa ter uma asssinatura digital XML envelopada dentro do próprio documento. Um teste interessante pode ser feito a partir do próprio Word 2007. Na figura abaixo eu criei um documento Word simples:

Documento Word sem assinatura

Para assinar digitalmente o arquivo, basta clicar no ícone de inserir assinaturas. Um recurso interessante do Word 2007 é que além da assinatura digital ele permite inclui a própria assinatura "física" da pessoa no documento, fornecendo uma boa representação visual da assinatura digital para o usuário final.

Assinando digitalmente o documento

Ao clicar em Sign, o Windows pede o PIN do smart card onde está o meu certificado digital, e pronto: o documento está assinado. O Word 2007 automaticamente salva o arquivo e impede a sua modificação (exceto para adicionar uma nova assinatura), e mostra na barra ao lado as assinaturas digitais existentes no documento.

Documento Word 2007 assinado digitalmente

Mas isso é só o começo. O poder do Open XML realmente aparece ao examinarmos o conteúdo do arquivo que foi gerado. O Open XML usa como container o Open Packaging Convention, um padrão aberto que usa o ZIP como empacotador. Voce pode então renomear a extensão do arquivo de DOCX para ZIP, e abrir o seu conteúdo com o seu descompactador favorito.

Aqui abaixo então vamos renomear o arquivo para ZIP e abrí-lo:

Conteúdo de um arquivo DOCX

Dentro do arquivo existe a pasta _xmlsignatures, e dentro dela vamos encontrar o arquivo sig1.xml (com várias assinaturas teríamos também o sig2.xml, sig3.xml, etc.). Clicando no arquivo, temos uma assinatura digital XML-Dsig:

Assinatura XML-DSig envelopada em documento Open XML

Benefícios

O Open XML permite que agora possamos ter documentos de escritório com assinaturas digitais envelopadas, usando um padrão aberto, e compatíveis com o padrão de assinatura digital adotado no Brasil. Isso remove o obstáculo que tinhamos antes de interoperabilidade na assinatura digital de documentos Office.

O fato do Open XML utilizar XML faz com que o Office não seja mais necessário para a geração destes documentos. Na verdade não é nem necessário ter Windows: a equipe da UNESP fez uma ótima prova de conceito usando uma aplicação Web rodando em Linux gerando arquivos DOCX. Não é dificil imaginar por exemplo um sistema de documentos de uma instituição - desenvolvido em qualquer plataforma - fornecendo arquivos DOCX assinados digitalmente gerados em tempo real. Pode ser o boletim ou certidão emitida por uma escola, uma certidão emitida por um tribunal, ou um nada consta de um órgão do governo.

Da mesma forma é muito fácil agora assinar e processar as assinaturas digitais em um documento Office. Para adicionar a assinatura, basta abrir o arquivo Open XML (lembre-se que nada mais é do que um ZIP) e colocar a assinatura XML-DSig no diretório apropriado, método que funciona aliás para assinar qualquer arquivo que use a Open Packaging Convention. Um exemplo simples feito em .NET está disponível aqui.

Para ter mais informações sobre como desenvolver soluções usando Open XML, veja o portal OpenXMLDeveloper.Org.

Participe!

O Open XML é o único padrão aberto de documentos XML que suporta assinaturas digitais. Ele foi desenvolvido em conjunto com empresas como a Apple, Novell e Corel, e apoio de instituições como a British Library e a Biblioteca do Congresso Americano , e hoje é um padrão aberto internacional mantido pelo consórcio ECMA. A Microsoft está neste momento trabalhando para que este seja também um padrão ISO e ABNT, transferindo o controle do padrão a estas instituições.

Se soluções de documentos XML assinados digitalmente são de interesse da sua organização, venha colaborar no processo de padronização do Open XML no Brasil. Entre em contato com a ABNT e participe do grupo de trabalho.