Pada dasarnya penandatanganan ad-hoc dalam konteks ini berarti biner ditandatangani tanpa bukti kriptografi sama sekali.
Pada dasarnya, biasanya binari ditandatangani dengan menambahkan apa yang disebut CMS (pesan kriptografi) di mana hash dari CodeDirectory adalah pesan yang ditandatangani oleh identitas penandatanganan. Ini berarti bahwa orang luar dapat memverifikasi bahwa kode itu memang ditandatangani oleh seseorang yang memegang kunci pribadi untuk identitas itu.
Saat menjalankan program, sistem macOS dapat memverifikasi bahwa tanda tangan ini valid, dan mempercayai identitas penandatanganan - dan jika benar, jalankan program. Ini adalah dasar-dasar fungsionalitas GateKeeper.
Binari yang ditandatangani ad-hoc sangat berbeda karena tidak mengandung CMS seperti itu. Sebaliknya ia hanya memegang nilai hash SHA-1 dari CodeDirectory tanpa bukti kriptografi validitasnya, dan tidak ada jalur sertifikat / identitas untuk memverifikasi.
CodeDirectory adalah objek yang menggambarkan contoh kode statis tertentu dengan memiliki nilai hash untuk berbagai bagian kode tempat aplikasi dibuat. Dengan memastikan bahwa CodeDirectory tidak terampas dengan memverifikasi tanda tangan kriptografi, dan bahwa berbagai bit kode aplikasi cocok dengan nilai hash yang disimpan dalam direktori, Anda dapat memastikan bahwa kode tersebut tidak dirusak.
Tanpa bukti kriptografis, pemeriksaan "tidak terampas" ini tidak dapat dilakukan dengan cara normal.
Alih-alih biner yang ditandatangani ad-hoc diperiksa dengan membandingkan nilai hash SHA-1 dengan daftar nilai hash "dikenal baik" yang disimpan dalam cache trust statis di dalam kernel.
Intinya ini berarti bahwa "batasan signifikan" yang ditempatkan pada aplikasi apa pun yang Anda ad-hoc tandatangani sendiri adalah tidak akan melewati segala jenis verifikasi di mana pun. Pada dasarnya sama dengan biner yang tidak ditandatangani.
Namun, jika Anda Apple, Anda dapat membuat aplikasi yang tidak ditandai kode dengan cara biasa, dan sebaliknya dipercaya secara eksplisit oleh kernel. Yaitu jika misalnya Apple ingin memastikan bahwa suatu aplikasi tidak terhapus ketika dijalankan pada tahap awal dalam startup sistem di mana verifikasi identitas penandatanganan lengkap tidak berjalan dan (atau tidak tersedia) mereka dapat menggunakan penandatanganan ad-hoc. Aplikasi ini selalu dapat diverifikasi oleh cache trust statis, tidak peduli apakah repositori sertifikat Anda disembunyikan atau hal-hal seperti itu.
Dalam praktiknya membuat binari yang ditandatangani ad-hoc hanya bernilai praktis bagi pengembang Apple.
Anda dapat menemukan dokumentasi kecil tentang penandatanganan ad-hoc di bagian pengembang Apple. Sebagai contoh:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
Tetapi Anda juga dapat menemukan potongan dokumen dalam kode sumber untuk utilitas codesign itu sendiri, dan dalam kode sumber untuk libsecurity.
codesign -dv --verbose=4 /path/to/the.app
. Anda akan mendapatkan kembali kalimatSignature=adhoc
yang menunjukkan tanda tangan adhoc. Terutama yang tidak ada adalah kunci lain yang biasanya hadir dalam aplikasi iOS yang ditandatangani secara reguler, sepertiAuthority
danTeamIdentifier