web-dev-qa-db-fra.com

Le cryptage du même fichier avec GnuPG et la même clé produira-t-il le même texte chiffré?

Si je crypte deux fois le même fichier avec GnuPG, en utilisant la même clé, vais-je obtenir le même résultat? ou utilise-t-il un segment aléatoire/psudeo-aléatoire pour améliorer la sécurité comme rsynccrypto?

41
Didi Kohen

De manière générale, non, le cryptage du même fichier avec la même clé ne produira pas le même fichier, pour trois raisons:

  • Le format OpenPGP (que GnuPG implémente) utilise le cryptage hybride : une clé aléatoire et symétrique est cryptée avec la clé publique du destinataire ( de type RSA ou ElGamal), et cette clé symétrique est elle-même utilisée pour chiffrer le corps du message avec un algorithme de chiffrement symétrique. Le chiffrement hybride est utilisé parce que le chiffrement asymétrique est très limité dans sa plage (par exemple, une clé RSA de 2048 bits ne peut pas chiffrer plus de 245 octets en une seule fois) et a une surcharge élevée (à la fois dans le processeur et dans la taille de message résultante). Étant donné que la clé symétrique n'est enregistrée nulle part du côté de l'expéditeur, une nouvelle clé aléatoire sera créée à chaque fois et sera différente avec une probabilité écrasante.

  • Le chiffrement asymétrique lui-même est aléatoire. Par exemple, avec RSA , le remplissage comprend des octets aléatoires. Cela est nécessaire "en général", car la clé publique est publique, donc tout le monde la connaît; si le chiffrement était déterministe, les attaquants pouvaient effectuer une recherche exhaustive sur le message . Ce ne serait pas un problème dans le cas spécifique d'OpenPGP (le message est une clé aléatoire, suffisamment grande pour vaincre la recherche exhaustive à elle seule), mais les normes pour RSA ou ElGamal ont une portée plus large et incluent un remplissage aléatoire.

  • Lors du chiffrement symétrique lui-même, un IV aléatoire est utilisé et sera différent (avec une probabilité écrasante) pour chaque invocation. Voir section 5.7 pour plus de détails.

Le troisième point s'applique également lors du chiffrement par mot de passe (le chiffrement se fait avec un mot de passe, pas avec la clé publique d'un destinataire). Le chiffrement par mot de passe ajoute également une quatrième randomisation, qui est le sel dans la transformation mot de passe en clé .

50
Thomas Pornin

le cryptage GnuPG n'est pas déterministe et retournera donc une sortie différente pour chaque exécution. Le chiffrement, puis le déchiffrement est bien sûr déterministe et retournera toujours le même contenu.

Explication:

GnuPG utilise un cryptage asymétrique, qui est lent lors du cryptage d'énormes quantités de données. Pour cette raison, il utilise votre clé privée pour crypter un chiffre de bloc aléatoire qui est à nouveau utilisé pour crypter vos données.

Chaque fois que vous chiffrez des données, un nouveau chiffrement de bloc aléatoire sera généré, de sorte que les données chiffrées seront différentes.

J'ai chiffré le même document deux fois et calculé les sommes de contrôle MD5 après chaque chiffrement:

$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = f2f6a07e0d7ae9899315d0471c2596bc
$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = b57d4c360b1c3c6b2202ce6c3d32cdd8
22
Jens Erat