12

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

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

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

3 ответа3

8

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

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

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

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

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

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

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

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

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .