Когда я подписываю документ, я могу выбрать секретный ключ для использования, например, как это:
gpg --default-key=BF8C1203 --clearsign message.txt
Когда я проверяю документ, я не вижу эту опцию, я могу просто сделать:
gpg --verify message.txt.asc
Как GPG знает что открытый ключ использовать для проверки? Существует ли способ сказать этому использовать другой открытый ключ?
gpg
проверяет подпись по всем открытым ключам, которые Вы имеете.Если у Вас есть два закрытых ключа, у Вас должны также быть соответствующие открытые ключи. Так, gpg
просмотрит все открытые ключи, которые Вы имеете, включая ключи Вашего друга и фигуру, кто подписал файл.
Если файл подписывается мной, и у Вас нет моего открытого ключа, то gpg
не может проверить мою подпись, пока Вы не загружаете мой открытый ключ с репозитория с открытым ключом как https://pgp.mit.edu/
Более подробное объяснение ниже от https://security.stackexchange.com/questions/82490/when-signing-email-with-gpg-how-does-verification-by-the-receiver-work
Между и закрытым ключом с открытым ключом существует уникальная ассоциация. Таким образом, если отправитель будет использовать определенный закрытый ключ для подписания сообщения, и Вы проверяете подпись с помощью соответствующей общественности, то затем проверка подписи успешно выполнится, только если сообщение не было изменено.
Процедура проверки и природа ассоциации между общедоступным и частным варьируются с системой шифрования, которую Вы рассматриваете (RSA, DSA, и т.д.), но оператор выше сохраняется для любой асимметричной схемы.
То, что действительно имеет значение, - то, что отправитель является единственным, который может произвести действительную подпись, потому что он - единственный, кто знает частное, но любой знает общественность, таким образом, любой может проверить подпись.
После подписания GPG добавляет маркер к текстовому сообщению, которое может использоваться, чтобы проверить, что сообщение не было изменено в пути: это - подпись. Вам не нужен GPG для чтения сообщения, потому что сам текст не шифруется, существует только дополнительный маркер, который мог быть или radix64-закодированным блобом в конце сообщения или текстовым вложением с подобной структурой.
GPG непосредственно не подписывает сообщение, он подписывает криптографический хеш (SHA-1 или SHA-2 обычно) его. То, что случайно встречает проверку, - то, что подпись проверяется с помощью открытого ключа отправителя, чтобы удостовериться, что полученный хеш был на самом деле порожден отправителем. Если хеш, вычисленный отправителем, считают подлинным, это по сравнению с хешем, вычисленным получателем. Если обе фазы успешно выполняются, то сообщение правильно подписывается.
Надеюсь, это поможет