Question Comment puis-je intégrer en toute sécurité une chaîne statique (clé) dans C #?


Je cherche un moyen de stocker en toute sécurité 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 que quelqu'un avec un programme de réflecteur pourrait facilement voir cela. Existe-t-il un meilleur moyen d’emballer cette clé dans mon application? Une ressource serait-elle plus sécurisée?

string key = "DSVvjankjnersnkaecjnDFSD44VDS23423423rcsedzcadERVSDRFWESDVTsdt";

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

Merci d'avance.


48
2018-03-01 07:04


origine


Réponses:


Jettes un coup d'oeil à Sauvegardez les chaînes de connexion à la base de données et autres paramètres sensibles dans votre code, c'est une bonne lecture. Votre question se trouve sous 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 de brouiller l'assembly, essayez de ne pas stocker les octets de clé réels dans le code source. Au lieu de cela, implémentez la logique de génération de clés à l'aide de caractéristiques persistantes, telles que l'algorithme de chiffrement, la taille de la clé, la phrase de passe, le vecteur d'initialisation et le sel (voir un exemple à Crypter et déchiffrer 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 clés et les caractéristiques clés, la clé résultante est garantie identique. Il peut également être utile de ne pas utiliser de chaînes statiques comme caractéristiques de génération de clés, mais plutôt de les créer à 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 listes de contrôle d'accès appropriées. Et n'utilisez cette option qu'en dernier recours, lorsqu'aucune autre technique de protection des données ne fonctionne et que votre seule alternative est de laisser les données sensibles non chiffrées.


21
2018-03-01 08:02



J'ai lu toutes ces réponses et je ne pense pas que vous puissiez l'intégrer de manière sécurisée, quel que soit l'endroit où vous la mettez ou comment vous la masquez. 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'expédier la clé à l'intérieur de xap avec un degré de protection raisonnable, alors la réponse de @ maka vous donnera le meilleur résultat: masquez-la du mieux que vous pouvez, mais ne pensez pas que cela vous sécurisera. Faites-le pour vos applications bancaires mobiles!

Sinon, si vous avez vraiment besoin de sécurité, n'utilisez pas uniquement l'application - utilisez également un serveur Web. Par exemple, si vous utilisiez une application Facebook et que vous deviez en quelque sorte protéger votre clé secrète Facebook, vous devez rediriger l'utilisateur de votre application vers une page Web sur votre serveur pour l'authentification. Cette page Web devrait alors guider l'utilisateur tout au long du processus d'obtention d'un jeton d'accès - et il suffirait que ce jeton d'accès (avec l'ID publique) revienne à votre application. Et pour les services Web qui requièrent la connaissance de la clé secrète pour accompagner chaque appel, je crains que chaque appel ne passe par votre serveur.


10
2018-03-01 10:07



Vous pouvez crypter Api clé avec ProtectedData puis déchiffrez-le en cours d'exécution. C'est un bon tutoriel sur la manière de crypter les données dans Windows Phone: Cryptage dans Mango


5
2018-03-01 08:16



Peut-être que vous pouvez le chiffrer avant la main et l'enregistrer dans app.config. Et en le lisant, déchiffrez-le en utilisant le même algorithme.


0
2018-03-01 08:17



Vous pourriez utiliser DotFuscator pour désactiver la possibilité d'utiliser un 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 Web / Winform):

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


0
2018-03-01 08:23



Ce n'est peut-être pas une réponse, mais c'est une suggestion:

Stocker la clé encrée dans une base de données. Et stockez le "mot de passe de base de données" chiffré dans app.config.

  1. Utilisez deux algorithmes de chiffrement / déchiffrement de chaîne appropriés, disons l'algorithme x et y.
  2. Placez le mot de passe db chiffré dans app.config avant de le publier.
  3. Decypt app.config password (algo y) pour connecter la base de données pour prendre la nouvelle chaîne encrée (la vraie).
  4. Fermer la connexion et déchiffrer la nouvelle chaîne avec l'algorithme x si réflecteur / etc. ne pas courrir.
  5. Utilise le.
  6. Dispose l'objet qui contient la chaîne.

0
2018-03-01 08:30