11
votes

Stocker sécurisé un mot de passe dans le code de programme?

Mon application utilise la classe Rijndaélanie pour chiffrer des données. Dans le cadre de ce cryptage, j'utilise un objet de séchage chargé avec un mot de passe qui obtiennent est converti en une matrice d'octets et chargée dans la clé de l'objet Rajindaélanie au moment de l'exécution.

La question que j'ai est le stockage de ce séchage. Un utilisateur saisi de mot de passe peut être entré à l'heure d'exécution et peut être "sécurisé" chargé dans un objet de séchage, mais si aucun mot de passe saisi de l'utilisateur n'est donné, j'ai besoin de défaut à quelque chose.

En fin de compte, le quesiton revient à:

Si je dois avoir une matrice de chaîne ou d'octet connue à charger dans un objet de séchage chaque fois que ma demande s'exécute, comment puis-je faire cela? Les données "cryptées" sont finalement déchiffrées par une autre application. Donc, même si aucun mot de passe saisi de l'utilisateur n'est spécifié, j'ai toujours besoin que les données soient cryptées tant que cela passe d'une application à une autre. Cela signifie que je ne peux pas que le mot de passe par défaut soit aléatoire, car l'autre application ne serait pas capable de le déchiffrer correctement.

Une solution possible Je pense consiste à créer une DLL qui ne cendra qu'une seule phrasephrase, puis j'utilise cette phrase secrète et l'exécutant à deux fonctions de hachage / réorganisation différentes au moment de l'exécution avant que je ne le nourrissais finalement dans le sécrétrage objet. Serait-ce assez sécurisé?

Modifier pour plus de clarté *: Les données cryptées sont passées via des fichiers entre machines. Pensez-y en tant que fichier zip qui a toujours un mot de passe, une valeur par défaut est supposée si rien n'est entré directement par l'utilisateur.


0 commentaires

5 Réponses :


8
votes

Il n'y a pas de point dans le cryptage symétriquement avec une chaîne qui est codée dur dans votre exécutable. Il ne donnera qu'un faux sentiment de sécurité. Aucune quantité de hachage fixe ce schéma.

voir Cette FAQ sur pidgin pour le même point dans un contexte différent.

Je ne suis pas clair pourquoi vous pensez avoir besoin de la communication inter-applications à crypter. Si cette communication est locale sur la machine, je ne vois pas le besoin de cryptage, en particulier le cryptage qui n'est pas spécifique à l'utilisateur. Est-ce un schéma DRM?

Edit: Si elle est transmise à une machine différente, vous pouvez peut-être que vous pouvez coder un clé , puis avoir l'autre machine à décrypter avec la clé privée correspondante.


4 commentaires

J'ai lu la question comme à venir avec une alternative au codage dur de la chaîne en premier lieu.


Ce n'est pas local sur la machine, les données cryptées se terminent par XML qui sont ensuite transmises à une machine différente (aucune connexion directe n'est possible si).


@Le Rook: Les verrous sur les portes sont à peu près aussi utiles que les mots de passe obscurcés. Les gens verrouillent encore leurs portes la nuit. C'est peut-être un faux sentiment de sécurité (complète), mais ce n'est pas la même chose que d'être insécurité. Comme la notes de Lasse V. Karlsen, il peut être assez sécurisé.


@Snorfus Le problème qui cryptage du mot de passe ne se défend pas contre aucune attaque. Pour l'enregistrement, sélectionnez le verrouillage de la gobelet PIN sur votre porte d'entrée dans environ 30 secondes, donc je ne suis peut-être pas si différente.



2
votes

Cet article sur Sécurisation des chaînes de connexion SQL devrait être Juste comme applicable pour stocker des mots de passe cryptés, où vous laissez le système d'exploitation gérer le cryptage de la graine de salage de votre déchiffrement.


0 commentaires

6
votes

Permettez-moi d'abord de aborder votre dernière question.

"Cela serait-il assez sécurisé?"

Le seul qui peut répondre à ce que vous êtes. Personne ici sait ce qu'est "assez sécurisé" signifie dans le contexte de votre application.

Construisez-vous une application pour garder le journal des adolescentes? Bien sûr, ce serait "assez sécurisé".

Construisez-vous une application pour chiffrer des informations ou une authentification pour des systèmes sécurisés militaires? Nope, pas même près.

Vous ne pouvez compter que sur un type de sécurité si vous souhaitez stocker le mot de passe dans votre code source et ainsi exécutable, et c'est Sécurité par Obscurity . .

Si votre problème est que vous ne pouvez pas, ni ne pas stocker le mot de passe dans le code source, puis le déplacer dans une DLL distincte ne résout rien, vous venez de déplacer le problème à un projet différent.

Cependant, je me demande de quelque chose. Vous dites "je dois faire défaut à quelque chose". Est-ce que c'est ça? Vous essayez de stocker une valeur par défaut pour la chaîne de mot de passe sécurisée dans le code source? Que diriez-vous de "thisisnotapassword"?


2 commentaires

Les cybercriminels sont loin d'être avertis aussi être bestin par ThisisNotaPassword. Au lieu de cela, je vous suggère d'employer de la psychologie et d'aller avec Thisisapassword.


Si cette question de piratage m'a été assignée, je serai vraiment confondu avec ce jeu psychologique. : P



2
votes

Cela me semble peut-être peut-être utiliser une solution PKI au lieu du cryptage / décryptage. Si vous avez une autre application qui doit consommer les données cryptées, vous pouvez avoir une paire de touches pour cette application et donner la clé publique à l'application qui effectue le cryptage. De cette façon, vous gardez toujours vos données sécurisées, mais n'introduisez pas de tas de code supplémentaire qui ne donne finalement pas toute la protection.

Une recherche rapide Google m'a donné Cet article Code Project Article qui parle de Utilisation du magasin de certificats Windows dans .NET


0 commentaires

6
votes

eric lippert's Vous voulez du sel avec ça? ( Publication du blog d'origine ) < / p>

a également lu son message à Utilisez le bon outil pour le travail où il se termine par les conseils suivants:

  1. Si vous le pouvez peut-être, n'allez tout simplement pas là-bas. Le cryptage est extrêmement difficile à suivre et est souvent la mauvaise solution en premier lieu. Utilisez d'autres techniques pour résoudre vos problèmes de sécurité.

  2. Si le problème est un client indigne de confiance, ne construisez pas une solution de sécurité qui nécessite de faire confiance au client.

  3. Si vous pouvez utiliser des pièces hors tension, faites-le donc.

  4. Si vous ne pouvez pas utiliser de pièces d'étagère hors tension et que vous devez utiliser un cryptosystème, n'utilisez pas de cryptosystème que vous ne comprenez pas complètement.

  5. Si vous devez utiliser un cryptosystème que vous ne comprenez pas parfaitement, alors au moins, ne l'utilisez pas pour résoudre des problèmes, il n'a pas été conçu pour résoudre.

  6. Si vous devez utiliser un cryptosystème pour skier dans les arbres, alors ne laissez au moins le client probablement hostile de choisir le message qui est crypté. Choisissez le jeton vous-même. Si le jeton doit inclure des informations du client, désinfectez-la d'une manière ou d'une autre; exiger que ce soit seulement du texte ascii droit, insérer un espace aléatoire aléatoire, etc.

  7. Si vous devez permettre au client de choisir le jeton, ne chiffrez pas le jeton lui-même. Signez un hachage de jeton cryptographiquement. Il est beaucoup plus difficile pour l'attaquant de choisir un jeton qui produit un hachage souhaité.

  8. n'utilise pas la même paire de touches pour chiffrer les messages sortants que vous le faites pour protéger les messages entrants. Obtenez une paire de clés pour chaque opération logiquement différente que vous allez effectuer.

  9. chiffrer les communications des deux manières.

  10. envisagez d'avoir un mécanisme de révocation, de sorte qu'une fois que vous savez que EVE vous attaque, vous pouvez au moins révoquer sa licence. (Ou vous pouvez révoquer une licence connue à être compromise, etc.)


0 commentaires