Objectifs du module :

  • Comprendre les différences entre chiffrement symétrique et asymétrique, et quand utiliser l’un ou l’autre.
  • Apprendre les bonnes pratiques pour le stockage sécurisé des mots de passe (hashing et salting).
  • Découvrir la gestion des certificats et la mise en place du chiffrement TLS pour protéger les communications.

1. Différence entre chiffrement symétrique et asymétrique

a. Introduction au chiffrement

Pourquoi le chiffrement est-il essentiel ?
Le chiffrement protège les données en les transformant de manière à ce qu’elles ne puissent être lues que par les parties autorisées. Il est fondamental pour assurer la confidentialité des informations échangées ou stockées.

b. Chiffrement symétrique

Définition :
Le chiffrement symétrique utilise une seule clé pour chiffrer et déchiffrer les données. La clé doit donc être partagée entre les deux parties.

Algorithmes courants :

  • AES (Advanced Encryption Standard) : Utilisé pour le chiffrement de données sensibles.
  • DES (Data Encryption Standard) et Triple DES : Obsolètes mais historiquement importants.

Cas d’usage :
Le chiffrement symétrique est généralement utilisé pour chiffrer de grandes quantités de données (fichiers, disques, etc.) en raison de sa rapidité. Toutefois, le partage sécurisé de la clé peut poser problème.

Risques :
La gestion des clés est cruciale. Si la clé est compromise, toutes les données chiffrées avec cette clé deviennent vulnérables.

Vidéo de Mickaël Dupont:

c. Chiffrement asymétrique

Définition :
Le chiffrement asymétrique utilise deux clés : une clé publique pour chiffrer et une clé privée pour déchiffrer. La clé publique peut être partagée librement, mais la clé privée doit être gardée secrète.

Algorithmes courants :

  • RSA (Rivest-Shamir-Adleman) : Un des algorithmes asymétriques les plus utilisés.
  • ECC (Elliptic Curve Cryptography) : Plus récent, plus efficace en termes de taille de clé et de vitesse.

Cas d’usage :
Le chiffrement asymétrique est principalement utilisé pour l’échange sécurisé de clés, les signatures numériques, et le chiffrement des messages dans les communications sécurisées (par exemple, TLS).

Avantages :
Il élimine la nécessité de partager la clé privée, car seule la clé publique est diffusée, ce qui réduit le risque de compromission.

Vidéo de Exo7Math:

d. Combinaison des deux méthodes (Hybride)

Chiffrement hybride :
Dans les systèmes de chiffrement modernes (comme TLS), on utilise un chiffrement asymétrique pour échanger une clé de session, puis un chiffrement symétrique pour chiffrer les données. Cela combine la sécurité de l’asymétrique et la rapidité du symétrique.

2. Meilleures pratiques pour stocker les mots de passe (hashing, salting)

a. Hashing des mots de passe

Qu'est-ce que le hashing ?
Le hashing est un processus unidirectionnel qui transforme un mot de passe en une chaîne de caractères fixe, appelée hash. Contrairement au chiffrement, il n'est pas possible de "déhasher" un mot de passe pour obtenir sa version d'origine.

Algorithmes de hachage sécurisés :

  • SHA-256 (Secure Hash Algorithm) : Algorithme populaire pour la production de hachages.
  • Bcrypt et Argon2 : Algorithmes spécialement conçus pour le hachage sécurisé des mots de passe, avec la possibilité d’augmenter la charge de calcul pour ralentir les attaques par force brute.

Pourquoi éviter les algorithmes obsolètes :

  • MD5 et SHA-1 ne sont plus sécurisés et ne doivent pas être utilisés pour stocker des mots de passe, car ils sont vulnérables aux attaques de collision.

Vidéo de Grafikart.fr:

b. Salting des mots de passe

Qu'est-ce que le salting ?
Le salting consiste à ajouter une valeur aléatoire unique, appelée "sel" (salt), au mot de passe avant de le hasher. Cela empêche les attaquants d’utiliser des rainbow tables (tables pré-calculées de hachages pour deviner les mots de passe).

Avantages du salting :

  • Rend chaque hash de mot de passe unique, même si deux utilisateurs ont le même mot de passe.
  • Complexifie les attaques par force brute et les attaques par dictionnaire.

c. Meilleures pratiques :

  • Utiliser des algorithmes de hachage adaptés aux mots de passe (Bcrypt, Argon2).
  • Ajouter un sel unique et aléatoire à chaque mot de passe.
  • Stocker les sels de manière sécurisée avec les hachages, mais ne jamais stocker les mots de passe en clair.
  • Utiliser un pepper en plus du salt (une clé secrète partagée) pour renforcer encore plus la sécurité.

3. Gestion des certificats et chiffrement TLS

a. Introduction au chiffrement TLS (Transport Layer Security)

Qu'est-ce que TLS ?
TLS est le protocole qui assure la sécurité des communications sur internet en chiffrant les données échangées entre les clients (navigateurs, applications) et les serveurs. C'est l'évolution sécurisée de SSL (Secure Sockets Layer).

Pourquoi utiliser TLS ?

  • Confidentialité : Chiffre les données échangées pour empêcher les interceptions (attaque de l'homme du milieu ou MITM).
  • Intégrité : Garantit que les données ne sont pas modifiées pendant leur transfert.
  • Authentification : Permet aux clients de vérifier l'identité du serveur, grâce à des certificats numériques.

Vidéo de Cookie connecté:

b. Gestion des certificats numériques

Qu'est-ce qu’un certificat numérique ?
Un certificat numérique est un fichier électronique qui prouve l'identité d’un site web ou d’une organisation. Il est délivré par une Autorité de Certification (CA) et contient la clé publique du serveur.

Types de certificats :

  • Certificats auto-signés : Créés par l’entité elle-même, mais non reconnus par les navigateurs sans intervention manuelle. Utilisés pour des tests ou des environnements internes.
  • Certificats signés par une CA (Autorité de Certification) : Reconnus par les navigateurs, garantissant que l’identité de l’organisation a été vérifiée par une autorité tierce.
  • Certificats Wildcard : Couverts pour plusieurs sous-domaines (*.domaine.com).
  • Certificats EV (Extended Validation) : Fournissent un niveau de validation plus élevé, souvent utilisé par les sites bancaires.

c. Mise en place du chiffrement TLS

Étapes pour implémenter TLS :

  • Génération d'une clé privée : Cette clé est gardée secrète et ne doit jamais être partagée.
  • Création d'une demande de signature de certificat (CSR) : Utilisée pour demander un certificat à une CA.
  • Obtention d'un certificat numérique : Délivré par une CA.
  • Installation du certificat sur le serveur : Le certificat et la clé privée sont installés sur le serveur web, activant le chiffrement TLS pour les connexions.

d. Renouvellement et gestion des certificats

  • Renouvellement régulier : Les certificats expirent généralement au bout d'un an ou deux, et doivent être renouvelés pour éviter que les connexions ne soient perçues comme non sécurisées.

  • Automatisation avec Let’s Encrypt : Pour simplifier le processus, il est possible d’utiliser des services comme Let’s Encrypt qui fournissent des certificats gratuits et automatisent leur renouvellement.

e. Bonnes pratiques de gestion des clés et certificats

  • Protéger la clé privée : Elle ne doit jamais être partagée ou exposée publiquement.

  • Automatiser la gestion des certificats pour s'assurer que les certificats sont toujours valides.

  • Utiliser des certificats forts : Choisir des certificats avec des tailles de clé suffisantes (au moins 2048 bits pour RSA).

Conclusion du Module :

La maîtrise des concepts de chiffrement et de gestion des clés est essentielle pour tout développeur. En comprenant la différence entre chiffrement symétrique et asymétrique, en mettant en place des méthodes de hashing et salting efficaces pour le stockage des mots de passe, et en sécurisant les communications

Formateur

Bertrand LECLERCQ

Consultant DevSecOps & Data Engineer


Avec 25 ans d'expérience dans le développement logiciel et une certification en Data Engineering de l'École des Mines Paris - PSL, je suis passionné par la cybersécurité, le big data et le DevOps. J'aime partager mes connaissances et aider la communauté à renforcer sa posture de sécurité.

J'ai créé une base de vulnérabilités librement accessible et je me forme en continu sur des plateformes comme TryHackMe. Mon objectif ? Démocratiser la cybersécurité et permettre à chacun de mieux comprendre les enjeux.

J'ai une solide expertise dans la conception et le déploiement de solutions sécurisées, ainsi qu'une expérience éprouvée dans la gestion de projets complexes. Maîtrisant un large éventail de technologies (Python, Go, Java, Docker, Kubernetes, etc.), je suis convaincu que la sécurité doit être intégrée dès le début du cycle de développement.

Le projet NoHackMe vous permet d'effectuer une veille Cyber, vous permet de découvrir le monde de la Cybersécurité ainsi qu'une section formation Cyber

Soutenez No Hack Me sur Tipeee