Fondamentalmente la firma ad-hoc in questo contesto significa che il binario è firmato senza alcuna prova crittografica.
In sostanza, normalmente i binari vengono firmati aggiungendo un cosiddetto CMS (un messaggio crittografico) in cui l'hash di CodeDirectory è il messaggio che viene firmato dall'identità della firma. Ciò significa che un estraneo può verificare che il codice sia stato effettivamente firmato da qualcuno che detiene la chiave privata per tale identità.
Durante l'esecuzione dei programmi, il sistema macOS può verificare che queste firme siano valide e che si fidi dell'identità della firma e, in tal caso, eseguire il programma. Queste sono le basi della funzionalità GateKeeper.
I binari firmati ad hoc sono molto diversi in quanto non contengono tale CMS. Invece, contiene semplicemente il valore hash SHA-1 di CodeDirectory senza alcuna prova crittografica della sua validità e nessun percorso di certificati / identità da verificare.
CodeDirectory è un oggetto che descrive una particolare istanza di codice statico con valori hash per vari pezzi di codice da cui è fatta l'applicazione. Assicurando che CodeDirectory non sia manomesso verificando la firma crittografica e che i vari bit di codice dell'applicazione corrispondano ai valori di hash memorizzati nella directory, è possibile verificare che il codice non sia stato manomesso.
Senza la prova crittografica questo controllo "non manomesso" non può essere eseguito normalmente.
Invece i binari firmati ad hoc vengono controllati confrontando il valore di hash SHA-1 con un elenco di valori di hash "conosciuti" memorizzati nella cache di trust statica all'interno del kernel.
In sostanza, ciò significa che le "restrizioni significative" poste su qualsiasi applicazione firmata ad hoc è che non passerà alcun tipo di verifica da nessuna parte. Fondamentalmente è lo stesso di un binario non firmato.
Tuttavia, se sei Apple, puoi creare applicazioni che non sono codificate in modo ordinario e che sono invece esplicitamente considerate affidabili dal kernel. Ad esempio, se ad esempio Apple vuole assicurarsi che un'applicazione non sia manomessa quando eseguita in una fase iniziale all'avvio del sistema in cui la verifica dell'identità della firma completa non è attiva e funzionante (o non è disponibile), può utilizzare la firma ad hoc. Queste applicazioni possono sempre essere verificate dalla cache di attendibilità statica, indipendentemente dal fatto che il repository di certificati sia nascosto o qualcosa del genere.
In pratica, la creazione di file binari firmati ad hoc ha un valore pratico solo per gli sviluppatori Apple.
Puoi trovare una documentazione minore sulla firma ad hoc nella sezione degli sviluppatori di Apple. Per esempio:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
Ma puoi anche trovare frammenti di documenti nel codice sorgente per l'utilità stessa e nel codice sorgente per libsecurity.