Question

J'ai demandé à ici un protocole qu'il m'a été demandé de mettre en œuvre, et comment c'était sécurisé. Comme il semblait évident dès le début que c'était de la merde. Étant si je demande:

Pouvez-vous m'indiquer un protocole de connexion très simple (les systèmes de cryptographie sont nuls) ?? Je développe l’application côté client et côté serveur, et j’ai mon propre système de messagerie, ce qui me laisse suffisamment de liberté.

Seulement 2 caractéristiques spéciales pour vos suggestions.

  1. Simple: le réseau sur lequel cette application va s'exécuter n'est pas particulièrement insécurisé et je souhaite uniquement éviter l'envoi du mot de passe en texte brut

  2. Si possible, échange pas trop long de messages. Le plus court sera le mieux.

Était-ce utile?

La solution

Découvrez l'authentification par réponse au problème

.
  • Le serveur inclut une chaîne d'interrogation aléatoire dans le formulaire de connexion
  • Lorsque vous vous connectez, javascript hache le mot de passe puis le hache avec le défi
  • Le serveur effectue ensuite la même vérification (votre base de données doit stocker les mots de passe hachés, mais cette méthode vous empêche d’utiliser efficacement un sel pour ce hachage puisque vous devez le diffuser)

Autres conseils

Le

le protocole en trois étapes serait pratique. En gros, cela revient à:

  • La personne A crypte son mot de passe et l'envoie à la personne B.
  • La personne B chiffre le mot de passe crypté et le renvoie à la personne A.
  • La personne A le déchiffre et le renvoie.
  • La personne B le déchiffre et obtient le mot de passe en texte brut.

De cette façon, le mot de passe n'est jamais envoyé en texte brut, pas plus que les clés de cryptage. C'est également un protocole relativement rapide, car il repose (vraisemblablement) sur le chiffrement symétrique, ce qui est très rapide.

L'enregistrement du hachage du mot de passe dans la base de données n'est pas sécurisé de manière optimale si le contenu de la base de données tombe entre des mains non autorisées. Il n’existe aucun moyen d’inverser le hachage directement, mais il existe des dictinonaries en ligne (comme ici ) pour inverser les mots hachés (mots de passe).

Dans la base de données, vous devriez stocker quelque chose comme:

md5(login_name +  domain_or_appname_salt + password);

Le sel situé au milieu empêche de nombreuses attaques de dictionnaire.

Du côté des clients (dans le navigateur), vous auriez un formulaire de connexion avec nom d'utilisateur et mot de passe. Un petit morceau de javascript devrait hacher le nom d'utilisateur + app_salt_ et le mot de passe, de sorte que seuls le nom de connexion et le hachage généré sont envoyés au serveur.

Maintenant, le mot de passe en texte brut ne sera jamais envoyé au serveur en texte brut. Donc, vous ne devriez pas avoir à compter sur HTTPS ici.

La même technique peut être utilisée dans le formulaire de mise à jour du mot de passe. Ainsi, le serveur ne connaît jamais le mot de passe en texte brut.

J'espère que vous avez une inspiration de cette réponse et des autres réponses.

Bonne balade!

Huibert

Si votre protocole fonctionne sur TCP, vous pouvez simplement écrire l'authentification en clair, puis boucler la communication avec SSL. Par exemple, si vous utilisez le port 1234 pour votre protocole, vous pouvez ensuite fermer ce port sur le serveur et laisser les clients le tunneler avec SSH. Cela peut être fait par programme et c'est une solution très très courante.

Si votre protocole s'exécute sur HTTP, vous pouvez le faire de manière standard en utilisant HTTPS. Par exemple, l'authentification de base sur HTTPS est suffisamment sécurisée pour les besoins que vous avez spécifiés.

D'un autre côté, si vous ne souhaitez jamais envoyer le mot de passe sur le réseau, vous devez effectuer une authentification de réponse par test.

  1. Le serveur envoie une chaîne aléatoire
  2. Le client envoie un hachage de chaîne aléatoire + mot de passe
  3. Le serveur vérifie le hachage.

Toutefois, il y a l'inconvénient que le mot de passe sera disponible (chiffré en texte brut) sur le serveur. Si vous ne souhaitez pas stocker les mots de passe sur le serveur, vous devez revenir à mon premier exemple.

SASL est un mécanisme d'authentification sécurisé. La prise en charge de SASL est fournie dans les bibliothèques standard Java pour les versions 1.5 +.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top