tl; dr: установить опцию --textmode .
Из RFC 4880, 5.2.4.Компьютерные подписи:
5.2.4. Компьютерные подписи
Все подписи формируются путем создания хеша над данными подписи, а затем с использованием результирующего хеша в алгоритме подписи.
Для двоичных подписей документов (тип 0x00) данные документа хэшируются напрямую. Для подписей текстового документа (тип 0x01) документ канонизируется путем преобразования концов строк в <CR><LF> , и результирующие данные хэшируются.
Другими словами, вам нужно убедиться, что GnuPG обрабатывает документ как текстовый документ при подписании, что необходимо включить с помощью параметра --textmode :
gpg --textmode --detach --sign file
gpg --list-packets signature-file , вы увидите различные типы подписей из RFC 4880, вторая строка содержит sigclass 0x01 с параметром --textmode вместо sigclass 0x00 без него.
От man gpg (то же самое для GnuPG 2):
-t, --textmode
--no-textmode
Обрабатывайте входные файлы как текст и сохраняйте их в канонической текстовой форме OpenPGP со стандартными окончаниями строк "CRLF". Это также устанавливает необходимые флаги для информирования получателя о том, что зашифрованные или подписанные данные являются текстовыми, и может потребоваться преобразование концов строк обратно во все, что использует локальная система. Этот параметр полезен при обмене данными между двумя платформами, которые имеют разные соглашения о конце строки (UNIX-подобные для Mac, Mac для Windows и т.д.). --no-textmode отключает эту опцию и используется по умолчанию.
Если -t (но не --textmode) используется вместе с защитой и подписью, это позволяет очищать подписанные сообщения. Этот ключ необходим для совместимости командной строки с версиями PGP для командной строки; обычно вы используете --sign или --clearsign чтобы выбрать тип подписи.