🔑Signature de fichiers windows

Comprendre le processus de signature des fichiers, en particulier des fichiers windows, en lien avec les certificats d'autorité (CA).

Quelques définitions

Un certificat selon le standard x509 contient :

  • 👨 des informations personnelles sur le sujet (ici le dev, nom, organisation)

  • ⚖️ nom du CA qui a signé ce certificat

  • 🕐 des informations sur la validité du certificat (expiration...)

  • 🖊️ la signature du CA (hash du certificat - sans la signature, signé par la clef privée du CA)

  • 🔑 la clef publique du sujet

Une signature est simplement un hash d'une structure, signé par une clef privée.

Pour un certificat https, on parlera de SSL Certificate, pour un certificat d'un programme, on parlera de Code Signing Certificate

Description du processus

  1. Le développeur obtient son certificat en le signant lui même ou en l'obtenant depuis une autorité de certification :

    1. Il génère sa paire clef publique/clef privée

    2. Il l'envoie au CA avec ses infos

    3. Le CA lui renvoie alors son certificat (voir définition au-dessus) contenant sa signature authentifiant les informations contenues.

  2. Le développeur signe son programme : il crée un signature block avec principalement :

    • 🖊️ le hash de son code signé avec sa clef privée

    • 📜 son certificat

    • ℹ️ la méthode de hash utilisée

  3. Windows reçoit le programme :

    1. Il hash le code (en excluant à la lecture du PE la section recevant le certificat)

    2. Il déchiffre le hash du code signé (voir 2.) et le compare avec le hash précédent. Il peut déchiffrer ce hash grâce à la clef publique du certificat du signature block (voir 2.).

    3. Si les deux matchent , le certificat correspond bien à la clef publique liée et le hash est le même qu'au moment de la signature du code, ce dernier est intègre. -> On peut maintenant vérifier la signature du certificat (par le CA) : on obtient le nom du CA (issuer) situé dans le certificat. Avec ce nom on peut aller chercher dans une base locale de certificats de CA "racines" (root certificates) le certificat correspondant et dedans la clef publique correspondant à ce CA. Cela nous permet de déchiffrer la signature et d'obtenir le hash supposé du certificat (sans la signature). On calcule à côté le hash du certificat (sans la signature) et on compare : si les deux correspondent le certificat est bien signé par la CA en question.

Ressources

Last updated