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
- Est-ce que le serveur devrait être capable d'obtenir mon mot de passe ?
- Est-ce que la base de données devrait être capable d'obtenir mon mot de passe ?
- 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.
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-----