По сути, специальная подпись в этом контексте означает, что двоичный файл подписан без каких-либо криптографических доказательств вообще.
По существу, двоичные файлы обычно подписываются путем добавления так называемой CMS (криптографическое сообщение), где хэш CodeDirectory - это сообщение, которое подписано удостоверением подписи. Это означает, что посторонний может убедиться, что код действительно был подписан кем-то, кто держит закрытый ключ для этой личности.
При запуске программ система macOS может проверить, что эти подписи действительны, и что она доверяет удостоверению подписи - и если это так, запустите программу. Это основы функциональности GateKeeper.
Специальные подписанные двоичные файлы сильно отличаются, поскольку они не содержат таких CMS. Вместо этого он просто содержит значение хеш-кода SHA-1 CodeDirectory без какого-либо криптографического доказательства его достоверности и не содержит пути сертификатов / идентификаторов для проверки.
CodeDirectory - это объект, который описывает конкретный экземпляр статического кода, имея хеш-значения для различных частей кода, из которых сделано приложение. Убедившись, что CodeDirectory не изменен путем проверки криптографической подписи и что различные биты кода приложения соответствуют значениям хеш-функции, хранящимся в каталоге, вы можете убедиться, что код не был подделан.
Без криптографического доказательства эта «нетронутая» проверка не может быть выполнена обычным способом.
Вместо этого проверяются специальные двоичные файлы со знаком, сравнивая хеш-значение SHA-1 со списком «известных хороших» хеш-значений, хранящихся в статическом доверительном кеше внутри ядра.
По сути, это означает, что «существенные ограничения», налагаемые на любое приложение, которое вы сами подписываете, заключаются в том, что оно нигде не пройдет никакой проверки. Это в основном то же самое, что и не подписанный двоичный файл.
Однако, если вы Apple, вы можете создавать приложения, которые не имеют кодовой подписи обычным способом, а вместо этого явно доверяются ядру. Т.е. если, например, Apple хочет убедиться, что приложение не нарушено при запуске на ранней стадии запуска системы, когда полная проверка подлинности подписи не запущена (или недоступна), они могут использовать специальную подпись. Эти приложения всегда могут быть проверены статическим кешем доверия, независимо от того, хранится ли хранилище сертификатов или что-то в этом роде.
На практике создание специально подписанных двоичных файлов имеет практическую ценность только для разработчиков Apple.
Вы можете найти небольшую документацию по специальной подписи в разделе для разработчиков Apple. Например:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
Но вы также можете найти фрагменты документов в исходном коде самой утилиты codeign и в исходном коде libsecurity.
codesign -dv --verbose=4 /path/to/the.app
. Вы получите строку с надписьюSignature=adhoc
, которая, кажется, указывает на временную подпись. В частности отсутствует другие ключи , которые обычно присутствуют в регулярно подписанном приложении IOS, такие какAuthority
иTeamIdentifier