Aller au contenu

Introduction au chiffrement

Important

La cryptographie est un domaine difficile. Le contenu de cette section n'est pas suffisant pour faire de la cryptographie de production. À n'utiliser que dans un environnement de laboratoire.

Le chiffrement est important pour s'assurer de l'intégrité et de la confidentialité des données. Plusieurs méthodes de chiffrements sont disponibles tout dépendant du but recherché ainsi que différents moments où le chiffrement est important.

En transit vs au repos

Les données sensibles ne sont pas toujours simplement sur notre ordinateur. Elles peuvent se trouver à différents endroits dans différents moments.

Dans l'exemple ci-dessous, pouvez-vous déceler quelles sont les informations qui devraient être chiffrées et à quels endroits ?

sequenceDiagram
    box rgb(175, 120, 120) Côté Client
    actor Client
    end

    box rgb(120, 175, 120) Côté Serveur
    participant Serveur
    participant BD
    end

    Client->>+Serveur: Je veux me connecter<br>Usager: Seb<br>Mot de passe: Password1
    Note over Client,Serveur: Données en transit
    Serveur->>BD: Est-ce que cet utilisateur existe ?<br>Usager: Seb<br>Mot de passe: Password1
    Note over BD: Données au repos
    Note over BD,Serveur: Données en transit

    BD->>Serveur: Oui, le voici
    Serveur->>-Client: Parfait, bienvenue dans l'application
    Client->>+Serveur: J'aimerais voir mon numéro de carte de crédit
    Serveur->>BD: Peux-tu me donner la carte de crédit de Sébastien ?
    Note over BD: Données au repos
    BD->>Serveur: Le voici : 4540 1234 5678 9012
    Note over BD,Serveur: Données en transit
    Serveur->>-Client: Voici ta carte de crédit : 4540 1234 5678 9012
    Note over Client,Serveur: Données en transit
  1. Est-ce que le serveur devrait être capable d'obtenir mon mot de passe ?
  2. Est-ce que la base de données devrait être capable d'obtenir mon mot de passe ?
  3. Qu'en est-il de mon numéro de carte de crédit ?

Chiffrement en transit

Les données en transit sont les données qui passent à travers des infrastructures intermédiaires. L'exemple ci-dessus a été grandement simplifié. Si l'information n'était transmise qu'au serveur et à la base de données, le risque serait moindre. Cependant, plusieurs autres acteurs verront l'information passer.

mindmap
  Root(Client)
    ::icon(fa fa-computer)

    isp)Fournisseur Internet(
        {{Serveur de journaux}}
        (Routeur)
            (Routeur)
            (Routeur)
                {{Serveur de journaux}}
            (Routeur)
                {{Serveur de journaux}}
                (Routeur)
                    )**Serveur Web**(
                    )**Base de données**(

Les données seront visibles dans les journaux des routeurs et des différents serveurs. Les fraudeurs informatiques et les administrateurs systèmes pourraient voir passer vos informations et potentiellement les réutiliser.

Chiffrement au repos

Dans le diagramme ci-dessus, des données sensibles reposent également sur des disques durs. Ces données, tels que des mots de passe ou numéro de cartes de crédits pourraient alors être lues par d'autres applications, par un administrateur de base de données ou par un fraudeur informatique. Il faudra alors penser à chiffrer ces données avant de les enregistrer sur un disque.

Déchiffrable ou non ?

Ce ne sont pas toutes les données qui devront être déchiffrées. Dans le cas d'une carte de crédit ou d'un dossier médical, il sera important de pouvoir consulter l'information; un déchiffrement sera alors nécessaire. Cependant, un mot de passe n'a jamais à être déchiffré. On doit seulement savoir si le mot de passe est exact. On parlera alors de hachage.

Hachage

Le hachage est une technique de chiffrement irréversible qui, selon une entrée X, donnera toujours le même résultat Y. Le hachage est très utile pour stocker des mots de passe dans des bases de données. Le mot de passe en texte clair n'est jamais connu de personne. Comment vérifier si le mot de passe entré est exact ? On compare les hash !

Voici quelques algorithmes de hachage avec le mot de passe Password1 :

Algorithme Sécuritaire? Hachage de "Password1"
MD5 ❌ 2ac9cb7dc02b3c0083eb70898e549b63
SHA1 ❌ 70ccd9007338d6d81dd3b6271621b9cf9a97ea00
SHA256 ✅ 19513fdc9da4fb72a4a05eb66917548d3c90ff94d5419e1f2363eea89dfee1dd
SHA512 ✅ cbe0cd68cbca3868250c0ba545c48032f43eb0e8a5e6bab603d109251486f77a91e46a3146d887e37416c6bdb6cbe701bd514de778573c9b0068483c1c626aec
bcrypt ✅ \(2a\)10$banhZU6y1Yf8Lawpma48QuBc90hQzUdwIlPuQewXHCnPS8LJ5sVem

AES

AES est un algorithme de chiffrement symétrique robustre qui permet aussi d'être déchiffré. L'algorithme utilise une clé ainsi qu'un vecteur d'initialisation (IV) afin de pouvoir chiffrer les données. Celles-ci pourront alors être déchiffrées en réutilisant la même clé et le même vecteur d'initialisation.

Exemple de chiffrement AES : https://gchq.github.io/CyberChef/#recipe=AES_Encrypt(%7B'option':'Latin1','string':'MaCl%C3%A9Tr%C3%A8sSecr%C3%A8te'%7D,%7B'option':'Latin1','string':'1234567890123456'%7D,'CBC','Raw','Hex',%7B'option':'Hex','string':''%7D)&input=UGFzc3dvcmQx

Pour déchiffrer, on fournis la le texte chiffré, la clé et le vecteur d'initialisation.

Exemple de déchiffrement AES : https://gchq.github.io/CyberChef/#recipe=AES_Decrypt(%7B'option':'Latin1','string':'MaCl%C3%A9Tr%C3%A8sSecr%C3%A8te'%7D,%7B'option':'Latin1','string':'1234567890123456'%7D,'CBC','Hex','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)&input=OGE2NzFiNDM5ZmYxYWY0ZDFmNDI3YTI1ZDA4ZDc3NGY

La clé et le vecteur d'initialisation doivent être partagés avec toutes les parties concernées pour pouvoir chiffrer et déchiffrer le message.

RSA

RSA est un algorithme de chiffrement asymétrique qui permet également de chiffrer et déchiffrer de l'information. Cet algorithme est dit asymétrique car il utilise une clé (publique) pour chiffrer et une clé différente (privée) pour déchiffrer l'information.

Note

Pour assurer un transport correcte des données, le résultat a été encodé en base64.

Exemple de clés utilisées pour chiffrer et déchiffrer :

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe9WKVMoRA1B1PZY+xEsT6rbxZ
xoy1qhpJOn9D0z4uNIcL1dNP1vytvI35d1Vy3JAycuh2RgVJzvyWux68VvldDoH7
281+Jhfwqm8aTDyivfK9rUwl45MswwABE72IqRBFirTxgupcDJ4EQG8xVyCR8b7e
A4PODVLb5aHxK6G4DwIDAQAB
-----END PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDe9WKVMoRA1B1PZY+xEsT6rbxZxoy1qhpJOn9D0z4uNIcL1dNP
1vytvI35d1Vy3JAycuh2RgVJzvyWux68VvldDoH7281+Jhfwqm8aTDyivfK9rUwl
45MswwABE72IqRBFirTxgupcDJ4EQG8xVyCR8b7eA4PODVLb5aHxK6G4DwIDAQAB
AoGAEDQvTP6V5AxGcQ3Fiq39iOZ1iOTINy+8p1PMCgbhPwRsSCzrJaNPS+UnQFku
6aEkDbaSNH5URg/4BZBl5HRBvSHlvHelXgyOV7wBu4y14XjK0FMMgxxwxsOsKqmn
S7pTtkuA3ciTMWetEwA0MmcS9MH7aHYOJEi673NU/1FBD7kCQQDvmL1zbSmTiUC8
XMIAJuHEPJzN2a4BEpJEuq6zWcryYTXQF9kvtf891RBKkzPAlomXlmYKMTLbYbTT
BC9r9a/1AkEA7jkKFznqzR8Jq3QHONH33o20M9b3wMFAOhGZOb9OeezkPExMAauu
8PFVtl9suT2qkN1Ae0CHXnyr+ewIQInZcwJAMiXg+UjO2+9tWj9753Y76Mva8gbu
sZDGhpYgPK+9l4+bKMvlDGRmYPW4bDN1MIkRkWXMQ7Padip0I3qLxmftBQJADuZM
ZkV+FRRC45FfPkOLsETGp5NjbY/ot3kQT1dSzjdt0wOmoVgemf1OMhjn0PI1b9gW
x16y2MsNapVDst2sVwJBAL8TSjxoP+mjsoPW1SkrLcdC7jAOyFm4yiucV5MZ8//m
yZw9pE5QzVWge5Ppn9J+NAYwMrHOH78AxGh6riVdfDw=
-----END RSA PRIVATE KEY-----

Exemple de chiffrement RSA : https://gchq.github.io/CyberChef/#recipe=RSA_Encrypt('-----BEGIN%20PUBLIC%20KEY-----%5CnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe9WKVMoRA1B1PZY%2BxEsT6rbxZ%5Cnxoy1qhpJOn9D0z4uNIcL1dNP1vytvI35d1Vy3JAycuh2RgVJzvyWux68VvldDoH7%5Cn281%2BJhfwqm8aTDyivfK9rUwl45MswwABE72IqRBFirTxgupcDJ4EQG8xVyCR8b7e%5CnA4PODVLb5aHxK6G4DwIDAQAB%5Cn-----END%20PUBLIC%20KEY-----','RSA-OAEP','SHA-1')To_Base64('A-Za-z0-9%2B/%3D')&input=TWVzc2FnZSBzZWNyZXQ

Exemple de déchiffrement RSA : https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)RSA_Decrypt('-----BEGIN%20RSA%20PRIVATE%20KEY-----%5CnMIICXAIBAAKBgQDe9WKVMoRA1B1PZY%2BxEsT6rbxZxoy1qhpJOn9D0z4uNIcL1dNP%5Cn1vytvI35d1Vy3JAycuh2RgVJzvyWux68VvldDoH7281%2BJhfwqm8aTDyivfK9rUwl%5Cn45MswwABE72IqRBFirTxgupcDJ4EQG8xVyCR8b7eA4PODVLb5aHxK6G4DwIDAQAB%5CnAoGAEDQvTP6V5AxGcQ3Fiq39iOZ1iOTINy%2B8p1PMCgbhPwRsSCzrJaNPS%2BUnQFku%5Cn6aEkDbaSNH5URg/4BZBl5HRBvSHlvHelXgyOV7wBu4y14XjK0FMMgxxwxsOsKqmn%5CnS7pTtkuA3ciTMWetEwA0MmcS9MH7aHYOJEi673NU/1FBD7kCQQDvmL1zbSmTiUC8%5CnXMIAJuHEPJzN2a4BEpJEuq6zWcryYTXQF9kvtf891RBKkzPAlomXlmYKMTLbYbTT%5CnBC9r9a/1AkEA7jkKFznqzR8Jq3QHONH33o20M9b3wMFAOhGZOb9OeezkPExMAauu%5Cn8PFVtl9suT2qkN1Ae0CHXnyr%2BewIQInZcwJAMiXg%2BUjO2%2B9tWj9753Y76Mva8gbu%5CnsZDGhpYgPK%2B9l4%2BbKMvlDGRmYPW4bDN1MIkRkWXMQ7Padip0I3qLxmftBQJADuZM%5CnZkV%2BFRRC45FfPkOLsETGp5NjbY/ot3kQT1dSzjdt0wOmoVgemf1OMhjn0PI1b9gW%5Cnx16y2MsNapVDst2sVwJBAL8TSjxoP%2BmjsoPW1SkrLcdC7jAOyFm4yiucV5MZ8//m%5CnyZw9pE5QzVWge5Ppn9J%2BNAYwMrHOH78AxGh6riVdfDw%3D%5Cn-----END%20RSA%20PRIVATE%20KEY-----','','RSA-OAEP','SHA-1')&input=UXFlYStVbktXVzNnVVRjemRqbXJRMUhpTWxPUDdqb09PRG1HOFZiU01iN3pMYzNCblZTcS9kR2J6R2ZBL3V6UTYrYmxhTEVucU9nNUsveWxFaC91R1RjeU5Tb05JVEl6cXR1TWNDS0lmZzRXZ3VROHVTZmhLeVZ3dUhUY3pPUm0vUGI3MGoxUktEcFM1aGJCbWgvZjJRS0RpQ0NQZ055UWFyZE9uczdLTFdFPQ