Actu

Comment bien stocker un mot de passe en base de données ?

Comprenez dans cet article comment et pourquoi il est essentiel de sécuriser les mots de passe, découvrez les techniques de sécurisation (hachage, sel, poivre, itérations...) et comment les appliquer concrètement dans vos projets WinDev

L’API Microsoft Graph : possibilités et exemples d’application avec WinDev

Découvrez dans cet article comment maîtriser l’API Microsoft Graph avec WinDev : pourquoi et comment l'utiliser, récupération sécurisée des jetons, appels aux données (mails, SharePoint…), et points de vigilance à connaître

Pourquoi adopter la programmation orientée objet en WinDev ? (POO)

Découvrez dans cet article comment la programmation orientée objet améliore la qualité, la maintenance et l’évolutivité de vos applications WinDev

Comment choisir sa base de données ?

SQL, NoSQL, cloud, graphe, vectorielle… Dans cet article nous listons et comparons les options pour vous permettre d'identifier la base de données la plus adaptée à votre projet

PC SOFT : Marque française au service du développement applicatif

PC SOFT propose avec WINDEV, WEBDEV et WINDEV Mobile une suite d’outils tout-en-un pour développer des applications sur tous supports. Un choix stratégique pour des logiciels performants, intégrés et évolutifs.

L'Impact transformateur du Design UX/UI sur vos projets

Découvrez comment un designer UX/UI peut améliorer vos projets, augmenter vos conversions et vous aider à rester compétitif sur le marché.

Projets au Forfait : Garantir leur succès

Découvrez les clés pour réussir un projet informatique au forfait : Avec InfoGones et InfoSquad, bénéficiez d’une méthodologie efficace pour garantir la réussite de vos projets, tout en respectant vos délais et budgets.

Des projets Agile, vraiment !

Clarification des objectifs, choix entre cahier des charges ou méthode Agile, validation itérative et pilotage budgétaire maîtrisé : découvrez les clés pour structurer efficacement votre projet logiciel et garantir sa réussite, quelle que soit sa complexité.

Les 5 avantages de développer votre application avec WinDev, WebDev ou WinDev Mobile

Découvrez les avantages essentiels de développer votre application sur-mesure avec les outils PC Soft et comment cela peut transformer votre entreprise en optimisant vos processus

Découvrez "Wingular” : l'innovation signée InfoGones pour des applications web irrésistibles

Découvrez comment WinGular transforme vos applis en offrant robustesse et design optimal

Comment bien stocker un mot de passe en base de données ?

1/ Pourquoi sécuriser les mots de passe ?

Pour protéger l’accès aux données de vos client/utilisateurs, il est important de bien sécuriser le stockage des mots de passe dans votre base de données afin d’éviter que les pirates :

  • Ne récupèrent les mots de passe en cas de violation de la base de données
  • Ne forcent l’accès grâce à des attaques brute force

2/ Dans la théorie : le stockage sécurisé d’un mot de passe

Le stockage sécurisé d'un mot de passe repose sur plusieurs éléments complémentaires :

  • La base est une fonction de hachage, qui transforme un mot de passe en des données binaires. Elle est déterministe (le même mot de passe donne toujours le même résultat), et surtout, irréversible (il n'est pas possible de retrouver le mot de passe original).

  • Cette fonction peut être itérative (où l'on va calculer le hash d'un hash d'un hash etc). Un nombre élevé d'itérations permet d'augmenter le temps de calcul et de fait le temps nécessaire à une personne malveillante pour trouver le mot de passe.

  • Dans la fonction de hachage, il est possible de rajouter du texte aléatoire au mot de passe. Ce texte sera différent pour chaque utilisateur, et permet d'augmenter artificiellement la complexité du mot de passe. On appelle cela le sel.

  • On peut également rajouter un autre texte, qui sera commun à tous les utilisateurs mais spécifique à l'application, toujours dans le but d'améliorer l'entropie du mot de passe. On appelle cela le poivre.

3/ Les recommandations sur le stockage de mots de passe

Plusieurs organismes éditent des recommandations sur le stockage des mots de passe.

L'ANSSI liste dans son guide Recommandations relatives à l'authentification multifacteur et aux mots de passe plusieurs préconisations dans le chapitre "4.6 Stockage des mots de passe".

Au niveau international, l'OWASP (Open Worldwide Application Security Project) publie une fiche mémo spécifique au stockage des mots de passe.

4/ Dans la pratique : le stockage de mots de passe avec WinDev

En WLangage, c'est la fonction HashChaîne() qui permet de réaliser le hachage. Si les recommandations préconisent avant tout l'utilisation des algorithmes de hachages scrypt ou Argon2, celles-ci ne sont pas encore supportées par WinDev. On utilisera alors l'algorithme PBKDF2, qui fait aussi partie des recommandations et est disponible depuis la version 27.

Renvoyant un buffer contenant souvent des caractères non-imprimables, on privilégiera un encodage en Base64 pour en faire une chaîne stockable facilement en base de données.

L'algorithme PBKDF2 demande obligatoirement un sel. Pour le générer, on utilisera la fonction GénèreMotDePasse(). Les recommandations de l'ANSSI conseillent un sel d'au moins 128 bits, soit 16 caractères minimum. Le poivre quant à lui est une valeur stockée dans une chaîne globale au projet, avec l'attribut <indétectable> pour que la chaîne ne soit pas visible dans la mémoire.

Quant au nombre d'itérations demandées par la fonction HashChaîne, nous pourrons nous appuyer sur les recommandations de l'OWASP, qui préconisent au minimum 600 000 itérations pour l'algorithme PBKDF2-HMAC-SHA256.

Exemple de code avec WinDev pour implémenter ces recommandations :

// ================================
// Dans l'initialisation du projet
// ================================
gsPoivre est une chaîne <indétectable, immuable> = "gi1dy6!BDf5#CNsb3GF^hruKly3tj2m*"

// ================================
// Procédure de hachage du mot de passe
// ================================
PROCÉDURE HashMotDePasse(LOCAL sMotDePasse est une chaîne) : chaîne

sSel        est une chaîne    <indétectable>    = GénèreMotDePasse(32)
nItérations    est un entier                    = 600_000

sMotDePassePoivré est une chaîne = sMotDePasse + gsPoivre
sRésultat est une chaîne = HashChaîne(HA_PBKDF2_HMAC_SHA3_256,sMotDePassePoivré,sSel,nItérations).Encode(encodeBASE64SansRC)

Trace("Mot de passe :", sMotDePasse)
Trace("Poivre :", gsPoivre)
Trace("Sel :", sSel)
Trace("Résultat :", sRésultat)

RENVOYER sRésultat

// ================================
// Test de la fonction
// ================================
HashMotDePasse("123456")
// Mot de passe : 123456
// Poivre : gi1dy6!BDf5#CNsb3GF^hruKly3tj2m*
// Sel : SifirnEcaspafisteLokewindovmomYt
// Résultat : qbMLDp3pcnmeUyIR8aWtlA==

5/ En résumé : les bonnes pratiques à adopter pour sécuriser le mot de passe

Il n’existe pas de méthode infaillible pour sécuriser totalement les mots de passe mais les pratiques suivantes permettent de sécuriser efficacement les mots de passe en base de données :

  • un Sel long et unique par utilisateur
  • un Poivre, long, secret et spécifique à l'application
  • un Algorithme de hachage lent

Au-delà du stockage même, la manipulation ou la transmission d'un mot de passe devront faire l'objet de précautions, par exemple :

  • Sécuriser l’échange du mot de passe entre le frontend et le backend de contrôle (utilisation du HTTPS, pré-hachage côté frontend, etc)
  • Utiliser des mécanismes pour contrer les attaques brute force :

    • Limitation par IP/seconde (avec augmentation exponentiel du temps d’attente)
    • Limitation par nombre de tentative / seconde (avec blocage au bout de N tentatives infructueuses)
    • Authentification 2 facteurs
    • Blacklist d’IP

Besoin d’un accompagnement sur la sécurité de vos applications ? Contactez-nous dès maintenant pour un audit ou un accompagnement sur-mesure.

Mentions légales

Conformément aux dispositions de la loi 78-17 dite Informatique et Libertés, vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données vous concernant.

Pour toute demande de modification ou de suppression, adressez-vous à : InfoGones - 1 PLACE DES TERREAUX - 69001 LYON ou par courriel adressé à contact@infogones.com

InfoGones est titulaire de l'intégralité des droits d'auteur sur le contenu du site "www.infogones.com". InfoGones détient tous droits de propriété intellectuelle et commerciale sur sa marque, son logo, ses noms de domaine et tous signes distinctifs afférents.

Conformément aux dispositions du Code de la propriété intellectuelle et des traités et accords internationaux, toute reproduction, divulgation, distribution, représentation, traduction, diffusion, modification, transcription, partielle ou totale, quelque soit le support considéré et quelque soit le procédé utilisé pour un usage autre que celui privé est interdit sans l'autorisation préalable et expresse de la société InfoGones.

L'utilisateur reconnaît avoir pris connaissance des présentes conditions d'utilisation et s'engage à les respecter.

L'utilisateur du site internet "www.infogones.com" reconnaît disposer de la compétence et des moyens nécessaires pour accéder et utiliser ce site.

L'utilisateur du site internet "www.infogones.com" reconnaît avoir vérifié que la configuration informatique utilisée ne contient aucun virus et qu'elle est en parfait état de fonctionnement.

InfoGones met tout en œuvre pour offrir aux utilisateurs des informations et/ou des outils disponibles et vérifiés mais ne saurait être tenue pour responsable des erreurs, d'une absence de disponibilité des fonctionnalités et/ou de la présence de virus sur son site.

Les informations fournies par InfoGones le sont à titre indicatif et ne sauraient dispenser l'utilisateur d'une analyse complémentaire et personnalisée.

InfoGones ne saurait garantir l'exactitude, la complétude, l'actualité des informations diffusées sur son site.

En conséquence, l'utilisateur reconnaît utiliser ces informations sous sa responsabilité exclusive.

Ce site appartient à :

InfoGones
1 PLACE DES TERREAUX
69001 LYON - FRANCE
Tél : +33 (0)4 81 91 53 40
Courriel : contact@infogones.com

Le directeur de publication est :

Laurent Strohl
Directeur d'InfoGones
Courriel : contact@infogones.com

Hébergement

OVH

Partager l'article