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