2012-09-06 2 views
0

Si RSACryptoServiceProvider ne peut pas chiffrer des données plus grandes que KeySize, comment RsaProtectedConfigurationProvider est implémenté dans le framework .Net?Implémentation RsaProtectedConfigurationProvider vs RSACryptoServiceProvider C#

Je travaille sur un utilitaire qui va être utilisé pour crypter/décrypter certaines informations sensibles. Mes deux options de fournisseur de cryptage sont DPAPI et RSA, alors que DPAPI ne convient pas à un environnement de type ferme Web, RSA est adapté en raison des options Export/Import avec un KeyContainer. C'est une application autonome fonctionnant sur un poste de travail. Comme je suis conscient que les algorithmes asymétriques ne sont pas conçus pour des données volumineuses, j'ai juste essayé de crypter une chaîne de longueur supérieure à 400K en utilisant le code ci-dessous et cela fonctionne bien.

 if (!section.SectionInformation.IsProtected) 
     { 
      section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider"); 
      section.SectionInformation.ForceSave = true; 
      config.Save(ConfigurationSaveMode.Full); 
     } 

Certainement cela signifie que plus de choses se passent dans les coulisses en dehors des principales options d'importation à l'exportation dans aspnet_regiis.exe.

Ma compréhension:

  1. nous chiffrons myapp.exe.config avec RsaProtectedConfigurationProvider, fournir une clé nom du conteneur myrsakeycontainer, et exporter les clés publiques et privées dans un fichier xml de myrsakeyfile .xml.

  2. Si nous voulons myapp.exe.config à décryptées dans un autre ordinateur, nous importons qu'ils KeyPair de myrsakeyfile.xml avec un conteneur nommé myrsakeycontainer.

cela fonctionne bien. Je peux réaliser la même chose dans mon projet via RSACryptoServiceProvider. Mais je ne peux pas gérer les données plus grandes que la taille de la clé que new RSACryptoServiceProvider(cspParameters) généré pour moi.

  • Je veux être en mesure de déchiffrer les données énormes (au cas où) juste la façon dont RsaProtectedConfigurationProvider fait.
  • Oui je pourrais utiliser un RijndaelManaged (mon préféré) pour le chiffrement réel et pour le transport clé symétrique (import/export) Je pourrait utiliser le RSACryptoServiceProvider. Cela me laisse dans une situation que si je veux exporter/importer la clé symétrique, je devrais d'abord le chiffrer avec la clé publique ou RSA, l'importer vers une autre machine , décrypter avec la clé privée de RSA. Lequel est l'exportation de la paire de clés RSA avec la clé symétrique cryptée.
  • Mais, quand j'exporter paire de clés RSA utilisée par RsaProtectedConfigurationProvider via aspnet_regiis.exe, je crois qu'elle exporte uniquement la clé publique/privée paire dans un fichier xml et aucune autre information (comme les informations clé symétrique) .

  • Alors, avec juste la paire de clés RSA, comment RsaProtectedConfigurationProvider parviennent à derypt (énorme - plus 400K dans les caractères mon cas) des informations cryptées sur un autre ordinateur ? Dans les cas où il utilise un algorithme symétrique (peut-être ?!) pour crypter des informations, comment cette clé symétrique est-elle exportée/importée vers un autre ordinateur pour décryptage? Cette partie clé symétrique du conteneur de clé RSA est-elle exportée via aspnet_regiis.exe ou est-ce que la clé symétrique est artificielle et basée sur un algorithme?

  • Je pourrais sortir avec une Rijndael, dont la clé est encrypeted avec une paire de clés RSA et je peux exporter/importer à la fois la paire de clés RSA et la clé symétrique Rijndael à un autre ordinateur. (ce que j'ai fait dans le passé)

    Je suis intéressé de savoir ce qui est utilisé à l'intérieur RsaProtectedConfigurationProvider.

Toutes les théories? concepts? liens? recommandations? .. s'il vous plaît

Question similaires - What algorithms are used by RSAProtectedConfigurationProvider in web.config encyrption?

Répondre

1

La clé symétrique cryptée est stockée dans le fichier XML à côté les informations de configuration chiffrée que la clé symétrique est cryptée.

Si vous utilisez réflecteur pour regarder le code, ce qu'il fait est de charger le noeud XML et utiliser la clé privée asymétrique RSA pour déchiffrer une clé symétrique stocké dans le noeud XML lui-même.

La fonction qui ne fait cette magie est ici:

SymmetricAlgorithm virtuel public GetDecryptionKey (EncryptedData encryptedData, chaîne symmetricAlgorithmUri);

Déclarant Type: System.Security.Cryptography.Xml.EncryptedXml Assemblée: System.Security, Version = 2.0.0.0

Voir le code autour

this.m_document.SelectNodes("//enc:EncryptedKey", nsmgr); 

Ce billet de blog a une belle writeup sur la façon dont vous associez des algorithmes asymétriques et symétriques dans la pratique du monde réel: http://pages.infinit.net/ctech/20031101-0151.html

+0

Juste la réponse que je recherchais. Clou dans la tête! Et ce lien est bon aussi. BTW, je travaillais sur un projet de mine pour faire le chiffrement de fichier de configuration pour les paquets SSIS et comme il était assez lié au temps, j'ai fini par dériver la clé symétrique des propriétés clés asymétriques (comme le module, exponent ..). Le projet est en ligne sur https://ssiscipherboy.codeplex.com. _public virtual SymmetricAlgorithm GetDecryptionKey (EncryptedData encryptedData, chaîne symmetricAlgorithmUri); _ tout est logique maintenant. – gmaran23