cryptage / décryptage avec plusieurs clés

110

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 key1, mais je veux pouvoir déchiffrer avec les clés 2, 3 et 4.

Est-ce possible?

Glen Solsberry
la source

Réponses:

170

GnuPG effectue un cryptage multi-clés en standard.

La commande suivante chiffrera doc.txtà l'aide de la clé publique pour Alice et de la clé publique pour Bob. Alice peut déchiffrer en utilisant sa clé privée. Bob peut également décrypter à l'aide de 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 " Crypter et décrypter les documents "

David Segonds
la source
Idem. C'est cool de savoir comment faire ça, mais je ne trouve pas de page de manuel hide no man.
MarkusQ
@Mitch, j'ai posté une réponse qui peut avoir notre réponse! (Veuillez tester et féliciter si oui / non - BEAUCOUP apprécié!)
pythonlarry
@MarkusQ, voir mon lien vers Mitch, ci-dessus. Testez / merci si vous le pouvez! :-)
pythonlarry
Donc, cela se traduit par 1 fichier crypté qui peut être lu en utilisant l'une ou l'autre clé privée, pas 1 fichier par clé?
user8675309
7
@ user8675309, Oui. Les données sont chiffrées par une clé symétrique commune. Seule la clé symétrique est chiffrée par la clé publique de chaque destinataire. Il ne s'agit pas de rechiffrer toutes les données de chaque destinataire.
wisbucky
55

Oui c'est possible

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

Ligne de commande

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

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

Client GUI

Votre GUI doit fournir un moyen de chiffrer pour plusieurs personnes

Mécanisme

Il y a une question sur la sécurité de l'information , la taille du fichier GPG avec plusieurs destinataires? , qui expliquent le mécanisme de cryptage :

GPG crypte 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 cryptée de la clé symétrique.

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

Édouard Lopez
la source
4
merci spécial pour les deux dernières phrases: ils ont tout clarifié maintenant!
radistao
31

Les clients GnuPG et 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é un chiffrement hybride . À l'heure actuelle, je pense que GnuPG utilise par défaut des clés de session de 256 bits et AES pour crypter les données en texte brut sur cette clé de session AES-256, et vos clés de destinataire sont vos RSA / DSA / ECDSA / etc. clé asymétrique dans ce cas.

Une des raisons de procéder de cette manière est que les algorithmes cryptographiques symétriques comme AES sont généralement beaucoup plus rapides que les algorithmes asymétriques comme RSA. GnuPG n'a donc qu'à crypter ~ 256 bits (la clé de session) avec RSA, et peut utiliser AES pour crypter les données (aussi grandes 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 plus rapide pour crypter / décrypter les données.

Une autre raison de procéder de cette manière est que cela permet aux documents cryptés PGP d'être cryptés à 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 2 fois plus grand que si vous l'aviez juste chiffré avec Alice.

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

je fais
la source
1
Merci pour l'explication sur le document chiffré n'étant pas n fois plus grand où n est le nombre de signataires.
theartofbeing
4

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

AFAIK, il n'y a pas de drop 'em in et utilisez-les pour cela cependant.

- MarkusQ

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

  • la charge utile, chiffrée avec un pad unique
  • le pad unique, chiffré avec key1
  • le pad unique, chiffré avec key2
  • ...
  • le pad unique, chiffré avec keyN

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

Cependant, c'est juste une preuve que cela pourrait être fait et serait nul en tant que mise en œuvre réelle. Dans la mesure du possible, vous devez éviter de lancer votre propre cryptage. Si vous ne comprenez pas pourquoi, vous devez absolument éviter de lancer votre propre cryptage.

-----Éditer ------------

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.

MarkusQ
la source
1
Ce qui pourrait être gênant à ce sujet, c'est qu'une fois que vous connaissez le tampon unique, vous avez un texte brut connu, ainsi que les valeurs cryptées pour d'autres clés. En utilisant ces informations, vous pouvez faciliter la recherche des autres clés.
Kibbee
2
Le "cryptage multipartite" sur Google ne revient pas beaucoup. Vous aurez probablement plus de chance avec le «cryptage de diffusion» qui englobe également ce cas.
staktrace
1
@Kibbee: Les clés ne sont pas secrètes, elles sont publiques. Donc, faciliter la découverte de ce qu'ils sont n'a pas d'importance. (Ces schémas ne sont utilisés qu'avec des clés qui ne peuvent être utilisées que pour le chiffrement, pas pour le déchiffrement.)
David Schwartz
5
Je suis à peu près sûr que les implémentations réelles n'utilisent pas de pavé unique partagé (qui devrait être aussi grand que le texte brut et le texte chiffré, doublant ainsi la taille du message), mais utilisent en fait une clé de chiffrement symétrique partagée (qui est généralement beaucoup plus petit que le message).
Joachim Sauer
-16

Plusieurs RSA clés (plus de deux) sont peut - être comme ça - eh bien je ne suis pas mathématicien, donc cet algorithme n'est pas nécessairement sécurisé, je veux juste donner une idée avec lui.

m = p * q * r; p, q, r sont de grands nombres premiers

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei sont des nombres arbitraires, d est calculé pour remplir l'équation

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Cet algorithme pourrait être utilisé par exemple pour augmenter la vitesse de The Onion Router.

IQfighter
la source