Un des cas d’usage les plus courants concerne la gestion des utilisateurs. Imaginons une application ouverte à tous, sauf concernant quelques actions pour lesquelles l’administrateur doit se connecter.
Il nous faut donc créer un fichier de configuration (ou utiliser une base de données) contenant le mot de passe de l’administrateur. Une bonne pratique consiste à ne pas stocker en clair ce mot de passe, mais à l’aide d’un hash (MD5, SHA…) ou d’une stratégie plus robuste. Si possible avec un salt, car dans le cas contraire, une personne qui récupérerait ce fichier de configuration pourrait retrouver certains mots de passe avec une attaque par table arc-en-ciel (http://fr.wikipedia.org/wiki/Rainbow_table).
Bien entendu, le hash est converti en base64 afin d’être stocké sous la forme d’une chaîne de caractères dans le fichier JSON. Ici, il s’agit de la chaîne « admin » (le résultat des fonctions de hash est du binaire).
{ "port": ":7777", "password": "x61Ey612Kl2gpFL56FT9weDnpSo4AV8j8+qx2AuTHdRyY036xxzTTrw10Wq3+4qQyB+XURPWx1ONxp3Y3pB37A==" }
Imaginons maintenant que l’on soit dans un programme qui reçoit la chaîne de caractère out et que l’on souhaite savoir si cette chaîne contient le bon mot de passe. Dans les lignes de code suivantes, nous allons effectuer la série d’actions suivantes :
import "crypto/sha512" … h := sha512.New() h.Write(out) str := base64.StdEncoding.EncodeToString(h.Sum([]byte{})) if str == config.Password { //Bon mot de passe } else { //Mauvais mot de passe }
Comme je le disais en introduction, on peut relever un peu le niveau de sécurité en utilisant un salt. Le principe du salage (http://fr.wikipedia.org/wiki/Salage_(cryptographie) ) consiste à concaténer une chaîne de caractère (souvent aléatoire) au mot de passe. Voici un bout de code tout fait avec – dans la fonction main – un exemple de comparaison entre un bon et un mauvais mot de passe.
Dans la plupart des entreprises, la stratégie de stockage Hash+Salt est considérée comme suffisante. Il est vrai que c’est déjà mieux que le stockage en clair. Cependant, il existe d’autres stratégies de stockage plus sûres. Dans un prochain article, nous étudierons le fonctionnement de bcrypt.
Une traduction du blog officiel de golang expliquant le mécanisme de la réflexion en Go. Lire »
Traduction d'un article du blog officiel expliquant comment échanger des données entre deux programmes golang grâce à un format natif Lire »
Préconisations officielles pour la gestion des erreurs dans un programme golang. Cet article complète les explications sur panic, defer et recover Lire »
Article expliquant comment ajouter de la logique dans son programme Go avec les instructions golang de contrôle, de boucle et d'évaluation de type. Lire »
Cryptage de toute ou partie des données avec un algorithme à clé publique/privée. Lire »
Soyez le premier à commenter cet article
Tous les commentaires sont soumis à modération. Les balises HTML sont pour la plupart autorisées. Les liens contextuels et intéressants sont en follow.