0
votes

C # Comment stocker de manière sécurisée un mot de passe immuable?

Je regarde tout cela toute la matinée et je vais au point que je ne peux pas voir le bois pour les arbres, alors regardant la communauté pour la suggestion et la pensée claire.

J'écris une application qui lira les données d'un fichier zip protégé par mot de passe fourni par une tierce partie. Ce format ne changera pas (les suggestions pour le faire ne peuvent pas être diverties) et le mot de passe non plus.

Comme le mot de passe sur ce zip sera toujours le même que mon problème est où et comment stocker ce mot de passe sécurisé? Je ne veux pas le stocker comme une chaîne dans le code pour des raisons évidentes. Et comme j'ai besoin du mot de passe réel, stocker le hachage de ce n'est pas un itinéraire (je ne pense pas).

Je pourrais être fini de penser cela et il y a une option simple mais comme je dis que j'ai perdu ma tresse dans le bois :)

EDIT: Donner plus d'antécédents aux contraintes de ce problème:

  • Les données que je dois lire sont sous la forme d'une fermeture à glissière cryptée des dossiers. Le mot de passe pour lequel est statique (par exemple reste la même chose sur tous Fichiers)

  • De nombreux fichiers peuvent passer en une journée et des intervalles non réguliers

  • L'utilisateur de l'application ne sait pas et n'est pas autorisé à connaître le Mot de passe du fichier ZIP (en tapant n'est pas une option)

  • L'application doit fonctionner comme service Windows et traiter ces
    fichiers automatiquement tels qu'ils sont fournis et sans aucun utilisateur
    Intervention.

  • Ces fichiers et la façon dont ils sont livrés et formatés sont par un 3ème fête et je n'ai aucun contrôle pour changer ces paramètres

    Ce sont les contraintes que j'ai été données pour le projet et je dois y fournir une solution. Je sais déjà stocker comme une chaîne dans le code est fausse. Répéter cela comme votre réponse n'est pas une réponse!

    Merci à la communauté pour votre aide :)


3 commentaires

Est-ce que cela répond à votre question? stocker de manière sécurisée en mémoire (cryptage basé sur le mot de passe)


La partie importante qui manque ici est qui ou ce que vous essayez de sécuriser ce mot de passe de . En d'autres termes, qui ou quoi d'accès à cet ordinateur n'auraient-ils pas besoin d'avoir accès au mot de passe? Par exemple, l'utilisateur de l'application a-t-il accès au mot de passe? S'ils l'ont, je suggérerais qu'ils ne l'apportent simplement pas une fois et que vous utilisez quelque chose comme DPAPI pour la stocker de manière sécurisée sur leur ordinateur.


Merci pour votre contribution. Pour répondre à votre question de «de», l'application n'est pas pour le monde plus large (par exemple, la personne ne peut pas télécharger et utiliser). Il est à utiliser par une sélection limitée de notre base d'utilisateurs. La plupart des utilisateurs ne se connaîtraient pas ou ne se souciaient pas ou ne soupçonnaient pas si je faisais simplement stocker le mot de passe dans le code. Mais il y a 1 ou 2 utilisateurs ayant un «intérêt» dans le développement de logiciels et vous feront plaisir à utiliser des connaissances de base pour souligner qu'ils avaient lu le mot de passe.


3 Réponses :


1
votes

Nulle part. Il n'y a aucun moyen de stocker un mot de passe de manière sûre et l'utiliser toujours. Et oui, tout cela est toutes des casquettes. Vous pouvez essayer d'atténuer les dégâts, mais à la fin si votre application peut décoder ce que vous utilisez pour stocker le mot de passe, alors peut-on un pirate informatique.

Le code est un mauvais endroit - pas pour la sécurité, mais parce que c'est vraiment immuable. Mais sinon - aucun moyen. Simple. Les gens ont essayé de cacher des choses depuis des ordinateurs où inventés. Jamais travaillé.


4 commentaires

Vous avez peut-être manqué le point où j'ai dit "Je ne veux pas la stocker comme une chaîne dans le code des raisons évidentes". Si vous l'avez fait, vous auriez peut-être sauvé toutes ces casques pour un autre jour.


Même le crypté aussi mauvais que cela n'a que si c'est un mot de passe "stupide", auquel cas vous pouvez bien stocker le texte clair.


Ce qui est assez juste TomTom, je reçois ce n'est pas la meilleure pratique. Mais j'ai reçu des contraintes à coller à (mis à jour le OP) et je sais que ce n'est pas génial, si je ne savais pas que j'aurais labouré à une pensée unique ou demandant. Mais je suis ici et je demande. Je sais ce que je veux faire mais je suis attaché. Si vous aviez reçu cela comme un projet avec ces contraintes, quelle serait votre solution? Merci pour ton aide :)


Depuis le meilleur que vous puissiez gérer, c'est l'obscurcir, je le ferais simplement. Construisez une méthode pour chiffrer / déchiffrer en fonction d'une clé dans votre code source. Mettez la valeur «cryptée» dans Config. Au moins, vous aurez une méthode pour mettre à jour la configuration si vous devez le changer. Tout en fuyant la clé d'une manière triviale.



0
votes

Je suggérerais ici une chose.

Vous ne pouvez pas stocker le mot de passe directement dans votre application.

Vous pouvez toujours en faire une combinaison de quelque chose comme la date de naissance + 4 premiers caractères du prénom + d'autres informations


0 commentaires

0
votes

Il est possible de chiffrer Sections dans le fichier de configuration . L'outil ne fonctionne que avec web.config des fichiers, donc si vous avez un autre type d'application, renommez simplement l'app.config à web.config avant d'exécuter la commande et de passer ensuite à l'app.config après.

Utilisation de la machine à installer essentiellement l'accès Pour les administrateurs de la machine et utiliser l'utilisateur Store restreint l'accès à celui-ci uniquement sur le compte effectué la commande de cryptage.

Pour chiffrer avec la machine de magasin:

à chiffrer: < Pré> xxx

à déchiffrer: xxx

chiffrer avec l'utilisateur Store

Ajouter cette section au fichier de configuration: xxx

à chiffrer: xxx

à déchiffrer: xxx

note Pour l'utilisateur Store

Comme seul l'utilisateur exécutant la commande peut accéder à / déchiffrer les données que l'application aura besoin d'un compte de service dédié et d'exécuter des commandes comme utilisateur runas / profil / utilisateur: TheSname CMD peut être utilisé pour démarrer une invite de commande comme un autre utilisateur


4 commentaires

Le problème avec celui-ci que les deux approches sont inutiles si un pirate informatique reprend la machine et peut-il remplacer le code sous un site Web - il a accès au magasin d'utilisateurs.


@Tomtom mais ensuite nous sommes juste de retour à la réponse originale, "Vous ne pouvez pas le faire en toute sécurité". À un peu de poche, il faut accepter le risque de la méthode utilisée. Étant donné que cela va être utilisé pour déchiffrer des fichiers d'archives cryptés, si le pirate informatique peut prendre le contrôle de la machine et vous avez trouvé un moyen sécurisé de 100% de stocker le mot de passe, un point d'arrêt simple à l'intérieur du logiciel de non-cambrio et que vous êtes de retour à la case unique. .


Et s'il peut prendre le contrôle de la machine, tous les paris sont hors de même. Vous avez perdu à ce moment-là, peu importe ce que vous avez fait pour sécuriser les choses.


Acutalement non. Il existe des mécanismes où le contrôle de la machine ne permet pas de voler le mot de passe - c'est là qu'un TPM est utile. Les clés partent, cela peut déchiffrer, mais les clés ne sortent jamais. Nécessite cependant que le logiciel TPM - ajout de TPM.