Можно ли попросить gpg (или gpg4win) просто проверить, подписан ли файл конкретным файлом открытого ключа, без необходимости импортировать, подписывать и доверять этому ключу?
то есть что-то вроде
gpg --using-key pubkey.txt --verify message.txt
в отличие от необходимости создавать свой собственный закрытый ключ, а затем сделать
gpg --import pubkey.txt
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt
gpg --status-fd 1 --verify (thefile)
выводит ли команда в качестве первой строки отпечаток ключа, который сделал подпись.Ответы:
У вас должен быть открытый ключ для проверки подписи, сделанной с помощью соответствующего закрытого ключа, но вам не нужно подписывать или даже подписывать ключ локально. В этом случае вы получите предупреждение от GPG, что ключ не является доверенным.
Вот тест, который я сделал с файлом, подписанным моим собственным ключом, но в системе, где ключ не был импортирован:
К сожалению, предложение Гарри не работает, оно извлекает немного больше информации, но недостаточно, чтобы быть полезным.
Как видите, большая часть полученной информации - это идентификатор ключа подключа, использованного для создания подписи, и время создания подписи. Это соответствует данным, доступным для pgpdump (или --list-packages):
Как вы можете видеть, он предоставляет алгоритм хеширования, информацию о типе ключа (мой ключ подписи - это 3072-битный RSA-подраздел и идентификатор ключа этого подраздела, но идентифицировать главный ключ нечем. Это только информация раскрывается, когда у вас есть открытый ключ и проверка подписи.
Затем я импортировал свой открытый ключ в эту систему и повторил попытку:
Теперь он может идентифицировать ключ и сопоставить его с первичным ключом. Тем не менее, можно уменьшить характер этих предупреждений следующим образом:
До сих пор есть предупреждение, что это ненадежный ключ, но не массово, поэтому удаление многословия сводит его к следующему:
Открытый ключ необходим для этапа проверки, поскольку он используется для сопоставления данных, сгенерированных подписывающим лицом, с их закрытым ключом. Говоря простым языком, его можно рассматривать как дополнение к шифрованию, когда для дешифрования данных, зашифрованных в открытый ключ, необходим закрытый ключ.
Примечание: в этом примере я немного подправил UID, но каждый, кто получит этот ключ, увидит, кто он на самом деле. В противном случае на выходе получается прямое копирование и вставка.
РЕДАКТИРОВАТЬ: Вы можете вызвать файл открытого ключа напрямую, как брелок, если он у вас в не-ASCII-формате (т. Е. Файл .gpg вместо файла .asc). Тем не менее, вам все еще нужен открытый ключ. Для этого команда выглядит так:
источник
Если вы согласны с доставкой связки ключей, а не файла открытого ключа, вы, вероятно, захотите использовать
gpgv
вместоgpg
:источник
Если ваше слово «проверить» в вопросе означает «абсолютно проверить», то, конечно, необходимо импортировать открытый ключ для полной проверки подписанного документа. Однако, если это означает «идентифицировать», то ниже я опишу эвристику, которая может определить, все ли группы документов были подписаны одной и той же подписью.
Согласно тестам, проведенным @Ben для проверки моего комментария, существует вероятность, что следующая команда может быть использована для эвристического указания ключа подписи:
Тест Бена дал результат ниже. Следует отметить значения ERRSIG и NO_PUBKEY, а также значение «ID ключа RSA», которое частично содержится в них обоих, а именно:
Примечание над строкой
7FF2D37135C7553C
. Эта же строка находится внутри отпечатка ключа, который сообщается после импорта ключа:Эта строка находится в нижней части отпечатка пальца (подраздел выше), поэтому может использоваться для идентификации ключа. "Отпечаток первичного ключа", вероятно, также должен быть проверен, в дополнение к подразделу.
Строка «Идентификатор ключа RSA» идентична в обоих выходных данных и также находится в качестве последней части отпечатка пальца, поэтому вполне возможно, что этого достаточно для идентификации подписи. В этом случае
gpg --verify
может быть достаточно использовать только выходные данные для более простой идентификации подписи.Моих знаний о GPG недостаточно для полной проверки этого метода, поэтому вы должны попробовать его на других файлах примеров. Если это работает, вы можете отсортировать файлы по их сигнатурам, но вам нужно будет импортировать ключ, чтобы найти личность получателя.
Чтобы четко заявить еще раз: этот метод не может полностью идентифицировать подпись. Это только способ эвристической сортировки подписанных документов.
источник