2015-03-10 1 views
0

Je considère la construction d'un système API qui utilise HMAC. Le serveur et le client auront un secret partagé, le client signera les demandes, le serveur validera et procédera si tout va bien. Le problème avec ce type de système est que le secret doit être stocké de manière à pouvoir être récupéré, comme une base de données. Si quelqu'un devait voler le secret, ils ont la clé nécessaire pour faire tout ce que l'utilisateur est autorisé à faire. Je pensais qu'il devait y avoir une alternative plus sûre. Y a-t-il des failles dans l'utilisation de RSA?Secret partagé HMAC sécurisé par cryptage de hachage d'autorisation avec RSA

  1. Le client a la clé "public" au lieu d'un secret partagé. (La clé publique doit toujours être gardée secrète pour mon cas d'utilisation.)
  2. Le client va hacher le message avec SHA-1 ou tout ce qui est normal.
  3. Au lieu d'ajouter directement le hachage au message, le hachage sera crypté via sa clé publique, puis envoyé avec le message.
  4. Le serveur a la clé "privée" (pour déchiffrer les messages) mais n'a aucune connaissance de la clé "publique". (Ceci est la partie qui en fait plus sûre que l'approche normale. Si la base de données de vol, pas de clés sont volées qui peuvent usurper l'identité d'un utilisateur.)
  5. Server déchiffrer le hachage et valider le message comme normal.

Y at-il quelque chose de mal avec cette approche? Y a-t-il des implémentations connues de ceci ou quelque chose de similaire?

+2

Cette question est un peu hors-sujet pour Stack Overflow. Avez-vous envisagé de l'afficher sur http://security.stackexchange.com ou http://crypto.stackexchange.com? (Évidemment, vérifiez auprès de leurs centres d'aide pour voir quel est le meilleur ajustement, voire pas du tout). Vous devrez fournir plus d'informations sur vos objectifs/menaces de sécurité afin que les autres puissent analyser si la solution que vous proposez répond à ces objectifs.Il est probable que ce problème a été résolu correctement avant, donc je doute que vous deviez inventer votre propre schéma. –

+2

Je vote pour clore cette question hors-sujet car elle concerne la sécurité/cryptographie et ne contient pas de question de programmation. –

+0

@Duncan Oui, mon but n'est pas d'inventer mon propre schéma, c'est pourquoi quand j'y ai pensé, je devrais voir ce qui ne va pas, ou s'il y a une implémentation existante. J'ai envisagé de l'afficher sur http://security.stackexchange.com, mais j'ai décidé que Stack Overflow était aussi bon car il y a beaucoup d'autres questions similaires ici. Je pense que c'est très sur le sujet pour les deux. – Brad

Répondre

1

Cela dépend du système de chiffrement asymétrique vous avez choisi:

(CE) Diffie-Hellman: Il ne fonctionne pas. La clé publique est directement dérivée de la clé privée via le générateur, par ex. [d] G = Q

RSA: Généralement, les personnes choisissent des clés publiques fixes comme 0x010001. Ceci est fait pour des raisons d'efficacité. Si vous prenez un assez grand, totalement aléatoire e et d'en tirer d de celui-ci il n'y a pas possibilité de calculer p et q donné d et NOUe et N. En fait, ils sont à peu près à la même époque et le label privé et public n'a plus beaucoup de sens. Tout cela repose sur une propriété smmyetrical de RSA. Assurez-vous de ne pas entrer dans les problèmes RSA manuels. Et assurez-vous de demander assez de gens intelligents à ce sujet, c'est juste mes pensées à ce sujet.

+0

Bon à savoir sur Diffie-Hellman. Merci! – Brad

+0

0x010001 n'est pas la clé publique mais l'un des [souvent utilisé] (http://security.stackexchange.com/questions/2335/should-rsa-public-exponent-be-only-in-3-5-17- 257-ou-65537-en raison de la sécurité-c) exposants (publics). – eckes

1

Si vous basez votre système de Crypto sur une preuve de la possession d'un secret que vous devez, bien - garder le secret :)

Mais oui, si vous ne avez pas besoin de la vitesse d'une authentification symétrique vous pouvez utiliser une signature asymétrique. En règle générale, il est fait avec un hachage signé, mais vous pouvez également utiliser un hmac signé.

La terminologie est normalement, que vous signez avec une clé secrète et de valider avec la clé publique (même lorsque l'opération de signature ressemble à un cryptage).