Pular para o conteúdo principal

Ciclo de vida da assinatura AD-RT

Uma assinatura AD-RT da ICP-Brasil (Referência de Tempo) é uma assinatura básica (AD-RB) com um carimbo de tempo da assinatura, emitido por uma autoridade de carimbo de tempo (ACT) ICP-Brasil. O carimbo prova quando a assinatura foi feita, por isso a assinatura sobrevive ao certificado do signatário. Mas ela não sobrevive ao certificado da ACT. Este artigo mostra por quanto tempo uma assinatura AD-RT continua verificável e como o PKI SDK a mantém verificável por mais tempo, com as políticas AD-RC e AD-RA.

O ciclo de vida de uma assinatura AD-RT: as políticas ICP-Brasil e a validade de cada certificado e carimbo

Para um caso real, com assinaturas que precisam durar décadas, veja Revalidação de diplomas, que mostra como o Digiploma mantém os diplomas digitais verificáveis.

Criar uma assinatura AD-RT​

A política AD-RT exige um carimbo de tempo da assinatura, por isso o assinador precisa de um requisitante de carimbo de tempo. O exemplo abaixo assina um elemento de um documento XML (XAdES):

var signer = new XmlElementSigner();
signer.SetSigningCertificate(cert); // certificado do signatário, com a chave privada
signer.SetXml(xmlDocument);
signer.SetToSignElementId(id);
signer.SetPolicy(XmlPoliciesForGeneration.GetPkiBrazilAdrTempo());

// autoridade de carimbo de tempo (ACT) ICP-Brasil
var tsaUri = new Uri("https://act.exemplo.com.br/");
signer.SetTimestampRequester(new TimestampRequester(tsaUri, accessToken));

signer.ComputeSignature(); // lança TimestampException se não conseguir o carimbo
var signedXml = signer.GetSignedXml();

A mesma política existe para os outros formatos: CadesPoliciesForGeneration.GetPkiBrazilAdrTempo() (CAdES) e PadesPoliciesForGeneration.GetPkiBrazilAdrTempo() (PAdES).

Por quanto tempo ela continua verificável​

PeríodoVerificável?Por quê
Enquanto o certificado do signatário for válidoSimComo qualquer assinatura.
Depois que o certificado do signatário expiraSimO carimbo de tempo da assinatura prova que ela foi feita enquanto o certificado era válido.
Depois que o certificado da ACT expiraNãoO próprio carimbo de tempo da assinatura não pode mais ser verificado.

Uma assinatura AD-RT também não guarda os certificados e as LCRs usados na validação: validá-la mais tarde depende de obtê-los nos repositórios das autoridades certificadoras.

Para saber até quando uma assinatura AD-RT pode ser verificada, leia o certificado do carimbo de tempo da assinatura:

var signature = XmlSignatureEditor.Open(signedXml).Signatures.First();
var timestamp = signature.SignatureTimestamps.Last().EncapsulatedTimestamp;
var verifiableUntil = timestamp.Signers.First().SigningCertificate.ValidityEnd;

Manter a assinatura verificável​

Cada política ICP-Brasil acrescenta evidências à anterior:

  • AD-RC (Referências Completas, XmlPoliciesForGeneration.GetPkiBrazilAdrCompleta()) acrescenta as referências e os valores dos certificados e das LCRs usados na validação, e um carimbo de tempo sobre a assinatura e essas referências. Ela não depende mais dos repositórios das autoridades certificadoras, mas os carimbos dela também expiram.
  • AD-RA (Referências para Arquivamento, XmlPoliciesForGeneration.GetPkiBrazilAdrArquivamento()) acrescenta um carimbo de tempo de arquivamento. Antes que ele expire, um novo carimbo de arquivamento, emitido com um certificado mais recente da ACT, é acrescentado sobre tudo. Renovada a tempo, a assinatura continua verificável indefinidamente.

O XmlSignatureEditor.ExtendArchiving acrescenta esse novo carimbo de arquivamento. Ele primeiro registra os dados de validação do carimbo de arquivamento anterior e depois carimba a assinatura de novo:

var editor = XmlSignatureEditor.Open(signedXml);
var signature = editor.Signatures.First(s => s.ArchiveTimestamps.Any());

var expiresOn = signature.ArchiveTimestamps.Last().EncapsulatedTimestamp.Signers.First().SigningCertificate.ValidityEnd;
if (expiresOn < DateTimeOffset.Now.AddDays(180)) {
var renewedXml = editor.ExtendArchiving(signature, timestampRequester, XmlPoliciesForValidation.GetPkiBrazil());
// Guarde renewedXml no lugar do arquivo anterior
}

O ExtendArchiving lança InvalidArchiveOperationException quando:

  • a assinatura não é válida;
  • nenhum dos carimbos de arquivamento dela pode ser validado;
  • o novo carimbo é assinado pelo mesmo certificado de um carimbo de arquivamento anterior, o que não estenderia o vencimento. Passe ignoreSameTsSigner: true para aceitá-lo mesmo assim.
Assinaturas AD-RT e AD-RC não podem ser estendidas

O ExtendArchiving exige uma política com carimbo de arquivamento: numa assinatura AD-RT ou AD-RC, ele falha. Para preservar essas assinaturas, proteja-as com uma assinatura AD-RA sobre o documento inteiro, que as cobre, e renove o carimbo de arquivamento dela. É assim que funciona um diploma digital: as assinaturas dos elementos DadosDiploma e DadosRegistro são cobertas pela assinatura de arquivamento do XML inteiro.

Veja também​

Ver em Markdown