0:00:06.800,0:00:07.900 Bonjour alors moi c'est Mathieu 0:00:10.950,0:00:17.080 et je vais vous parler des mots de passe parce que je trouve qu'à Sud Web 0:00:17.080,0:00:22.965 comme à Paris Web finalement, il y a beaucoup trop de sujets front 0:00:22.965,0:00:29.373 Donc c'est un sujet qui devrait concerner tout le monde en fait parce que 0:00:29.373,0:00:32.680 quel que soit votre rôle dans un projet web 0:00:32.680,0:00:37.480 vous êtes généralement les premiers utilisateurs du site et vous devriez vous souciez de 0:00:37.480,0:00:43.760 comment vos développeurs, si vous êtes pas développeur ont stocké le mot de passe 0:00:43.760,0:00:48.160 que probablement vous réutilisez de toute façon ailleurs ou pas 0:00:48.160,0:00:50.640 si vous faites les choses très bien mais 0:00:50.640,0:00:52.480 j'en connais pas mal 0:00:52.480,0:00:55.600 qui réutilisent les mêmes mots de passe 0:00:55.600,0:00:58.886 Donc le principe de base quand on parle de sécurité des mots de passe 0:00:58.886,0:01:01.200 c'est de se dire que l'attaquant il a eu accès à votre base de données 0:01:01.200,0:01:04.080 ll a tout le système à sa disposition 0:01:04.080,0:01:08.615 Ensuite le principe de départ c'est de se dire comme je viens de dire 0:01:08.615,0:01:10.920 que nos utilisateurs ils réutilisent les mêmes mots de passe partout 0:01:10.920,0:01:14.840 et qu'on veut quand même les protéger un petit peu 0:01:14.840,0:01:17.720 Donc conclusion, on peut pas vraiment arrêter 0:01:17.720,0:01:20.600 l'attaquant qui a déjà eu accès à votre serveur 0:01:20.600,0:01:23.440 mais on peut essayer de le ralentir 0:01:23.440,0:01:28.160 Tout le principe du stockage de mot de passe c'est ça. 0:01:28.160,0:01:33.040 Donc là je vais grosso modo expliquer les différentes méthodes qu'il ne faut pas appliquer 0:01:33.040,0:01:35.120 pour stocker les mots de passe 0:01:35.120,0:01:37.560 du plus simple au plus compliqué 0:01:37.560,0:01:41.840 et on verra que même les méthodes compliquées sont pas forcément adaptées 0:01:41.840,0:01:45.302 Donc la première c'est juste le stockage en clair, c'est simple il faut pas le faire 0:01:45.302,0:01:48.560 J'espère que tous les développeurs sont au courant 0:01:48.560,0:01:50.920 N'importe qui avec un accès à la base de données peut voir les mots de passe directement 0:01:50.920,0:01:52.640 y compris vos propres développeurs et administrateurs 0:01:52.640,0:01:55.680 ce qui pose quand même un grave problème de vie privée 0:01:55.680,0:02:01.400 surtout si vous avez un site avec beaucoup d'utilisateurs, des profils très complets, etc. 0:02:01.400,0:02:06.920 Deuxième méthode : stockage chiffré ou crypté si on veut faire du franglais 0:02:06.920,0:02:11.920 C'est pas mieux non plus car vous avez forcément une clef de decryptage du mot du passe 0:02:11.920,0:02:15.680 qui est forcément stockée à un endroit où on considère que l'attaquant y a eu accès 0:02:15.680,0:02:23.120 donc c'est pareil, c'est à proscrire aussi. 0:02:23.120,0:02:26.480 Alors là on commence à rentrer dans les trucs compliqués et j'ai fait plein de texte 0:02:26.480,0:02:30.883 surtout pour ceux qui sont pas là et qui n'ont pas la chance d'être ici 0:02:30.883,0:02:33.800 et qui pourront après regarder les slides 0:02:33.800,0:02:37.480 Grosso modo c'est utiliser des algos qui sont fait pour faire des signatures 0:02:37.480,0:02:40.200 donc MD5, SHA-1, etc. 0:02:40.200,0:02:46.080 Ça donne une illusion de sécurité parce qu'on a l'impression que on a plus le truc en clair 0:02:46.080,0:02:50.720 mais en fait c'est des algos qui sont fait pour être calculés très rapidement 0:02:50.720,0:02:56.480 et vu que la puissance des machines qu'on a augmente à une vitesse folle 0:02:56.480,0:02:59.280 au final c'est qu'une illusion de sécurité 0:02:59.280,0:03:01.720 ça devient "craquable" très très rapidement, très très facilement 0:03:01.720,0:03:04.560 donc là j'ai donné des exemples de chiffres, mais ils seront plus valable demain 0:03:04.560,0:03:08.560 donc ça sert à rien, mais c'est juste pour vous donner une idée 0:03:08.560,0:03:17.240 La méthode quatre qu'il faut pas faire et là ça commence à rentrer dans le troll 0:03:17.240,0:03:20.551 c'est ce que à peu près tout le monde qui pense faire les choses bien fait 0:03:20.551,0:03:24.280 c'est à dire utiliser les mêmes algos de hash mais avec ce qu'on appelle un salt 0:03:24.280,0:03:32.000 qu'est un espèce de petit bout qu'on rajoute en plus avant généralement ce qu'on veut stocker 0:03:32.000,0:03:34.280 donc le mot de passe 0:03:34.280,0:03:37.664 c'est déjà beaucoup mieux mais vous êtes en train de réinventer la roue 0:03:37.664,0:03:42.400 quand vous faîtes ça en système de stockage de données sécurisées 0:03:42.400,0:03:44.920 il existe des méthodes qu'on va voir dans la slide d'après 0:03:44.920,0:03:47.240 et ça reste vulnérable aux attaques de brute force au final 0:03:47.240,0:03:52.920 ce que ça empêche c'est un truc que j'ai vaguement abordé dans la slide d'avant sans vous le dire 0:03:52.920,0:03:59.583 c'était les rainbow tables, mais ça devient juste un détail tellement les ordinateurs de nos jours 0:03:59.583,0:04:02.080 sont super puissants quoi. 0:04:02.080,0:04:04.280 Donc on peut faire encore mieux que ça, même si c'est déjà pas mal 0:04:04.280,0:04:08.040 si vous êtes là, c'est déjà sympa hein 0:04:08.040,0:04:13.840 Donc le truc sympa c'est de garder le principe du salt,vous en mettez un par mot de passe 0:04:13.840,0:04:21.735 comme ça vous empêchez l'attaquant de pouvoir recalculer avec un même salt 0:04:21.735,0:04:25.822 Et vous utilisez des implémentations spécifiques dont le but est de ralentir la génération 0:04:25.822,0:04:29.760 C'est à dire qu'au lieu d'avoir un truc, une empreinte du mot de passe 0:04:29.760,0:04:32.960 qui se génère en 0,000x secondes 0:04:32.960,0:04:36.640 vous avez un truc qui se génère en 500ms voire 1s 0:04:36.640,0:04:40.040 En fait vous pouvez choisir avec ces types d'algorithmes 0:04:40.040,0:04:44.400 la vitesse que vous voulez, donc vous choisissez ça avec un iteration count 0:04:44.400,0:04:47.920 et vous vous choisissez ça, enfin ça dépend de l'algo mais vous choisissez un nombre 0:04:47.920,0:04:51.280 qui vous semble correct pour ralentir suffisamment 0:04:51.280,0:04:57.080 et vous avez vaguement une garantie que ça va être suffisamment compliqué à calculer 0:04:57.080,0:04:59.200 pour que ça soit pas automatisable par un attaquant 0:04:59.200,0:05:02.742 Donc au pire il va prendre des années à calculer un mot de passe 0:05:02.742,0:05:04.669 et vous êtes tranquilles. 0:05:04.669,0:05:09.120 Et le raffinement ultime c'est scrypt 0:05:09.120,0:05:13.960 c'est une version encore améliorée de ça qui en plus d'être coûteuse en temps CPU 0:05:13.960,0:05:17.040 elle est aussi coûteuse en mémoire car il commence à y avoir 0:05:17.040,0:05:26.040 du hardware spécifique pour calculer même des algos genre bcrypt, etc. 0:05:26.040,0:05:30.240 et donc au final le seul moyen qui nous reste pour lutter contre ça 0:05:30.240,0:05:34.320 c'est en plus d'être coûteux en CPU, d'être coûteux aussi en mémoire 0:05:34.320,0:05:37.440 pour empêcher ces matériels spécifiques de fonctionner 0:05:37.440,0:05:40.360 Là on entre dans un raffinement vraiment extrême 0:05:40.360,0:05:44.000 et pour l'instant y'a suffisament peu d'implémentations contrairement aux 3 autres que j'ai cité 0:05:44.000,0:05:46.120 qui sont les gros trucs 0:05:46.120,0:05:47.800 Y'a relativement peu d'implémentations 0:05:47.800,0:05:52.665 Juste sachez que tous ces algos, ils se retrouvent dans des Operating System 0:05:52.665,0:05:56.920 par exemple Linux utilse SHA-512 je pense 0:05:56.920,0:05:59.360 FreeBSD ... non OpenBSD ils utilisent scrypt 0:05:59.360,0:06:04.902 non OpenBSD utilise bcrypt et je sais plus qui veut utiliser scrypt 0:06:04.902,0:06:07.084 si c'est openBSD ou un autre mais bref 0:06:07.084,0:06:11.080 c'est des trucs qui sont éprouvés, qui sont fait pour stocker des mots de passe 0:06:11.080,0:06:13.080 et c'est comme ça qu'ils sont utilisés. 0:06:13.080,0:06:17.920 Donc ils sont beaucoup plus fiables que faire votre truc à la main avec un salt ou je ne sais quoi 0:06:17.920,0:06:23.320 Et voilà j'ai plus le temps mais bonus n'oubliez pas d'éduquer vos utilisateurs 0:06:23.320,0:06:27.200 Parce que s'ils n'utilisaient pas les mêmes mots de passe partout, on aurait pas les mêmes problèmes 0:06:27.200,0:06:31.480 Incitez les si possibles à utiliser des mots de passe longs avec des caractères spéciaux, etc, etc. 0:06:31.480,0:06:36.574 et ne cédez pas aux sirènes du "mais c'est plus facile d'avoir le mot de pase en clair pour l'utilisateur" 0:06:36.574,0:06:39.840 c'est pas vrai, ça donne l'impression que c'est plus facile mais en fait 0:06:39.840,0:06:43.000 quand il se fera piquer son mot de passe à cause de vous 0:06:43.000,0:06:46.760 c'est vous qu'il ira venir voir et il ira emmerder votre support 0:06:46.760,0:06:48.960 voilà et faîtes du HTTPS.