# GPG

Cette page constitue un livre entier.
Les commandes présentées sont celles du logiciel en ligne de commande gpg disponible sous Linux, cependant des commandes similaires peuvent être retrouvées sur d'autres plateformes et d'autres logiciels. Les concepts présentés sont identiques dans les logiciels graphiques.
GPG (lisez : GNU Privacy Guard) est un outil multifonction, libre et gratuit, qui permet de signer et de chiffrer à peu près tout ce qui se présente sous forme numérique (tout ce qui a un bit, si vous me passez l'expression). Cette page présente un didacticiel non exhaustif des principales fonctionnalités disponibles.
Vous trouverez un excellent didacticiel à cette adresse : http://gpglinux.free.fr/gpg.pdf
Une autre documentation, au format HTML : Introduction à GnuPG

# Théorie
## Chiffrement/Signature

Le chiffrement est la fonction la plus connue. Elle permet de rendre un document complètement illisible pour toute personne non désignée par le rédacteur. Pour ce faire, le créateur de l'information chiffre ses données à l'aide d'une clé partagée seulement avec le destinataire, et ce dernier pourra retrouver les documents de son binôme rapidement, le tout dans une totale intimité numérique. Dans le cas du chiffrement asymétrique, la clé de chiffrement symétrique est elle-même chiffrée mais de telle façon que seul le destinataire choisi soit en mesure de la déchiffrer. Ainsi toute personne peut envoyer un message à quelqu'un mais personne ne peut les intercepter.
La signature permet à un créateur de garantir la provenance et l'intégrité d'un document. Dans l'implémentation PGP, toute personne peut accéder à la clé publique permettant de vérifier la signature d'un document et donc que seule la personne disposant de la clé privée associée est à l'origine de cette signature. Puisque que la clé publique est en libre circulation, l'association entre la clé et la personnalité morale propriétaire repose sur un réseau de confiance: toute autre personne peut ajouter sa signature à la clé publique de quelqu'un et signifier ainsi sa confiance au sujet de l'appartenance de cette clé.
Les signatures numériques sont largement utilisées dans la publication de logiciel. Les paquets et les dépôts de logiciel Linux sont généralement tous signés, ne reste plus que l'autorisation de l'utilisateur de faire confiance aux clés utilisées.

## Fonctionnement et principes
### Signer

Lorsque vous signez une information, gpg génère un fichier unique associé à vos informations. La signature garantie l'intégrité des données, donc si vous modifiez le document signé, le fichier de signature ne sera plus valide. Le fichier signature doit être fait avec la version finale du document à signer qui ne doit plus changer d'un bit après la signature.
Lors de l'envoi à une personne, le document doit être accompagné de la signature et de la clé publique permettant de vérifier cette signature (ou seulement l'identifiant de la clé). Cette méthode n'empêche pas la lecture du contenu, elle permet de vérifier que ce contenu est authentique, et livré dans son intégralité par rapport à la version de celui qui l'a composé. Attention : si la signature comporte bien une date, cette dernière n'est pas fiable. Il suffit en effet de changer la date de son ordinateur pour pouvoir générer des signatures post ou antidatées. Une signature certifie donc l'authenticité des données qu'elle signe, mais pas à une date donnée.
À savoir : il existe des serveurs sécurisés pour stocker les clefs publiques. C'est plus pratique pour que n'importe qui puisse vérifier la validité du document. Vous pouvez aussi mettre ce fichier sur votre site internet, mais le plus sécurisé reste de transmettre la clef ... par un contact social.

#### Chiffrer

Lorsque vous chiffrez un document, vous utilisez la clef publique appartenant à la personne (morale ou physique) qui est le destinataire. Seule cette personne (qui possède également le mot de passe) pourra déchiffrer les informations. Vous pouvez aussi chiffrer « dans le vide », c'est-à-dire que le fichier n'est pas destiné à quelqu'un en particulier, mais à toute personne connaissant le mot de passe, mais c'est évidemment moins sécurisé.
C'est donc beaucoup plus confidentiel. Bien que l'on puisse croire à première vue que c'est destiné à la communication entre deux personnes uniquement, ce n'est pas forcément vrai : un profil peut appartenir à un groupe de personnes (association, entreprise), donc chaque ordinateur de ce groupe peut posséder le même compte, mais la sécurité est plus controversée dans ce cas-là.
Le chiffrement et la signature sont deux procédés distincts qu'il est possible de combiner ou non pour garantir l'identité et la confidentialité des échanges.

## Créer ses clefs

Cette commande est interactive est nécessite de répondre aux questions suivantes:
* Le choix du chiffrement : Le choix (1) RSA/RSA est conseillé (DSA ou Elgamal l'étaient dans les versions plus anciennes).
* La longueur de la clef : Théoriquement, plus la longueur de la clef est grande, plus la sécurité est forte. Le standard étant 2048 et le maximum 4096. Plus la clef est longue, plus l'ordinateur a du mal à la générer : l'ordinateur a besoin d'entropie numérique, il faut utiliser son ordinateur, bouger la souris, taper du texte, bref ... « mettre des artéfacts » pendant la génération.
* La durée de validité: la clé peut être infiniment valide tant que le propriétaire ne publie pas une révocation de clé. Utiliser une durée de validité plus courte permet d'éviter les problèmes liés à la perte ou au vol.
* Identité : La clé est associée à au moins une identité. C'est important, étant donné que ce sont les informations qui apparaîtront lors de la vérification des signatures.
* Mot de passe (optionnel): Le mot de passe est la dernière sécurité et permet d’empêcher quiconque aurait accès à la clé privée (même temporairement) de l'utiliser à votre place.
Le programme vous affichera l'empreinte de votre clé, qui est un identifiant permettant de sélectionner et retrouver votre clé.

## Gérer son porte-clef

Les clés connus (privée et publiques) sont sauvegardées et centralisées dans un porte-clefs (keyring). Il est possible d'utiliser plusieurs porte-clefs et toutes les commandes suivantes utiliseront le porte-clef par défaut.
* gpg --list-key affiche toutes les clés publiques connues.
* gpg --list-secret-keys affiche toutes les clés privées (donc les vôtres).
* gpg --delete-key ID permet de supprimer une clé publique. Il est impossible de supprimer une clé publique si vous posséder la clé privée.
* gpg --delete-secret-key ID permet de supprimer une clé privée !!!

### Exporter

Pour que vos amis super secrets puissent vérifier la validité des informations que vous leur envoyez, il faut leur donner la clef publique !
Cette commande générera un fichier.asc sous la forme d'un fichier texte (--armor). La clé publique peut maintenant être diffusée
* Soit vous la transmettez à un serveur sécurisé (comme https://pgp.mit.edu), en faisant un copier-coller du fichier texte produit dans la fenêtre mise à disposition sur ledit site.
* Soit vous la transmettez à un serveur de clé directement depuis le terminal avec gpg --keyserver URL --send-key ID.
* Soit vous diffusez le fichier texte tel quel, sur un site internet ou envoyé à des amis.
* Mano à mano, méthode la plus sécurisée : vous donnez vous même le fichier à la personne qui désire vous identifier - par contact social - sur une clef USB, que vous avez pris soin de chiffrer, avec un mot de passe de 10 lignes, que vous indiquez à la personne à ce même moment, dans le parking d'un centre commercial, aux alentours de 2h du matin.
Il est également possible d'exporter la clé secrète vers un fichier texte.

### Importation

Une fois récupérée, il faut ajouter la clé publique dans le trousseau de clés pour la rendre accessible aux applications de l'ordinateur utilisant GPG.
Puis, faites un petit gpg --list-key, pour vérifier qu'elle est bien présente.
Pour pouvoir réimporter sa clef privée, par exemple pour la transférer entre des ordinateurs, il faut l'exporter et l'importer avec la commande gpg --import --allow-secret-key-import fichier.asc. Cette opération est relativement peu sécurisée, il vaut mieux l'éviter.

### Détruire sa clef

Pour une raison ou une autre, on peut regretter sa clef. Et vous l'avez diffusée sur tous les serveurs ! Il existe un moyen simple : il faut révoquer votre clef. Autrement dit, vous créez une clef qui, mise sur les mêmes serveurs, « annoncera » la fin de validité de votre clef publique. Très pratique quand on a créé une clef à durée de vie illimitée.
Elle créera un certificat pour révoquer votre clef, à mettre ensuite sur les serveurs de clefs. Autant vous dire qu'il est intelligent de créer ce certificat, avant que vous n'en ayez besoin. Il est aussi important de ne pas le dévoiler, même si c'est moins important que la clef privée (on ne pourra pas signer à votre place, mais on pourra vous empêcher de signer).
Ensuite, pour l'appliquer, vous importez le fichier via :
Et, ensuite, exportez-la au serveur de clefs :
Si tout s'est bien passé, votre clef est maintenant invalide.

## Signer ses informations

Nous attaquons une partie intéressante : la signature électronique ! Il existe deux méthodes, il faut étudier laquelle convient le mieux à votre utilisation.

### Avec un fichier joint

Pour signer un fichier, il faut taper :
Cela créera un fichier portant le même nom que celui à signer avec une extension asc. Ensuite, il vous suffira d'envoyer votre fichier avec lequel vous allez joindre le fichier asc. Pour vérifier que le fichier est certifié authentique, il suffit de taper (si, bien sûr, vous avez la clef publique de votre correspondant) :

### Signature intégrée

Vous pouvez intégrer dans le fichier même (par exemple les messages, les fichiers textes, etc.), la signature électronique. Pour cela :
La signature se trouvera à l'intérieur du fichier. Vous le remarquerez rapidement, votre texte sera entouré des balises GPG, avec le morceau de la signature. Cette méthode de signature n'est pas privilégiée pour le fichier non-textuels.
Pour vérifier l'authenticité :

## Chiffrer ses informations
### Méthode via clefs

Cela vous pondra un fichier gpg, illisible de façon binaire. Mais, vous pouvez chiffrer l'information de façon ascii, souvent plus recommandé, de cette façon :
À ce moment là, vous aurez un fichier asc, qui est lisible par un éditeur de texte, mais, bien sûr, incompréhensible. C'est plus conseillé, puisque plus souple. Vous pouvez faire un copier-coller du fichier via mail, ou autre, s'il est chiffré en ascii. Les deux façons sont aussi sécurisées l'une que l'autre.
Dans les deux cas, seule la personne possédant la clef indiquée dans la commande ne pourra déchiffrer les informations.
Pour déchiffrer :
Tout simplement, il demandera le mot de passe de l'utilisateur, et transformera le fichier gpg en fichier lisible.

### Méthode de chiffrement symétrique

Le chiffrement symétrique, c'est-à-dire qui n'utilise pas le système de clef publique/privée, on vous demande un mot de passe que votre interlocuteur doit connaître.
gpg -c fichier pour chiffrer et gpg -o fichier -d fichier.gpg pour déchiffrer.