2008-11-27 7 views
9

J'ai besoin de générer des jetons aléatoires afin que je puisse les déterminer plus tard, c'est-à-dire qu'il devrait être presque impossible pour quelqu'un d'autre de générer de faux jetons . C'est un peu comme la génération d'un numéro de série, sauf que je n'ai pas besoin d'unicité. En fait, c'est un peu comme une signature numérique, sauf que je suis le seul à devoir vérifier la "signature".Générer un jeton que je peux prouver J'ai généré

Ma solution est la suivante:

  1. ont une chaîne secrète S (ce qui est les seules données ne sont pas en plein air)
  2. pour chaque jeton, générer une chaîne aléatoire K
  3. jeton = K + MD5 (K + S)

pour valider le jeton est généré une I:

  1. scission jeton entrant en K + H
  2. calculer MD5 (K + S), assurer égale à H

Il me semble qu'il devrait être impossible pour quiconque de générer de manière fiable H, K donné sans S Cette solution est-elle trop simpliste?

+0

comment divisez-vous le jeton en K + H? Comment savez-vous ce qu'est K? – hasen

+0

il ajoute MD5 à la fin de la chaîne, MD5 a une longueur fixe de 32 caractères –

Répondre

3

La solution que vous avez présentée est sur la bonne voie. Vous effectuez essentiellement challenge-response authentication avec vous-même. Chaque jeton peut être constitué d'une chaîne de défi non secrète C et HMAC (C, K) où K est la clé secrète de votre serveur.

Pour vérifier un jeton, il suffit de recalculer le HMAC avec la valeur fournie de C et de voir s'il correspond à la valeur HMAC fournie. De plus, comme Vinko l'a mentionné, vous ne devriez pas utiliser MD5; SHA-256 est un bon choix.

1

Ce n'est pas trop simpliste, c'est certainement un moyen valable de mettre en œuvre une signature numérique simple. Bien sûr, vous ne pouvez prouver à personne que d'autre que vous avez généré la signature sans révéler votre clé secrète S, mais à cette fin, vous souhaitez utiliser un protocole plus sophistiqué comme PKI.

1

Juste pour pinailler un peu, vous prouveriez seulement que quiconque ayant accès à S aurait pu générer le jeton. Un autre petit détail: utilisez un meilleur hachage, comme SHA256. Parce que si Mallory est capable de générer une collision, elle n'a même pas besoin de connaître S.

5

Découvrez HMAC.

+0

HMAC a également l'intention de valider le message. Mais bien sûr, c'est une approche plus sûre à presque aucun coût supplémentaire. –

+0

Définitivement une application MAC, puisque c'est vous qui le prouvez. Pas sûr qu'ils s'appliquent ici, mais les attaques de rejeu nécessitent un examen attentif. L'OP est sur la bonne voie, mais utilise un algorithme MAC accepté plutôt que d'essayer d'en réinventer un. – erickson

Questions connexes