2010-02-18 11 views
2

Je cherche à développer un système d'authentification par mot de passe unique (J2ME pour téléphone, php pour le côté serveur)OTP S/KEY - Comment les graines sont-elles générées, sont-elles aléatoires à chaque fois?

Je suis en train d'obtenir ma tête autour du processus, voici ce que je comprends

  1. utilisateur> entrées secrète aléatoire (S) dans le numéro de hachage n fois
  2. utilisateur> soumet S^n au serveur
  3. serveur> enregistre n et S^n
  4. utilisateur> génère (S^n) - 1 et soumet au serveur
  5. serveur> prend l'entrée d'utilisateur et applique la fonction de hachage 1 plus de temps et vérifie dans sa hachage préalablement stocké

Maintenant, à la lecture RFC2289 (S/Key) Il y a une graine qui est délivré au client et concaténée avec le secret de l'utilisateur lorsqu'il saisit un identifiant unique (à l'étape 4) Comment cette graine est-elle créée, est-elle aléatoire, est-elle stockée?

Répondre

1

La graine est convenue par le serveur et le client lors de l'initialisation de la séquence de mots de passe. Cela n'est donc fait qu'une seule fois avant que les OTP ne soient utilisés pour l'authentification. La graine devrait être aléatoire mais le client devrait être capable de la choisir. En d'autres termes, le serveur peut suggérer une graine aléatoire mais le client devrait avoir la possibilité de créer sa propre graine (aléatoire). La graine devrait alors être stockée par le serveur. Le serveur ne l'utilise pas réellement pendant l'authentification. Il le stocke juste pour qu'il puisse le présenter à l'utilisateur lors de l'authentification, avec le numéro de séquence. Les deux graines et le numéro de séquence ne sont pas secrets.