2010-05-07 2 views
1

J'ai la situation suivante:Comment créer une clé RSA dans la machine à utiliser dans RSACryptoServiceProvider?

Plusieurs applications dans différentes machines vont partager une information stockée dans une base de données avec cryptographie RSA. Aujourd'hui, je le fais d'une certaine manière, ce n'est pas la façon la plus sûre de le faire. Ces machines partagent une DLL contenant la clé RSA dans un fichier XML.

Comment pourrais-je utiliser les informations de ce XML pour générer des clés de machine dans les différentes machines et après, comment les utiliser dans RSACryptoServiceProvider?

Répondre

2

Ce que je l'ai fait dans le passé: (. Ceci est juste un aperçu, si vous avez besoin d'un code réel, je pourrais fournir, mais il semble que votre question est tout simplement à la recherche d'idées)

Le moût suivant être fait sur chaque machine. (Vous pouvez créer une application simple de la console pour ce faire, ou un script Powershell.)

  • Utilisez ProtectedData.Protect pour chiffrer la clé
  • Stocker la clé cryptée dans le Registre. Vous pouvez définir les autorisations ACL sur la clé de Registre pour plus de sécurité.

Dans votre application, utilisez ProtectedData.Unprotect pour obtenir la clé, puis passer que la RSACryptoServiceProvider pour chiffrer et déchiffrer.

+0

Salut Dave, mon problème est vraiment comment pourrais-je le faire, je ne connais pas un code ou un outil qui peut générer une clé machine à partir d'un xml ou quelque chose. J'ai besoin de garder cette "clé principale" pour générer cette clé de machine à d'autres machines. –

+0

La classe ProtectedData prend soin de cela pour vous. Il utilise DPAPI (intégré dans Windows) pour générer une clé spécifique à l'ordinateur (ou spécifique à l'utilisateur) pour le chiffrement. Cette clé est différente sur chaque machine, ce qui explique pourquoi vous devez exécuter le registre '.Protect'/sur chaque machine. Une fois cela fait, vous pouvez supprimer dans le fichier XML. (Stocker la clé RSA réelle dans KeePass ou quelque chose de sorte que vous puissiez y référer plus tard si vous en avez besoin.) De cette façon, il n'y a absolument aucune clé "texte brut" et votre sécurité est basée sur les standards Windows ACL) –

+0

Désolé, je ne vais pas pouvoir y arriver maintenant. Mais http://blog.shutupandcode.net/?p=538 a la première partie; J'ajouterais seulement les données ProtectedData ci-dessus sur la clé privée XML afin que votre clé privée ne puisse pas être facilement compromise. –

1

Le constructeur de RSACryptoServiceProvider() peut être utilisé pour créer une nouvelle paire de clés. Si vous voulez créer une clé machine ou définir d'autres paramètres de la paire de clés créée, vous devez utiliser le constructeur RSACryptoServiceProvider(CspParameters parameters). Créez donc une nouvelle instance CspParameters, par exemple cspParams, et remplissez cspParams.Flags à CspProviderFlags.UseMachineKeyStore. Ensuite, vous pourrez avec le constructeur RSACryptoServiceProvider(CspParameters parameters) créer une clé machine.

Questions connexes