Что происходит при проверке отделенной подписи?

Что происходит при проверке отделенной подписи?

Я пытаюсь понять, что происходит при проверке отсоединенной подписи gpg.

Вот пример из gnupgруководство:

blake% gpg --verify doc.sig doc
gpg: Signature made Fri Jun  4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Alice (Judge) <[email protected]>"

Как gpg определяет, что подпись хорошая? Содержит ли подпись хэш файла, который был подписан? Если да, то как извлечь этот хэш из самой подписи?

Я пробовал gpg --list-packets <signature>, но, похоже, отображается не вся информация.

решение1

Вы можете использовать --list-packetsопцию, чтобы получить дамп того, что находится в файле gpg. Описание формата файла:RFC4880(Стандарт OpenPGP).

Подпись не содержит непосредственно хэш. Она содержит информацию, которая позволяет проверить как хэш, так и отправителя: естьалгоритм проверки подписи, который принимает в качестве входных данных хэш-значение и открытый ключ и возвращаетдаилинет; алгоритм возвращаетдаесли подпись была сделана закрытым ключом, соответствующим данному открытому ключу из сообщения с данным закрытым ключом, и возвращаетнетво всех других случаях (подпись другого хеша, подпись, сделанная другим ключом, или набор байтов, которые вообще не могут быть подписью). ПодДСАалгоритм, я думаю, что невозможно извлечь хеш из подписи, если у вас нет закрытого ключа.

Файл подписи содержит идентификационные данные подписчика, а также значение подписи. Для проверки подписи gpg считывает открытый ключ подписчика из вашего набора ключей, вычисляет хэш данных и применяет алгоритм проверки подписи.

решение2

$ gpg --list-packets myfile.asc
[...]
       digest algo 10, begin of digest 77 dd

Это показывает, какой алгоритм дайджеста использовался. К сожалению, ни man-страница, ни gpg --versionинформирует нас о том, какой алгоритм назначен какому идентификатору. Нам нужно погрузиться в RFC формата пакета, чтобы найти эту информацию:https://www.rfc-editor.org/rfc/rfc4880#section-9.4

ID           Algorithm                             Text Name
--           ---------                             ---------
1          - MD5 [HAC]                             "MD5"
2          - SHA-1 [FIPS180]                       "SHA1"
3          - RIPE-MD/160 [HAC]                     "RIPEMD160"
4          - Reserved
5          - Reserved
6          - Reserved
7          - Reserved
8          - SHA256 [FIPS180]                      "SHA256"
9          - SHA384 [FIPS180]                      "SHA384"
10         - SHA512 [FIPS180]                      "SHA512"
11         - SHA224 [FIPS180]                      "SHA224"
100 to 110 - Private/Experimental algorithm

решение3

Да, цифровые подписи обычно представляют собой защищенные хэши, которые подписаны секретным ключом подписавшего.

Подписание всего сообщения намного медленнее и не более безопасно. Кроме того, алгоритм должен заботиться о длине блоков, заполнении (таким образом, чтобы не раскрывать слишком много информации) и т. д.

Примечание: также при асимметричном шифровании, в целях повышения скорости, асимметрично шифруется только эфемерный симметричный ключ, а остальная часть сообщения шифруется только симметрично.

Связанный контент