Une grande partie de cette réponse est extraite du wiki Arch et de la documentation GnuPG . Toutes les recommandations de cette réponse sont purement mon avis et doivent être prises avec une tonne de sel.
Création d'une clé PGP
GUI
Ouvrez l'application Mots de passe et clés (aka seahorse
) et cliquez sur +
(ou allez dans Fichier -> Nouveau , ou appuyez sur CtrlN) pour voir:
Sélectionnez la clé PGP et entrez vos coordonnées. Je me fais passer pour Byte Commander:
RSA et 2048 bits conviennent parfaitement à la plupart des applications. Si vous ne souhaitez l'utiliser que pour la signature, choisissez l' option RSA (signature uniquement) dans le menu déroulant, mais vous ne devriez pas en avoir besoin - cela peut être géré à l'aide de sous-clés . Vous pouvez laisser un commentaire. Garder une date d'expiration sur votre clé est également utile. Cliquez Create.
Entrez un mot de passe suffisamment long (et je veux dire long , mon exemple est court, IMO), puis cliquez sur Ok:
Seahorse ne semble pas avoir de commentaires, contrairement à la CLI. Attendez un moment, faites ce que vous voulez, pendant qu'il recueille l'entropie et crée une clé. Ça peut prendre un moment. Après quoi, vous verrez qu'ils saisissent dans la section Clés PGP :
CLI
Pour générer une clé à partir de la ligne de commande, exécutez simplement gpg --gen-key
. Il vous demandera les mêmes détails que l'interface graphique:
$ 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.
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?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 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) 1y
Key expires at Tuesday 27 September 2016 03:45:19 PM IST
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and E-mail Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: Byte Commander
E-mail address: byte@command.er
Comment:
You selected this USER-ID:
"Byte Commander <byte@command.er>"
Change (N)ame, (C)omment, (E)-mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
passphrase not correctly repeated; try again.
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, use the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 186 more bytes)
.....+++++
+++++
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, use the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 80 more bytes)
....+++++
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 83 more bytes)
...+++++
gpg: key 8AE670A6 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: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2016-09-26
pub 2048R/8AE670A6 2015-09-28 [expires: 2016-09-27]
Key fingerprint = 82D9 0644 B265 8E75 1E01 538B B479 3CF4 8AE6 70A6
uid Byte Commander <byte@command.er>
sub 2048R/0E2F4FD8 2015-09-28 [expires: 2016-09-27]
Notez comment GnuPG nous dit qu'il a besoin de plus d'entropie. J'aurais aimé que l'hippocampe le fasse aussi. Mais là encore, on a l'impression que GnuPG se comporte comme Oliver Twist. : P
Publier votre clé
Maintenant, nous devons sortir notre clé publique afin que les gens puissent vérifier les choses en l'utilisant.
GUI
Revenez à la liste des clés PGP dans l' seahorse
application (voir dernière capture d'écran). Sélectionnez la ou les clés que vous souhaitez exporter et, dans le menu Remote , choisissez Sync and Publish Keys :
Le Syncbouton sera désactivé si vous n'avez pas sélectionné de serveur sur lequel publier. Faites-le en cliquant sur le Key Serversbouton:
J'ai choisi le serveur d'Ubuntu.
Maintenant, vous pouvez cliquer sur le Syncbouton et le faire publier sur le serveur de clés d' Ubuntu (désolé pour le spam, Ubuntu!).
CLI
Avec la CLI, vous avez besoin de l'ID de clé de la clé que vous souhaitez publier. C'est la toute dernière ligne de la sortie lors de la création de la clé ( 8AE670A6
). Si vous ne vous souvenez pas de quoi il s'agit, lancez-vous gpg --list-keys
. De publier:
$ gpg --keyserver pgp.mit.edu --send-keys 8AE670A6
gpg: sending key 8AE670A6 to hkp server pgp.mit.edu
Désolé, MIT .
Signature
Je ne connais pas encore de méthode GUI pratique pour signer un document.
Une fois que vous avez créé le fichier que vous souhaitez signer, dirigez-vous vers le terminal. Essayez gpg --list-keys
:
$ gpg --list-keys
/home/muru/.gnupg/pubring.gpg
---------------------------
pub 2048R/F7878B0C 2015-09-28 [expires: 2016-09-26]
uid Byte Commander <byte@command.er>
sub 2048R/345B9A4F 2015-09-28 [expires: 2016-09-26]
Vous pouvez signer le fichier à l'aide de deux méthodes:
Signature avec cryptage
$ gpg --sign --output examples.sig examples.desktop
You need a passphrase to unlock the secret key for
user: "Byte Commander <byte@command.er>"
2048-bit RSA key, ID F7878B0C, created 2015-09-28
gpg: Invalid passphrase; please try again ...
You need a passphrase to unlock the secret key for
user: "Byte Commander <byte@command.er>"
2048-bit RSA key, ID F7878B0C, created 2015-09-28
Si vous êtes sur une session de bureau, vous serez probablement accueilli par une invite de mot de passe graphique. Par exemple, dans GNOME:
Si le destinataire possède votre clé publique, il peut la vérifier ou obtenir le contenu décrypté:
$ gpg --verify examples.sig
gpg: Signature made Monday 28 September 2015 03:25:00 PM IST using RSA key ID F7878B0C
gpg: Good signature from "Byte Commander <byte@command.er>"
$ gpg --decrypt examples.sig
[Desktop Entry]
Version=1.0
Type=Link
Name=Examples
Name[aa]=Ceelallo
...
URL=file:///usr/share/example-content/
Icon=folder
X-Ubuntu-Gettext-Domain=example-content
gpg: Signature made Monday 28 September 2015 03:25:00 PM IST using RSA key ID F7878B0C
gpg: Good signature from "Byte Commander <byte@command.er>"
Signature en texte clair
Vous ne voudrez peut-être pas crypter le contenu, par exemple, lors de l'envoi d'un courrier. Dans ce cas, utilisez l' --clearsign
option:
$ gpg --clearsign examples.desktop
You need a passphrase to unlock the secret key for
user: "Byte Commander <byte@command.er>"
2048-bit RSA key, ID F7878B0C, created 2015-09-28
$ cat examples.desktop.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[Desktop Entry]
Version=1.0
Type=Link
Name=Examples
Name[aa]=Ceelallo
...
URL=file:///usr/share/example-content/
Icon=folder
X-Ubuntu-Gettext-Domain=example-content
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAEBAgAGBQJWCRAaAAoJEGUZkqX3h4sMBWsH/1yw+G0v5Ck+T3PBS90SkvC8
5C0FJeGVr0AgYQohhsE3zEGQ7nn53N7JsvNlF6VccvN99DZIp18JbrJ+qs5hWjtg
KU/ACleR5dvVrJgfjppkuC8Q3cAudvqciKlLjA7Xycr3P49oCNCy8k/ue2TrgCvS
mMb5IS/kqpO7wrOMBAR0c/2CjQsA91S1/YK7DbuUqeNgEzW1grsI7XZPhiDGpAib
D20HWrbdLhklAEJuo1EvuOIggW6MF6ksxDoVapsUzQalD0TWEq6OnvzIS5qhITrc
XaDPQJpiHyCyINnL5aZCUwr2uon7osJ+2a8Ahp1REpzIZTdND9jA5NWSel5+yAs=
=ZrtB
-----END PGP SIGNATURE-----
Signature, avec un fichier distinct pour signature (signature détachée)
Enfin, pour certains fichiers, vous ne pouvez pas avoir la signature dans le document. Par exemple, les fichiers d'empaquetage ou les métadonnées d'un référentiel ont tous deux un contenu de nature spécifique qui n'autorise pas facilement les signatures intégrées. Dans ce cas, vous utilisez l' --detached-sig
option:
$ gpg --output examples.desktop.sig --detach-sign examples.desktop
You need a passphrase to unlock the secret key for
user: "Byte Commander <byte@command.er>"
2048-bit RSA key, ID F7878B0C, created 2015-09-28
$ gpg --verify examples.desktop.sig examples.desktop
gpg: Signature made Monday 28 September 2015 03:35:55 PM IST using RSA key ID F7878B0C
gpg: Good signature from "Byte Commander <byte@command.er>"
Remarque
En cryptage + signature et en signatures détachées, la sortie de gpg
est binaire. Vous pouvez avoir GnuPG en sortie des données encodées en base64 en utilisant l' --armor
option (blindée ASCII).
Automatisation
Pour signer un script, vous pouvez:
- utiliser une phrase de passe vide pour la clé
- en fonction de votre version de GnuPG, envoyez la phrase secrète via
stdin
. Voir cet article Unix et Linux pour quelques options.