Dans ce contexte, la signature ad hoc signifie essentiellement que le binaire est signé sans aucune preuve cryptographique.
Essentiellement, les binaires sont normalement signés en ajoutant un soi-disant CMS (un message cryptographique) où le hash du CodeDirectory est le message qui est signé par l'identité de signature. Cela signifie qu'une personne extérieure 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 des programmes, le système MacOS peut vérifier que ces signatures sont valides, et qu'il fait confiance à l'identité du signataire - et si c'est le cas, exécuter le programme. C'est la base de la fonctionnalité de 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 divers morceaux de code dont l'application est constituée. En s'assurant que le CodeDirectory n'a pas été altéré en vérifiant la signature cryptographique, et que les différents morceaux 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, cette vérification "non altérée" ne peut être effectuée 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 "connues et bonnes" stockées dans le cache de confiance statique du noyau.
En substance, cela signifie que les "restrictions importantes" imposées à toute application que vous signez vous-même de manière ad hoc sont qu'elle ne passera aucune sorte de vérification. Elle sera fondamentalement la même qu'un binaire non signé.
Cependant, si vous êtes Apple, vous pouvez créer des applications qui ne sont pas signées par un code ordinaire et qui sont au contraire explicitement approuvées par le noyau. Par exemple, si 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, même si votre référentiel de certificats est endommagé ou autre.
Dans la pratique, la création de binaires signés ad hoc ne présente un intérêt pratique que pour les développeurs Apple.
Vous pouvez trouver une documentation mineure sur la signature ad hoc dans la section des développeurs 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 de signature de code lui-même, et dans le code source de libsecurity.