Comment masquer une clé de chiffrement dans une application .NET?
Je suis le développement d'une application intranet (C#) qui utilise des données (local vers le serveur web) que nous aimerions garder privé. Ces données sont cryptées (AES) à l'aide d'un héritage référentiel de données. Nous ne pouvons pas totalement empêcher l'accès physique à la machine.
Clairement, nous n'allons jamais à la perfection de la sécurité ici. Cependant, nous voulons le rendre aussi dur que possible pour quiconque d'obtenir un accès non autorisé aux données.
La question est la meilleure façon de stocker la clé. Le chiffrement basé sur une machine spécifique ID est une option, mais que l'information soit facilement disponible pour toute personne qui exécute un outil de diagnostic sur la machine.
L'encodage de l'application est une option (c'est un hors application). Cependant, .NET assemblées sont assez faciles à décompiler. Donc, serait-il préférable de dissimuler, l'utilisation d'un chiffrement lanceur, le compiler?
Ou est-il une option que je suis absent?
Soyons clairs, je sais que c'est à peu près une cause perdue, si quelqu'un est déterminé, mais nous sommes à la recherche pour le rendre aussi dur que possible dans les limites.
source d'informationauteur user74824
Vous devez vous connecter pour publier un commentaire.
De chiffrement est construit dans le .NET de configuration du système. Vous pouvez crypter des morceaux de votre application web.fichier de configuration, y compris l'endroit où vous stockez votre clé privée.
http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx
Parlant de la dissimulation de la terminologie, ce que vous êtes après est appelé constante cacherc'est à dire un moyen par lequel vous pouvez transformer une constante dans, disons, un certain nombre de fonctions et les calculs qui sont exécutées lors de l'exécution de re-matérialiser dit constant.
Cette tombe encore dans le domaine de l'obfuscation, cependant, et est sensible à l'un ou l'autre code d'extraction, où l'attaquant simplement les cartes sur le code pertinent à cette constante, et s'exécute dans une application distincte pour récupérer la valeur; de dumping ou de l'application de la mémoire au bon moment afin de l'analyser pour la valeur souhaitée.
Il est un autre, légèrement plus avancé de la méthode de cacher les clés cryptographiques, en particulier, appelé Blanc-boîte de cryptographiequi emploie clé algorithmes de chiffrement à travers essentiellement la génération d'une fonction de chiffrement à partir d'une clé donnée, le bicarbonate de leur ensemble. Comme son nom l'indique, cette méthode a été conçue pour être résilient, même dans une boîte blanche scénario d'attaque (l'attaquant a accès à la bytecode et est en mesure d'inspecter et manipuler le fichier exécutable au moment de l'exécution).
Ce sont tous les deux assez des méthodes avancées de la réalisation de la sécurité par l'obscurité, et il pourrait être intéressant d'envisager d'autres modèles qui ne sont pas de vous forcer à le faire, en premier lieu.
Si quelqu'un pouvez simplement attacher un débogueur à votre programme, il n'y a absolument rien que vous pouvez faire. Ils n'auront pas à trouver ta config, démonter votre application, etc. Tout ce qu'ils ont à faire est d'exécuter l'application - regarder l'utilisation de la touche - bingo.
L'Obfuscation est d'aucune aide dans ces conditions.
La meilleure défense, c'est d'utiliser du matériel pour protéger la clé qui permettra de faire de la crypto, mais pas donner la clé elle-même (et est parfois renforcé contre les attaques telles que sonder le fils, l'exposition de la mémoire à des températures basses/rayonnement/autres nouveaux trucs). IBM faire certaines choses (google, IBM-4764), mais il n'est pas bon marché.