Intro Chiffrement Print
Intro Chiffrement Print
Intro Chiffrement Print
symétrique et asymétrique
Objectifs 3
I - Contexte 4
II - Découverte du chiffrement 5
III - Exercice : Appliquer la notion 8
IV - Chiffrement symétrique 9
V - Exercice : Appliquer la notion 12
VI - Chiffrement asymétrique 13
VII - Exercice : Appliquer la notion 17
VIII - OpenPGP et GnuPG 18
IX - Exercice : Appliquer la notion 22
X - Signer ses mails 23
XI - Exercice : Appliquer la notion 26
XII - Essentiel 27
XIII - Exercice final 28
Contenus annexes 30
Crédits des ressources 35
Durée : 2h
Environnement de travail : Linux en ligne de commande
Pré-requis : Aucun
[cf. q1BMYHTD]
Le chiffrement est une technique qui permet de garantir la confidentialité et l'origine des informations
électroniques échangées ou stockées.
Pour garantir la confidentialité d'une information on applique un code qui rend le message
incompréhensible tant que l'on ne connaît pas la manière de décoder. On appelle clé l'information qui
permet de coder et de décoder.
Le chiffrement est aussi une façon de signer des informations afin de garantir qu'on en est l'émetteur.
L'usage du chiffrement s'est fortement développé ces dernières années notamment sur le Web avec la
diffusion du protocole HTTPS. La multiplication des fuites de données et le développement de la
cybercriminalité en sont une première cause.
Les révélations d'Edward Snowden en 2013 ont également montré que les états et les grandes
entreprises espionnaient les échanges sur Internet. Le chiffrement est donc également un outil pour
préserver l'intimité de chacun en ligne.
[cf. uRCQkYXI]
Objectifs
Découvrir la notion de chiffrement ;
Connaître un algorithme basique de chiffrement.
Mise en situation
Lorsqu'on échange des messages sur Internet, c'est un peu comme si on communiquait avec des cartes
postales. C'est à dire qu'il est très facile pour un intermédiaire de les lire. Les messages ne sont pas
confidentiels.
La seule façon de communiquer de façon confidentielle est de chiffrer les messages. Cela consiste à
définir un code secret que seuls les deux correspondants connaissent. Ainsi les messages sont toujours
lisibles par des tiers, mais il ne sont plus en mesure de comprendre quoi que ce soit. C'est comme si sur
ma carte postale j'écrivais : DZMIY Z YPO. On peut toujours la lire, mais sans le code il est difficile de
comprendre le message. Si je vous donne le code, alors vous serez en mesure de le déchiffrer c'est à
dire de l'appliquer pour retrouver le message original. Mais comme un code de chiffrement doit rester
secret, je ne le donne pas dans une vidéo.
Le code que j'ai utilisé ici est très simple, il sera facilement décrypté. Décrypter un code signifie
parvenir à en trouver la teneur originale sans en avoir été informé. Je vous laisse décrypter mon
message.
Fondamental
Le chiffrement est un procédé cryptographique permettant de coder un message de telle façon que sa
lecture ne soit possible que par le seul possesseur de la clé de déchiffrement.
Aussi appelé chiffrement par décalage, ce chiffrement très simple consiste à décaler toutes les lettres
d'un message. Dans ce cas, les clés de chiffrement et de déchiffrement sont identiques et
correspondent à l'amplitude du décalage.
Par exemple pour un décalage de 2, les « A » deviendront des « C », les « B » deviendront des « D », etc.
Le mot « shannon » donnera « vkdqqrq » avec un décalage de 3.
Chiffre de César
Le problème du chiffrement par décalage est son manque de sécurité. Il est très simple de trouver la clé
de déchiffrement par essais successifs.
La sécurité de ces algorithmes doit reposer sur des propriétés mathématiques fortes et/ou sur une
bonne transformation de l'information.
Baser la sécurisé du chiffrement sur le fait que son procédé soit inconnu par un tiers revient à faire de la
sécurité par l'obscurité. Cacher un procédé protège beaucoup moins que d'utiliser un procédé de
chiffrement public et solide.
La mot crypter n'existe pas en Français. Un message est donc chiffré mais pas crypté.
Néanmoins, on peut parler de « décryptage » lorsque l'on cherche à déchiffrer un message sans
disposer de la clé nécessaire.
Le hachage cryptographique est le second procédé cryptographique très utilisé. Il permet de produire
des condensats (aussi appelé empreinte numérique). Un condensat est une chaîne de caractères
unique de taille fixe pour chaque donnée pouvant exister. Ainsi, deux messages différents (même d'un
caractère) auront un condensat différent.
Il n'est pas possible d'inverser le processus et de passer d'un condensat au message d'origine (ceci
l'oppose au chiffrement). Les algorithmes classiques sont : SHA256, SHA1, MD5, etc.
À retenir
Le chiffrement permet de transformer un message afin qu'il ne soit lisible que par une personne
possédant la clé de déchiffrement.
La sécurité d'un chiffrement repose sur de bonnes propriétés mathématiques et sur de bonnes
opérations de transformation de l'information.
[cf. KrQTcNtH]
Question
Décrypter le message suivant, chiffré par décalage :
1 nc ocejkpg gpkioc pgvckv rcu ugewtkugg
On ne connaît pas la clé, mais on sait que le premier mot est la.
Indice :
On peut calculer le décalage à partir de notre connaissance du premier mot : il correspond à la différence
de position entre les lettres n et l, ou c et a.
[cf. eyFzfrjS]
Objectifs
Découvrir le chiffrement symétrique ;
Utiliser un algorithme de chiffrement symétrique.
Mise en situation
Lorsque deux personnes qui communiquent entre elles partagent exactement la même technique de
chiffrement, on parle de chiffrement symétrique. C'est en général une méthode insuffisante pour les
communications entre plusieurs personnes. Il est possible d'utiliser une clé symétrique pour
communiquer avec quelqu'un, mais dans ce cas la clé sera changée à chaque nouvelle communication.
Le chiffrement symétrique est aussi utilisé lorsque l'on souhaite chiffrer des données sans les partager.
C'est le cas lorsque l'on chiffre son disque dur pour que, même en cas de vol, seul le propriétaire puisse
accéder aux données. Ainsi, le but n'est plus de sécuriser une communication mais le stockage lui-
même.
Le chiffrement symétrique est un chiffrement dans lequel la clé de chiffrement sert également à
déchiffrer. On parle alors de clé secrète.
Bob souhaite chiffrer son disque dur pour qu'il soit le seul à pouvoir accéder à ses fichiers.
1. Lors de l'installation de son système d'exploitation Bob décide de chiffrer son disque dur, il
choisit un mot de passe P.
2. La totalité du disque est chiffré avec une clé K générée par le système, cette clé est stockée sur le
disque dur.
3. La clé K est à son tour chiffrée grâce au mot de passe P (elle ne doit pas être accessible en clair
sur le disque).
4. À chaque déverrouillage de son ordinateur Bob entre le mot de passe qui permet de déchiffrer la
clé K ; elle est alors chargée en mémoire afin d'être disponible rapidement.
5. À chaque fois qu'un fichier est accédé en lecture il est déchiffré avec K ; à chaque accès en
écriture il est chiffré avec K.
Ainsi, Bob est certain que tant que son mot de passe reste secret, ses données sont sécurisées même si
quelqu'un accède au disque de son ordinateur.
Il arrive parfois que la clé soit connue par plusieurs personnes ou soit présente sur plusieurs serveurs
du propriétaire. Le transfert de la clé doit absolument être sécurisé pour que le chiffrement ne soit pas
compromis. Plusieurs stratégies existent et une des plus efficaces est d'utiliser un autre type de
chiffrement pour chiffrer la clé secrète et d'envoyer ce message au destinataire qui pourra récupérer la
clé secrète en toute sécurité. Transférer la clé au travers d'une connexion SSH est une stratégie
commune.
L'Advanced Encryption System est un standard très répandu pour réaliser du chiffrement symétrique. Il
possède énormément de bonnes propriétés : facile à calculer, implémentation possible au niveau
logiciel comme au niveau matériel (implémentation câblée). Ce type de chiffrement est utilisé
notamment pour des protocoles tels que SSL (sécurisant les connexions HTTP) ou encore pour chiffrer
son disque dur (VeraCrypt1).
Voici une commande basique pour générer une clé secrète. Il existe des implémentations plus
complexes et sécurisées. Ici, la clé est simplement une suite aléatoire de 32 octets. Pour une utilisation
réelle, il est conseillé d'utiliser des implémentations robustes et de confiance pour générer sa clé
secrète.
1 openssl rand 32 > cle_secrete.pem
Il est possible de sécuriser sa clé secrète en spécifiant un mot de passe lors de la génération de la clé.
Une telle pratique permet de conserver la sécurité même si un attaquant réussit à récupérer la clé. Il est
tout de même fortement conseillé de générer une nouvelle clé dès lors qu'une clé est compromise.
On peut utiliser les commandes dans un repl Bash ou un terminal, pour chiffrer et déchiffrer un
message.
Pour chiffrer un fichier msg.txt en un nouveau fichier msg.txt.enc avec AES et une clé secrète
générée cle_secrete.pem on utilise :
1 openssl aes-256-cbc -pbkdf2 -iter 100000 -in msg.txt -out msg.txt.enc -pass
file:cle_secrete.pem
1
https://fr.wikipedia.org/wiki/VeraCrypt
Pour déchiffrer un fichier msg.txt.enc chiffré avec AES en un fichier msg.txt et une clé secrète
générée cle_secrete.pem on utilise :
1 openssl aes-256-cbc -pbkdf2 -iter 100000 -d -in msg.txt.enc -out msg.txt -pass
file:cle_secrete.pem
À retenir
Le chiffrement symétrique permet de sécuriser ses propres données avec une unique clé.
Le chiffrement symétrique permet d'échanger des données avec des pairs s'ils disposent eux
aussi de la clé.
Le partage de clé est très complexe et doit rester exceptionnel pour conserver sa confidentialité.
L'algorithme AES permet de réaliser un chiffrement symétrique.
[cf. u8VocpCW]
Question
Le fichier aes.priv contient une clé AES utilisée pour le chiffrement de fichiers.
Enregistrer le fichier.
[cf. aes]
Le fichier secret_data.enc a été chiffré avec la clé aes.priv.
Enregistrer le fichier.
[cf. secret_data]
À l'aide d'un terminal ou d'un Repl Bash retrouver le contenu du message grâce à la commande
openssl.
Indice :
Le message a été chiffré OpenSSL. Le paramètre iter vaut 10000.
Indice :
Chiffrement symétrique (cf. p.9)
[cf. moR8SQGx]
Objectifs
Découvrir le chiffrement asymétrique ;
Utiliser un algorithme de chiffrement asymétrique.
Mise en situation
L'inconvénient du chiffrement symétrique est que si trois personnes souhaitent communiquer entre
elles deux par deux, et bien le troisième pourra toujours espionner les deux autres, puisque le code est
commun. On pourrait imaginer que chaque couple de personnes possède une clé spécifique, mais si
1000 personnes échangent entre elles, cela fera pour chacune, 999 clés à gérer. On voit bien que cela
n'est pas satisfaisant pour les communications sur Internet.
La solution est fournie par le chiffrement asymétrique. Celui-ci est basé sur les propriétés
mathématiques d'une paire de clés : la première est publique, elle est communiquée au monde entier
et elle sert à chiffrer les messages. La seconde est privée, elle n'est communiquée à personne et elle
sert à déchiffrer les messages. Ainsi si quelqu'un souhaite m'envoyer un message, il peut le chiffrer
avec ma clé publique, seul moi pourrai le lire car je suis le seul à disposer de la clé privée.
On peut voir cela comme des milliers de boites inviolables que je diffuserais dans le monde entier.
N'importe qui peut prendre une de mes boîtes et glisser un message dedans. Je suis le seul à en
posséder la clé, donc seul moi pourrai accéder au message.
Dans ce contexte, chaque personne aura sa propre clé publique et sa propre clé privée :
N'importe qui pourra utiliser la clé publique d'une personne pour lui envoyer un message (cette
clé publique est connue de tous).
Ce message ne sera déchiffrable qu'avec la clé privée de cette même personne (qui n'est
détenue que par elle-même).
L'exemple le plus simple est le suivant : Bob veut envoyer un message à Alice.
1. La clé publique d'Alice est disponible sur Internet.
2. Bob la récupère et chiffre son message grâce à cette clé.
3. Bob envoie le message chiffré à Alice.
4. Alice reçoit puis déchiffre le message grâce à sa clé privée.
A l'issue de la communication, Alice et Bob sont certains que leur communication a été confidentielle...
à moins qu'Alice n'ait pas correctement protégé la confidentialité de sa clé privée (à cause d'une erreur
ou d'une attaque).
Il est possible d'inverser le rôle des clés en chiffrant avec la clé privée et en déchiffrant avec la clé
publique. Le but d'une telle pratique n'est pas de garder le message secret mais de vérifier l'identité de
l'expéditeur. Seul le propriétaire de la clé privée peut générer un message déchiffrable avec la clé
publique, ce qui garantit son identité.
Le chiffrement RSA est l'un des algorithmes les plus connus lorsque l'on parle de chiffrement
asymétrique. Il est utilisé dans de nombreux contextes notamment :
Par le protocole SSH, qui permet d'accéder à un serveur distant de manière sécurisée.
Pour transmettre une clé de chiffrement symétrique. La clé de chiffrement symétrique doit
rester confidentielle : elle est transmise à l'aide d'un chiffrement asymétrique lorsqu'elle doit
être partagée à un tiers autorisé.
Il existe plusieurs manières de générer des clés RSA. La plus simple est de générer des clés SSH qui sont
déjà des clés RSA. Le plus souvent la paire de clés sont nommées de la manière suivante :
nom_clé.pub pour la publique et nom_clé pour la privée. Il est commun de posséder plusieurs
paires de clés. On préfère garder une nomenclature similaire pour le nom des clés pour ne pas les
mélanger. Ces clés pourront être directement utilisées pour accéder à un serveur distant. (cf. p.30)
1 ssh-keygen
Il est possible de sécuriser sa clé privée en spécifiant un mot de passe lors de la génération de la clé.
Ainsi, la clé privée est elle-même chiffrée par chiffrement symétrique.
Une telle pratique permet de conserver la sécurité même si un attaquant réussit à récupérer la clé
privée. Il est tout de même fortement conseillé de générer une nouvelle clé si sa clé actuelle est
compromise.
Voici à quoi ressemble une clef privée RSA, protégée par mot de passe (il ne faut jamais publier une
telle clé si elle est en service).
Voici une clef RSA publique : c'est celle que l'on partage avec des tiers pour des communications.
Pour chiffrer et déchiffrer un message, il est nécessaire d'utiliser les commandes ci-dessous.
Pour chiffrer un fichier :
1 openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.enc
À retenir
Le chiffrement asymétrique permet un partage de la clé de chiffrement tout en garantissant la
confidentialité de la clé de déchiffrement.
La clé publique d'une personne est disponible par ceux qui veulent lui envoyer des messages.
La clé privée d'une personne n'est jamais publiée et est utilisée par la personne pour déchiffrer
les messages reçus.
L'algorithme RSA permet de réaliser un chiffrement asymétrique.
[cf. crE9lJsJ]
Les fichiers public.pem et private.pem contiennent respectivement des clés publique et privée
RSA.
Enregistrer le fichier public.pem.
[cf. public]
Enregistrer le fichier private.pem.
[cf. private]
Question
Le fichier msg.enc ci-dessous a été chiffré avec la clé privée. Le mot de passe qui protège la clé privée
est test (ne refaites pas ça chez vous !)
Enregistrer le fichier msg.enc.
[cf. msg]
Trouver le contenu du message.
Indice :
On utilisera une commande de la forme :
1 openssl rsautl -decrypt -inkey cle_privée -in message_chiffré.enc -out
message_en_clair.txt
Indice :
On peut utiliser cat pour afficher le contenu d'un fichier.
[cf. U9gNdHDp]
Objectifs
Découvrir le standard OpenPGP ;
Savoir utiliser GnuPG.
Mise en situation
Il existe de nombreux algorithmes de chiffrement avec pour chacun des utilisations ciblées : échange
d'informations et signatures typiquement. Pour faciliter les communications, il est nécessaire d'utiliser
des standards assurant un bon niveau de sécurité, c'est à dire qui garantissent que le décryptage est
difficile.
Parmi les nombreux standards existants pour les protocoles cryptographiques, l'un est devenu très
répandu : OpenPGP.
Le logiciel GnuPG ou GPG (pour GNU Privacy Guard) est une implémentation libre du standard
OpenPGP. Ce logiciel réputé très robuste est largement utilisé sur tous les systèmes d'exploitation
actuels.
OpenPGP Fondamental
Le nom de ce standard vient du logiciel PGP (Pretty Good Privacy) qui était l'outil historique d'échange
sécurisé de données. Il a été développé au début des années 90 par P. Zimmermann. Aujourd'hui la
société a été rachetée et de plus en plus de monde se tourne vers l'alternative libre Gnu Privacy Guard
(aussi nommé GnuPG ou GPG).
Vérification de documents : il permet de vérifier que le document qui vient d'être téléchargé
était bien celui prévu. Cette pratique est répandue pour le téléchargement de logiciels afin de
s'assurer qu'un attaquant n'a pas altéré ou modifié le fichier prévu initialement.
Pour générer une paire de clés avec GnuPG, il suffit de lancer la commande ci-dessous. Après avoir
entré cette commande, le nom et l'adresse e-mail de la personne sont demandés. Il est également
conseillé de choisir un mot de passe très sécurisé. (cf. p.31)
1 gpg --generate-key
Vous allez être redirigé sur un utilitaire qui va vous permettre de créer la paire de clef. Il faut saisir
prénom nom et une adresse e-mail. Une phrase de passe pour la clé privée sera aussi demandée. Vous
obtiendrez une sortie similaire à cela :
1 We need to generate a lot of random bytes. It is a good idea to perform
2 some other action (type on the keyboard, move the mouse, utilize the
3 disks) during the prime generation; this gives the random number
4 generator a better chance to gain enough entropy.
5 We need to generate a lot of random bytes. It is a good idea to perform
6 some other action (type on the keyboard, move the mouse, utilize the
7 disks) during the prime generation; this gives the random number
8 generator a better chance to gain enough entropy.
9 gpg: key 44E6F43C654279CF marked as ultimately trusted
10 gpg: directory '/home/john/.gnupg/openpgp-revocs.d' created
11 gpg: revocation certificate stored as
12 '/home/john/.gnupg/openpgp-revocs.d/DA27A19AE74135DEB4BF30B144E6F43C654279CF.rev'
13 public and secret key created and signed.
14
15 pub rsa4096 2020-04-28 [SC] [expires: 2020-04-29]
16 DA27A19AE74135DEB4BF30B144E6F43C654279CF
17 uid John Smith <john@smith.xyz>
18 sub rsa4096 2020-04-28 [E] [expires: 2020-04-29]
La paire de clé publique et privée ainsi qu'un certificat de révocation ont ici été générés.
Chaque clé publique a un identifiant (une version raccourcie de la clé) qui permettra de simplement
rechercher des clés sur des serveurs de clés. Dans l'exemple précédent, il s'agit de :
1 DA27A19AE74135DEB4BF30B144E6F43C654279CF
Pour chiffrer et déchiffrer un message, il est nécessaire d'utiliser les commandes ci-dessous. Il est
possible tester ces commandes dans la console d'un repl Bash. Pour chiffrer, on spécifie l'adresse mail
de la clef publique du destinataire (recipient) du message message.txt.
1 gpg --output msg.txt.gpg --encrypt --recipient paul@blabla.bla message.txt
Il peut arriver qu'une clé privée fuite. Ainsi, la sécurité et l'identité du propriétaire peuvent être
atteintes. Un attaquant pourra utiliser la clé pour déchiffrer les documents ou même pour usurper
l'identité en signant des mails trompeurs grâce à cette clé privée.
Pour éviter cela, le propriétaire de la clé pourra générer, grâce à sa clé privée, un certificat de
révocation qu'il transmettra à ses contacts. Ce certificat est une sorte de preuve cryptographique que la
clé n'est plus d'actualité. Ainsi, un attaquant ne pourra plus se servir de la clé privée.
Dans l'exemple de génération donné plus haut, le certificat de révocation a été créé et enregistré dans
le fichier :
1 '/home/john/.gnupg/openpgp-revocs.d/DA27A19AE74135DEB4BF30B144E6F43C654279CF.rev'
À retenir
OpenPGP permet de sécuriser et certifier ses communications.
GnuPG est un outil très simple permettant de générer, gérer et utiliser des clés OpenPGP.
[cf. JNsoz4Gf]
Question 1
Générer une paire de clés pour un utilisateur « John Smith » d'adresse e-mail john@smith.xyz.
Question 2
Créer un fichier message.txt de contenu :
1 Message secret
Indice :
On utilisera une commande de la forme.
1 gpg --output fichier_chiffré --encrypt --recipient addresse_email fichier_à_chiffrer
Question 3
Faire une copie de ce fichier nommée copy.txt.gpg et changer quelques octets dans la copie.
Indice :
On pourra utiliser la commande cp.
Question 4
Déchiffrer le fichier original msg.txt.gpg et le fichier altéré copy.txt.gpg.
Que se passe-t-il dans le cas du fichier altéré ?
[cf. AgVkqo3G]
Objectifs
Comprendre ce qu'est une signature au sens OpenPGP ;
Savoir signer ses mails.
Mise en situation
Dans le cadre de communications électroniques, la confidentialité du message n'est pas le seul
élément important. Il est également nécessaire de pouvoir être certain de l'identité de la personne qui
nous envoie le message.
Les attaques par hameçonnage consistent typiquement à se faire passer pour une personne de
confiance, afin de recueillir des informations confidentielles, comme par exemple un mot de passe.
La cryptographie asymétrique est également utilisable pour signer des messages.
On utilise dans ce cas sa clé privée pour chiffrer une signature qui est diffusée en même temps que le
message. N'importe qui disposant de la clé publique peut déchiffrer la signature et ainsi vérifier que le
message a bien été signé par le détenteur de la clé privée correspondante. On note donc que les clés
privées et publiques peuvent être utilisées toutes deux pour chiffrer et pour déchiffrer.
OpenPGP et GnuPG permettent également de gérer les signatures.
Il est possible par exemple d'utiliser GnuPG avec un logiciel de mail, comme Thunderbird, pour
envoyer des messages chiffrés et signés.
Utilité Conseil
Signer un mail permet d'assurer son identité à ses interlocuteurs. Si ces interlocuteurs signent
également leur mails, cela permet d'éviter à coup sûr des tentatives d'hameçonnage. Ceci est
complémentaire de l'usage de mails au contenu chiffré.
Si la signature est correcte et que le message n'a pas été modifié, on obtiendra un message similaire à :
1 gpg: Signature made Fri 15 May 2020 04:10:56 PM CEST
2 gpg: using RSA key CC15797D1FFEB346F5A87AFE0547178FEEDE7D6B
3 gpg: Good signature from "Quentin Duchemin <quentinduchemin@tuta.io>" [ultimate]
Enigmail Méthode
Enigmail est un add-on du client mail Thunderbird. Avec cet add-on, il est possible de générer et gérer
ses clés directement avec l'interface graphique. Cet outil a également une mise en place pour
débutants qui facilite une première utilisation de clés GPG. Voici le guide pour installer et mettre en
place Enigmail : https://enigmail.net/index.php/en/user-manual/quick-start.
Une fois l'add-on bien configuré, lors de chaque envoi de mail, il suffira d'appuyer sur un simple
bouton pour chiffrer ou signer le message. Pour chiffrer, il est nécessaire de posséder la clé publique du
destinataire.
À chaque réception d'un mail, si Enigmail trouve une clé publique correspondant à l'adresse mail de
l'expéditeur, la signature GPG sera automatiquement vérifiée.
Attention
Les versions les plus récentes de Thunderbird (supérieures à la version 78) intègrent directement la
gestion de OpenPGP, sans avoir besoin d'installer Enigmail. Le fonctionnement reste très similaire à
celui de l'extension.
Pour faciliter les échanges de clés publiques, il est possible de les publier sur des serveurs de clés qui
centralisent un grand nombre de clés publiques. Par exemple, celui du MIT est très utilisé : https://pgp.
mit.edu/. Si une clé doit être retirée, il est également possible d'envoyer le certificat de révocation à ce
type de serveur.
Ces serveurs de clés sont un des moyens (avec le système de certification de clés) qui permet de
s'assurer qu'on possède la bonne clé publique de l'expéditeur d'un mail et qu'un attaquant n'a pas
transmis une fausse clé publique pour hameçonner sa cible.
Pour aller plus loin dans l'utilisation de clés GPG, il est très pratique d'utiliser des sous-clés. La
première clé primaire est nommée « clé maîtresse » et peut générer des sous-clés dont l'usage peut
être restreint : signer uniquement, chiffrer et/ou certifier. Cela facilite les manipulations en cas de fuite
de clé.
Si une sous-clé fuite, il suffira de la révoquer et d'en générer une nouvelle.
Si la clé maîtresse fuite, il faut générer une nouvelle paire de clés et transmettre sa nouvelle clé
publique à tous ses contacts.
À retenir
Signer ses mails permet aux interlocuteurs d'être certain de l'identité de l'expéditeur et de
vérifier l'intégrité du document.
La signature GPG de ses mails peut facilement être mise en place grâce au plugin Enigmail pour
Thunderbird.
[cf. ZaJU7MDH]
On se propose de vérifier la signature d'un document. Utiliser pour ce faire un shell local ou un repl Bash.
Question 1
Le fichier public.gpg contient une clé publique GPG d'un certain Marc Studi.
Enregistrer le fichier public.gpg sur votre ordinateur.
[cf. public]
Importer ce fichier dans l'utilitaire gpg.
Indice :
On peut utiliser l'aide de gpg pour obtenir plus facilement l'information :
1 gpg --help
Indice :
L'option --import permet d'importer une clé manuellement.
Question 2
Vous recevez un message message.txt accompagné de sa signature signature.asc. Télécharger
les deux fichiers.
Enregistrer le fichier signature.asc sur votre ordinateur.
[cf. signature]
Enregistrer le fichier message.txt sur votre ordinateur.
[cf. message]
Vérifier la signature du fichier ci-joint. Quelle est l'adresse mail du signataire ?
Indice :
Utiliser
1 gpg --verify signature.asc message.txt
[cf. DhLp9cHe]
Le chiffrement symétrique consiste à utiliser une clé qui permet à la fois de coder et de décoder de
l'information. C'est une technique qui est utilisée pour des échanges temporaires entre deux
personnes ainsi que pour protéger des données que l'on ne souhaite pas partager.
Le chiffrement asymétrique implique de disposer d'une paire de clés. Imaginons qu'Alice possède la clé
publique alice.pub et la clé privée associée alice.pri :
N'importe qui peut utiliser la clé publique alice.pub pour chiffrer des messages confidentiels
pour Alice. On est certain que seule Alice pourra les lire, car c'est la seule à posséder la clé privée
de déchiffrement alice.pri.
Alice peut aussi utiliser sa clé privée alice.pri pour chiffrer des signatures. N'importe qui pourra
déchiffrer cette signature avec la clé alice.pub, ce qui prouvera que le message vient d'Alice,
puisque, encore une fois, elle seule a pu chiffrer une telle signature.
OpenPGP est un standard qui permet de définir une façon robuste de créer des clés et de les utiliser
pour chiffrer et signer.
GnuPG est un logiciel libre multi-plateformes qui implémente ce standard.
Enigmail est une extension du logiciel de mail Thunderbird qui permet d'envoyer des mails signés et
chiffrés grâce à GnuPG.
Exercice final
Faux
Exercice
Faux
Exercice
Pour transférer une clé secrète AES à un contact, en toute sécurité, je peux :
Chiffrer la clé avec la clé RSA publique de mon contact et lui envoyer le cryptogramme.
Chiffrer la clé avec la clé GPG privée de mon contact et lui envoyer le cryptogramme.
Chiffrer la clé avec la clé GPG publique de mon contact et lui envoyer le cryptogramme.
Exercice
Laquelle de ces propositions correspond à ce qui est le plus adapté pour prouver son identité ?
OpenPGP
RSA
AES
César
Quelle commande faut-il lancer pour générer une paire de clés RSA utilisables pour SSH ?
Exercice
Quelle commande faut-il lancer pour importer la clé publique contenue dans le fichier
snowden.gpg ?
Exercice
Quelle commande faut-il lancer pour vérifier la signature sig.asc du fichier prism.txt ?
Exercice
Objectif
Établir une connexion sécurisée à son serveur.
Mise en situation
Pour développer et maintenir une application, il est nécessaire de se connecter au serveur qui
l'héberge. Pour cela on utilise essentiellement le protocole SSH, ainsi que le programme éponyme.
SSH repose sur le chiffrement de la communication avec le serveur, pour éviter que quelqu'un
n'espionne ou ne falsifie la communication, ce qui équivaudrait à prendre le contrôle du serveur.
Le bon usage de SSH repose sur la gestion de clés qui doivent rester secrètes pour que les accès aux
serveurs ne soient pas compromis.
Le protocole SSH permet une connexion sécurisée entre un serveur et un client SSH. Sur Linux, le client
SSH est accessible nativement via la console de commandes (en utilisant la commande ssh). Sur
Windows, il existe le client PuTTY1.
Il est possible d'utiliser des paires de clés SSH. Une paire est composée d'une clé publique qui sera
déposée sur le serveur et d'une clé privée conservée sur l'ordinateur personnel de l'utilisateur. Pour se
connecter, l'utilisateur n'aura plus à entrer son mot de passe car sa clé privée lui permettra de
s'authentifier.
Cela simplifie grandement l'accès au serveur et évite de devoir taper un mot de passe compliqué à
chaque connexion.
1 ssh-keygen # Crée la paire de clés SSH
2 ssh-copy-id user@127.0.0.1 # Place la clé publique sur le serveur distant
3 [Entrer mot de passe]
4 ssh user@127.0.0.1
5 [Pas de saisie de mot de passe]
1
https://www.putty.org/
Les clés SSH présentent un côté pratique et évitent d'avoir à retenir un mot de passe compliqué. Dans
le cas où une machine personnelle est compromise, l'attaquant pourra récupérer la clé privée et
l'utiliser pour accéder au serveur. Ainsi, il faudra veiller à la sécurité des ordinateurs personnels
également.
Il est possible d'ajouter une phrase secrète à votre clé SSH qui empêchera un attaquant de l'utiliser.
Cela ajoutera un mot de passe à retenir mais dans le cas où la clé publique est présente sur 50 serveurs,
cela permet de retenir un seul mot de passe plutôt que 50.
Il est en général conseillé de privilégier l'accès par clé à l'accès par mot de passe en SSH. Si tous les
utilisateurs autorisés ont un accès par clé, il est conseillé de désactiver, au niveau du serveur SSH, tout
accès par mot de passe, ce qui supprime un risque.
À retenir
Le mot de passe pour accéder à un serveur mérite une grande attention.
Le recours à des clés SSH peut simplifier l'accès.
Les clés SSH présentent tout de même des dangers dont il faut être conscient.
Un utilisateur pourra considérer (par exemple en phase de développement) que son application ou ses
données de test ne sont pas sensibles.
Néanmoins un attaquant pourrait prendre le contrôle du serveur et lancer des attaques sur des
entreprises et des gouvernements. Dans ce cas de figure, la justice se tournera en premier lieu vers le
propriétaire du serveur.
De nombreux robots essayent de se connecter aux serveurs SSH en testant divers noms d'utilisateurs et
mots de passe, il est donc commun et pas du tout exceptionnel qu'un serveur soit compromis.
Il est donc conseillé de toujours protéger les accès à ses serveurs, même s'ils ne sont pas utilisés pour
des projets sensibles (et même, en fait, s'il ne sont pas utilisés du tout).
[cf. G6HpHLB8]
2. Mots de passe
[cf. ajXY7AH5]
Objectif
Acquérir une bonne politique d'utilisation de mots de passe.
Mise en situation
Une date de naissance comme mot de passe bancaire ? ou un mot de passe unique pour l'ensemble de
ses comptes en ligne ? Beaucoup de personnes sont conscientes que leur politique de gestion de mots
de passe présente des failles, mais elles ne savent pas nécessairement comment y remédier.
Il existe quelques méthodes assez simples pour construire des mots de passe compliqués et pour
vérifier que les mots de passe que l'on utilise ne sont pas trop faciles à deviner.
Par exemple la méthode diceware permet de créer des mots de passe à la fois longs et faciles à
apprendre. La liste OWASP contient quand à elle les 10.000 mots de passe les plus fréquents, ceux
qu'ils faut éviter d'utiliser donc.
Fondamental
Une application avec les plus hautes normes de sécurité reste fragile sans une bonne politique de
gestion des mots de passe.
Attention
Il existe des listes des mots de passe courants comme la liste maintenue par l'OWASP Foundation : 10k-
worst-passwords.txt3.
En haut de cette dernière sont présents des mots de passe tels que :
password
football
jennifer
Ces listes sont très utilisées par les cybercriminels.
1 password
2 123456
3 12345678
4 1234
5 qwerty
6 12345
7 dragon
8 pussy
9 baseball
10 football
11 letmein
12 monkey
13 696969
14 abc123
15 mustang
16 michael
1
https://framateam.org
2
https://framapiaf.org
3
https://github.com/OWASP/passfault/blob/master/wordlists/wordlists/10k-worst-passwords.txt
17 shadow
18 master
19 jennifer
20 111111
Il s'agit de transformer une citation en mot de passe. Par exemple : « un tiens vaut mieux que deux tu
l'auras » donnera 1tvMq2tL'a. Il faut veiller à ne pas utiliser que des minuscules pour compliquer la
tache d'un attaquant.
Ici, toutes les lettres dont la position est un multiple de 4 sont des majuscules.
Il s'agit de retranscrire une phrase phonétiquement. Par exemple : « j'ai acheté huit cd pour cent euros
cet après-midi » donnera ght8CD%E7am.
Les lettres en majuscule sont ici celle dont la prononciation représente le mot complet (« E » pour
« euro » et « CD » qui est transparent).
Diceware Méthode
Cette dernière méthode est très utilisée pour construire des phrases secrètes. Le mot de passe sera une
phrase composée de plusieurs mots. Pour choisir chacun des mots il faut lancer 5 dés à 6 faces et
mettre les résultats côte à côte. Puis il faut se munir d'une liste diceware qui propose 66666 mots. Dans
cette liste, chaque résultat possible des 5 dés correspond à un mot.
Il en existe pour beaucoup de langues différentes, par exemple la liste de Matthieu Weber2 référencée
sur Wikipédia propose 66666 mots en français.
Si l'on souhaite un mot de passe de 6 mots et qu'on obtient les résultats suivants: 16665; 15653; 56322;
35616; 65224. En se référant à la liste ci-dessus, on obtiendra le mot de passe suivant : « cajous bordes
set juge verte ».
Ce mot de passe n'est pas trop compliqué à retenir car il contient une liste de mots très simples mais il
est pour autant très robuste.
1
https://fr.wikipedia.org/wiki/Diceware
2
http://weber.fi.eu.org/so ware/diceware/francais.pdf
Il est absolument nécessaire de changer le mot de passe reçu initialement à la création d'un compte
même si celui-ci semble aléatoire. D'une part, il arrive que certains éditeurs de matériel électronique
fournisse un mot de passe identique pour chaque produit. D'autre part il est possible que le mail
transmettant ce mot de passe ait été intercepté ou que ce mail soit récupéré lors d'une future fuite de
données.
Le propriétaire du compte doit être le seul à le posséder, même l'administrateur réseau ne doit pas le
connaître (d'où la nécessité de modifier le mot de passe initial). Il est aussi préférable de ne pas
enregistrer son mot de passe sur un support informatique non chiffré comme un fichier texte ou un
mail brouillon.
Changer régulièrement de mot de passe permet de conserver un niveau de sécurité optimal. Si un mot
de passe a fuité sans qu'on le sache, un changement régulier de mot de passe pourrait vous protéger
de toute attaque. À noter que cela n'est pas vrai pour des mots de passe qui ne sont pas sujet aux fuites,
par exemple le mot de passe de son ordinateur personnel.
Il est nécessaire de veiller à ce que tous les acteurs d'un projet aient une bonne politique de gestion de
mots de passe afin que le projet soit protégé. Il suffit qu'un seul des comptes soit compromis pour
qu'un attaquant accède et nuise aux données de tous.
Conseil
Pour gérer ses mots de passe il est conseillé d'utiliser un gestionnaire de mot de passe, comme par
exemple KeePass.
Note technique de l'ANSSI traitant des recommandations de sécurité relatives aux mots de passe :
ssi.gouv.fr/uploads/IMG/pdf/NP_MDP_NoteTech.pdf1
À retenir
Il existe plusieurs méthodes pour trouver un mot de passe considéré comme bon. Par exemple la
méthode des premières lettres, la méthode phonétique ou la méthode DiceWare.
Un bon mot de passe ne peut être considéré comme sécurisé seulement s'il est complété de
certaines bonnes pratiques : changer ses mots de passe, les conserver secret, sensibiliser ses
collaborateurs.
[cf. VjS4h0e2]
1
https://www.ssi.gouv.fr/uploads/IMG/pdf/NP_MDP_NoteTech.pdf
Chiffre de César p. 6
http://creativecommons.org/licenses/by-sa/3.0/fr/, Patricia.fidi Wikipédia