Инструменты пользователя

Инструменты сайта


gpg:decoding

Это старая версия документа!


# Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами.

## Часть 4. Расшифровка

### Как расшифровать файлы в GPG. Как расшифровать сообщение в GPG

Для расшифровки используется опция -d: ``` gpg -d test.php.gpg ```

При этом данные будут выведены прямо в стандартный вывод. То есть в терминал.

Чтобы сохранить данные в файл используйте опцию -o, после которой укажите имя нового расшифрованного файла: ``` gpg -d -o test.php test.php.gpg ```

Либо используйте конструкцию вида: ``` gpg -d ЗАШИФРОВАННЫЙ_ФАЙЛ > РАСШИФРОВАННЫЙ_ФАЙЛ ```

Также gpg может расшифровывать данные из стандартного ввода. В этом можно убедиться подобной конструкцией: ``` echo 'Я нашёл клад' | gpg -e -a -r 'Ivan Ivanov' | gpg -d ```

Более практический пример: ``` cat test.php.gpg | gpg -d ```

### GPG: Невозможно ввести пароль после неправильной попытки

При симметричном шифровании пароли кэшируются, чтобы не нужно было вводить много раз один и тот же пароль. Можно сильно попасть впросак, если ввести неверный пароль — при последующих попытках открыть этот же файл, система вместо того, чтобы спрашивать у вас новый вариант, будет использовать кэшированную версию, то есть просто будет выдавать ошибку: ``` gpg: decryption failed: Недопустимый алгоритм симметричного шифрования ```

Чтобы побороть эту ситуацию, нужно явно ==указать не использовать кэш==, для этого имеется опция --no-symkey-cache, пример использования: ``` gpg -d --no-symkey-cache test.php.gpg ```

### Как посмотреть получателей зашифрованного в GPG файла

Если вы не хотите расшифровывать файл (а может быть просто не можете из-за отсутствия приватного ключа), но хотите посмотреть, кому он предназначен (это можно сделать даже для зашифрованных файлов, если специально не зашифрованы получатели ), то для этого имеется опция --list-only.

Вместе с этой опцией нужно использовать опцию -d, а также указать проверяемый файл, пример: ``` gpg --list-only -d test.php.gpg ```

Может быть выведено: ``` gpg: зашифровано 2048-битным ключом RSA с идентификатором 0E5137A9EF8E8F15, созданным 2019-02-22

    "Ivan Ivanov <@gmail.com>"

```

Или без локализации: ``` gpg: encrypted with 2048-bit RSA key, ID 0x0E5137A9EF8E8F15, created 2019-02-22

    "Ivan Ivanov <Ivan_Ivanov@gmail.com>"

``` Это сообщение означает, что выполнено ассиметричное шифрование для пользователя Ivan Ivanov Ivan_Ivanov@gmail.com.

При симметричном шифровании сообщение будет таким: ``` gpg: сеансовый ключ зашифрован по AES gpg: зашифровано одной фразой-паролем gpg: зашифровано 2048-битным ключом RSA с идентификатором 0E5137A9EF8E8F15, созданным 2019-02-22

    "Ivan Ivanov <Ivan_Ivanov@gmail.com>"

```

Или без локализации: ``` gpg: AES encrypted session key gpg: encrypted with 1 passphrase gpg: encrypted with 2048-bit RSA key, ID 0x0E5137A9EF8E8F15, created 2019-02-22

    "Ivan Ivanov <Ivan_Ivanov@gmail.com>"

```

В версиях GPG ранее 2020 года у опции --list-only был баг:

если на компьютере, где выполняется проверка, имеется приватный ключ пользователя, кому предназначен данный файл, то не выводиться ничего. Это может запутать, поскольку также ничего не выводиться в случае, если получатель зашифрован.

Чтобы обойти этот баг, используйте опцию -v, получается примерно следующая команда: ``` gpg --list-only -v -d test.php.gpg ```

Будет выведено что-то вроде: ``` gpg: public key is 0x0E5137A9EF8E8F15 ``` И уже по идентификатору публичного ключа можно найти пользователя.

### Выбор приватного ключа для расшифровки

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

Если же получатель зашифрован, то GPG просто перебирает все имеющиеся в системе приватные ключи и смотрит, какой из них подойдёт. При этом вы можете помочь программе используя опцию `--try-secret-key ИМЯ`, где вместо ИМЕНИ нужно указать идентификатор пользователя с закрытым ключом, для которого зашифрован файл. - - -

Зашифрованная информация содержит как минимум такие части как: 1) идентификатор получателя, 2) «полезная нагрузка» - сами зашифрованные данные.

При этом идентификатор получателя может быть поддельным — то есть для шифрования использовались публичные ключи одного лица, а в качестве получателя указано другое лицо. Это приведёт к тому, что попытка расшифровки в GPG завершиться неудачей.

Для ==расшифровки таких файлов с поддельным ключевым ID==, используется опция `--try-all-secrets`. Как можно понять из названия самой опции, она не будет смотреть на ключевой идентификатор в сообщении, а будет пробовать все секретные ключи, пока не найдёт правильный для расшифровки.

То есть поведение будет в точности таким же, как если бы получатель (или получатели) не были указаны вовсе. То есть как если бы данные шифровались с использованием опций --throw-keyids или --hidden-recipient.

/var/www/html/dokuwiki/data/attic/gpg/decoding.1685620595.txt.gz · Последнее изменение: (внешнее изменение)