Можно ли добавить получателя к уже зашифрованному файлу в GPG?

Можно ли добавить получателя к уже зашифрованному файлу в GPG?

Предположим, что я зашифровал (возможно, большой) файл с помощью GPG; например

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

Можно ли добавить еще одного получателя без предварительной расшифровки файла с последующим повторным шифрованием?

решение1

Короткий ответ: нет.

Прежде всего, обратите внимание, что если вы не являетесь одним из получателей, это совершенно невозможно. У вас даже нет возможности расшифровать файл, не говоря уже о добавлении получателя. Даже если вы зашифровали его две секунды назад.

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

Однако,gpg не имеет такой возможности. Самое близкое, что вы можете получить с помощью gpg, это

  1. Используйте --show-session-keyопцию получения сеансового ключа (который, похоже, также расшифровывает файл, но в данном случае смысл упущен)
  2. Зашифруйте этот сеансовый ключ с помощью чужого открытого ключа (на самом деле, это создает новый сеансовый ключ и использует этот сеансовый ключ для шифрования исходного сеансового ключа)
  3. Отправьте оба файла.
  4. Получатель может расшифровать сеансовый ключ и использовать его --override-session-keyдля расшифровки исходного сообщения.

решение2

1) В этой ситуации шифрование файла для себя (а также для предполагаемых получателей) всегда является хорошей идеей. RedGrittyBrick прав выше, описывая, как работают GPG и PGP, что перетекает в ответ nathang выше.

2) Однако, если у вас есть исходный файл, лучше всего просто создать новый зашифрованный файл для нового получателя.

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

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

решение3

Можно ли добавить еще одного получателя без предварительной расшифровки файла с последующим повторным шифрованием?

Это невозможно без расшифровки.совсемно этокажется, так и должно бытьвозможно без расшифровкив файл:

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

За исключением того, что это, по-видимому, приводит к повреждению файла (по крайней мере, иногда), поскольку gpgодновременно происходит и чтение, и запись в один и тот же файл:

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

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shred, с -uопцией безопасно перезаписывает данные и затем удаляет указанный вами файл. Аналогичные программы существуют и для других платформ, например, srmдля Mac OS X.

Или вы можете написать свой сценарий следующим образом (предоставленоdave_thompson_085), чтобы вообще избежать необходимости сохранять расшифрованные данные в файле:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg

решение4

Как уже упоминалось в предыдущих ответах, а также хорошо описано в этомGPGTools почта:

«Нельзя добавлять получателей в файл, который уже зашифрован. Если бы это было возможно, возникла бы серьезная проблема безопасности».

Учитывая вышесказанное, альтернативой может быть следующее:плагин vim, очень удобное дополнение для просмотра и редактированиягпгзашифрованные файлы:vim-gnupg.

После установки навимдобавление получателей в зашифрованный файл можно выполнить с помощью :GPGEditRecipientsкоманды.

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