La firma es un hash de la parte del ejecutable antes del bloque de firma de código. La mejor práctica es tener el instalador y la aplicación firmados.
Puede estudiar algunos detalles mirando esto:
enlace
EDITAR: OK, ahora que estoy fuera del dispositivo móvil y en un teclado real, puedo explicarlo.
Como se indica en el documento al que lo he remitido, el hash que se firma se genera en relación con el archivo ejecutable completo, excepto por dos partes excluidas (a) la suma de comprobación total del archivo; y (b) las tablas de certificados. Estos no pueden incorporarse al hashing debido al problema del huevo o la gallina (por ejemplo, estos campos dependen del contenido de la tabla de certificado de atributo y, por lo tanto, sus valores no son fijos hasta que se preparan y anexan los certificados / firmas).
En cuanto a la superficie / escenarios de ataque, vemos una vez más por qué es tan importante tener buenos primitivos criptográficos, y TAMBIÉN usar las mejores prácticas. Supongo que, en teoría, un atacante podría crear una versión malintencionada de una aplicación de software y luego transferirla a un instalador e incluir algunos datos cuidadosamente calculados para generar una colisión hash con un certificado MD5 real existente del proveedor de la aplicación, adjuntando ese certificado existente / Firma al ejecutable comprometido. Si solo verificaste el instalador, podrías ser engañado. Esta es la razón por la que no se puede confiar en MD5 para este tipo de aplicaciones. También es la razón por la que, además de verificar el instalador, debe verificar el programa de aplicación en sí.
Windows 7 aceptó los hashes MD5 para la firma de código, mientras que Windows 8 y versiones posteriores requieren SHA1 o superior. (Para lo que vale la pena, busqué en los archivos de mi programa y en los antiguos instaladores ahora mismo y solo encontré uno de 2008 o algo así que usaba MD5 para el hash de la firma. Segunda edición: Retiro eso, también encontré una versión relativamente reciente de Winzip utilizando MD5).