50 votes

Comment intégrer de manière sécurisée une chaîne statique (clé) en C# ?

Je cherche un moyen de stocker de manière sécurisée une clé API dans une application WP7. La clé est une chaîne et est actuellement codée en dur dans le code (voir ci-dessous). Je sais qu'une personne disposant d'un programme de réflexion pourrait facilement la visualiser. Existe-t-il un meilleur moyen d'intégrer cette clé dans mon application ? Une ressource serait-elle plus sûre ?

string key = "DSVvjankjnersnkaecjnDFSD44VDS23423423rcsedzcadERVSDRFWESDVTsdt";

(Ce n'est pas vraiment la clé ;) )

Merci d'avance.

22voto

maka Points 436

Jetez un coup d'œil à Protéger les chaînes de connexion aux bases de données et autres paramètres sensibles dans votre code c'est une bonne lecture. Votre question se trouve dans la section "Masquage des clés dans le code source de l'application".

Extrait :

Si vous définissez la clé dans l'application, en plus d'obscurcir l'assemblage, essayez de ne pas stocker les octets de la clé réelle dans le code source. Au lieu de cela, mettez en œuvre une logique de génération de clés en utilisant des caractéristiques persistantes, telles que l'algorithme de cryptage, la taille de la clé, la phrase de passe, le vecteur d'initialisation et le sel (voir un exemple à Cryptage et décryptage des données à l'aide d'une clé symétrique (Rijndael) ). Cela introduira une couche supplémentaire d'indirection, de sorte que la clé ne sera pas accessible en vidant simplement les symboles du binaire de l'application. Tant que vous ne modifiez pas la logique de génération de la clé et ses caractéristiques, la clé résultante est garantie comme étant la même. Il peut également être judicieux de ne pas utiliser de chaînes statiques comme caractéristiques de génération de clé, mais plutôt de les construire à la volée. Une autre suggestion serait de traiter l'assemblage de la même manière que le magasin de données devrait être traité, c'est-à-dire en appliquant les ACL appropriées. Et n'utilisez cette option qu'en dernier recours, lorsqu'aucune des autres techniques de protection des données ne fonctionne et que votre seule alternative est de laisser les données sensibles non cryptées.

11voto

Stuart Points 45896

J'ai lu toutes ces réponses, et je ne pense pas qu'il y ait un moyen d'intégrer ceci de manière sécurisée - peu importe où vous le mettez, ou comment vous l'obscurcissez. Tant qu'il est dans votre XAP et décodé dans l'application, il sera toujours disponible pour le piratage.

Si vous avez besoin d'envoyer la clé à l'intérieur du xap avec un degré raisonnable de protection, alors je pense que la réponse de @maka est votre meilleure option - obscurcissez-la du mieux que vous pouvez - mais ne pensez pas que cela vous rendra plus sûr - c'est-à-dire ne faites pas cela pour vos applications bancaires mobiles !

Si vous avez vraiment besoin de sécurité, n'opérez pas uniquement dans l'application, mais utilisez également un serveur web. Par exemple, si vous créez une application Facebook et que vous devez protéger votre clé secrète Facebook, vous devrez rediriger l'utilisateur de votre application vers une page Web sur votre serveur pour l'authentification. Cette page Web devrait ensuite guider l'utilisateur dans le processus d'obtention d'un jeton d'accès, puis ce jeton d'accès (ainsi que l'identifiant public de l'application) devrait être renvoyé à votre application. Et pour les services web qui nécessitent la connaissance de la clé secrète pour accompagner chaque appel, j'ai bien peur que chaque appel doive passer par votre serveur.

5voto

Ku6opr Points 7593

Vous pouvez crypter Api avec ProtectedData et ensuite le décrypter en cours d'exécution. Il s'agit d'un bon tutoriel sur le cryptage des données dans Windows Phone : Le cryptage dans Mango

0voto

Dipesh Bhatt Points 559

Vous pouvez peut-être le crypter à l'avance et le sauvegarder dans app.config. Et en le lisant, le décrypter en utilisant le même algorithme.

0voto

Peter R Points 90

Vous pourriez utiliser DotFuscator pour désactiver la possibilité d'utiliser le réflecteur. Mais, cela ne vous permettra pas de changer la clé sans recompiler.

Dans le passé, j'ai utilisé la méthode suivante dans d'autres logiciels (basés sur le web ou l'informatique) :

http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X