É possível adicionar um destinatário a um arquivo já criptografado no GPG?


12

Supondo que eu tenha criptografado um arquivo (possivelmente grande) usando GPG; por exemplo

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

É possível adicionar outro destinatário sem primeiro descriptografar o arquivo, seguido por outra criptografia?

gnupg 

Você criptografou o arquivo com a chave pública de "Some Name". E o que ele deve usar para outro destinatário?
ott--

6
@ott: Não é bem assim que funciona (AFAIK). O PGP criptografa o arquivo com uma chave simétrica e não com uma chave pública do destinatário. Em seguida, criptografa separadamente várias cópias dessa chave simétrica usando a chave pública de cada destinatário.
precisa saber é o seguinte

@RedGrittyBrick Eu não sei sobre pgp, mas o gpg usa --symmetricpara isso. Com --recipientele, usa a chave pública do destinatário. Pode haver mais de 1 destinatário, mas isso deve ser feito em um comando, não em 2 comandos separados.
ott--

3
@ott: Eu li que " Também é possível criptografar um arquivo simultaneamente para qualquer número de múltiplos destinatários por meio de um comando do formuláriogpg -e -r <name1> -r <name2> ... <file> " Eu ainda não tentei isso. Ele se encaixa com o que aprendi sobre criptografia há muitos anos, que é quase sempre mais eficiente usar algoritmos simétricos rápidos para criptografar o texto da mensagem. Somente a chave da mensagem é criptografada usando criptografia assimétrica lenta.
precisa saber é o seguinte

Respostas:


8

Resposta curta: não

Antes de tudo, observe que, se você não for um dos destinatários, é completamente impossível. Você nem tem a capacidade de descriptografar o arquivo, muito menos adicionar um destinatário. Mesmo se você o criptografou dois segundos atrás.

Supondo que você seja um destinatário, é tecnicamente possível. O arquivo é realmente criptografado com uma chave de sessão e a chave de sessão é criptografada com sua chave pública; portanto, você pode, em teoria, descriptografar a chave da sessão e criptografá-la novamente na chave de outras pessoas, e depois empacotar tudo em um arquivo, como se você originalmente criptografou o documento para as duas pessoas.

No entanto, o gpg não possui esse recurso . O mais próximo que você pode chegar do gpg é

  1. Use a --show-session-keyopção para obter a chave da sessão (que também parece descriptografar o arquivo, perdendo o ponto nesse caso)
  2. Criptografar essa chave de sessão na chave pública de outra pessoa (na verdade, isso cria uma nova chave de sessão e usa essa chave para criptografar a chave de sessão original)
  3. Envie os dois arquivos.
  4. O destinatário pode descriptografar a chave da sessão e usar --override-session-keypara descriptografar a mensagem original.

3

1) Essa situação é a razão pela qual criptografar um arquivo para si mesmo (e também para os destinatários pretendidos) é sempre uma boa ideia. O RedGrittyBrick está correto acima ao descrever como o GPG e o PGP funcionam, o que flui para a resposta de nathang acima.

2) No entanto, se você tiver o arquivo original, é melhor criar simplesmente um novo arquivo criptografado para o novo destinatário.

Supondo que você não queira seguir o caminho da chave da sessão a partir da sugestão de nathang, se você criptografou o arquivo para si mesmo (como acima no item 1) em primeiro lugar, decifre-o e siga o passo 2 acima.

Se você não tiver o original nem criptografado para si mesmo, não poderá recuperar os dados nem criptografá-los para outras pessoas sem que o primeiro destinatário envie uma cópia para você.


1
Na verdade, nem sempre é uma boa ideia. Consulte PGP: Incluindo sua chave pública como destinatário? Menos seguro? no Information Security Stack Exchange para alguns argumentos a favor e contra.
um CVn

0

É possível adicionar outro destinatário sem primeiro descriptografar o arquivo, seguido por outra criptografia?

Não é possível sem descriptografar , mas parece que deveria ser possível sem descriptografar para um arquivo :

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

Exceto que isso parece resultar em um arquivo corrompido (pelo menos algumas vezes) porque gpgestá lendo e gravando no mesmo arquivo simultaneamente:

Em vez disso, você pode fazer o seguinte (em um script) para evitar a necessidade de gerenciar o arquivo descriptografado:

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, com a -uopção, substitui com segurança os dados e exclui o arquivo que você especificar. Existem programas semelhantes para outras plataformas, como srmno Mac OS X.

Ou você pode escrever seu script assim (cortesia de dave_thompson_085 ) para evitar a necessidade de armazenar os dados descriptografados em um arquivo:

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

2
Você não precisa gravar um arquivo temporário claro se você deixar o criptografado no local temporariamente: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgou seu espelho mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Ou (talvez demasiado) inteligentemente apenas manter o velho inode :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

@ dave_thompson_085 Interessante - obrigado!
Kenny Evitt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.