
Предположим, что я зашифровал (возможно, большой) файл с помощью GPG; например
gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt
Можно ли добавить еще одного получателя без предварительной расшифровки файла с последующим повторным шифрованием?
решение1
Короткий ответ: нет.
Прежде всего, обратите внимание, что если вы не являетесь одним из получателей, это совершенно невозможно. У вас даже нет возможности расшифровать файл, не говоря уже о добавлении получателя. Даже если вы зашифровали его две секунды назад.
Если вы являетесь получателем, то это технически возможно. Файл фактически зашифрован с помощью сеансового ключа, а сеансовый ключ зашифрован вашим открытым ключом, поэтому вы можетев теориирасшифруйте сеансовый ключ и перешифруйте его с помощью ключа другого человека, а затем упакуйте все в файл, как если бы вы изначально зашифровали документ для обоих людей.
Однако,gpg не имеет такой возможности. Самое близкое, что вы можете получить с помощью gpg, это
- Используйте
--show-session-key
опцию получения сеансового ключа (который, похоже, также расшифровывает файл, но в данном случае смысл упущен) - Зашифруйте этот сеансовый ключ с помощью чужого открытого ключа (на самом деле, это создает новый сеансовый ключ и использует этот сеансовый ключ для шифрования исходного сеансового ключа)
- Отправьте оба файла.
- Получатель может расшифровать сеансовый ключ и использовать его
--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
команды.