Cryptographie

De Justine's wiki
Aller à la navigation Aller à la recherche

Introduction à la cryptographie

Qu'est-ce que c'est?

Plusieurs définitions importantes.

  •     Cryptographie : C’est la protection d’un message à l’aide d’une clé de chiffrement.
  •     Cryptogramme : C’est un message chiffré auquel on a appliqué une technique de cryptographie.
  •     Cryptanalyse : C’est la science qui consiste à tenter de déchiffrer un cryptogramme sans posséder la clé de chiffrement. Dans ce cas on peut alors parler de décryptage.
  •     Cryptage, Crypter et encrypter : Ces mots sont des anglicismes qu'il est préférable de bannir de votre vocabulaire. Toutefois il est courant de les retrouver utilisés par des personnes qui font de la vulgarisation ou qui ne savent forcément pas très bien de quoi elles parlent.
  •     Steganographie : La steganographie est l'art de cacher les informations. Il s'agit de passer inaperçu, souvent en faisant passer une information pour une autre. Par exemple, cacher du texte dans des images ou des mp3.
  •     Encoder : Il s'agit ici de changer le format des données. Il n'y a rien de secret par ici. Un format souvent utilisé en sécurité et réseau est le Base64
  •     Obfusquer : C’est le fait de rendre difficile à comprendre un message (typiquement du code informatique).L'objectif est de rendre laborieuse la compréhension du message.
  •     Compresser : Enfin, les algoritmes de compression sont utilisés pour réduire la taille d'un message.

A quoi ça sert?

La cryptographie assure plusieurs services :

  • Intégrité : S'assurer que les données n'ont pas été modifiées lors de leur transmission
  • Confidentialité : S'assurer que l'information n'est accessible qu'aux personnes autorisées
  • Authenticité : Vérifier l'identité d'une personne ou d'une machine

Comment fait-on?

Pour atteindre ces objectifs, on utilise plusieurs techniques de l'univers de la cryptographie :

  • L'intégrité repose sur les fonctions de hachage
  • La confidentialité repose sur le chiffrement des données.
  • L'authentification se fait par aposition d'une signature numérique.

Le hachage

Une fonction de hachage est une fonction qui convertit un grand ensemble en un ensemble plus petit, appellé empreinte. Il est impossible de déchiffrer l'empreinte pour revenir à l'état d'origine; ce n'est donc pas une technique de chiffrement. Quelques exemples de fonctions de hachage connues : MD, SHA, SHA-1, SHA-2... Le hachage permet de s'assurer de l'intégrité des données : on pourra par exemple recalculer l'empreinte d'un fichier donné pour s'assurer que celui-ci est conforme, en la comprant avec une empreinte donnée.

Exemple de hachage d'un fichier :

justine@Justine-pc:~/Documents$ sha256sum lorem.txt
56293a80e0394d252e995f2debccea8223e4b5b2b150bee212729b3b39ac4d46  lorem.txt

 

Différents types de cryptographie

Il existe deux grandes familles d'algorithmes de cryptographie : symétrique et asymétrique. Chacune à ses utilités. On peut aussi les combiner à différents niveaux pour en tirer le meilleur parti, c'est la cryptographie asymétrique.

Cryptographie symétrique

On utilise des algorithmes symétriques qui sont publics, avec des clefs qui sont, elles, secrètes. Afin de pouvoir chiffrer et déchiffrer les données, tous les participants à la communication doivent partager la même clef secrète. Exemples connus : AES, IDEA, 3DES, Blowfish, etc... Comparée à sa consoeur, la cryptographie symétrique présente les avantages suivants :

  • Simple à mettre en oeuvre
  • Léger en consommation CPU
  • Chiffrement robuste

L'inconvénient est cependant de taille :

  • L'échange de clefs

En effet, si on envoie les clefs en même temps que le cryptogramme, on laisse les clefs sur la serrure...

Exemple en action ! Je repars du fichier lorem ipsum :

justine@Justine-pc:~/Documents$ openssl enc -e -a -nosalt -aes-256-cbc -in lorem.txt -out fichier.txt.enc

Détail de la commande :

  • openssl : le programme en lui-même
  • enc : On précise que l'on va faire du chiffrement symétrique
  • -e : Indique que l'on va chiffrer (encrypt)
  • -a : Permet d'indiquer qu'on veut la sortie en base64, sinon la sortie serait illisible
  • -nosalt : Pas de sel (donc pas d'aléatoire) dans le chiffrement, on utilisera pas cet argument dans la réalité car le sel améliore la force du chiffrement
  • -aes-256-cbc : Indique l'algorithme utilisé, ici AES256 en mode CBC
  • -in le fichier en entrée
  • -out la sortie

Pour le déchiffrement, on remplace -e (encrypt) par -d (decrypt):

justine@Justine-pc:~/Documents$ openssl enc -d -a -nosalt -aes-256-cbc -in fichier.txt.enc -out loremdecode.txt
justine@Justine-pc:~/Documents$ cat loremdecode.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

 Cryptographie asymétrique

On utilise des algorithmes asymétriques publiques, avec une paire de clefs : une publique, et une privée. La particularité de ces algos est qu'un message chiffré avec une clef publique n'est lisible que par le propriétaire de la clef privée. Exemples connus : RSA, El Gamal, etc...

Les avantages :

  • On peut communiquer depuis un canal non sécurisé

Les inconvénients :

  • Complexité de mise en oeuvre
  • Davantage consommateur en ressources
  • Chiffrement moins robuste

Cryptographie hybride

Pour faire de la cryptographie hybride, on chiffre le contenu par chiffrement symétrique avec une clef de session aléatoire, et on chiffre la clef de session par chiffrement asymétrique avec la clef publique du destinataire. Exemples : PGP, TLS, etc.

Les avantages :

  • Communication via un canal non sécurisé
  • Consommation de ressources raisonnable
  • Chiffrement robuste

Inconvénient :

  • Une complexité encore plus grande.

La signature numérique

Grâce au hachage et à la cryptographie asymétrique, il est possible de signer numériquement des données. Pour ceci, on génère une empreinte des données à signer, et on chiffre ensuite cette empreinte avec notre clef privée. Cette empreinte chiffrée est la signature. Elle peut être apposée aux données, ou mise dans un fichier distinct. Cela nous permet de prouver auprès de toutes les entités qui possèdent notre clef publique que les données émises sont authentiques, puisque la clef publique permet de déchiffrer ce que l'on a chiffré avec la clef privée. Il n'y a plus qu'à recalculer l'empreinte pour voir si elle est identique.

Si les empreintes sont différentes, c'est que les données sont corrompues, ou qu'elles ont été modifiées.