jeudi 10 novembre 2016

COMMENT CRYPTER ET DECRYPTER DES MESSAGES DE MANIERE CRYPTOGRAPHIQUE GRACE A PGP


Bonjour,
 
Aujourd’hui je vais vous montrez comment crypter et décrypter des messages grâce à la cryptographie en se basant sur le programme PGP. Mais tout d’abord,

Qu’est-ce que la cryptographie ?

La cryptographie est une discipline incluant les principes, les moyens et les méthodes de transformation des données, dans le but de masquer leur contenu, empêcher leur modification ou leur utilisation illégale, ainsi que les opérations inverses, pour rendre le document à nouveau intelligible. Ainsi, la cryptographie assure la confidentialité, l’authenticité et l’intégrité des messages. 

Il existe deux types de cryptographie :

La cryptographie symétrique

La cryptographie symétrique, dite également cryptographie ou chiffrement à clé secrète ou privée, consiste à chiffrer et déchiffrer des messages à l’aide de la même clé ; 

La cryptographie asymétrique

La cryptographie asymétrique, ou chiffrement à clé privée et publique, consiste quant à elle, à chiffrer et déchiffrer des messages à l’aide d’une paire de clés, une paire composée d’une clé publique, qui va servir au chiffrement, et d’une clé privée, qui servira elle à déchiffrer.
La cryptographie se distingue de la stéganographie en ce qu’elle rend inintelligible le message à autre qu’à qui de droit alors que la stéganographie quant à elle fait passer inaperçu un message en cachant ce dernier dans un autre message.

(Ps: plus ample détail sur la stéganographie dans mon article consacré au sujet ici)

Qu’est-ce que PGP ?

PGP (Pretty Good Privacy), est un programme de cryptage, c’est un système hybride que l’on peut classer dans les systèmes à « clé de session », c'est-à-dire, un système qui utilise à la fois le principe du chiffrement à clé privée et le principe du chiffrement à clé publique. PGP offre toutes les fonctionnalités d’un cryptosystème complet : cryptage, décryptage, signature, certificat. PGP possède de nombreux avantages tels que, la rapidité de chiffrement et déchiffrement et également un haut niveau de sécurité.

A présent que vous en savez un peu plus sur la cryptographie et PGP, nous pouvons à présent entrer dans le vif du sujet, 

Le scénario de notre simulation est semblable à la topologie suivante :

Nous avons donc deux entités jacques et goueth qui vont via internet, s’échanger des messages chiffrés grâce à PGP, et à la réception de ces messages, ils vont les déchiffrer toujours grâce à PGP. Nous allons mettre en application ici deux méthodes de chiffrement et déchiffrement à savoir symétrique et asymétrique basé sur PGP.

Comment chiffrer et déchiffrer des messages avec PGP de manière asymétrique ?

Le principe est le suivant :   

Après s’être échangé les clés via un canal « sûr » ou « sécurisé » (rencontre en face-à- face, …), l’émetteur pour envoyer un message crypté au récepteur, va chiffrer le message avec la clé publique du récepteur, qui à son tour à la réception du message va déchiffrer le message avec sa propre clé privée.

En pratique, pour ce faire avec PGP, nous devons suivre les étapes suivantes :

Tout d’abord, s’assurer que le programme de cryptage PGP est installé sur les systèmes qui souhaitent communiquer de manière sécurisée.

(Ps: la majorité des systèmes GNU/Linux intègrent déjà le programme PGP au sein de leur logiciel, dans notre cas ici, nous ferons donc notre simulation sur des systèmes d’exploitation Ubuntu)

Ainsi, pour vérifier que PGP est bien présent dans le système, nous entrons la commande « pgp » dans le terminal :

Nous constatons que le programme cryptographique PGP est bien installé, ensuite, chacune des entités qui souhaitent communiquer de manière asymétrique dans notre cas ici jacques et goueth doivent générer une paire de clés : une clé publique qui sera échangée avec les autres communicants, et une clé privée qui devra impérativement garder et rester secrète, ainsi pour générer une nouvelle paire de clés, nous entrons la commande « gpg --gen-key » :

A la suite de cette commande PGP nous demande de choisir quel type d’algorithme de chiffrement sera utilisé par la paire de clés que l’on souhaite générer, nous choisirons la première option RSA (Rivest Shamir Adleman), parce que c’est un algorithme de chiffrement à double clé donc asymétrique et qui de plus utilise seulement des nombres premiers et donc la structure jusqu’à présent s’est révélé assez fiable et sûre d’un point de vue sécuritaire, le programme PGP nous invite également à définir la taille en bits des clés, dans notre cas, nous optons pour 2048 bits pour rendre le chiffrement plus « robuste » et « efficace », et enfin, nous devons également déterminer la durée (en terme de jours, semaines, mois ou années) de validité de la paire de clés à générer :

Puis, nous devons définir un utilisateur pour chaque paire de clés créées, cet utilisateur permet d’associer la paire de clés créées avec une personne physique, en renseignant certaines informations « personnelles » du propriétaire de la dite clé.

A présent, le programme PGP à besoin que nous lui indiquons un mot de passe qui représente en fait ici notre clé secrète ou privée, c’est cette clé secrète qui permettra à nos personnes désirants communiquées de déchiffrer les messages qui leur seront envoyés :   

(Ps: ce mot de passe doit être connu de vous et vous seule, d’où son appellation de clé secrète (:)), il va donc de soit que ce mot de passe doit être soigneusement choisi.) 

Après avoir entré le mot de passe, le programme PGP va lancer la procédure de génération « aléatoire » de la paire de clés, en s’inspirant des quelques informations enregistrées précédemment, mais de plus, il faudra fournir au système d’exploitation une aide à travers certaines actions comme bouger le curseur de la souris, taper au clavier, utiliser les disques, … pour augmenter l’aspect « aléatoire » du programme PGP pour générer une paire de clés plus « efficace » on parle également « d’entropie », 

Dans notre cas par exemple, pour augmenter le caractère aléatoire du programme, nous décidons d’effectuer des opérations de multiplications et division avec des nombres très grands :


Au bout d’un certain laps de temps, nos paires de clés sont générées avec succès,

Maintenant que les paires de clés ont été générées avec succès nos entités peuvent dorénavant s’échanger des messages de manière sécurisée via un chiffrement et déchiffrement asymétrique. 

Nous pouvons vérifier que la paire de clés a été bien générée avec la commande « gpg - - list – key »

A présent, les entités doivent partager leur clé publique avec toutes personnes avec qui elles souhaitent communiquer, par conséquent chaque entité doit exporter sa clé publique, avec le programme PGP ceci se fait avec la commande « gpg - -export - -output nom_clé »    

Il est aussi important de noter que la clé exportée avec la commande précédemment entrée sera dans un format « binaire »


Qui peut souvent s’avérer problématique si la clé doit être envoyée par email ou publiée sur une page web, raison pour laquelle il est plus judicieux d’ajouter à la commande précédente le paramètre « --armor »

Qui va causer l’exportation de la clé publique dans un format ASCII, cet encodage permettra que la clé soit échangée via divers canaux sans encombre.


Une fois les clés publiques exportées, les entités peuvent se les échanger, via le canal qui les conviendra email, serveur spécialisé de clés, disque amovible, …

Dans notre cas, nous utiliserons un outil de transfert  du nom de SCP (Secure Copy), du protocole SSH (Secure Shell)  : « scp  fichier_a_transférer  nom_utilisateur@adresse_ip :chemin_destination »



Une fois les clés échangées, chaque entité doit préciser au programme PGP de prendre en compte la nouvelle clé sauvegardée et de l’ajouter dans son « trousseau de clés », ceci est rendu possible grâce à la commande «  gpg - - import nom_clé » ou « gpg - - import * » :

Suite à cette commande, le programme PGP nous notifie que la nouvelle clé sauvegardée a été importée avec succès,

Et si on entre de nouveau la commande « gpg - - list – key », nous constatons que chacune des entités dispose actuellement dans son trousseau de clés, la clé publique de la personne avec qui elle souhaite communiquer, 

C’est cette clé publique qui permettra donc de chiffrer les messages.

Supposons à présent que l’entité goueth souhaite envoyer un message chiffré à jacques, que ce dernier sera le seul en mesure de lire. Pour ce faire, nous devons tout d’abord naturellement rédiger le message « secret » que l’on veut transmettre :


Une fois le message rédigé, il est pour l’instant « en clair », lisible par n’importe qui du peu qu’il réussit à intercepter le message, pour rendre illisible ce message par un tiers autre celui à qui il est adressé, nous devons à présent chiffrer le message avec la commande « gpg - - armor - - encrypt message »,

Après avoir validé cette commande, le programme PGP va demander à l’émetteur, (dans notre cas ici goueth) d’enter l’identifiant de la clé publique du récepteur du message (dans notre cas jacques) : 


Une fois l’opération arrivée à terme, un nouveau fichier avec l’extension « .asc » fait son apparition dans les dossiers de l’émetteur,


En parcourant ce fichier, nous constatons qu’il est rempli de caractères « incompréhensibles »


Ces caractères sont en fait la forme chiffrée de notre message « en clair », précédemment  rédigé.

Il ne reste plus qu’à transmettre le message chiffré à celui à qui il est destiné à travers le canal qui nous convient, soit par la voie des réseaux sociaux, 

Ou encore, via des disques amovibles, emails, messageries instantanées, …

A présent, notre récepteur n’a plus qu’à « copier-coller » le message, ou alors le télécharger (si le message est envoyé en pièce jointe) 


Qui peut alors grâce à sa clé privée déchiffrer le message « secret » qui lui est destiné, avec la commande « gpg - - armor - - decrypt message »


Après avoir validé la commande précédente, le destinataire du message est invité à entrer un mot de passe, ce mot de passe est en réalité sa clé privée et correspond au mot de passe renseigné lors de la création de la paire de clés avec le programme PGP tout à l’heure effectué.
 

Et si le mot de passe, donc la clé privée correspond, le programme PGP du destinataire déchiffre alors le message et le destinataire peut apercevoir le message secret « en clair » :


Dès lors, l’objectif recherché par les deux correspondants qui est de communiquer de manière sécurisée via le chiffrement asymétrique est atteint avec succès.

A présent, nous allons nous intéresser au chiffrement et déchiffrement symétrique des messages via PGP.

Comment chiffrer et déchiffrer des messages avec PGP de manière symétrique ?

Le principe est le suivant :   
Après s’être échangé la clé via un canal « sûr » ou « sécurisé », l’émetteur pour envoyer un message crypté va chiffrer le message avec une clé secrète puis transmettre la clé secrète au récepteur, qui aura besoin de la même clé secrète pour déchiffrer le message secret.

(Ps: le problème fondamental de la cryptographie symétrique est le problème de l’échange des clés, quel canal de communication sûr peut être utilisé pour communiquer la clé elle-même ? c’est l’un des avantages de la cryptographie asymétrique dont on a parlé précédemment par rapport à la cryptographie symétrique qui résout ce problème d’échange de clés. Mais concernant la cryptographie symétrique, une fois que l’émetteur et le récepteur ont trouvé un moyen fiable de s’échanger la clé secrète, le chiffrement et le déchiffrement des messages se fait de manière sécurisée et plus rapidement que lors de la cryptographie asymétrique.) 

En pratique, pour ce faire avec PGP, nous devons nous prendre comme suit : 

Supposons que jacques souhaite répondre à goueth, en lui envoyant à son tour un message, mais cette fois-ci avec un chiffrement symétrique. Tout comme procédé précédemment, l’émetteur après avoir saisi le message secret


Le chiffre avec la commande « gpg - - armor - - symmetric message », cette fois-ci,  vous remarquerez l’option « - - symmetric » en lieu et place de l’option « - - encrypt » inscrit lors du chiffrement asymétrique :


Suite à cette commande le programme PGP va demander à l’émetteur d’entrer un mot de passe qui ici en fait représente la clé secrète. Ensuite, il faudra également confirmer cette clé secrète en l’entrant une seconde fois :

Tout comme précédemment à la suite de cette commande de chiffrement, un nouveau fichier à l’extension « .asc » est créé,


Fichier qui sera transmis toujours suivant un canal opté par l’émetteur au récepteur, ce dernier pourra déchiffrer le message secret via la commande « gpg - - armor - - decrypt message », à la suite de quoi il sera invité à entrer le mot de passe de déchiffrement qui est ici rappelons-le la même clé secrète utilisé par l’émetteur au moment du chiffrement du message :


Si le mot de passe entré lors de la phase de déchiffrement correspond à la clé secrète entrée pendant la phase de chiffrement, le message secret apparait alors « en clair » dans le terminal du récepteur.


Dès lors, l’objectif recherché par les deux correspondants qui est de communiquer de manière sécurisée via le chiffrement symétrique est atteint avec succès.

A présent, vous savez ce qu’on entend par cryptographie, les différents types qui en existe, à savoir la cryptographie symétrique et la cryptographie asymétrique, mais  également ce qu’est le programme PGP, à savoir un programme de cryptage représentant à lui tout seul un parfait petit cryptosystème, et aussi qu’on peut le classer dans les systèmes dit à « clé de session », et surtout comment chiffrer et déchiffrer des messages de manière sécurisée via la méthode symétrique et asymétrique grâce à PGP.

Merci d’avoir suivi le tutoriel jusqu’à la fin.

A très bientôt !!!

Aucun commentaire :

Enregistrer un commentaire