Pular para conteúdo

Authenticode

Informações Gerais

O Authenticode é uma tecnologia da Microsoft utilizada para identificar quem fez publicações de software. Para isso ele utiliza técnicas de criptografia para verificar a integridade do código e quem o publicou. São assinaturas digitais combinadas com entidades confiáveis incluindo autoridades certificadoras.

Configuração do Ambiente

Assinaturas baseadas em SHA1 podem ser feitas sem nenhuma configuração adicional, porém para assinar em SHA256 é necessário habilitar a CNG.

  1. Para habilitar a CNG abra a console DINAMOcon com permissão de administrador (clique com botão direito e selecione Executar como Administrador). Depois de aberto clique em Configuração Local.

    Tela inicial Console Tela inicial Console
    Tela inicial Console

  2. Selecione a aba MS CAPI e marque a opção CNG Habilitada.

    Parâmetros MS CAPI Parâmetros MS CAPI
    Parâmetros MS CAPI

  3. Aplique e volte para a tela inicial. Lembrando que para funcionar também é necessário que o certificado esteja habilitado para a máquina local e ela consiga acessar o HSM. Para validar isso basta ir em Certificados na tela inicial e verificar na tabela no menu Certificados . O ícone do certificado precisa aparecer na coluna Windows . Caso não esteja, basta clicar com o botão direito no certificado e clicar em Habilitar.

Assinatura

Para assinar, como exemplo será utilizado o Signtool, que é uma ferramenta de linha de comando da Microsoft criada para assinar, verificar e inserir carimbos de tempo em arquivos.

Para usar a ferramenta é necessário: - O arquivo do certificado. - O nome do container MSCAPI relacionado.

  1. Para obter o certificado basta salvar para arquivo; na tabela de certificados do DINAMOcon, clique 2 vezes no certificado.

    Tabela de certificados Tabela de certificados
    Tabela de certificados

  2. Depois clique em Detalhes e na opção Copiar para arquivo.

  3. Escolha a opção Não, não exportar a chave privada.

  4. Selecione o formato X.509 binário codificado por DER (*.cer).

  5. Salve o arquivo.

  6. Na mesma tabela de certificados, anote o nome do container da chave, que está em uma das colunas da tabela de certificados. Ex: 523D55BE1A_d282f562-098a-480e-a3ac-88d429900767

    Também é possível conseguir o nome do conteiner com o comando certutil, localizando o certificado específico na listagem de saída:

    Comando certutil
    certutil -user -store "My"
    
    Saída do comando certutil
    My "Pessoal"
    ================ Certificado 0 ================
    Número de Série: ff000000000000000000000000000001
    Emissor: C=BR, O=ICP-Brasil, OU=AC Dinamo, CN=AC Dinamo Multipla
     NotBefore: 17/11/2020 17:00
     NotAfter: 04/08/2040 17:00
    Requerente: C=BR, O=ICP-Brasil, OU=Autoridade Certificadora Raiz Brasileira v2, OU=AC Dinamo, OU=AC Dinamo     Multipla, OU=Certificado PF A3, CN=Alice Criptografica da Silva:12345670001
    Certificado não raiz
    Hash Cert(sha1): 523d55be1abbfab08c81b647e77a7861e182b17b
      Contêiner da chave = 523D55BE1A_d282f562-098a-480e-a3ac-88d429900767  # (1)!
      Provider = Dinamo HSM Cryptographic Provider
    A chave privada NÃO é exportável
    Teste de assinatura aprovado
    CertUtil: -store : comando concluído com êxito.
    
    1. Nome do container da chave
  7. Depois basta abrir o prompt e usar o seguinte comando:

    Comando de assinatura
    signtool.exe sign /f certificado.cer /csp "Dinamo HSM Cryptographic Provider" /v /kc nome_do_container /fd  sha256 arquivo.exe
    

    Onde:

    • certificado.cer é o certificado salvo anteriormente
    • nome_do_container é o nome do container que aparece na coluna Container na tabela de certificados do DINAMOcon
    • arquivo.exe é o arquivo que deseja assinar

Verificação

A verificação de um arquivo de código assinado com padrão Authenticode pode ser feita com o programa signtoolou exibinndo as propriedades do arquivo (na aba Assinaturas Digitais).

Para fazer a verificação de forma apropriada com o programa signtool é necessário incluir a opção /pa para que seja usada a Política de Verificação de Autenticação Padrão ao invés da Política de Verificação de Drivers do Windows.

Comando de verificação
signtool verify /pa /v dinamo-4.7.31-x64-setup.msi
Saída do comando
Verifying: dinamo-4.7.31-x64-setup.msi

Signature Index: 0 (Primary Signature)
Hash of file (sha256): 9BD26CD80866476402B36FA9EF19C8F72285E4FA8BECA451AC36100F514A562E

Signing Certificate Chain:
   Issued to: AAA Certificate Services
   Issued by: AAA Certificate Services
   Expires:   Sun Dec 31 20:59:59 2028
   SHA1 hash: D1EB23A46D17D68FD92564C2F1F1601764D8E349

      Issued to: Sectigo Public Code Signing Root R46
      Issued by: AAA Certificate Services
      Expires:   Sun Dec 31 20:59:59 2028
      SHA1 hash: 329B78A5C9EBC2043242DE90CE1B7C6B1BA6C692

            Issued to: Sectigo Public Code Signing CA R36
            Issued by: Sectigo Public Code Signing Root R46
            Expires:   Fri Mar 21 20:59:59 2036
            SHA1 hash: 0BC5E76773D2E44FC9903D4DFEFE451553BBEC4A

               Issued to: Dinamo Networks
               Issued by: Sectigo Public Code Signing CA R36
               Expires:   Tue Mar 14 20:59:59 2023
               SHA1 hash: D2E94D57511E818732108F8D56F96397600078B3

The signature is timestamped: Wed Aug 31 19:26:34 2022
Timestamp Verified by:
   Issued to: DigiCert Assured ID Root CA
   Issued by: DigiCert Assured ID Root CA
   Expires:   Sun Nov 09 21:00:00 2031
   SHA1 hash: 0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43

      Issued to: DigiCert Trusted Root G4
      Issued by: DigiCert Assured ID Root CA
      Expires:   Sun Nov 09 20:59:59 2031
      SHA1 hash: A99D5B79E9F1CDA59CDAB6373169D5353F5874C6

            Issued to: DigiCert Trusted G4 RSA4096 SHA256 TimeStamping CA
            Issued by: DigiCert Trusted Root G4
            Expires:   Sun Mar 22 20:59:59 2037
            SHA1 hash: B6C8AF834D4E53B673C76872AA8C950C7C54DF5F

               Issued to: DigiCert Timestamp 2022 - 2
               Issued by: DigiCert Trusted G4 RSA4096 SHA256 TimeStamping CA
               Expires:   Mon Mar 14 20:59:59 2033
               SHA1 hash: 8508F386515CB3D3077DB6B4B7C07F1B4A5E41DE


Successfully verified: dinamo-4.7.31-x64-setup.msi

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

Propriedade de assinatura digital do arquivo