基本的に、このコンテキストでのアドホック署名は、バイナリが暗号化された証明なしで署名されることを意味します。
本質的に、バイナリは通常、いわゆるCMS(暗号メッセージ)を追加することによって署名されます。CodeDirectoryのハッシュは、署名IDによって署名されたメッセージです。つまり、部外者はコードがそのIDの秘密鍵を保持している誰かによって実際に署名されたことを確認できます。
プログラムを実行するとき、macOSシステムはこれらの署名が有効であること、および署名IDを信頼していることを確認できます。信頼できる場合は、プログラムを実行します。これは、GateKeeper機能の基本です。
アドホック署名されたバイナリは、そのようなCMSを含まないため、大きく異なります。代わりに、CodeDirectoryのSHA-1ハッシュ値を保持し、その有効性を暗号で証明することなく、検証する証明書/ IDのパスを保持しません。
CodeDirectoryは、アプリケーションを構成するさまざまなコードのハッシュ値を持つことにより、静的コードの特定のインスタンスを記述するオブジェクトです。暗号署名を検証することでCodeDirectoryが改ざんされていないこと、およびアプリケーションのさまざまなコードビットがディレクトリに格納されているハッシュ値と一致していることを確認することで、コードが改ざんされていないことを確認できます。
暗号証明がないと、この「改ざんされていない」チェックは通常の方法では実行できません。
代わりに、アドホック署名されたバイナリは、SHA-1ハッシュ値をカーネル内の静的信頼キャッシュに格納されている「既知の正常な」ハッシュ値のリストと比較することによってチェックされます。
本質的に、これは、自分でその場で署名するアプリケーションに課される「重要な制限」は、いかなる種類の検証もどこにもパスしないことを意味します。基本的には、署名されていないバイナリと同じです。
ただし、Appleの場合は、通常の方法でコード署名されておらず、代わりにカーネルによって明示的に信頼されているアプリケーションを作成できます。つまり、たとえばAppleが、システムの起動の初期段階で完全な署名付きID検証が実行されていない(または利用できない)ときにアプリケーションが改ざんされていないことを確認したい場合は、アドホック署名を使用できます。これらのアプリケーションは、証明書リポジトリがホースされているかどうかに関係なく、常に静的信頼キャッシュによって検証できます。
実際には、その場限りの署名付きバイナリを作成することは、Apple開発者にとって実際的な価値があるだけです。
アドホック署名に関するマイナーなドキュメントは、Appleの開発者セクションにあります。例えば:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
ただし、ドキュメントのスニペットは、codesignユーティリティ自体のソースコード、およびlibsecurityのソースコードにもあります。