Question

Je voudrais être en mesure de passer un SecureString (une phrase de passe mis en cache) à un enfant de processus en C# (.Net 3.5), mais je ne sais pas quel est le plus sûr moyen est de le faire.Si je devais convertir le SecureString retour régulier de la chaîne et de le passer comme argument de ligne de commande, par exemple, alors je pense la valeur peut être sujette à la pagination de disque--ce qui rendrait le texte en clair tactile du système de fichiers et ruiner le point de l'utilisation de SecureString.

Peut le IntPtr pour la SecureString être passé à la place?Pourrais-je utiliser un canal nommé, sans augmenter le risque?

Était-ce utile?

La solution

En général, vous devez définir votre modèle de menace avant de s'inquiéter des attaques exotiques.Dans ce cas:craignez-vous que quelqu'un arrête l'ordinateur et effectue une analyse médico-légale du disque dur?La mémoire de l'Application peut également être permutées, de sorte que le simple fait que un a en mémoire, en fait potentiellement possible pour qu'il finisse dans le fichier d'échange.Qu'en hibernation?Au cours de l'hibernation de l'intégralité du contenu de la mémoire est écrit sur le disque dur (y compris les SecureString - et sans doute la clé de chiffrement!).Que faire si l'attaquant a accès au système alors qu'elle fonctionne et pouvez effectuer une recherche dans la mémoire des applications?

En général, côté client, la sécurité est très délicate et, sauf si vous avez du matériel dédié (comme une puce TPM), il est presque impossible d'obtenir le droit.Deux solutions seraient:

  • Si vous avez seulement besoin de tester l'égalité entre deux chaînes de caractères (c'est à dire:est cette chaîne le même que celui que j'avais précédemment), le magasin seulement (salé) valeur de hachage d'elle.
  • Permettre à l'utilisateur de re-saisir les informations lorsque cela est nécessaire un deuxième temps (pas très pratique, mais la sécurité et la commodité sont opposés les uns aux autres)

Autres conseils

À moins que votre enfant comprend aussi comment travailler avec SecureString je ne pense pas qu'il y est un moyen de passer directement.Par exemple, le Processus.Méthode Start() a deux surcharges qui prennent un SecureString de sorte que le risque de la chaîne de valeur étant reniflé est réduite au minimum (c'est toujours possible, car quelque part le long de la façon dont la valeur réelle doit être récupérées/unmarshalled).

Je pense que beaucoup de la façon de le faire dépend de ce que le processus enfant est et comment il est en cours de démarrage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top