Fondamentalement, la signature ad hoc dans ce contexte signifie que le binaire est signé sans aucune preuve cryptographique.
En principe, les binaires sont normalement signés en ajoutant un soi-disant CMS (un message cryptographique) où le hachage de CodeDirectory est le message signé par l'identité de signature. Cela signifie qu'un étranger peut vérifier que le code a bien été signé par une personne détenant la clé privée de cette identité.
Lors de l'exécution de programmes, le système macOS peut vérifier que ces signatures sont valides et qu'il approuve l'identité de signature - et si c'est le cas, exécutez le programme. Ce sont les bases de la fonctionnalité GateKeeper.
Les binaires signés ad-hoc sont très différents car ils ne contiennent pas de tels CMS. Au lieu de cela, il contient simplement la valeur de hachage SHA-1 du CodeDirectory sans aucune preuve cryptographique de sa validité, et aucun chemin de certificats / identités à vérifier.
Le CodeDirectory est un objet qui décrit une instance particulière de code statique en ayant des valeurs de hachage pour différents morceaux de code à partir desquels l'application est créée. En vous assurant que CodeDirectory n'est pas altéré en vérifiant la signature cryptographique et que les différents bits de code de l'application correspondent aux valeurs de hachage stockées dans le répertoire, vous pouvez vérifier que le code n'a pas été altéré.
Sans la preuve cryptographique, ce contrôle "non altéré" ne peut pas être effectué de manière normale.
Au lieu de cela, les binaires signés ad-hoc sont vérifiés en comparant la valeur de hachage SHA-1 à une liste de valeurs de hachage "bonnes connues" stockées dans le cache d'approbation statique à l'intérieur du noyau.
Essentiellement, cela signifie que les «restrictions importantes» imposées à toute demande que vous signez vous-même ad hoc est qu'elle ne passera aucun type de vérification nulle part. Ce sera fondamentalement la même chose qu'un binaire non signé.
Cependant, si vous êtes Apple, vous pouvez créer des applications qui ne sont pas signées de code de la manière habituelle et qui sont à la place explicitement approuvées par le noyau. C'est-à-dire si, par exemple, Apple veut s'assurer qu'une application n'est pas altérée lorsqu'elle est exécutée à un stade précoce du démarrage du système où la vérification complète de l'identité de signature n'est pas opérationnelle (ou n'est pas disponible), elle peut utiliser la signature ad hoc. Ces applications peuvent toujours être vérifiées par le cache de confiance statique, que votre référentiel de certificats soit connecté ou autre.
Dans la pratique, la création de fichiers binaires signés ad hoc n'a qu'une valeur pratique pour les développeurs Apple.
Vous pouvez trouver une documentation mineure sur la signature ad hoc dans la section développeur d'Apple. Par exemple:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
Mais vous pouvez également trouver des extraits de documents dans le code source de l'utilitaire codesign lui-même et dans le code source de libsecurity.
codesign -dv --verbose=4 /path/to/the.app
. Vous obtiendrez une ligne disantSignature=adhoc
, qui semble indiquer une signature adhoc. Les autres clés qui sont généralement présentes dans une application iOS régulièrement signée sont notamment absentes, telles queAuthority
andTeamIdentifier