2010-10-28 8 views
1

J'ai une API ouverte dans mon application pour laquelle j'aimerais fournir des clés d'accès. Les informations entrantes seront un identifiant utilisateur, un identifiant de ressource et une valeur à mettre à jour. Je voudrais une clé API par ressource.Meilleure façon de créer une clé API cryptographique

De préférence, je voudrais être en mesure de valider l'authenticité d'une requête entrante en utilisant uniquement les données fournies et ne pas vérifier contre toute sorte de base de données (très simple, très rapide!)

Si je md5 pour générer la clé API de l'ID de ressource, ID utilisateur et un sel, il pourrait ressembler à quelque chose comme ça ...

authentic_request = md5(user_id + resource_id + salt) == api_key 

Ma question est vraiment l'un sur la façon dont je devrais être paranoïaque. Est-ce que quelque chose comme ce qui précède avec juste vieux MD5 suffit? Une autre option serait d'utiliser openssl générer la clé contre un pem et peut-être md5 le résultat pour le garder concis, cela semble-t-il trop paranoïaque ou même ajouter une couche de sécurité dans la réalité?

Toutes idées ou même alternatives reçues avec reconnaissance!

Merci

Répondre

3

Ceci est effectivement une mise en œuvre simpliste d'un hash-based message authentication code.

En supposant que vous allez donner ces clés sur la base de la paire (user_id, resource_id) et que vous gardez la valeur que vous appelez salt secrète, et que vous n'attendez pas une tentative sérieuse d'attaque, cela devrait fonctionner. Cependant, les meilleures pratiques exigent que vous utilisiez un algorithme plus sûr que la simple concaténation pour combiner la clé et les données, et un algorithme de résumé plus fort tel que SHA-1; Il existe un algorithme de combinaison HMAC-SHA1 standard qui fonctionnerait bien pour cela.

La troisième valeur est en fait une clé, pas un sel; La possession de cette clé est ce qui permet à la fois la génération et la validation du code d'authentification.

+0

Merci, c'est exactement ce que je cherchais. Savait qu'il doit y avoir une technique connue pour cela juste eu du mal à exprimer les termes de recherche! – matth

0

Cela dépend de ce que vous essayez de protéger. En soi, cela empêchera une mauvaise utilisation occasionnelle de votre API, mais cela n'empêchera pas les attaques par relecture. Si quelqu'un renifle votre trafic, il verra la clé et pourra accéder à la ressource en la réutilisant. L'ajout de SSL à la solution empêcherait ce type d'attaque.

Pendant que vous y êtes, vous pouvez aussi changer MD5 en SHA-256.

+0

Merci, je comprends que la clé ne fournit pas ce niveau de sécurité car elle peut être interceptée et mal utilisée. Juste à la recherche d'un mécanisme d'authentification sécurisé, se penchera sur SSL pour les communications. – matth

Questions connexes