J'ai la recherche d'un moyen de stocker une clé AES donnée afin qu'elle ne puisse pas être récupérée, mais elle peut toujours être utilisée pour le cryptage et le décryptage (en utilisant C #). Je pense que l'équivalent pour le stockage de clé asymétrique peut être trouvé ici , mais je cherche quelque chose qui peut être utilisé pour un cryptage symétrique. Existe-t-il dans une forme gérée (pré .NET 4)? P>
5 Réponses :
Selon qui vous défendez, vous pouvez utiliser protégéData code> classe . p>
Nous devrons peut-être aller cette voie, mais ma compréhension est que si nous avons stocké notre clé à l'aide de la protégréeData, nous pourrions le récupérer plus tard. Nous ne voulons pas pouvoir le récupérer, soyez capable de l'utiliser.
Vous pouvez seulement le récupérer sous tout en vous connectant comme le même utilisateur.
Oui, je pense que cela fonctionnerait probablement pour nous. Ce n'est pas vraiment idéal car nous installons notre logiciel sur un groupe de machines, ce qui signifie que le blob crypté de notre clé AES que nous devrions stocker serait différent par machine. À l'heure actuelle, nous nous appuyons vers quelque chose comme ceci: CodeRider .com / ... avec utilise le cryptage de clé publique / privé et le magasin de certificats de fenêtre pour protéger la clé réelle.
@slaks a raison, si c'est dans votre mémoire, on peut accéder. Vous pouvez le rendre plus difficile, mais cela va toujours être possible. P>
C'est pourquoi les gens qui sont sérieux déchargent la crypto. p>
Une option est un carte à puce . Cela vous permet de déplacer des données sur la carte et de récupérer des résultats, mais n'autorise pas l'accès au matériau de clé. Ce n'est pas dans votre espace mémoire PCS afin qu'il ne puisse pas être fui. P>
Ross Anderson a un bon papier, Programmation de l'ordinateur de Satan A> à propos de ce genre de chose. Du résumé: p>
Le problème est la présence d'un adversaire hostile,
Qui peut modifier les messages à volonté. En effet, notre
tâche est de programmer un ordinateur qui donne des réponses
qui sont subtilement et malicieusement
mal au moment le plus gênant possible. p>
blockQuote>
Même si vous n'êtes pas préoccupé par la mémoire physique et que le disque dur et la source, vous devez toujours me méfier de la mémoire virtuelle. Si vous n'êtes pas prudent (ou à l'aide d'un service soigneusement écrit), vous pouvez obtenir des clés en plainte dans votre fichier de swap. Voici un autre lien qui discute de la question. Pas que vous voulez le faire, mais cela rend le problème apparent: chiffrer la mémoire virtuelle . Je pense qu'il y a des appels de système à cet effet pour marquer la mémoire comme indésirable mais je ne trouve pas de lien. P>
Nous ne sommes pas assez paranoïaques pour vous inquiéter de quelqu'un avec accès à la mémoire, juste sur le disque dur du serveur (y compris l'accès en lecture à notre code source).
Ajout d'un peu de disque dur et de mémoire virtuelle
Même pour les données asymétriques, si la clé est stockée dans l'ordinateur et est utilisée ultérieurement, elle est extraite et déchiffrée avant utilisation. Et à ce stade, un pirate informatique peut récupérer (en capturant la mémoire de l'ordinateur et en l'étudiant). Ce n'est pas trivial, mais toujours possible. p>
En général, pour répondre à votre problème Cryptotokens USB et CryptoCards sont proposés. Ces périphériques matériels ont leur propre mémoire pour stocker des clés symétriques et asymétriques, et ils ont un processeur pour effectuer des opérations cryptographiques à l'aide de ces clés. La clé ne laisse jamais l'appareil et il est pratiquement impossible de l'extraire de l'appareil avec force (il existe des attaques matérielles telles que la mémoire de balayage avec microscope, mais elles sont bien compliquées qu'une attaque logicielle sur ordinateur). p>
Donc, si votre clé est vraiment précieuse, utilisez USB CryptoToken. Le prix de l'appareil est très modéré - environ 70 $ à 100 $ par unité et plusieurs fournisseurs proposent de tels dispositifs. p>
Continuer sur la tendance de déchargement de la crypto, si vous connaissez le matériel de tous vos cluster, vous pouvez avoir la clé dans le TPM Si la carte mère en possède une autre, il s'agit simplement d'une autre option des solutions USB ou de cartes intelligentes. P>
Je n'ai pas accès à USB ou à une carte intelligente pour ces serveurs. Certaines de nos boîtes fonctionnent toujours Windows 2003, ce n'est donc pas vraiment une option pour moi. Y a-t-il des bibliothèques standard .NET 3.5 pour TPM? Peut-être que ce sera utile pour quelqu'un d'autre.
windows dpapi ( Win32 Documentation ) et son enveloppe .NET ( ProtectedData Class ) ne stocke pas de données . Windows DPAPI renvoie plutôt une valeur cysphère cryptographique que vous pouvez stocker n'importe où que vous préférez, y compris sur plusieurs serveurs. P>
sur mon lieu de travail, nous utilisons DPAPI pour générer un chiffre pour une clé AES que nous stockons ensuite dans le registre. P>
Le seul but de Windows DPAPI est de chiffrer des données telles que seul un compte utilisateur ou une machine donnée peut le déchiffrer, sans avoir besoin de stocker un mot de passe. P>
La classe de protectedata .NET est dans la structure .NET depuis 2,0. P>
Je collerais avec Windows DPAPI sur un produit tiers car il est mature, stable, gratuit, facile à utiliser et entièrement pris en charge dans .NET. P>
Juste pour être sûr que je comprends ... d'utiliser ProtectedData sur plusieurs machines, il faudrait être un compte d'utilisateur partagé sur les deux machines, qui devraient être fournis par un contrôleur de domaine, non?
Vous pouvez utiliser DPAPI pour chiffrer la clé indépendamment sur 2 machines distinctes, exécutant sous 2 comptes d'utilisateurs différents si vous le souhaitez, c'est juste que les 2 valeurs de chiffrement ne seront pas interchangeables, c'est-à-dire. devrait être déchiffré sous le même compte (ou machine si vous utilisez DPAPI basé sur la machine) qui a fait le cryptage. Si vous souhaitez avoir 1 cyber qui peut être déchiffré sur plusieurs machines, alors oui, je dirais que vous auriez besoin d'un compte partagé et d'un contrôleur de domaine.
Merci pour la clarification.
Si vous pouvez crypter avec elle, vous pouvez le récupérer.
@Slaks: Sauf si le système d'exploitation est ce qui fait le cryptage et stocke la clé quelque part "sans danger". Comme, disons, le service "stockage protégé" pourrait faire.
@bouffe. C'est ce que je pense. Microsoft fournit ce type de fonctionnalité avec des certificats (ils peuvent stocker et utiliser votre clé privée de manière sécurisée), mais peut-être pas pour ce que je recherche.