Les versions actuelles de PGP et toutes les versions de GnuPG (GPG) mettent en œuvre la norme OpenPGP. Je n'utiliserai que le terme OpenPGP ci-dessous.
OpenPGP utilise le chiffrement à clé publique et symétrique : Lors du chiffrement d'un document, une clé symétrique aléatoire est générée et chiffrée à l'aide de la clé publique. Le récepteur chiffrera la clé de chiffrement symétrique (chiffrement par blocs) à l'aide de sa clé privée. Comme seule la clé symétrique est cryptée à l'aide de la clé publique, les frais généraux restent faibles (c'est ce que David Schwartz a proposé et qui est déjà mis en œuvre par OpenPGP).
Bien entendu, il existe deux cas dans lesquels cette surcharge peut devenir importante par rapport aux données cryptées :
- Une très petite quantité de données ; si cela pose un problème, vous devrez choisir une méthode de cryptage avec des clés pré-partagées (clés symétriques).
- Beaucoup de destinataires, car le bloc de chiffrement doit être chiffré pour chacun d'eux. Si cela pose un problème, vous devrez partager le secret (clé privée) entre tous les destinataires.
Vous ne pourrez pas éviter d'utiliser un chiffrement symétrique et de transmettre le secret à chaque destinataire (ou de faire de même avec la clé privée OpenPGP). Si vous voulez que chacun ait son propre secret, personne d'autre ne pourra décrypter sa version des données ; vous devrez donc envoyer à chacun une autre version de ces données.