Password Security – Don’t hash and don’t salt!

Now the title is a little of gears, but please read through to better understand my contention.

Many of us in security, when coding and simply reading around the internet, are thinking of writing your own password security code; but if you are don’t and here’s why.

  • Unless you have great experience or a PHD in cryptography, good luck
  • So it’s way too easy to make mistakes
  • Others can do it way better than us
  • Core implementations in most or all languages already, and finally
  • Don’t waste your time doing it, solution other problems instead!

I don’t know how many times I’ve witnessed bad code, bad implementations, bad configurations and even worst; total lack of knowledge when it comes to securing passwords.

But if you’re curious, here’s a little background I find interesting, especially after the latest news about password leaks from LinkedIn, Myspace and so many others.

Password Hashing

I’ll keep this very simple. Hashing a password consists in hiding its true identity. So instead of sending a password in clear directly into a database or structured data system, you need to first find a way to make it harder for a malicious user.

Leaving passwords in clear is so 1980’s, but you’d be surprised as to how many times is see this in systems and solutions (in code, in configurations files, etc.).

In its simplest form, hashing is a method of taking data, encrypting it, and creating an unpredictable, irreversible output.

Here are a few basic examples for hashing words using SHA-512:

bonjour

Hash result:

3041edbcdd46190c0acc504ed195f8a90129efcab173a7b9ac4646b92d04cc80005acaa3554f4b1df839eacadc2491cb623bf3aa6f9eb44f6ea8ca005821d25d

bonjour123

Hash result:

e9a45f802b3c463d980da22d5c9c908ebd19aa282cb62fbdbb4ee6178aa72ff4043f388e058a1236ded1c0887255af0b05bcec022c48d65fa8f27e36589f2e98

Thisisalongstringtosimulateacomplexpassword!@#$%

Hash result:

e54a8e244daa447edc49cfb56f79d069276eaf88cdca7f8d9e8f6a70f9b528d25844090a68eb138987ff85fbd303cc5824a9bc0b7ec72ac57a2abeeda112be52

As you can clearly see, the resulting hash is always the same length when using, of course, the same algorithm and function. So whether your password has 10 characters or 25, a hash function will generate a specified length result; such as shown above.

But a potential risk arises with simply hashing passwords. If a malicious user “knows” or finds the single associated hash function; your password security has been most probably breached. How?

Well a malicious user could look up pre generated SHA-512 tables, and eventually find the perfect combination, thus finding the password. Using predefined tables greatly accelerates the process; these are known a “rainbow tables”. If you’re curious on the subject, I highly recommend searching online for this subject as it is an extremely powerful tool.

In this specific case, a malicious user would then look up the hash in hand, and find the corresponding password… for example:

0395f42f1b1f0677510a4ff7dbd886b0f2ba46dd707ee546367d59b22ca0dc815ea18c761b327491eb7b84297d5f12bc1f3f3eaa66fbd0bdcb8b62a099b18cce = bonjo

2b37b6c82f890786a1686f84c7512adc091ab6299cbe6597050e17aa3780dd59111d4552418f2425fdcbe402175baa67d47fd8c0eeaf98164093343cd3d71e1d = bonjou

3041edbcdd46190c0acc504ed195f8a90129efcab173a7b9ac4646b92d04cc80005acaa3554f4b1df839eacadc2491cb623bf3aa6f9eb44f6ea8ca005821d25d = bonjour

Boom. The last sequence is directly one of the strings we had earlier. Having the hash result in hand, the idea is just to compare that hash to other hashes until they match!

Now you’re starting to see that creating a password hash is not the best security for passwords. As such, it becomes interesting to add a bit of flavor in the mix and make things more complicated for malicious users.

Don’t get me wrong, hashes are great to confirm and verify the integrity of a string or password, but isn’t necessarily very secure when it comes to sensitive information; so what if we add a bit of information to our string and hash?

This technique is based on adding a salt. Yes salt! The idea behind salting is that generated hash tables used by malicious users only truly work when each password is hashed the exact same way.

Keeping things very simple, a salt is random information used as an additional input when you’re hashing.

Remember from our examples, if two strings are hashed the same way or if two users have the same password, they’ll have the same hashes! This is not great. So a salt minimizes table attacks by randomizing each hash, of course, making sure that each salt is different for every string or password you want to encrypt.

With this technique, the same strings will have different hashes! Here’s the very general idea using one of our strings:

String = bonjour

Random Salt = yr2016

Then the idea in its simplest form is to add the random salt to the string and then hash them!

bonjour + yr2016 = bonjouryr2016 (now let’s hash the combination) =

db305fde604b14286b8dd9ab88acdb2990a0bd078847075637c5cf8b8be1e656262f5e96c954d65b0784dff6fbcd5e3585ce35137eb9cfd750e4e7ee6be26a6d

Again! This is a very high level to explain the idea of hashing and salting. My goal isn’t to present a PHD in cryptography, but just to give you a sense of what salts do when combined with hashing functions.

Key things to remember here… Securing hashes and salts is key! That’s why you should store this information into separate places, so that even if a malicious user gets all of your hashes, it becomes practically impossible to find the strings or passwords without the salts (especially if every salt is random).

Another example I want to show is using the same password with a different salt solves duplication.

String = bonjour

Random Salt = 2016yr

bonjour + 2016yr = bonjour2016yr (now let’s hash the combination) =

777a1dcdd84bf7d4e11325c05fbb114cccc9760d068fab29fb7dfdc0c95c32f9f5b62471371b028f5e3d1b1bdf7084262b41cbaf65a98ff9de64111c89ee582d

Et voilà! As you can clearly see above, combining a random salt with the same password will always create a different hash; fantastic.

Now to verify that users are entering the right password, you simply compare the result of the inputted string and associated salt, and without ever looking at the password, know that the correct or wrong information has been entered by a user.

Using similar solutions, a malicious user would then have to know many things to attack such as:

  • What are the key requirements for your passwords (complexity, length…)
  • What hashing functions is used for passwords and salts (could be different if you like)
  • What is the process of creation of the hashes
  • Where are hashes and salts stored
  • How are the salts created and so on…

Now, can you see the value?

It becomes very complex for one person to have all this information, code, access, knowledge, etc.

But the point of my article wasn’t to explain the process itself but the potential complexities that come when managing hashes, salts, functions, algorithms and so on. If by any chance you misplace or misuse the concepts above, the solution you provide will never be secure.

So do you understand my point and title now? Use tried and true crypto solutions.

Don’t go bake some half cooked cake and then live the consequences of bad decisions. Cryptography is complex and necessitates years of studying and experience and may greatly vary from one solution to another.

Instead, take the time to search for solutions – depending on the language or solution you’re using. Every platform has great solutions for this, so read, ask questions and always… Have fun doing it.

Quelques videos durant le voyage

Vue sur un passage en Autriche.

Petit clip de mon passage en direction de Warth, vue et horizon incroyable.

Pause pour une belle vue en Suisse.

Petite pause avant notre lunch sur la route en Allemagne.

Petite vue des jardins d’un petit village en Allemagne.

Un petit timelapse des écluses entre la France et l’Allemagne.

Arrivée à Warth en Autriche

Dès notre départ de la Suisse, la journée était belle. Un petit déjeuner et une belle petite pause café sur la terrasse.

image image

Les motos étaient anxieuses, il était donc temps de quitter pour visiter la région et se diriger vers l’Autriche.

image

Sur le chemin, une belle petite ville. Le groupe était bien heureux de prendre quelques photos.

image image

Mon partner était dans un rêve.

image image

Ensuite après plus d’une centaine de kilomètres, une pause fesse. Bien mérité, car la route est très sinueuse.

image image

L’arrêt pour notre diner se trouvait au sommet du Santis. Superbe.

IMG_1416 IMG_1421

IMG_1422

Vue de la gondole.

IMG_1419

Vue sur la terrasse de la tour.

IMG_1432 IMG_1426 IMG_1429

Ensuite, il était temps de se diriger vers le Liechtenstein! Quelques nuages, mais rien de grave et surtout, pas de pluie. À ce jour dans nos vacances, une seule journée de pluie.

image

image image

Lors d’une pause café, j’ai fait un combat de coqs… Eh oui, un coq sur la terrasse d’un café au Liechtenstein.

image

Juste avant notre entrée en Autriche, un peu d’essence et une préparation psychologique à la vue qui allait se présenter devant nous dans les prochaines minutes.

image

IMG_1445

L’Autriche et le passage.

image

Ci-dessous, c’est la route… wow, simplement. Se rendre à cette destination en moto est absolument extraordinaire. Tous nos sens sont affectés, on attend les chutes d’eau, les senteurs, le vent, le froid des montagnes, la chaleur du soleil. Ouf.

image

Non mais sérieux, vraiment? J’ai le privilège de naviguer dans cet environnement… incroyable.

IMG_1455

Avec plus de 1500 km en Europe pour l’instant, je crois que nous sommes tous des gagnants. Alors, une pause Game of Thrones était nécessaire.

image

IMG_1463

Après cette petite pause, je dois traverser la prochaine section “déserte” du passage qui mérite aussi d’être contemplée.

IMG_1471

IMG_1468

Un peu plus loin, et je me trouve dans la vallée de notre hôtel.

IMG_1472

IMG_1474

Gin Tonic en mains, une simple contemplation.

IMG_1479

IMG_1480 IMG_1481

J’ai bien d’autres photos, mais je vais attendre demain pour voir si l’Internet est plus rapide dans notre prochain Hôtel! A+

Direction Suisse – Schaffhouse

Dès le départ de Ribeauvillé, la matinée allait s’annoncer mouillée! 15, 12, 20, 18, une température en changement continuel.

IMG_1319

IMG_1307

Au sommet des montagnes de la forêt noire, brouillard, froid, mais superbe ambiance à plus de 1100 mètres d’altitude.

IMG_1324 IMG_1323 IMG_1322

Un autre petit arrêt pour une pause “fesses” et ensuite le départ vers notre diner.

IMG_1329

IMG_1331

Sur le chemin, tout près de la frontière avec la Suisse… de mieux en mieux…

IMG_1333 IMG_1335

Sur le site, l’équipe a préparé un beau petit diner pour nous, simple, mais très bon.

IMG_1334

Ensuite, direction sud vers Schaffhouse en Suisse. Arrivée très sympathique aux chutes.

IMG_1343 IMG_1344 IMG_1347 IMG_1338

Et finalement, notre hôtel à Schaffhouse avec une bonne bière pour nous accueillir.

IMG_1349

IMG_1351

Une fois à l’hôtel, une mega douche était nécessaire et ensuite une belle petite marche dans la ville. Relaxer sur une terrasse ensuite est toujours cool.

imageIMG_1370

IMG_1372 IMG_1367 IMG_1355 IMG_1353

Un beau dodo, demain l’Autriche… vers Warth.

Visite en Alsace

Aujourd’hui je me suis fait un petit tour solo de l’Alsace, ensuite en direction de Colmar et finalement quelques courbes dans les montagnes de la région… un plaisir sans fin. Des vignes, des vignes, des vignes.

image image image image image image image image

Centre-ville de Colmar et sa cathédrale.

image image image image

De retour vers Ribeauvillé.

image image image image

Sur mon chemin, un petit clin d’oeil sur la route… Regardez bien la photo! Je comprends que c’est surement des bons prix… mais à ce point?

image

Demain, la Suisse nous attend. A+

Direction Ribeauvillé en Alsace

Hier nous avons quitté la belle ville de Heidelberg en Allemagne pour se diriger vers la ville pittoresque de Ribeauvillé dans la région de l’Alsace en France.

IMG_1235

Avant d’aller plus loin, certains mon demandés quel était mon appareil photo de choix, et bien, mon iPhone 6S Plus. Et voilà, mon astuce de voyage #1, ne pas transporter d’appareil encombrant et faire le tout avec un mobile. Bon, ce mobile n’est pas “normal” mais c’est juste pour vous dire qu’avec un peu d’expérience, quand on connait bien les limitations de nos mobiles, il y moyen de faire des miracles avec ceux-ci.

Pour notre route, l’aventure a commencé sur Autobahn, eh oui, rien de moins. J’avoue qu’après quelques minutes sur l’autoroute, j’en ai profité et avec un grand plaisir. Mais comme ma moto n’est construite pour de très hautes vitesses, je n’ai pas exagéré. J’ai trouvé très sympathique que lors d’une lancée à plus haute vitesse, une police a passée tout juste à mes côtés, un petit bonjour et elle a continué sur sa route. Je vous confirme donc que la police ne se gêne pas, celle-ci à touché plus de 200 km/h garantis.

Ensuite le groupe s’est dirigé vers la forêt noire, une région incroyable avec des routes sinueuses à couper le souffle. Il faut être en forme sur ces routes, car il n’y a rien de simple. Nous avons fait plus de 200 kilomètres dans cette région. Après cette route j’étais brulé. Ce fut certainement la route la plus difficile que j’ai faite dans ma vie; vraiment!

IMG_1249 IMG_1247 IMG_1241 IMG_1243

Les courbes sont solides… et ne pardonnent pas! Voyez ci-dessous… ouf.

IMG_1244

Des vidéos vont suivre, mais pour l’instant je n’ai rien sous la main à vous montrez, mais croyez moi, nous avons fait plus de 200 km dans des courbes similaires… fatiguées n’est une bonne description de nos états.

IMG_1250

Le chemin du retour a été absolument parfait. Traverser l’Allemagne pour ensuite toucher la France et en direction de Ribeauvillé.

IMG_1254

Et voici une photo de ma chambre… en haut du garage! Ça me rappelle bien des souvenirs ce garage ; )

IMG_1255

La ville est digne d’une histoire de rêve historique. Un belle marche est de mise.

image image image image image image image image image image image image

Demain, une petite visite de la région en solo.

Départ de Rothenberg – Direction Heidelberg

Temps de quitter Rothenberg vers notre destination étudiante de Heidelberg dans l’ouest de l’Allemagne. Le soleil du matin est tellement beau dans la ville, voici quelques photos pour le plaisir.

IMG_1160 IMG_1159 IMG_1158

Devant de notre Hôtel.

IMG_1164 IMG_1161 IMG_1169

Le groupe qui attend les consignes de notre guide Ramon.

IMG_1170

Après quelques kilomètres, voici notre arrivée dans la petite ville de Langenberg. Superbe vue.

IMG_1171 IMG_1175

Jardin noble dans la photo suivant celle-ci, on imagine les vassaux qui se trouve dans la vallée, regardés par le maitre dans son jardin…

IMG_1174 IMG_1178

Ensuite une session de détente pour nos fesses qui ne lâche pas. Disons que le café ne ce fera pas attendre!

IMG_1189

Encore une promo JS style Daft Punk pour les fan de AVG. Je dois mentionner qu’à date mon équipement est solide et une performance sans reproche. Dans cette photo, en arrière-plan, l’abbaye de ce petit village qui ce nomme Bieringen.

IMG_1186

Une petite relaxation, j’ai retiré mes bottes et simplement trouvé place tout près de la petite rivière… géniale.

IMG_1195

Nous voici tout de Heidelberg, un dernier arrêt pour nous donner des forces après quelques centaines de kilomètres c’est toujours apprécié.

IMG_1207

Moment de prendre un thé glacé et simplement regarder autour… superbe vue.

IMG_1208 IMG_1177

Nous voilà arrivés à notre destination : Heidelberg. D’après mes questions, cette ville est reconnue pour ses écoles et surtout son Université. Donc beaucoup d’étudiants, des restos, bars et j’en passe. Celle-ci a été détruite et reconstruite plusieurs fois depuis le 14e siècle. Le rouge vient du grès de la région ce qui lui donne un aspect très particulier et rechercher par les visiteurs. Königstuhl hill.

Ci-dessous, notre hôtel qui est le plus vieux de la ville qui est fondée sur une architecture baroque.

IMG_1220

Une marche sur le pont qui traverse le Neckar nous permet d’admirer le château de la ville sur la colline qui ce nomme Königstuhl. Donc c’est le temps de regarder et jeter un coup d’oeil à ce qui nous entoure… Vraiment beau et surtout très romantique.

IMG_1229

Les portes du pont.

IMG_1231 IMG_1232 IMG_1223

Avant mon retour à l’hôtel (je suis brulé), une petite marche sur le bord du Neckar pour profiter de la journée qui se termine en beauté.

IMG_1227

 

Départ de Erding – Direction Rothenburg ob der Tauber

Après bien des vérifications pour s’assurer que tout était bien avec notre équipement et nos motos, c’est maintenant le temps de quitter Erding et se diriger vers la superbe ville de Rothenburg ob der Tauber. Ouf tout une prononciation, je vous laisses le soin de pratiquer!

Le groupe avait bien hâte de quitter, environ une dizaine de personnes.

image

Mais avant de se rendre à notre destination finale, il fallait bien se faire quelques centaines de kilomètres et profiter des des routes de cette région. Bon voici ma chance, les routes en Allemagne sont absolument incroyables; rien de moins. Oublier tout ce que vous savez, nous avons des devoirs à faire au Québec.

Même les plus petites routes de la région son nickel. Pas seulement le pavé, mais le tracé, la vue et l’accessibilité. Bon certaines signalisations demandent un peu d’expérience, mais une fois acclimaté, le tout devient assez simple à suivre.

Il est clair que les européens sont très habitués et surtout respectueux des motocyclistes, aucun incident significatif sur toute la route. Je dois me permettre d’indiquer qu’au Québec, ceci serait un tour de force.

Pour notre départ et finalement jusqu’à notre arrivée, la température a été parfaite. Une vingtaine de degrés, beau soleil; parfait. Notre premier arrêt est dans une petite ville nommé Vohburg au Nord de Erding. Se rappeller de ces noms reste un tour de force : ) Très sympathique, surtout avec un bon petit café en mains.

image image image image image

Rouler dans ces petites rues en pavé est vraiment une belle expérience. Un peu serré des fois, mais rien de dangereux. Je dois le redire, le peuple Allemand est vraiment superbe, respectueux, serviable comme peu. Vraiment un excellent choix pour des vacances.

Toutefois et avec respect, ils sont Allemands! Donc même parler en Anglais, la communication reste  un challenge avec les gens locaux.

Bon maintenant, pas trop de sérieux, voici une autre petite promo perso!

image

Une fois notre petite pause terminé, direction Nord-Ouest pour notre arrêt diner. Un charmant petit village nous attends pour diner, encore une fois superbe.

image image image

Après une bonne petite bouffe, départ pour les routes romantiques de la région.

image

Rothenburg ob der Tauber en Bavière, est demeurée à peu près dans son état de l’époque de la Renaissance. Elle n’a plus subi de transformation significative même avec les guerres et elle possède toujours ses murs de défenses. La ville est réputée pour la beauté de ses monuments et semble un des hauts lieux de tourisme en Allemagne.

Voici quelques photos de la ville. Superbe.

image

Et voici la bâtisse ou se trouve ma chambre. Extérieur traditionnel avec un intérieur “moderne”. Très bien et confortable. Après une bonne route, ça fait du bien de trouver le plaisir d’une bonne douche chaude!

image image

Et voici ma vue une fois installé sur la merveilleuse terrasse de l’hôtel. Inoubliable.

image

Avec une perpective un peu plus artistique, un autre angle.

image

Et voilà pour cette journée, A+