====== GNUPG ou GPG ====== ====== Généralités ====== ===== Liens ===== http://fr.wikibooks.org/wiki/GPG\\ http://lsoron.free.fr/dossiers/crypto/page2.html\\ http://www.gnupg.org/howtos/fr/GPGMiniHowto-2.html\\ ===== Le principe de base ===== On génére une clé privé et une clé public.\\ La clé public peut être distribué et va permettre aux correspondants de crypter des fichiers à votre attention.\\ La clé privé est la seule permettant de décrypter les fichiers.\\ La clé privé ne doit pas être communiqué.\\ On a besoin que d'une seule clé privé... dans le meilleur des mondes. ===== Installer gpg ===== Si " $ dpkg -l | grep gnupg " ne renvoi rien: # apt-get install gnupg ====== Usages simples ====== ===== Générer une clé privé/public ===== (pour le user courant) $ gpg --gen-key ATTENTION: La "passphrase" permettra l'accès et l'usage de la clé privé.\\ **Mais la passphrase complique l'usage**, donc on laissera vide et gnupg ne nous demandera jamais la passphrase. ===== Options générales (pour la suite) ===== --armor => permet de produire un crytage en ASCII. --batch => signaler qu'on est dans un script sans interaction possible... On appellera par la suite "**info-clef**", tout ce qui peut permettre d'identifier la clé (public et privé?) a manipuler: ce peut être un "id" (8 chiffres hexa) ou un nom ou un mail... ===== Lister/Modifier les clés ===== Lister les clés: ''$ gpg --list-keys''\\ Effacer une clé: ''$ gpg --delete-key ''\\ Effacer la clé privée: ''$ gpg --delete-secret-key '' (est-ce une bonne idée?)\\ Editer une clé: ''$ gpg --edit-key '' ===== Extraire sa clé public afin de la distribuer ===== $ gpg --armor --export info-clef ===== Importer (ajouter a son trousseau) une clé public ===== $ gpg --import fichier ===== Crypter un message ===== $ gpg --armor -r -e est ce qui permet d'identifier le destinataire ("the receiver")... (exemple: mail@truc ou l'id (info-clé) de la clé.) Un 'fichier.asc' est créé.\\ Le message est crypté avec la clé public receveur.\\ Mais rien ne permet de s'assurer que l'envoyeur est le bon... pour cela il faut signer. ===== Signer un message ===== ==== Signature simple ==== La signature permet de s'assurer de l'origine du message.\\ La signature est faite a partir de la clef privée.\\ En conséquence, le destinataire doit posséder la clef publique dans son trousseau pour authentifier la signature. Dans le cas contraire, la signature est simplement ignoré.\\ L'option ''--default-key'' permet de choisir le signataire du message.\\ Si ''--default-key'' est absent, c'est la clef privée par défaut qui est utilisée. === Un fichier a part === gpg --default-key --armor --detach-sign fichier ''fichier.asc'' est créé et contient la signature === Dans le fichier === gpg --default-key --armor --clearsign fichier === Verifier la signature === gpg --verify fichier.asc fichier ou gpg --verify fichier ==== Cryptage et Signature ==== Ajouter: ''--sign'' Exemple: $ gpg --armor -r -o fichier.asc --default-key --sign -e fichier Le receveur devrait s'assurer que la signature est celle attendue. ===== Le problème: la "passphrase" ===== Si par malheur, vous avez entré une passphrase...\\ La "passphrase" réclame une interaction. Lorsqu'on veut automatiser la signature, il faut que la passphrase soit desactivé _OU_ que l'on écrive la passphrase dans un fichier dont on fera lecture ainsi :\\ On ajoute " --passphrase-fd 0 " pour forcer une lecture "stdin" Exemple: cat passphrase.txt | gpg --armor --yes --sign --passphrase-fd 0 -r -e Ce n'est pas super sécurisé !!! mais comment faire autrement ? to be continued... ===== Décripter un message ===== gpg -o dest.txt -d fichier_crypte Aprés les demandes de 'passphrase', 'dest.txt' contient le message en clair. La signature est affiché, s'il y en a une... ====== Exercises ====== ===== Transferer une clef privée ===== Il ne faut jamais faire ça, mais parfois il le faut. ==== Extraire clef privée ==== $ gpg --armor --export-secret-keys >kprive.txt Ce qui exporte la clef privée de dans ''kprive.txt''.\\ On copie: $ scp kprive.txt :~/tmp/. On importe: $ gpg --import kprive.txt Et voila, mais il ne faut pas faire ça ! Oh non! ==== Importer une clef public ==== Aprés que le public ait fait: $ gpg --armor --export >pubkey.txt Et envoyer le fichier par un moyen quelconque... on fait alors: $ gpg --import pubkey.txt Mais si on en fait usage, ''gpg'' va emettre un avertissement et refusé le cryptage.\\ Donc je fais ça: $ gpg --edit-key Et puis: > trust Choisir le niveau de confiance ultime... puis: > save Et voila. ===== Recuperer les clés ===== Copier ou recuperer les clés bruts... On va regarder et/ou copier ce qui se trouve dans **''~/.gnupg''** : $ gpg --homedir --list-key Etc...\\ On peut faire toutes les commandes classiques: exporter, importer, etc...