Comment pouvons-nous valider les identifiants de connexion côté client lui-même sans impliquer le serveur d'un site Web?
La raison en est que vous ne pouvez pas du tout faire confiance au client. Un attaquant peut modifier le client comme il l'entend, et contourner toutes les mesures de sécurité que vous avez mises en place.
Mais que se passe-t-il si nous signons numériquement notre code? L'attaquant ne peut pas le modifier alors, non?
Oui, ils peuvent. Si vous signez votre code, la machine de l'attaquant doit valider la signature et refuser de l'exécuter si la signature du client ne correspond pas. Rien n'empêche le client de désactiver cette vérification de signature et d'exécuter simplement du code avec une mauvaise signature ou aucune signature.
De plus, si vous ne souhaitez pas impliquer le serveur du tout après l'envoi du site Web, alors tout le contenu potentiellement confidentiel doit être envoyé au client d'abord (avant de savoir s'ils sont autorisés à le voir), puis leur a été révélé.
Rien n'empêche un attaquant de simplement regarder le contenu brut qui lui est envoyé sur le réseau, sans qu'aucun code côté client ne soit exécuté.
Mais ne pouvez-vous pas crypter les données avec les informations d'identification de l'utilisateur?
Oui vous pourriez. Mais votre objectif est d'authentifier l'utilisateur, ce qui signifie que vous confirmez si l'utilisateur est bien celui qu'il prétend être. Le schéma suggéré par user912 fonctionnerait comme suit:
Ce schéma n'authentifie en aucun cas l'utilisateur auprès du serveur. Le serveur ne sait pas si l'utilisateur est vraiment "foo" ou non. De plus, si l'utilisateur a un mot de passe faible, l'attaquant peut tenter de le casser. Oui, une fonction de dérivation de clé peut ralentir ce processus, mais il s'agit essentiellement d'une fuite d'informations d'identification.
Ce que je suis curieux, c'est pourquoi vous voudriez vouloir essayer ce schéma, au lieu de la méthode testée traditionnelle?
Il existe une longue histoire de logiciels avec authentification côté client. Le meilleur exemple est probablement les systèmes d'exploitation. Microsoft Windows authentifie les utilisateurs avec un hachage NT dans un fichier spécial appelé SAM; Linux authentifie les utilisateurs avec crypt et le fichier/etc/shadow.
La conception est:
Il s'agit du même flux de travail qui fonctionne dans le paradigme Web. Mais les étapes 3 à 7 fonctionnent sur le serveur et non sur le client.