Caso de uso: Assinar Documento

Este caso de uso implementa o processo de realização de uma assinatura digital de um documento eletrônico.
Qualquer arquivo armazenado em disco pode ser digitalmente assinado. Seu conteúdo é previamente convertido para um formato MIME de transporte. O produto da operação de assinatura é armazenado num envelope de transporte e salvo em disco para uso pelo operador.

 

Ator

Operador

 

Pré-condições

O CSP para acesso à chave privada do operador deve estar instalado apropriadamente.

 

Fluxo de eventos

O operador seleciona o documento a ser digitalmente assinado. O sistema obtém nas definições de configuração: a política de assinatura a ser utilizada (ver R-1), o algoritmo de assinatura (ver R3), a definição de verificação da conformidade do certificado, a definição de verificação da revogação do certificado, o formato de envelopamento do documento assinado e o endereço web da TSA. O sistema carrega o documento em memória e converte seu formato para um tipo MIME reconhecível.
O operador seleciona um tipo de comprometimento. O sistema armazena a seleção do operador. A lista exibida é dependente da política de assinatura, conforme definido em R-2.
O operador indica que deseja incluir sua localização na assinatura digital. O sistema armazena as definições de localização do usuário, conforme R10.
O operador indica que deseja incluir o instante corrente na assinatura digital. O sistema armazena a data, hora e segundos correntes para a composição do atributo assinado SigningTime.
O operador seleciona o certificado digital para assinatura. O sistema executa o Caso de uso: Verificar validade e o Caso de uso: Verificar revogação.
O operador informa o PIN de acesso à chave privada. O sistema assina digitalmente o documento MIME selecionado conforme R7, obtém o(s) Time-Stamp Token(s) necessários conforme R9, compõe um envelope de transporte, conforme R8, salvo o resultado em disco como definido em R6 e informa ao operador o sucesso da operação e a localização do documento assinado.

 

Exceções

O operador cancela a seleção do documento a ser assinado. O caso de uso é encerrado.
Não existe um repositório de certificados digitais disponível. O sistema exibe mensagem de alerta ao operador, solicitando a inserção da mídia de armazenamento do certificado.
Uma definição de política de assinatura não está disponível na configuração. O sistema seleciona a política CAdES-BES.
Uma definição de algoritmo de assinatura não está disponível, caso a política escolhida seja CAdES-BES ou CAdES-T. O sistema seleciona o algoritmo DSA com SHA-1.
Uma definição de algoritmo de assinatura não está disponível, caso a política escolhida seja da ICP-Brasil. O sistema seleciona o algoritmo RSA com SHA-1
A configuração define que não seja verificada a conformidade do certificado ou (que seja verificada somente uma vez por sessão e existe disponível produto da última verificação). O sistema não verifica a conformidade do certificado.
A configuração define que não seja verificada a revogação do certificado ou (que seja verificada somente uma vez por sessão e existe disponível produto da última verificação). O sistema não verifica a revogação do certificado.
A configuração não forneceu o endereço de uma TSA e uma política de assinatura que exige um TST foi selecionada. O sistema informa o problema ao operador e o caso de uso é encerrado.
Ocorre uma falha na verificação do certificado ou na verificação da revogação O sistema fornece feedback completo ao operador, recomendando que o documento não seja assinado.
O certificado digital do operador está inconforme O sistema fornece feedback completo ao operador, recomendando que o documento não seja assinado.
O certificado digital do operador está expirado ou foi revogado. O sistema fornece feedback completo ao operador e o caso de uso é encerrado.
Um dos perfis CAdES-BES ou AD-CP foi selecionado. O sistema obtém a data e hora corrente do sistema operacional e não obtém o TST.
Ocorreu uma falha na verificação do carimbo de tempo obtido. O sistema emite um alerta ao operador, informando que o carimbo poderá não ser válido como evidência.

 

Regras

R1 - Políticas de assinatura disponíveis na configuração

Políticas genéricas: CAdES-BES e CAdES-T;
Políticas ICP-Brasil: AD-CP, AD-T, AD-R, AD-C e AD-A.

 

R2 - Tipos de comprometimento disponíveis

Para políticas de assinatura genéricas, são válidos somente os tipos definidos na RFC 5126: Prova de origem, Prova de recebimento, Prova de envio e Prova de aprovação. Para políticas de assinatura da ICP-Brasil são válidos também os tipos definidos no DOC-ICP-15: Concordância, Autorização, Testemunho, Autoria, Conferência, Revisão, Ciência, Publicação, Teste. Tipo default: Prova de origem.

 

R3 - Algoritmos de assinatura digital

Políticas genéricas: DSA com SHA-1, RSA com SHA-1 ou RSA com MD5;
Políticas ICP-Brasil: RSA com SHA-1.

 

R4 - Verificação de conformidade

Opções disponíveis na configuração: não verificar, verificar uma única vez por sessão e verificar sempre a cada assinatura. A cada verificação, o produto da operação do Caso de uso: Verificar validade (um relatório de validação e a cadeia de certificados utilizada) deve ficar disponível.

 

R5 - Verificação de revogação

Opções disponíveis na configuração: não verificar, verificar uma única vez por sessão e verificar sempre a cada assinatura. A cada verificação, o produto da operação do Caso de uso: Verificar revogação (um relatório de validação e as LCR's obtidas durante o processo) deve ficar disponível.

 

R6 - Formatos do envelope de transporte do documento assinado

Presentemente a aplicação suporta somente o formato CMS codificado em DER; o formato XMLDSig não é suportado. O arquivo produzido é salvo em disco no mesmo local que o documento eletrônico, com o mesmo nome deste e extensão .p7s adicionada.

 

R7 - Cálculo do resumo criptográfico para assinatura

Entram na composição do hash do conteúdo assinado os seguintes elementos: o documento eletrônico a ser assinado e o conteúdo codificado em DER de todos os atributos assinados.

 

R8 - Composição do envelope de transporte

CAdES-BES:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.certificate = cadeia de certificados do assinante;
SignedData.crls = LCR's coletadas durante a verificação da revogação;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningTime, SigningCertificateV2, CommitmentTypeIndication.

CAdES-T:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.certificate = cadeia de certificados do assinante;
SignedData.crls = LCR's coletadas durante a verificação da revogação;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningCertificateV2, CommitmentTypeIndication;
SignerInfo.unsignedAttrs = SignatureTimeStamp.

AD-CP:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.certificate = cadeia de certificados do assinante;
SignedData.crls = LCR's coletadas durante a verificação da revogação;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningTime, SigningCertificateV2, CommitmentTypeIndication, SignaturePolicy.

AD-T:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.certificate = cadeia de certificados do assinante;
SignedData.crls = LCR's coletadas durante a verificação da revogação;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningCertificateV2, CommitmentTypeIndication, SignaturePolicy;
SignerInfo.unsignedAttrs = SignatureTimeStamp.

AD-R:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.certificate = cadeia de certificados do assinante;
SignedData.crls = LCR's coletadas durante a verificação da revogação;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningCertificateV2, CommitmentTypeIndication, SignaturePolicy;
SignerInfo.unsignedAttrs = SignatureTimeStamp, ESCTimeStampToken, CompleteRevocationReferences, CompleteCertificateReferences.

AD-C:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningCertificateV2, CommitmentTypeIndication, SignaturePolicy;
SignerInfo.unsignedAttrs = SignatureTimeStamp, ESCTimeStampToken, CompleteRevocationReferences, CompleteCertificateReferences, CertificateValues, RevocationValues.

AD-A:

SignedData.version = 3;
SignedData.eContentType = id-data;
SignedData.eContent = conteúdo do documento assinado;
SignedData.digestAlgorithms = algoritmo de hash utilizado;
SignerInfo.version = 1;
SignerInfo.signature = buffer assinado;
SignerInfo.sid = DN do emissor do certificado e seu número serial;
SignerInfo.signatureAlgorithm = algoritmo de assinatura utilizado;
SignerInfo.signedAttrs = MessageDigest, ContentType, SigningCertificateV2, CommitmentTypeIndication, SignaturePolicy;
SignerInfo.unsignedAttrs = SignatureTimeStamp, ESCTimeStampToken, CompleteRevocationReferences, CompleteCertificateReferences, CertificateValues, RevocationValues, ArchiveTimeStampToken.

R9 - MessageImprint para obtenção de TST

Como definido na RFC 3161, o campo messageImprint da requisição TSP para obtenção do carimbo de tempo deve ter a forma:

  MessageImprint ::= SEQUENCE {
    hashAlgorithm   AlgorithmIdentifier,
    hashedMessage   OCTET STRING
  },
	

onde hashedMessage é o resumo criptográfico do dado a ser carimbado. Este campo é o produto do hash calculado segundo o algoritmo especificado da concatenação dos seguintes valores componentes (não incluídos o tipo e o indicador DER de tamanho):
SignatureTimeStamp: o buffer assinado digitalmente;
ESCTimeStampToken: o buffer assinado digitalmente, o valor do atributo SignatureTimeStamp, o valor do atributo CompleteCertificateReferences, o valor do atributo CompleteRevocationReferences;
ArchiveTimeStampToken: o buffer assinado digitalmente, o valor do atributo SignatureTimeStamp, o valor do atributo CompleteCertificateReferences, o valor do atributo CompleteRevocationReferences, o valor do atributo CertificateValues, o valor do atributo RevocationValues.

 

R10 - Localização do usuário

Como definido na RFC 5126, a localização do usuário é incluída na assinatura como um atributo assinado SignerLocation, que deve incluir um ou mais dos campos a seguir:

Pós-condições

O envelope de transporte do documento assinado está disponível para o operador. O produto das verificações de conformidade e revogação do certificado do operador estão disponíveis para a próxima operação.

 

Pontos de extensão

Caso de uso: Verificar validade e Verificar revogação.

 

Outros requisitos

Trilha de auditoria:

Operação realizada (assinatura); data da operação; hash do arquivo; identificação do certificado do signatário (campos subject, issuer, serialNumber e campo policyIdentifier da extensão CertificatePolicies), relatório de validação da conformidade do certificado (se realizada ou indicação de não execução da verificação) e relatório de verificação da revogação do certificado (se realizada ou indicação de não execução da verificação).