Est-il possible d'ajouter un destinataire à un fichier déjà crypté dans GPG?

12

En supposant que j'ai chiffré un fichier (éventuellement volumineux) à l'aide de GPG; par exemple

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

Est-il possible d'ajouter un autre destinataire sans décrypter d'abord le fichier, suivi d'un autre cryptage?


la source
Vous avez chiffré le fichier avec la clé publique de "Some Name". Et que doit-il utiliser pour un autre destinataire?
ott--
6
@ott: Ce n'est pas tout à fait comme ça que ça marche (AFAIK). PGP chiffre le fichier avec une clé symétrique et non avec une clé publique des destinataires. Ensuite, il chiffre séparément plusieurs copies de cette clé symétrique à l'aide de la clé publique de chaque destinataire.
RedGrittyBrick
@RedGrittyBrick Je ne connais pas pgp, mais gpg l'utilise --symmetric. Avec --recipientelle utilise la clé publique du destinataire. Il peut y avoir plus d'un destinataire, mais cela doit être fait en une seule commande, pas en 2 commandes distinctes.
ott--
3
@ott: J'ai lu que " Il est également possible de crypter un fichier simultanément pour n'importe quel nombre de destinataires multiples au moyen d'une commande du formulairegpg -e -r <name1> -r <name2> ... <file> " Je n'ai pas essayé cela moi-même cependant. Cela correspond à ce que j'ai appris sur la crypto il y a de nombreuses années, à savoir qu'il est presque toujours plus efficace d'utiliser des algorithmes symétriques rapides pour crypter le texte du message. Seule la clé de message est chiffrée à l'aide d'un chiffrement asymétrique lent.
RedGrittyBrick

Réponses:

8

Réponse courte: non

Tout d'abord, notez que si vous n'êtes pas l'un des destinataires, c'est complètement impossible. Vous n'avez même pas la possibilité de décrypter le fichier, encore moins d'ajouter un destinataire. Même si vous l'avez chiffré il y a deux secondes.

En supposant que vous êtes un destinataire, c'est techniquement possible. Le fichier est réellement chiffré avec une clé de session et la clé de session est chiffrée avec votre clé publique, vous pouvez donc en théorie déchiffrer la clé de session et la rechiffrer sur la clé d'une autre personne, puis tout regrouper dans un fichier comme si vous avait à l'origine crypté le document pour les deux personnes.

Cependant, gpg n'a pas cette capacité . Le plus proche que vous pouvez obtenir avec gpg est

  1. Utilisez l' --show-session-keyoption pour obtenir la clé de session (qui semble également déchiffrer le fichier, manquant le point dans ce cas)
  2. Crypter cette clé de session à la clé publique de quelqu'un d'autre (en fait, cela crée une nouvelle clé de session et utilise cette clé de session pour crypter la clé de session d'origine)
  3. Envoyez les deux fichiers.
  4. Le destinataire peut déchiffrer la clé de session et l'utiliser --override-session-keypour déchiffrer le message d'origine.
Nathan Grigg
la source
3

1) Cette situation explique pourquoi crypter un fichier pour vous-même (ainsi que les destinataires prévus) est toujours une bonne idée. RedGrittyBrick a raison ci-dessus en décrivant le fonctionnement de GPG et PGP, ce qui se reflète dans la réponse de nathang ci-dessus.

2) Cependant, si vous avez le fichier d'origine, il est préférable de simplement créer un nouveau fichier crypté pour le nouveau destinataire.

En supposant que vous ne vouliez pas emprunter la route de la clé de session à partir de la suggestion de nathang, si vous avez chiffré le fichier pour vous-même (comme ci-dessus dans # 1), déchiffrez-le puis suivez l'étape # 2 ci-dessus.

Si vous ne disposez pas de l'original ni ne l'avez chiffré pour vous-même, vous ne pouvez pas récupérer les données et ne pouvez les chiffrer à personne d'autre sans que le premier destinataire vous en renvoie une copie.

mikebabcock
la source
1
En fait, ce n'est pas toujours une bonne idée. Voir PGP: inclure votre clé publique en tant que destinataire? Moins sûr? sur l'Information Security Stack Exchange pour quelques arguments pour et contre.
un CVn
0

Est-il possible d'ajouter un autre destinataire sans décrypter d'abord le fichier, suivi d'un autre cryptage?

Ce n'est pas possible sans décrypter du tout, mais il semble que cela devrait être possible sans décrypter dans un fichier :

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

Sauf que cela semble entraîner un fichier corrompu (au moins parfois), car il gpglit et écrit simultanément dans le même fichier:

Au lieu de cela, vous pouvez effectuer les opérations suivantes (dans un script) pour éviter d'avoir à gérer le fichier déchiffré:

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, avec l' -uoption, remplace en toute sécurité les données de, puis supprime le fichier que vous spécifiez. Des programmes similaires existent pour d'autres plateformes, comme srmsur Mac OS X.

Ou vous pouvez écrire votre script comme ceci (gracieuseté de dave_thompson_085 ) pour éviter même d'avoir à stocker les données déchiffrées dans un fichier:

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
Kenny Evitt
la source
2
Vous n'avez pas besoin d'écrire un fichier temporaire clair si vous laissez temporairement le crypté en place: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgou son miroir mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Ou (peut-être aussi), gardez intelligemment l'ancien inode :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085
@ dave_thompson_085 Intéressant - merci!
Kenny Evitt