Pour pouvoir générer correctement les paires de clés (privée et publique), GPG a besoin d'une quantité importante de données aléatoires.
Pour générer ces données aléatoires, le système (Ubuntu/Debian/CentOS etc etc ...) a besoin d'une activité importante au niveau du processeur, de l'utilisation du ou des disques durs etc et c....
Pour faciliter la tâche, il existe un programme rng-tools, qui permet de faciliter la génération de données aléatoires sans solliciter le matériel.
# apt-get install rng-tools
# echo "HRNGDEVICE=/dev/urandom" >> /etc/default/rng-tools
# service rng-tools start
Il n'y a rien de plus à faire.
Désormais, tous les programmes, comme GPG, ayant un besoin important de données aléatoires auront leurs tâches facilitées par rng-tools.
On exécute la commande gpg --gen-key
# gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
Lors du choix du type de clé, choisir (1) RSA and RSA (default)
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Pour la longueur de la clé, laissé le choix par défaut 2048 bits.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
Pour la durée de validité de la clé, à vous de choisir.
Pour l'exemple je choisi 0 (La clé n'expire jamais)
Valider en répondant y pour YES
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: Jean Michel A Peu Près
Email address: jm@apeupres.fr
Comment:
You selected this USER-ID:
"Jean Michel A Peu Près <jm@apeupres.fr>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Renseigner votre nom, votre adresse mail et un commentaire si vous le souhaitez.
Valider en répondant o pour OK
You need a Passphrase to protect your secret key.
Enter passphrase:
Repeat passphrase:
Renseigner une phrase de passe.
Surtout, ne la perdez pas.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
GPG ayant besoin d'un grand nombre de données aléatoires pour pouvoir générer les clés, il est conseillé d'utiliser le poste un maximum pendant la génération des clés.
Utiliser au maximum le clavier, la souris etc etc.
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 0D6FE738 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/0D6FE738 2015-09-11
Key fingerprint = C643 9D6C 9456 9961 58C1 CDC7 F700 1FBC 0D6F E738
uid Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 2015-09-11
Une fois terminé, GPG nous informe que la clé privée et publique ont été créées et signées.
Le détail des clés est affiché à l'écran.
En fait, on s'aperçoit que la clé publique 0D6FE738 contient une sous-clé 1C51C149 (idem pour la clé privée).
Ce sont donc au total 4 clés qui ont été créées.
Une fois votre clé créée, vous pouvez indiquer dans votre fichier ~/.bashrc qu'il s'agit de votre clé par défaut en ajoutant la ligne:
# echo "export GPGKEY=0D6FE738" >> ~/.bashrc
# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 2015-09-11
pub 2048R/488606BD 2013-10-11 [expires: 2018-10-10]
uid Christopher lowson <webmin@lowson.ca>
uid Christopher Lowson <lowson.chris@gmail.com>
uid [jpeg image of size 2653]
sub 2048R/CA15AA23 2013-10-11 [expires: 2018-10-10]
pub 1024D/ACC3599B 2011-03-19
uid BT <bt@webmin.net>
sub 1024g/DA013131 2011-03-19
pub 1024D/A7F37C67 2009-04-17 [expired: 2010-07-31]
uid Max Ober <max.ober@gmail.com>
uid mober.at <post@mober.at>
uid mober.at <webmin@mober.at>
uid Max Ober <mober.itsb2006@fh-salzburg.ac.at>
uid n0942544@students.meduniwien.ac.at <n0942544@students.meduniwien.ac.at>
Ma clé publique 0D6FE738 apparait bien dans la liste ainsi que différentes clés importées 488606BD, ACC3599B, A7F37C67.
# gpg --list-keys Jean Michel A Peu Près
ou
# gpg --list-keys 0D6FE738
pub 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 2015-09-11
Nous voyons bien que notre clé publique 0D6FE738 contient une sous-clé 1C51C149
# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
ssb 2048R/1C51C149 2015-09-11
Nous voyons également que notre clé privée 0D6FE738 contient, comme sa clé publique, une sous-clé 1C51C149
Nous allons éditer notre clé afin d'y apporter quelques modifications.
Cette commande nous permet d'entrer dans le mode interactif de GPG
# gpg --edit-key 0D6FE738
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
pub 2048R/0D6FE738 created: 2015-09-11 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/1C51C149 created: 2015-09-11 expires: never usage: E
[ultimate] (1). Jean Michel A Peu Près <jm@apeupres.fr>
gpg>
Le mode édition nous permet de voir notre clé plus en détail.
Nous voyons, par exemple, que la clé privée est disponible (Secret key is available).
Nous voyons également, au niveau du champ usage, que notre clé maitresse 0D6FE738 peut-être utilisée pour certifier ou signer la clé publique d'un utilisateur (lettre C) et signer un document [mail / fichier] (lettre S).
Nous voyons que nous avons une sous-clé 1C51C149 qui va nous permettre de chiffrer un document [mail / fichier] (lettre E dans le champ usage).
Pour finir, nous voyons tous les détails concernant la date de création (created), la date d'expiration (expires) et le niveau de confiance (trust).
quit - Quitte le menu
save - Sauvegarde les modifications et quitte le menu
help - Affiche l'aide
fpr - Affiche l'empreinte de la clé sur 40 caractères
list - Affiche le détail de la clé
uid - Permet de sélectionner l'uid désiré
key - Permet de sélectionner la sous-clé désirée
check - Vérifie les signatures
sign - Signe l'uid sélectionné
adduid - Ajoute un uid
addphoto - Ajoute une photo
deluid - Supprime l'uid sélectionné
addkey - Ajoute une sous-clé
delkey - Supprime la sous clé sélectionnée
delsig - Supprime la signature de l'uid sélectionné
expire - Change la date d'expiration de la clé ou sous-clé sélectionnée
toggle - Bascule la liste clé publique / clé privée
passwd - Change la phrase de passe
trust - Modifie le niveau de confiance
revsig - Révoquer la signature de l'uid sélectionné
revuid - Révoquer l'uid sélectionné
revkey - Révoquer la clé ou sous-clé sélectionnée
enable - Active la clé
disable - Désactive la clé
Notre clé maitresse 0D6FE738 ayant deux usages (certification/signature de clé publique et signature de documents), nous allons ajouter une sous-clé qui nous permettra, uniquement, la signature de documents.
De la même manière que notre sous-clé 1C51C149 nous permet uniquement le chiffrement de documents.
gpg> addkey
Key is protected.
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 0D6FE738, created 2015-09-11
Il faut obligatoirement saisir la phrase de passe
gpg: gpg-agent is not available in this session
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
Your selection? 4
Nous allons choisir l'option 4 qui nous permet de créer une sous-clé RSA uniquement pour la signature.
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Nous laissons le choix par défaut pour la longueur de la clé (2048 bits)
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
Choisir une date d'expiration
Je choisi le choix par défaut (n'expire jamais)
Really create? (y/N) y
Je confirme la création
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
pub 2048R/0D6FE738 created: 2015-09-11 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/1C51C149 created: 2015-09-11 expires: never usage: E
sub 2048R/219FE958 created: 2015-09-11 expires: never usage: S
[ultimate] (1). Jean Michel A Peu Près <jm@apeupres.fr>
gpg>
Et voilà, je me trouve en possession d'une paire de clé maitresse 0D6FE738 (privée/publique) pour la certification ou la signature de clé publique chacune ayant deux sous-clés, une pour le chiffrement de documents 1C51C149 (usage: E) et une pour la signature de documents 219FE958 (usage: S).
Une fois les modifications terminées, quitter le mode interactif en sauvegardant.
gpg> save
(A faire uniquement dans le cas où la ou les sous-clés sont compromises)
Il faut éditer la clé maitresse correspondante.
# gpg --edit-key 0D6FE738
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
pub 2048R/0D6FE738 created: 2015-09-11 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/1C51C149 created: 2015-09-11 expires: never usage: E
[ultimate] (1). Jean Michel A Peu Près <jm@apeupres.fr>
gpg>
Sélectionner la sous-clé correspondante à l'aide de la commande key suivi du numéro d'index de la sous-clé.
Pour sélectionner la sous-clé 1 (index)
gpg> key 1
Même commande pour la désélectionner
gpg> key 1
L'index des clé/sous-clés commence à 0 (zéro).
Dans mon exemple, ma clé maitresse 0D6FE738 correspond à l'index 0, la sous-clé 1C51C149 à l'index 1 etc etc...
On sait qu'une sous-clé est sélectionnée quand un asterisk est présent sur la ligne (à coté de sub)
gpg> key 1
pub 2048R/0D6FE738 created: 2015-09-11 expires: never usage: SC
trust: ultimate validity: ultimate
sub* 2048R/1C51C149 created: 2015-09-11 expires: never usage: E
sub 2048R/219FE958 created: 2015-09-11 expires: never usage: S
[ultimate] (1). Jean Michel A Peu Près <jm@apeupres.fr>
Je sélectionne ma sous-clé 1C51C149 index 1 (un asterisk m'indique la clé sélectionnée)
gpg> revkey
Do you really want to revoke this subkey? (y/N) y
Please select the reason for the revocation:
0 = No reason specified
1 = Key has been compromised
2 = Key is superseded
3 = Key is no longer used
Q = Cancel
Your decision? 0
Enter an optional description; end it with an empty line:
>
Reason for revocation: No reason specified
J'exécute la commande revkey et je choisi l'option 0 (aucune raison spécifique)
Saisir une description optionnelle
(No description given)
Is this okay? (y/N) y
Valider
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 0D6FE738, created 2015-09-11
Saisir la phrase de passe de la clé privée.
gpg: gpg-agent is not available in this session
pub 2048R/0D6FE738 created: 2015-09-11 expires: never usage: SC
trust: ultimate validity: ultimate
This key was revoked on 2015-09-11 by RSA key 0D6FE738 Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 created: 2015-09-11 revoked: 2015-09-11 usage: E
sub 2048R/219FE958 created: 2015-09-11 expires: never usage: S
[ultimate] (1). Jean Michel A Peu Près <jm@apeupres.fr>
gpg>
L'indication revoked apparait bien sur la ligne de ma sous-clé.
Une fois les modifications terminées, quitter le mode interactif en sauvegardant.
gpg> save
Pour annuler les modifications
gpg> quit
Ne pas sauvegarder les modifications sinon vous allez révoquer la sous-clé et on ne pourra plus l'utiliser par la suite.
En effet, les clés et sous-clés ne doivent jamais être supprimées mais révoquées.
Cela permet de continuer à déchiffrer les anciens documents et vérifier les anciennes signatures.
La révocation se fait via le mode interactif et la commande revkey
Mais pour cela, il faut obligatoirement disposer de la paire de clé maitresse et de la phrase de passe.
En cas de perte de la clé maitresse ou la perte de la phrase de passe, il n'est plus possible de faire quoi que ce soit, il est donc impératif de créer le certificat de révocation de notre clé maitresse afin de la révoquer et pour pouvoir en créer une nouvelle. C'est une question de sécurité nationnale ;-)
# gpg --output revoke.asc --gen-revoke 0D6FE738
sec 2048R/0D6FE738 2015-09-11 Jean Michel A Peu Près <jm@apeupres.fr>
Create a revocation certificate for this key? (y/N) y
Please select the reason for the revocation:
0 = No reason specified
1 = Key has been compromised
2 = Key is superseded
3 = Key is no longer used
Q = Cancel
(Probably you want to select 1 here)
Your decision? 0
Choisir le motif de la révocation
Enter an optional description; end it with an empty line:
>
Saisir une description optionnelle
Reason for revocation: No reason specified
(No description given)
Is this okay? (y/N) y
Valider avec y pour YES
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 0D6FE738, created 2015-09-11
Saisir la phrase de passe
gpg: gpg-agent is not available in this session
ASCII armored output forced.
Revocation certificate created.
Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable. But have some caution: The print system of
your machine might store the data and make it available to others!
Ce certificat de révocation doit être stocké en lieu sûr et surtout pas avec la clé maitresse.
En cas de guerre nucléaire ;-) pour révoquer la clé maitresse:
# gpg --import revoke.asc
Aucune confirmation demandée. La clé maitresse est aussitôt révoquée.
# gpg --armor --export 0D6FE738 > clepub.asc
# gpg --armor --export-secret-keys 0D6FE738 > clesec.asc
# gpg --armor --export-secret-subkeys 0D6FE738 > subcle.asc
Seul le fichier clepub.asc contenant la clé publique peut être communiqué.
Pour éviter toute erreur de manipulation, sauvegarder également le dossier complet ~/.gnupg.
Enregistrer ces trois fichiers, ainsi que le fichier contenant la clé de révocation de la clé maitresse (revoke.asc) dans une archive TAR.
Chiffrer le fichier archive TAR avec la commande openssl (on est quand même jamais trop prudent)
# openssl enc -aes256 -in monFichier.tar -out monFichier.tar.aes256
Supprimer les 4 fichiers .asc ainsi que l'archive TAR. Le fichier clepub.asc peut-être conservé.
Conserver uniquement le fichier chiffré et l'enfermer à double tour dans un coffre fort sur Neptune.
Sans blague, il ne faut surtout pas le perdre.
Pourquoi supprimer (ou plutôt enlever) la clé privée maitresse de notre trousseau ?
Pour plus de sécurité.
Nous n'avons pas besoin de la clé privée maitresse pour signer et déchiffrer des documents.
Seules les sous-clés privées sont nécessaires.
Dans le cas où vous ne souhaitez pas faire d'autres opérations nécessitant la clé privée maitresse (signatures de clés publiques, ajout de sous-clés, révocation de sous-clés etc etc...), autant la supprimer du trousseau et la conserver à l'abris des regards indiscrets.
Attention, avant de procéder à la suppression de la clé privée du trousseau, sauvegarder toutes les clés dans des fichiers comme indiqué ici Exporter (sauvegarder) les clés dans des fichiers
On affiche nos clés privées.
# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
ssb 2048R/1C51C149 2015-09-11
ssb 2048R/219FE958 2015-09-11
Nous avons bien dans notre trousseau un clé privée maitresse 0D6FE738 et deux sous-clés privées 1C51C149 & 219FE958.
On supprime notre clé privée maitresse.
# gpg --delete-secret-keys 0D6FE738
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
sec 2048R/0D6FE738 2015-09-11 Jean Michel A Peu Près <jm@apeupres.fr>
Delete this key from the keyring? (y/N) y
This is a secret key! - really delete? (y/N) y
On répond "y" aux deux questions.
On affiche à nouveau nos clés privées
# gpg --list-secret-keys
La commande ne retourne plus rien.
A ce stade, nous ne pouvons plus rien faire (ni signer, ni déchiffrer des documents) puisqu'en supprimant la clé privée maitresse, toutes les sous-clés privées ont été également supprimées.
Nous allons donc importer uniquement nos sous-clés privées (vous les avez normalement sauvegardées ;-).
# gpg --import subcle.asc
gpg: key 0D6FE738: secret key imported
gpg: key 0D6FE738: "Jean Michel A Peu Près <jm@apeupres.fr>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
La commande nous indique que la clé privée a bien été importée.
On vérifie en affichant la liste des clés privées.
# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec# 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
ssb 2048R/1C51C149 2015-09-11
ssb 2048R/219FE958 2015-09-11
Le symbole dièse "#" à coté de "sec" nous indique que la clé privée maitresse est manquante mais que nous avons bien les deux sous-clés privées (ssb).
Si, pour une raison x vous avez besoin de réimporter dans votre trousseau votre clé privée maitresse, procéder de cette manière.
Ouvrer votre coffre-fort et récupérer la sauvegarde de vos clés (Elles sont censées être stockées dans un lieu sûr).
Supprimer les sous-clés privées.
# gpg --delete-secret-keys 0D6FE738
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
sec 2048R/0D6FE738 2015-09-10 Jean Michel A Peu Près <jm@apeupres.fr>
Delete this key from the keyring? (y/N) y
This is a secret key! - really delete? (y/N) y
Confirmer la suppression.
Vérifier la liste des clés privées.
# gpg --list-secret-keys
Notre trousseau ne contient plus de clés et sous-clés privées.
On importe notre clé privée maitresse (qui contient également les sous-clé privées).
# gpg --import clesec.asc
gpg: key 0D6FE738: secret key imported
gpg: key 0D6FE738: "Jean Michel A Peu Près <jm@apeupres.fr>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: secret keys read: 1
gpg: secret keys imported: 1
On affiche nos clés privées importées.
# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
ssb 2048R/1C51C149 2015-09-11
ssb 2048R/219FE958 2015-09-11
Le symbole "#" à coté de "sec" a disparu.
Notre clé privée maitresse a bien été restaurée.
Plusieurs méthodes sont disponibles pour partager sa clé publique.
Pour la troisième méthode
# gpg --send-keys 0D6FE738
gpg: sending key CEA84BBA to hkp server keys.gnupg.net
Si vous avez sa clé publique dans un fichier
# gpg --import cle_publique_user_a.asc
En effectuant une recherche sur un serveur de clé
Par exemple, pour communiquer de manière chiffrée avec le président des Etats-Unis (trop la classe)
# gpg --fingerprint --search-keys Barack Obama
gpg: searching for "Barack Obama" from hkp server keys.gnupg.net
(1) Barack Obama <barack.obama@whitehouse.gov>
2048 bit RSA key CF4C3F70443ED0C5C3EE47555F31A132F752764E, created: 2015-01-02
(2) barack obama (hej) <hejhejhej@hotmail.com>
2048 bit RSA key FC54600AB3CB8A408005DCEE9001C823CB3D68F7, created: 2014-10-09
(3) Barack Hussein Obama <president@whitehouse.gov>
2048 bit RSA key 4AC1999F0BA293E8960AF2DA428C3085AF19CFE9, created: 2014-05-25, expires: 2018-05-25
(4) Barack Obama (Barack Obama) <xxgiricsxx@gmail.com>
1024 bit RSA key 03387652B395C4EC9DDA6AAFC9086C33FAE0BD4A, created: 2014-03-12
(5) Barack Hussein Obama (PoC) <presidente@casabranca.gov>
1024 bit RSA key 080C65142395677B22533461601F1B3201206B11, created: 2014-03-12 (revoked)
(6) Barack Obama (Si quieres pasar un buen rato llamma al timbre de la cas
3072 bit DSA key 06FE8A6A00EF1482C7AF545A06601E108440BE33, created: 2014-01-10, expires: 2014-01-11 (expired)
(7) Barack Obama <mmmyom@tormail.org>
2048 bit RSA key 09D7F58194D51A08F0DC8C6D0B998F9E9C8EFF37, created: 2013-05-28, expires: 2017-05-28
(8) Barack Obama (Pruba SAD) <shus_presi_EEUU@yopmail.com>
1024 bit RSA key 128F925760B14B1EBE7DFCD35F25557DE7D21FF0, created: 2012-10-10
(9) barack obama <bjjbb@ufl.edu>
2048 bit RSA key 099A86AA0E3383D0396A59E457435C9EE35A5D9F, created: 2011-11-10
(10) Barack Obama <baracko@whitehouse.com>
2048 bit RSA key 4E984FCDD33CC9F11B2E774FB9AA7F50D3EF826C, created: 2011-10-20
(11) Barack Hussein Obama (PoC) <presidente@casabranca.gov>
1024 bit DSA key DFC2235748027DE8897FF893A69404F176F5FE21, created: 2010-04-07, expires: 2010-04-14 (expired)
Keys 1-11 of 12 for "Barack Obama". Enter number(s), N)ext, or Q)uit >
Choisir la clé à importer.
L'option --fingerprint permet d'afficher l'empreinte de la clé et de la vérifier si celle-ci nous a été communiquée par le destinataire lui-même. Deux précautions valent mieux qu'une.
Je choisi d'importer la clé (1) - Je valide en appuyant sur Entrée
gpg: requesting key F752764E from hkp server keys.gnupg.net
gpg: key F752764E: public key "Barack Obama <barack.obama@whitehouse.gov>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Quand on liste les clés
# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 2015-09-11
sub 2048R/219FE958 2015-09-11
...
pub 2048R/F752764E 2015-01-02
uid Barack Obama <barack.obama@whitehouse.gov>
sub 2048R/C4CDB034 2015-01-02
On voit que la clé F752764E a bien été importée.
Dorénavant, je suis en mesure d'envoyer des messages chiffrés au président des Etats-Unis Barack Obama (whaoo).
A ce stade, nous sommes en mesure de signer et chiffrer tous les documents que nous souhaitons.
Alors, suivez le guide ...
La signature d'un message exige la saisie de la phrase de passe de la clé privée à chaque fois.
"message" correspond à un fichier texte contenant le message à signer.
# cat message
Ceci est un message signé.
# gpg --sign message
Un nouveau fichier message.gpg est généré contenant le message et la signature au format binaire.
Pour lire le contenu du message, il faut obligatoirement utiliser gpg avec l'option --decrypt.
En effet, le message n'est pas chiffré, il est seulement signé, mais étant au format binaire, seule l'option --decrypt est capable de vérifier la signature et d'afficher le message en clair.
# gpg --clearsign message
Un nouveau fichier message.asc est généré contenant le message et la signature au format ASCII.
# gpg --detach-sign message
Un nouveau fichier message.sig est généré contenant uniquement la signature au format binaire.
# gpg --detach-sign --armor message
Un nouveau fichier message.asc est généré contenant uniquement la signature au format ASCII.
Pour modifier le nom du fichier généré, il faut utiliser l'option -o nomDuFichier (ou --output).
# gpg --detach-sign --armor -o signature.asc message
Il est possible de signer un message sans passer par l'intermédiare de fichiers (entrées/sorties)
# echo "Ceci est un message signé." | gpg --clearsign
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 219FE958, created 2015-09-11 (main key ID 0D6FE738)
gpg: gpg-agent is not available in this session
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Ceci est un message signé.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAEBAgAGBQJV9enkAAoJED/atMwhn+lYiz8H+wc1peA+zFNh0pI0Xl9LaCng
2BPlhod4MYO7yAJTKh76MHx1pXZAjPRZdvQf7WockS9gyHC2/h3MGcFMJZ4LAYdQ
16LfwCC2ip08FsiWuIjnAdC+qEcvLVM6MkH5iiKVgLRnwn7b7oqp9M/mwQGb8JmA
gxRwMTDZxxSBHjjIKPtbOzzN/Wp308WQiI1G0d/uM+GE8JmOQcGAz2pNS/i01KbR
7ft0RUGOtdlnZOyBpuTl90CEkEhFjICvoyB3EEoXAR+DorxhgRUGeGliZzgoKSeU
cWsGlMaigvofC67xSaWacIpk/GOv0hZUPMR9EqmKuCDqSHpcrnWX3W2JWYqwkZM=
=XBKV
-----END PGP SIGNATURE-----
Copier/coller le message signé dans un mail au format texte (tout le contenu de -----BEGIN PGP SIGNED MESSAGE----- jusqu'à -----END PGP SIGNATURE-----).
Pour envoyer la sortie vers un fichier, utiliser l'option -o monFichier (--output).
On signe le fichier message
# gpg --armor --detach-sign message
On vérifie la signature du fichier message.
L'option --verify prend en premier paramètre le nom du fichier contenant la signature (si la signature est dans un fichier à part) et le nom du fichier signé en second paramètre.
# gpg --verify message.asc message
gpg: Signature made Sun 13 Sep 2015 11:40:49 PM CEST using RSA key ID 219FE958
gpg: Good signature from "Jean Michel A Peu Près <jm@apeupres.fr>"
La signature est correcte.
On altère le fichier message pour simuler un piratage du fichier.
# echo "" >> message
On vérifie à nouveau la signature du fichier.
# gpg --verify message.asc message
gpg: Signature made Wed 16 Sep 2015 07:14:28 PM CEST using RSA key ID 219FE958
gpg: BAD signature from "Jean Michel A Peu Près <jm@apeupres.fr>"
Le résultat nous indique que la signature est incorrecte.
Nous avons la preuve que le fichier d'origine a été altéré.
Franchement, c'est quand même pas si compliqué de signer un fichier et c'est quand même plus sécurisant.
Et si maintenant on le chiffrait, ce fichier ...
Chiffrer un document n'est pas plus compliqué que de le signer.
Il faut juste avoir la clé publique du ou des destinataires du fichier. (ou avec sa propre clé publique si vous voulez seulement chiffrer des fichiers personnels)
Première question: A qui puis-je envoyer des messages/fichiers chiffrés ?
Pour le savoir, il faut lister toutes les clés publiques de notre trousseau.
# gpg --list-public-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/0D6FE738 2015-09-11
uid Jean Michel A Peu Près <jm@apeupres.fr>
sub 2048R/1C51C149 2015-09-11
sub 2048R/219FE958 2015-09-11
pub 2048R/F752764E 2015-01-02
uid Barack Obama <barack.obama@whitehouse.gov>
sub 2048R/C4CDB034 2015-01-02
Je vois que je peux chiffrer des documents pour moi-même et pour Barack Obama (oh la vache, j'avais oublié que j'avais importé sa clé publique).
Allez, c'est parti, envoyons un message chiffré à Barack.
# echo "Hello Barack, how are you ?" | gpg --encrypt --armor --recipient barack.obama@whitehouse.gov
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 1f, 0u
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
hQEMAxK9BLnEzbA0AQf8CLkg04MMJMxCrUiwHzcgaqL94gavPLBP/GIQP5bnxJFE
ujBziWFTwb9OxyKv6MWs9cegB1/qNKnYdgIWpDwjMWv+G/8wJfDqif002rEYPE+B
rRsnTXBQM+7QHXwATGpxudP85cY+WGp+cEb6PjkGvDzcBuTdlj2eQ8hm01TOKlpz
CDvbgZ58v4vz2W229fHDOD1sZ8WhYv5Q9+vX1mcTODC2terKtE+ekRrpfOjUE0Kf
U+tdUIqMrop63oWJmQgclejevfzmLGvhSaZPlZy8HlWUNfgPCxspJIu4+r89EJST
364F2n/cMig5f+o1dYWHRO+aY6OapatE/zxEul33G9JXAWqnqZQ8XsA9p3H0bGe3
vAFAAKvG3C0RUgvbwJaG2yzX5GYbunyek/f/B7LdugM+r+D8qo+3Ts61ZvjkunhO
kv34a7xaYuA4ckA3VZZgJ9/DQgoqBHO7
=QP5y
-----END PGP MESSAGE-----
Pour chiffrer un message, il suffit d'utiliser l'option --encrypt et l'option --recipient suivie de l'adresse mail du destinataire. (il est possible d'indiquer plusieurs fois l'option --recipient si il y a plusieurs destinataires)
Si vous n'avez pas signé la clé publique de chiffrement du destinataire, un message vous demandera si vous souhaitez vraiment utiliser la clé correspondante à l'adresse mail indiquée.
Pour signer une clé, il suffit de l'éditer gpg --edit-key xxxxxx, une fois dans le mode interactif de gpg, sélectionner la clé servant au chiffrement (drapeau E) avec la commande key suivi de l'index de la clé et la signer avec la commande sign. Tout est indiqué ici "Editer une clé".
Il reste à copier tout le contenu du message chiffré (de -----BEGIN PGP MESSAGE----- jusqu'à -----END PGP MESSAGE-----) et le coller dans un mail au format texte.
L'option -o (--output) peut être utilisée pour enregistrer le contenu du message chiffré dans un fichier.
Sans l'option --armor, le contenu sera chiffré au format binaire.
Pour chiffrer un fichier, il suffit d'indiquer son nom
# gpg --encrypt --armor --recipient barack.obama@whitehouse.gov message
Avec l'option --armor, un fichier .asc est généré (ASCII).
Sans l'option --armor, un fichier .gpg est généré (binaire).
En combinant les options de signatures, il est possible de signer et chiffrer un document.
# echo "Hello Barack, how are you ?" | gpg --sign --encrypt --armor --recipient barack.obama@whitehouse.gov
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 219FE958, created 2015-09-11 (main key ID 0D6FE738)
gpg: gpg-agent is not available in this session
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
hQEMAxK9BLnEzbA0AQf8CFu2Jkc3wXtpg/H8eJ+jH5mf/pcm2NDUV17q8D7zohTf
sr7lsYW6IqWD5WtTd0hA/LVPHEl6UI4uXdzskNOdam+AJUUYqRDhXIos4mWof9Q/
e4hM1mz01tMSCIqmvIHvmYTRQOqu80wv2az7WJk7D7uxqVRfktA4dumVGwn3aIIc
RQ8chuHWIEUIteUJixsiYUIZj8jlQsvsZ9JMQmA3ugf3agOpNKcEwVyxhFhHw77q
oyogcVwfsI5mbKX6oZH93tsHG4gjUn/iiRXoWOsQuxzoqc7q90ndZHXRbQlsRZKw
qw4t9lsUg/NVsMGDDBxO4GpKgoQzoj27uqigV01q69LAyAFiR2YdUVtbqnNQ/HOJ
EcplnhCSmQNiHth5MY2yYFs9C7v1+HxItbUkufLIqv1qSHev6WmTaK9Ro+RkNVDQ
xwYwmyOZEcLpONRF6qWLkKk+PpctiSjSCd6lg7EvvEnPh9Lkz+n6fDgOIVCilKUX
IXn1l+JZX4e9Flan7KonyC7GEMJAUFedzxxVAKgcL0omFKqQq7iqRcBwXeTEZXd3
s1qYv1aQMN90sWfBamI3i9T8rtMyVABjEb+Mj1Qdp/vf+uNmuo14WZOyJT8zklnH
M+o+eG48dOSeg52FPUSw0L0BucqdXRu9llNWUiXYz2UnBe3KURMnpyMYrl7p2swm
AmAZTJ9zYfEAZkSzkArrdq2DcWYYW4CRtCLGojjxyDkN9AfZ79oDOl2qyy7xOlJ5
VY/HSX/gfMgYRKXR8do+fSW3cbm8u5j7cO2IdDzsahxZGdpPClFN3Mwjy6Zr59M+
tqlxKE+6Cyc1a44CeOUp6j2i01zqgDqG5Ru3CiPWTjk7GPP56/ELGdaz
=UKz1
-----END PGP MESSAGE-----
Ce message étant signé et chiffré, il est ultra sécurisé.
Difficle de faire mieux.
Vous avez un fichier contenant une multitude de "utilisateurs/mots de passe".
Chiffrer le avec GPG et supprimer le fichier d'origine.
Et quand vous avez besoin d'un mot de passe, déchiffrer le fichier avec l'option --decrypt et votre phrase de passe.
# cat motsdepasse
aaa fghdfkgjhdfgjkhdfgk
bbb mljfklsjgksjghskgjh
ccc sjhgjhkfgjkfhgjkfhg
# gpg --encrypt --recipient jm@apeupres.fr motsdepasse
# rm motsdepasse
# gpg --decrypt motsdepasse.gpg
You need a passphrase to unlock the secret key for
user: "Jean Michel A Peu Près <jm@apeupres.fr>"
2048-bit RSA key, ID 1C51C149, created 2015-09-11 (main key ID 0D6FE738)
gpg: gpg-agent is not available in this session
gpg: encrypted with 2048-bit RSA key, ID 1C51C149, created 2015-09-11
"Jean Michel A Peu Près <jm@apeupres.fr>"
aaa fghdfkgjhdfgjkhdfgk
bbb mljfklsjgksjghskgjh
ccc sjhgjhkfgjkfhgjkfhg
Vous remarquerez que le fichier est chiffré avec ma propre clé publique, et que pour le déchiffrer j'ai besoin de ma clé privée et de ma phrase de passe.