2011-01-21 3 views
0

j'ai posé une question concernant la sécurité de montage et quelqu'un m'a dit quelques choses:classe et technologie licence

Vous pouvez invoquez une technologie de licence lorsque la bibliothèque devait être instancié. Ce que j'ai fait dans le passé est d'inclure une clé publique en tant que ressource pour la DLL, puis de rechercher un document xml de licence avec une signature cryptographique signée avec ma clé privée. Tant que je garde une trace proche de ma clé privée, c'est assez difficile à vaincre.

Après avoir lu cela, j'ai quelques questions:

  1. Comment invoquer ma technologie de licence lorsque je développe une bibliothèque de classes?
  2. Comment ajouter une clé publique en tant que ressource à l'assembly?
  3. Comment rechercher un document xml de licence avec une signature cryptographique signée avec ma clé privée et d'où & quand regarder?

Ce sera mieux si quelqu'un m'aider s'il vous plaît à comprendre les choses en détail pour mettre en œuvre la sécurité ci-dessus. Merci beaucoup.

+0

Pour quelqu'un d'autre qui est confus, il cite [cette réponse précédente à sa question] (http://stackoverflow.com/questions/4762259/class-library-and-security-in-dotnet-technology/4762319# 4762319)[email protected] - votre question serait plus claire si vous éditez votre question en sélectionnant le deuxième paragraphe et en cliquant sur le bouton "** ** blockquote. – Justin

Répondre

3

La "technologie de licence" est essentiellement la méthode dont il traite plus en détail dans le reste du paragraphe. Une «licence» n'est rien de plus qu'une preuve d'autorisation pour un acteur (soit l'utilisateur lui-même, soit un autre code exécuté en son nom) pour utiliser votre code. Il ne doit pas être une norme universelle comme un certificat SSL. Il a juste besoin d'être connu de vous, et difficile à imiter par les autres. En ce qui concerne les ressources, c'est juste quelque chose d'inhérent à .Net. Dans VS Solution Explorer, allez dans le projet auquel vous voulez accéder depuis votre DLL restreinte. Le premier élément de son contenu développé sera un dossier Propriétés; En dessous, vous devriez trouver un élément Resources.resx. Ouvrez-le et vous obtiendrez une interface graphique qui vous permettra de référencer des chaînes, des images, des fichiers texte, etc. qui peuvent être compilés ou conservés à côté de la DLL lors de la construction de la solution. C'est ici que vous devez spécifier une chaîne chiffrée et connue. La chaîne la plus sécurisée à chiffrer serait probablement le nom fort ou le GUID de l'assembly, car vous pourriez alors comparer ce que vous décryptez avec les informations d'assemblage de l'appelant, empêchant quelqu'un d'extraire la chaîne chiffrée d'une de vos bibliothèques et de l'utiliser dans le leur. Dans votre DLL restreinte, vous pouvez utiliser la même fonctionnalité pour stocker la clé de déchiffrement que vous utiliserez pour décoder la chaîne fournie par les DLL appelantes.

De nombreuses ressources sont disponibles pour les didacticiels sur l'utilisation du cryptage RSA (la méthode de cryptage déduite ici) dans .NET. Il y a un RsaCryptoServiceProvider qui va effectuer le cryptage/décryptage, générer des clés, etc; Tout ce que vous avez à faire est de le déposer. Quelque chose qui peut être déroutant est que dans les algorithmes à clé asymétrique comme RSA, les données sont généralement cryptées en utilisant la clé publique et décryptées en utilisant la clé "privée". En effet, les clés asymétriques sont généralement utilisées sur les canaux de communication publics et vous devez donner à la partie distante une clé pour écrire des messages que vous décoderez ensuite. Cependant, dans ce cas, votre DLL restreinte doit déchiffrer les données dont elle a besoin pour la comparaison, et nécessite donc une "clé privée" fixe. Cela rend la clé de décryptage "publique" à quiconque avec .NET Reflector ou un désassembleur similaire. Toutefois, si vous, le développeur, êtes le seul à pouvoir fournir des chaînes cryptées aux DLL autorisées à accéder à votre DLL, vous pouvez garder la clé de cryptage secrète.