gpg:file_signature_signature_verification
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| gpg:file_signature_signature_verification [2023/06/02 09:39] – [Часть 5. Подпись файлов и проверка подписи] so_v_a | gpg:file_signature_signature_verification [2026/09/01 11:30] (текущий) – so_v_a | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | # Как пользоваться gpg: шифрование, | + | < |
| - | ## Часть | + | |
| + | # Как пользоваться gpg: шифрование, | ||
| + | |||
| + | ## Часть | ||
| + | |||
| + | ### Как в GPG подписать файл | ||
| + | |||
| + | Для подписи файла используется приватный ключ. Поскольку приватный (секретный) ключ хранится в секрете владельцем, | ||
| + | |||
| + | Поэтому, | ||
| + | - файл исходит от того лица, которое её подписало; | ||
| + | - файл не был как либо модифицирован с момента подписи. | ||
| + | |||
| + | Для проверки подписи определённого лица у вас должен быть публичный ключ этого лица. | ||
| + | |||
| + | - - - | ||
| + | |||
| + | Для подписи файла используется опция `-s` или её более длинный вариант `--sign`. Если у вас на компьютере только один приватный ключ, то он будет выбран автоматически. | ||
| + | |||
| + | Если у вас на компьютере несколько приватных ключей, | ||
| + | |||
| + | > Опция `--default-key` устанавливает ключ, который будет использоваться по умолчанию, | ||
| + | |||
| + | Итак, чтобы подписать файл test.php, приватным ключом пользователя Ivan Ivanov, следует выполнить следующую | ||
| + | ``` | ||
| + | gpg -u 'Ivan Ivanov' | ||
| + | ``` | ||
| + | |||
| + | В результате будет создан файл с расширением **.gpg**, в данном случае это файл test.php.gpg. Этот файл включает **И** исходный файл, **И** его цифровую подпись. | ||
| + | |||
| + | > Новый файл будет в бинарном формате — то есть даже если ранее это было сообщение или текстовый файл, то он становится нечитаемым. | ||
| + | |||
| + | С помощью опции `--clear-sign` (другое её написание `--clearsign`) можно создать файл в виде обычного текста. | ||
| + | ``` | ||
| + | gpg -u 'Ivan Ivanov' | ||
| + | ``` | ||
| + | |||
| + | В результате будет создан файл test.php.asc, | ||
| + | ``` | ||
| + | -----BEGIN PGP SIGNATURE----- | ||
| + | ………………………… | ||
| + | ………………………… | ||
| + | ………………………… | ||
| + | ………………………… | ||
| + | -----END PGP SIGNATURE----- | ||
| + | ``` | ||
| + | |||
| + | Текстовое содержимое можно извлечь без сторонних инструментов, | ||
| + | |||
| + | - - - | ||
| + | В реальной жизни публичные программы и другие файлы намного чаще распространяются в виде пары: **исходный файл программы + отдельно подпись**. Можно догадаться почему: | ||
| + | |||
| + | В принципе, | ||
| + | |||
| + | Чтобы сделать такую пару (точнее говоря, | ||
| + | |||
| + | ``` | ||
| + | gpg -u 'Ivan Ivanov' | ||
| + | ``` | ||
| + | |||
| + | В результате будет создан дополнительный файл **.sig** (здесь это test.php.sig). В этом файле нет ничего, | ||
| + | |||
| + | ### Как в GPG проверить подпись файла | ||
| + | |||
| + | Для проверки подписи используется опция `--verify`. | ||
| + | |||
| + | Как было сказано, | ||
| + | |||
| + | **1** Если цифровая подпись интегрирована в файл, то достаточно указать опцию `--verify`, а затем проверяемый файл: | ||
| + | ``` | ||
| + | gpg --verify test.php.gpg | ||
| + | ``` | ||
| + | |||
| + | **2** Если цифровая подпись отделена от файла, то после опции `--verify` нужно указать два аргумента: | ||
| + | ``` | ||
| + | gpg --verify test.php.sig test.php | ||
| + | ``` | ||
| + | |||
| + | |||
| + | Для проверки подписи есть специальная программа **gpgv**, которая заменяет собой конструкцию `gpg --verify`, то есть предыдущие команды можно записать так: | ||
| + | ``` | ||
| + | gpgv test.php.gpg | ||
| + | ``` | ||
| + | и | ||
| + | ``` | ||
| + | gpgv test.php.sig test.php | ||
| + | ``` | ||
| + | |||
| + | - - - | ||
| + | |||
| + | Пример вывода при проверке подписи (проверка выполнялась на компьютере, | ||
| + | |||
| + | ``` | ||
| + | gpg: Подпись сделана Сб 23 фев 2019 04:40:40 MSK | ||
| + | gpg: ключом RSA с идентификатором D743875D1BB6095A366BB81F3BFD87383926AC69 | ||
| + | gpg: | ||
| + | gpg: Действительная подпись пользователя "Ivan Ivanov < | ||
| + | ``` | ||
| + | |||
| + | Пример без локализации | ||
| + | (на этом компьютере публичный ключ был импортирован, | ||
| + | |||
| + | ``` | ||
| + | gpg: Signature made Сб 23 фев 2019 01:40:40 UTC | ||
| + | gpg: using RSA key D743875D1BB6095A366BB81F3BFD87383926AC69 | ||
| + | gpg: issuer " | ||
| + | gpg: Good signature from "Ivan Ivanov < | ||
| + | gpg: WARNING: This key is not certified with a trusted signature! | ||
| + | gpg: There is no indication that the signature belongs to the owner. | ||
| + | Primary key fingerprint: | ||
| + | ``` | ||
| + | |||
| + | ### Как извлечь файл из подписанного файла GPG | ||
| + | |||
| + | После проверки подписи может возникнуть вопрос — а как, собственно, | ||
| + | |||
| + | Чтобы получить подписанные данные нужно использовать опцию **-d**, которая уже была рассмотрена — она используется для расшифровки данных. | ||
| + | Но в дополнении к данной опции нужно ещё использовать опцию **-o**, после которой нужно указать имя файла, куда будут извлечены подписанные данные. | ||
| + | |||
| + | ``` | ||
| + | gpg -d -o test.php test.php.gpg | ||
| + | ``` | ||
| + | |||
| + | > При этом обычный редирект вывода, | ||
| + | |||
| + | |||
| + | ### Как в GPG одновременно подписать и зашифровать файл | ||
| + | |||
| + | Для этого достаточно совмещать уже известные нам опции. | ||
| + | |||
| + | Чтобы зашифровать файл публичным ключом другого лица, и подписать его своим приватным ключом, | ||
| + | ``` | ||
| + | gpg -e -u 'ОТ КОГО ФАЙЛ' | ||
| + | ``` | ||
| + | |||
| + | Чтобы использовалось симметричное шифрование, | ||
| + | ``` | ||
| + | gpg -e -c -u 'ОТ КОГО ФАЙЛ' | ||
| + | ``` | ||
| + | |||
| + | [[editing_keys|Продолжение]] | ||
| + | |||
| + | [[0_content|Оглавление]] | ||
/var/www/html/dokuwiki/data/attic/gpg/file_signature_signature_verification.1685698753.txt.gz · Последнее изменение: (внешнее изменение)
