Bitwarden (gestionnaire de mots de passe) par exemple il s'agit de l'algorithme AES, donc de chiffrement symétrique.
Même chose pour Excalidraw (tableau blanc collaboratif).
Sur le web nous connaissons ce chiffrement via le protocole HTTPS, qui utilise TLS (évolution du plus ancien SSL) pour chiffrer les données envoyées par le navigateur à un site internet.
Ce type de chiffrement est extrêmement répandu sur le web (en août 2022 dans le monde, 80% des pages chargées par Firefox utilisent HTTPS). C'est son avènement qui a permis l'évolution du web vers ce que l'on connaît aujourd'hui. En effet, difficile d'imaginer sans lui un site de e-commerce : qui accepterait d'envoyer son numéro de carte bancaire de manière lisible ?
Le chiffrement en transit fait appel à plusieurs types de chiffrement. Voici son fonctionnement simplifié :
Le cadenas dans la barre d'adresse du navigateur nous indique l'utilisation du chiffrement en transit.
Et pour les plus curieux, les algorithmes précis impliqués sont visibles dans le navigateur.
Firefox : Cadenas de la barre d'adresse > Connexion sécurisée > Plus d'informations > Onglet Sécurité section Détails techniques
Chrome : Cadenas de la barre d'adresse > La connexion est sécurisée > Certificat valide > Détails
Qu'il s'agisse de chiffrement au repos, de bout en bout ou en transit, ces différentes approches sont cumulables. Et c'est bien souvent le cas en pratique.
Exemple 1 : j'envoie un fichier sur Dropbox en HTTPS
Le chiffrement en transit et le chiffrement au repos sont utilisés :
Exemple 2 : j'ajoute un identifiant à Bitwarden en HTTPS.
Le chiffrement en transit et le chiffrement de bout en bout sont utilisés :
Le hash est souvent associé au chiffrement, alors qu'en réalité c'est un procédé différent qui ne répond pas au même besoin.
Un algorithme de hachage (il en existe plusieurs) a pour but de générer rapidement, à partir d'une donnée (un document, une vidéo, un mot de passe…), un ensemble de caractères unique. Nous pouvons voir cela comme une empreinte. C'est une opération à sens unique qui ne permet pas de recalculer le document d'origine à partir du hash (il n'existe pas de clé de (dé)chiffrement).
Pour une même donnée, l'empreinte calculée avec un même algorithme sera identique.
En revanche, si nous modifions cette donnée, ne serait-ce que faiblement, l'empreinte, toujours calculée avec le même algorithme, sera totalement différente.
Calculer le hash sur une donnée permet donc de vérifier qu'elle n'a pas été modifiée, en comparant l'empreinte d'origine à l'empreinte obtenue. Cela répond au besoin de s'assurer de l'intégrité de la donnée, contrairement au chiffrement qui répond au besoin de s'assurer de la confidentialité de la donnée.
Sur le web, le hash est généralement utilisé pour le stockage de mots de passe, afin d'éviter de pouvoir les déchiffrer au cas où la base de données serait compromise.
Mais pour ne pa pouvoir les reconnaître à partir de leur hash qui serait connu (il existe des tables de correspondance entre mots de passe fréquemment utilisés et hashes), un sel est utilisé par l'algorithme de hachage. Un sel est une donnée aléatoire ajoutée au mot de passe d'origine pour le calcul du hash. Deux mots de passe identiques hachés avec un même algorithme mais avec un sel différent auront donc une empreinte différente. Impossible alors de savoir que les mots de passe sont en fait les mêmes.
Contrairement aux fonctions de hachage classiques qui sont rapides, dans le cas spécifique d'un mot de passe, nous chercherons à ralentir le calcul du hash afin de limiter les attaques par force brute.
Ce sont donc les mots de passe salés et hachés qui sont comparés afin de savoir si le mot de passe saisi par l'utilisateur est le bon, et non les mots de passe sous forme non chiffrée.
Différents algorithmes de hachage :
Le web serait bien différent de ce qu'il est maintenant si la cryptographie ne s'était pas développée.
La cryptographie nous rend plusieurs services en permettant d'assurer la confidentialité, l'intégrité et l'authentification d'une donnée.
Si nous avons évoqué les deux premiers avec respectivement le chiffrement et le hash, le troisième sert à vérifier l'origine d'une donnée. Utilisant une paire de clés, la clé privée sert à générer une signature qui peut être vérifiée par la clé publique.
Ces trois services bien distincts sont souvent liés les uns aux autres, et certains algorithmes permettent d'assurer à la fois la confidentialité, l'intégrité et/ou l'authentification.
Utilisant tous ces services, notre navigation quotidienne sur le web entraîne quasi systématiquement des opérations de chiffrement. La présence généralisée du protocole HTTPS en atteste. C'est d'ailleurs lui qui a permis le web tel qu'on le connaît aujourd'hui : avec la possibilité de s'assurer de l'origine d'un site web, de payer des achats en ligne de manière sécurisée, ou de remplir des formulaires avec des données personnelles pour des besoins administratifs par exemple.
Deux types d'algorithmes de chiffrement ont rendu possible le chiffrement en transit : symétrique et asymétrique.
Le chiffrement symétrique ne possède qu'une seule et unique clé qui doit rester secrète. Elle sert à chiffrer et à déchiffrer de la donnée.
Le chiffrement asymétrique utilise quant à lui une paire de clés : une clé publique sert à chiffrer de la donnée tandis qu'une clé privée sert à la déchiffrer.
Ce tour d'horizon nous a permis de constater qu'il existe sur le web bien des approches au chiffrement :
Si les algorithmes utilisés sont parfois les mêmes d'une approche à une autre, toutes ne se valent pas d'un point de vue confidentialité. Le fait qu'un service se vante de l'utilisation d'un algorithme de chiffrement robuste n'est à lui seul pas gage de confidentialité. Il convient de se demander : où sont les clés ?