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.
-
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.
-
Selecione a aba MS CAPI e marque a opção CNG Habilitada.
-
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.
-
Para obter o certificado basta salvar para arquivo; na tabela de certificados do DINAMOcon, clique 2 vezes no certificado.
-
Depois clique em Detalhes e na opção Copiar para arquivo.
-
Escolha a opção Não, não exportar a chave privada.
-
Selecione o formato X.509 binário codificado por DER (*.cer).
-
Salve o arquivo.
-
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 certutilcertutil -user -store "My"
Saída do comando certutilMy "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.
- Nome do container da chave
-
Depois basta abrir o prompt e usar o seguinte comando:
Comando de assinaturasigntool.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 anteriormentenome_do_container
é o nome do container que aparece na coluna Container na tabela de certificados do DINAMOconarquivo.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 signtool
ou 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.
signtool verify /pa /v dinamo-4.7.31-x64-setup.msi
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