Est-ce une pratique de sécurité commune ou imparfaite?

Je souhaite que l’authentification utilisateur se déroule de la manière suivante:

  • L’utilisateur génère une clé de cryptage et la conserve sur son appareil. La clé est ensuite cryptée par son mot de passe.
  • Pour créer un nouveau compte, l’utilisateur envoie une clé publique et un message signé indiquant quelque chose comme “nouveau membre”. Le serveur décrypte le message et vérifie que les clés publiques correspondent. Il crée ensuite un nouveau compte pour le membre.
  • Chaque fois que l’utilisateur interagit avec le serveur, il signe un message avec la clé privée stockée sur son appareil, indiquant sa demande. Les parameters de la demande sont peut-être également cryptés.

Le serveur vérifie que l’utilisateur est en possession de la clé privée à chaque étape. À aucun moment, la clé privée n’est communiquée sur Internet. À mon avis, tout ce protocole pourrait être exécuté sur les requêtes GET sans trous de sécurité. Le seul trou de sécurité semble être le stockage local de la clé d’un utilisateur, mais mon implémentation évite cela (d’où la méthode dérivée ici).

Maintenant vient la vraie question. Existe-t-il des bibliothèques pour ce protocole qui faciliteraient sa mise en œuvre? Je recherche des implémentations de nœuds et de bower. La plupart des bibliothèques cryptographiques vous font faire quelque chose comme ça en 5 ou 6 étapes. C’est suffisant, mais je me demande si c’est une méthode courante dont je n’ai pas entendu parler.