Algorithme RSA

Contexte

Il existe plusieurs méthodes pour générer des paires de clés publiques et privées, mais l'outil open source OpenSSL et OpenSSH sont les plus utilisés. Il a été inclus sur toutes les principales plates-formes et offre une interface de ligne de commande simple pour générer des clés.

Bien que le chiffrement d'un fichier avec un mot de passe à partir de la ligne de commande à l'aide d'OpenSSL soit très utile en soi, la véritable puissance de la bibliothèque OpenSSL est sa capacité à prendre en charge l'utilisation d'un cryptographe à clé publique pour chiffrer ou valider des données sans surveillance (où le mot de passe n'est pas requis pour crypter) se fait avec des clés publiques.

Il y a toujours eu un souci d'assurer la confidentialité des communications, en essayant de garantir qu'un message ne puisse être lu que par le destinataire prévu. Imaginez le défi que représente le maintien d'un tel niveau de confidentialité dans le monde d'aujourd'hui, où l'on utilise massivement et intensivement les communications numériques sur Internet. La cryptographie joue un rôle fondamental dans la réalisation de cet objectif, en nous aidant à établir des communications sécurisées grâce à l'application d'algorithmes et de protocoles de sécurité.

Dans ce cours, nous allons apprendre à effectuer quelques opérations cryptographiques élémentaires telles que la génération d'une paire de clés, et le cryptage. Pour ce faire, nous utiliserons RSA, en tant qu'algorithme de cryptage asymétrique, et OpenSSL.

D'où vient le nom RSA et comment fonctionne-t-il ?

Introduction

Le nom RSA vient des initiales de ses trois créateurs, Rivest, Shamir et Adleman, en 1977. Il s'agit d'un algorithme de chiffrement asymétrique, ou clé publique, et l'un des plus utilisés aujourd'hui. En effet, la plupart des sites web intègrent aujourd'hui la sécurité SSL/TLS, et permettent l'authentification via RSA.

RSA étant un crypteur asymétrique, il fonctionne avec deux clés : une publique et une privée. En somme, le contenu qui a été crypté avec la clé publique peut être décrypté à l'aide de la clé privée, et vice versa, tout le contenu crypté avec la clé privée peut être décrypté à l'aide de la clé publique.

Imaginons que nous ayons besoin d'envoyer des informations confidentielles sur Internet et que nous souhaitions que seul le destinataire les voie. Une façon de le faire serait de mettre les informations dans un coffre-fort et de le fermer avec une certaine combinaison. Nous expédions ensuite le coffre-fort au destinataire, et le destinataire pourra voir son contenu tant qu'il connaît la même combinaison qui a été utilisée pour le fermer.

C'est le concept de la cryptographie symétrique, une seule clé ou combinaison pour ouvrir la boîte. Ce schéma a un problème : l'échange de la clé. Comment faire parvenir la clé au destinataire sans que personne ne la voie ? Bien entendu, si l'origine envoie une simple lettre avec la clé au destinataire, toute personne pouvant intercepter le coffre-fort et la lettre en cours de route, pourra ouvrir la boîte.

Ce fondement de la cryptographie asymétrique, et l'un des algorithmes asymétriques les plus courants aujourd'hui est l'algorithme RSA. Ainsi, la cryptographie asymétrique élimine l'un des principaux problèmes de la cryptographie symétrique : l'échange de la clé.

Comment générer des clés RSA sous OpenSSL ?

Lors de l'utilisation du cryptage RSA, la longueur des données cryptées doit être identique à la longueur de la clé RSA. Si les données sont trop courtes, elles seront complétées.

Si nous l'assimilons à notre exemple d'utilisation du coffre-fort, cela équivaudrait à ce que le destinataire crée les clés, l'une pour pouvoir fermer le coffre-fort (clé publique) et une autre pour pouvoir l'ouvrir (clé privée).

Création de clés RSA avec OpenSSL

Créer la paire de clés RSA

Méthode

Pour commencer à créer notre paire de clés RSA nous allons utiliser notre machine cliente, qui est la machine que nous utilisons habituellement.

Ensuite, depuis notre Terminal, nous devrons exécuter en ligne de commande l'instruction suivante :

openssl genrsa -out tototo.pem 1024

Cette commande s'occupera du processus de création des fichiers de clés, c'est-à-dire de nos clés privée et publique. Le nom toto va être le nom de notre clef qui est obtenue au format PEM ça veut dire (Privacy Enhanced Mail en format en base 64) et le numéro 1024 va être la taille exprimée en bits.

Affichage du fichier de la clé privée RSA

La commande cat tototo.pem va nous permettre de voir le contenu entier d'un fichier. Dans le cas de la démonstration, le fichier est tototo.pem

Et comme nous pouvons le constater, lorsque nous entrons la commande, elle nous montre les clés privées RSA que nous avons créées.

Visualiser les clés RSA

Dans le cas où nous souhaiterions voir l'affichage des clés RSA nous devons utiliser la commande openssl rsa -in tototo.pem -text -noout.

Cette commande rsa va permettre de visualiser le contenu d'un fichier au format PEM.

L'option -text demandera le décodage de la clé et l'option -noout nous permettra de supprimer la sortie produite par la commande rsa.

Sur la capture d'écran ci-dessous, on peut voir tout le contenu de notre création clef RSA.

Chiffrement d'un fichier de clés privées RSA

Il n'est pas du tout sûr de laisser les clés à découvert, surtout les clés privées. Ce que nous pouvons faire avec la commande RSA, c'est crypter les clés. Nous avons trois options (-des-des3 et -idea) qui vont spécifier l'algorithme de cryptage symétrique à utiliser, dans notre cas nous allons utiliser la commande -des3.

La commande à exécuter pour le cryptage d'un fichier de clés privées RSA est la suivante :

openssl rsa -in tototo.pem -des3 -out tototo.pem

Comme vous pouvez le voir dans la capture ci-dessous, une phrase sera demandée afin de générer une clé symétrique qui protégera l'accès à la clé que nous avons créée. La même clé devra être saisie deux fois, car une confirmation de la clé est sollicitée.

Exportation d'une clé publique

Ce que nous allons faire maintenant est l'exportation de notre clé publique afin qu'elle puisse être partagée avec d'autres, et pour cela nous devrons utiliser la commande suivante :

openssl rsa -in tototo.pem -pubout -out tototoPublique.pem

Puis il faudra entrer notre passphrase pour confirmer l'exportation de la clé et la demande sera acceptée en appuyant sur la touche Entrée

Vérification de l'exportation de la clé publique

Dans ce bloc, nous allons procéder à la vérification de l'exportation de notre clé publique.

Pour cela, il suffit d'exécuter la commande : openssl rsa -in tototoPublique.pem -pubin.

Dans la capture ci-dessous, on peut observer le contenu de notre clé publique. Cela signifie que l'exportation a été faite correctement.