web-dev-qa-db-fra.com

chiffrement / déchiffrement avec plusieurs clés

Est-il possible de crypter des données, de sorte qu'elles puissent être décryptées avec plusieurs clés différentes?

Exemple:

J'ai chiffré des données avec la clé 1, mais je veux pouvoir déchiffrer avec les clés 2, 3 et 4.

Est-ce possible?

98
Glen Solsberry

GnuPG fait le cryptage multi-clés en standard.

La commande suivante va crypter doc.txt en utilisant la clé publique pour Alice et la clé publique pour Bob. Alice peut décrypter en utilisant sa clé privée. Bob peut également décrypter en utilisant sa clé privée.

gpg --encrypt --recipient [email protected] \
    --recipient [email protected] doc.txt

Cette fonctionnalité est détaillée dans la section du guide de l'utilisateur intitulée " Cryptage et décryptage de documents "

148
David Segonds

Oui c'est possible

Oui, le cryptage pour plusieurs destinataires est possible. De plus, cela semble logique lorsque vous pensez que vous voudrez peut-être lire ce que vous avez envoyé à quelqu'un et que pour ce faire, vous devez être dans la liste des destinataires vous.

Ligne de commande

Voici comment le faire via la ligne de commande gpg (comme décrit dans réponse de David Segonds ):

gpg --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
clear-message.txt

Client GUI

Votre interface graphique doit fournir un moyen de chiffrer pour plusieurs personnes

Mécanisme

Il y a une question sur Sécurité de l'information, Taille du fichier GPG avec plusieurs destinataires?, qui explique le mécanisme de cryptage :

GPG chiffre le fichier une fois avec une clé symétrique, puis place un en-tête identifiant la paire de clés cible et une version chiffrée de la clé symétrique.

[...] Lorsqu'il est chiffré à plusieurs destinataires, cet en-tête est placé plusieurs fois fournissant une version chiffrée de manière unique de la même clé symétrique pour chaque destinataire .

50
Édouard Lopez

GnuPG et les clients PGP en général chiffrent généralement les données réelles avec une clé symétrique appelée "clé de session". La clé de session est ensuite chiffrée avec chaque "clé de destinataire" (c'est-à-dire celles que vous spécifiez avec -r/- destinataire). Ceci est parfois appelé chiffre hybride . À l'heure actuelle, je pense que GnuPG utilise par défaut une clé de session 256 bits et AES pour crypter les données en clair dans cette clé de session AES-256, et vos clés de destinataire sont votre RSA/DSA/ECDSA/etc. clé asymétrique dans ce cas.

Une des raisons pour lesquelles nous procédons de cette façon est que les algorithmes cryptographiques symétriques comme AES sont généralement beaucoup plus rapides que ceux asymétriques comme RSA. GnuPG n'a donc qu'à chiffrer ~ 256 bits (la clé de session) avec RSA, et peut utiliser AES pour chiffrer les données (aussi volumineuses que vous le souhaitez!) Avec cette clé de session. Les machines Intel ont même une instruction intégrée, AES-NI , pour effectuer certaines étapes de l'algorithme dans le matériel, ce qui rend GnuPG très rapide lors du cryptage/décryptage des données.

Une autre raison de procéder de cette façon est qu'il permet de chiffrer les documents chiffrés PGP à plusieurs parties sans avoir à doubler la taille du document. Notez que lorsque vous spécifiez plusieurs destinataires pour un document chiffré (par exemple gpg -ea -r Alice -r Bob -o ciphertext.asc), le document chiffré qui est stocké (ciphertext.asc) n'est pas 2x plus gros que si vous veniez de le chiffrer à Alice.

Voir aussi le --show-session-key paramètre dans la page de manuel gpg pour pouvoir déchiffrer uniquement la clé de session, par exemple pour permettre à un tiers de déchiffrer un document qui vous est chiffré sans avoir à leur transférer votre clé privée ou les données en clair.

27
ido

Oui c'est possible. Google "chiffrement multipartite" pour commencer.

AFAIK, il n'y a pas de dépôt et d'utilisation de packages pour cela.

- MarkusQ

P.S. Pour un aperçu de la façon dont cela pourrait être fait, considérez ceci. Le message crypté comprend:

  • la charge utile, chiffrée avec un tampon à usage unique
  • le bloc unique, chiffré avec key1
  • le bloc unique, chiffré avec key2
  • ...
  • le bloc unique, chiffré avec keyN

Le destinataire qui détient la clé i déchiffre simplement sa copie du bloc avec sa clé, puis déchiffre la charge utile.

Cependant, c'est juste une preuve que cela pourrait être fait et serait suck comme une implémentation réelle. Si possible, vous devez éviter de rouler votre propre cryptage. Si vous ne comprenez pas pourquoi, vous devriez certainement éviter de lancer votre propre cryptage.

-----Modifier ------------

Si je me trompe et que les outils Gnu le font, utilisez-les. Mais je n'arrive pas à trouver d'informations sur la façon de le faire.

4
MarkusQ