Avant de débuter la lecture de cet article, je vous suggère de lire mon précédent article sur le chiffrement symétrique.

En guise d’introduction, je vais exposer les deux inconvénients du chiffrement symétrique tel que nous le connaissons.

  • 1 : L’émetteur et le récepteur doivent se mettre d’accord à l’avance sur la clé à utiliser.
  • 2 : Une personne doit disposer d’autant de clés secrètes qu’elle a d’interlocuteur. (En découle un problème de gestion dans le cas d’un grand nombre de clés)

Nous pouvons en conclure que ce type de chiffrement n’est pas pratique dans le cas où nous souhaitons communiquer avec des personnes que nous ne connaissons pas physiquement ou qui sont éloignés géographiquement de nous. (Internet…)

Face à ces problématiques, la cryptographie à clé publique a été développé afin de résoudre ces inconvénients.

Qu’est-ce que la cryptographie à clé publique ?

Il s’agit d’un cryptosystème composé d’un couple unique de clés constitué de 2 parties « complémentaires » et indissociable.

  • une partie « Accessible » : Clé publique
  • Une partie secrète : Clé privée

Chacun peut connaître la clé publique de son/ses interlocuteur(s), mais en aucun cas leur clé privée.

Grâce à un serveur de clé publique (autorité de gestion de clés publique), chaque personne souhaitant échanger des informations avec une autre de manière sécurisé, peut le faire, en mettant en ligne l’empreinte de sa clé publique.

De manière générale retenez bien cela : on chiffre un message avec la clé publique du destinataire qu’il déchiffrera avec sa clé privée.

Récapitulatif et schéma :

  • La génération d’une paire de clés ce fait localement sur votre machine
  • N’importe qui souhaitant vous envoyer un message chiffré doit disposer de votre clé publique, en passant éventuellement par un serveur web stockant la clé publique de votre interlocuteur.
  • à tout moment vous pouvez changer votre couple de clé, en régénérant un nouveau couple de clés localement.
  • Les principaux algorithmes sont : RSA (Rivest, Shamir, Adelman), Diffie-Hellman, El-Gamal (etc.)
  • Les deux entités communicante doivent utiliser le même algorithme de chiffrement.

Démonstration

Pour ce faire, nous allons utiliser openssl qui va permette de générer nos clés, afin de réaliser quelques tests pour des opérations de chiffrement / déchiffrement.

Ouvrez un terminal « as root », et saisissez les commandes suivantes :

mkdir /root/myKey
s
openssl genrsa -out /root/myKeys/key.pem 4096
openssl rsa -in /root/myKeys/key.pem -text -noout
openssl rsa -in /root/myKeys/key.pem -pubout -out /root/myKey/pub.pem
openssl rsa -in /root/myKeys/pub.pem -pubin -text -noout
  • Votre clé publique : pub.pem : à diffuser
  • votre clé privée : key.pem : à garder « privée » 🙂

Chiffrement

Nous allons en guise test, créer un fichier, et renseignez un texte quelconque.

touch file.clear 
# éditez le fichier, et ajouter une phrase quelconque
openssl rsautl -encrypt -inkey /root/myKeys/pub.pem -pubin -in file.clear -out /tmp/file.encrypted
# votre fichier crypté a été enregistré dans le répertoire /tmp/ sous le nom de file.encrypted

Essayez d’afficher le contenu du fichier file.encrypted, vous verrez que le résultat serra complètement incompréhensible. le fichier file.clear lui existe toujours dans votre « dossier courant ». Vous pouvez désormais le supprimer si vous le souhaitez.

Déchiffrement

Afin de pouvoir extraire et accéder de nouveau au contenu du fichier /tmp/file.encrypted, nous allons réaliser une opération de déchiffrement à l’aide de notre clé privée. (Puisque nous sommes à la fois l’émetteur et le récepteur de ce message)

Entrez dans votre terminal les commandes suivantes :

openssl rsautl -decrypt -inkey /root/myKeys/pub.pem -in /tmp/file.encrypted -out /tmp/file.decrypt
cat /tmp/file.decrypted

Voilà, c’est tout pour aujourd’hui, j’espère que vous avez réussi à réaliser ces opérations de votre côté !

++

Brlndtech


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"