IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Conserver les informations sensibles - où ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut Conserver les informations sensibles - où ?
    Bonjour.

    Voilà mon soucis. J'ai un programme qui encrypte et décrypte un certain nombre d'informations sensibles en les sauvegardant sur le disque dur. Pour ça, elle utilise donc un mot de passe, qui, pour l'instant (ô horreur !) est sauvegardé dans le code source même de ce programme.

    Je sais que c'est indigne de faire ça, notamment car ça veut dire que le mot de passe en question figure en clair et est visible à tout le monde. Alors la question, c'est : je fais comment à la place ?

    Car pour la même raison, je ne peux pas sauvegarder le mot de passe sur le disque, ni dans le registre (ni options du programme, ni ses ressources). Le seul moyen que je vois, c'est de le crypter à son tour, mais alors le mot de passe servant pour cryptage, on va le mettre où ?

    Bref, comment fait-on dans les logiciels normaux ?


    PS. Je précise que ce mot de passe ne peut être entré par l'utilisateur, et ne peut être lié à un compte utilisateur Windows. Il doit être de préférence transportable d'une machine à une autre (c'est le cas actuellement), et modifiable (ce n'est pas le cas actuellement), sa modification entrainant l'impossibilité d'utiliser des informations sensibles bien entendu.

  2. #2
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    salut,

    1 - tu peux le crypter en md5, tu le demande à chaque fois à l'utilisateur. Evolutif et un peu plus sécurisé.

    2 - si l'utilisateur ne doit pas le connaître (ce sont ses propres informations, mais bon, admettons), je ne sais pas, j'y réfléchirais quand j'aurais plus de temps
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut
    Bon, je crois que je me suis très mal exprimé. Alors je recommence.


    On a des informations qu'il convient de crypter en les enregistrant en local. Ces infos sont cryptés avec une clé (que j'ai appelé mot de passe dans mon message précédent) ; cette clé doit être également sauvegardée en local pour pouvoir ensuite, le temps venu, décrypter les informations en question.

    L'utilisateur ne doit pas avoir à entrer la clé de cryptage (déjà parce qu'il n'a pas que ça à faire, et ensuite parce que si c'est une clé à 40 caractères, il va finir par l'enregistrer dans un fichier texte en plain sur son disque pour la copier-coller ensuite). Cette clé doit donc être conservée par l'exécutable même.


    Cas actuel : la clé est en brut dans le code source. Celui qui peut lire le DLL concerné peut donc connaitre la clé.

    D'où la question qui se pose : ne pouvant lier la clé au compte Windows, comment peut-on la sauvegarder, et où, pour qu'elle ne soit pas lisible par tout et n'importe qui (y compris par exemple par les administrateurs ayant accès à tous les fichiers de l'utilisateur concerné) ?



    PS. Juste à titre d'exemple pour être plus clair... Beaucoup de navigateurs web permettent de sauvegarder les mots de passe que la personne entre sur des sites web qu'elle visite. J'imagine (en étant très optimiste) que ces mots de passe ne sont pas non plus sauvegardés en brut sur le disque ; or, en allumant le navigateur, la personne n'a pas à entrer la clé de cryptage ni rien ; celle-ci est donc sauvegardée par le navigateur même quelque part...

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le problème c'est qu'avec .Net on peut facilement voir le code d'un assembly, à moins d'utiliser des outils payant permettant de masquer le code (car il me semble que ça existe).

    Je pense que la solution "classique" serait de réaliser ce module en C/C++ de manière à avoir quelque chose qu'on ne puisse pas désassembler (car pas en .Net) empêchant ainsi de trouver la clé utilisée par l'algorithme de chiffrement (stop avec les cryptage ^^).

    Au passage, pour sisqo60, MD5 est un algorithme de hachage (génération d'une empreinte) et non de chiffrement
    Pas de questions techniques par MP

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Le problème c'est qu'avec .Net on peut facilement voir le code d'un assembly, à moins d'utiliser des outils payant permettant de masquer le code (car il me semble que ça existe).
    Oui ca s'appelle un obfuscateur ou obfuscator en anglais

    Au passage, pour sisqo60, MD5 est un algorithme de hachage (génération d'une empreinte) et non de chiffrement
    Ce qui signifie que le reverse coding n'est pas possible : une clef md5 ne permet pas de reconstituer le code qui l'a généré
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par olibara Voir le message
    Oui ca s'appelle un obfuscateur ou obfuscator en anglais
    Je ne parle pas d'un obfuscateur. L'obfuscateur modifie le nom des classes, variables, ... pour rendre difficile l'interprétation du code désassemblé. Mais une chaîne de caractère en dure sera toujours parfaitement lisible il me semble.

    Je me rappelle avoir du regarder une dll .Net avec Reflector afin d'essayer de comprendre ce qui était fait par une méthode, mais impossible car le code était complètement masqué. Reflector ne pouvait pas extraire le code. Il y a donc des outils permettant ce genre de choses.
    Pas de questions techniques par MP

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Même dans un ofuscateur de code, à un endroit, la dite variable (même renommé) ce verra affecté la valeur en string du "mot de passe". Donc au final ta clé reste visible.

    Par conter j'avais utilisé il y a quelques temps un cryptage RSA. Et pour sauvegardé l'une des clé j'avais utilisé une classe qui permet de sauvegarder cette clé dans "container de sécurité" ou un truc dans le genre.
    En gros ta clé est sécurisé par windows.

    Je ne me souviens plus du tout de comment ça se nomme ni même comment ça marche mais je sais que ça existe. Je vais rechercher un peu et j'edit si je retrouve

    Citation Envoyé par StormimOn Voir le message
    Je me rappelle avoir du regarder une dll .Net avec Reflector afin d'essayer de comprendre ce qui était fait par une méthode, mais impossible car le code était complètement masqué. Reflector ne pouvait pas extraire le code. Il y a donc des outils permettant ce genre de choses.
    Pour ça il me semble qu'il suffit de supprimer les méta données, mais il est toujours possible de voir le code avec certain outils il me semble.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut
    Oui donc pour résumer, soit on passe par du code non managé en essayant de ruser au maximum pour cacher la clé, soit, avec un obfuscator ou pas, la chaine de caractères sera lisible (rien qu'en ouvrant le DLL ou l'exécutable avec bloc-notes).

    Citation Envoyé par DarkHerumor Voir le message
    Par conter j'avais utilisé il y a quelques temps un cryptage RSA. Et pour sauvegardé l'une des clé j'avais utilisé une classe qui permet de sauvegarder cette clé dans "container de sécurité" ou un truc dans le genre.
    Un RSA key container ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Probablement quelque chose comme ça oui

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut
    Ok. Merci. Je regarde ça...

  11. #11
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    chmod 700 key.txt

    Ha ben non sur windows ca existe pas les permissions :-/

    Plus sérieusement, OS sans permissions et données privées ça colle pas ...

    Ta seule solution viable, c'est de crypter ton key.txt, de le mettre dans application data (SpecialDirectory) et accesoirent de le mettre en fichier caché, mais c'est vraiment une solution en carton.
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Windows propose des outils pour sécurisé des données. Seulement faut réussir à les trouver et à les utiliser

    Je continue de regarder pour le RSA key container mais je retrouve plus rien... Pourtant je suis certain qu'un tel truc existe!

  13. #13
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    L'utilisation d'un conteneur de clé n'est possible qu'avec un algorithme de chiffrement asymétrique (comme DSA ou RSA). Hors MainMa parle d'une seule clé (mot de passe) pour chiffrer / déchiffrer, il utilise donc un algorithme symétrique. Cette solution n'est alors plus valide.
    Pas de questions techniques par MP

  14. #14
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Un truc que j'ai déja utilise et de cacher la clef dans un fichier image
    Et de stocker ailleurs le pointeur et la longueur de cette clef !

    Ca devient un peu complexe a retrouver

    Tout dépends aussi du niveau réeel de securité que tu veut obtenir et du risque encouru !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  15. #15
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    http://manumation.developpez.com/articles/windows/ads/

    ça, c'est un truc rigolo mais ne fonctionne qu'en NTFS.
    Reste à intégrer le principe dans un setup, ça doit bien pouvoir être possible, non ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par olibara Voir le message
    Un truc que j'ai déja utilise et de cacher la clef dans un fichier image
    Et de stocker ailleurs le pointeur et la longueur de cette clef !

    Ca devient un peu complexe a retrouver
    Quèsaco ?

    Tout dépends aussi du niveau réeel de securité que tu veut obtenir et du risque encouru !
    Le niveau... sérieux quoi. Non mais disons un niveau plus avancé que celui d'une clé codée en dur dans le code source.

    Citation Envoyé par Papy214 Voir le message
    http://manumation.developpez.com/articles/windows/ads/

    ça, c'est un truc rigolo mais ne fonctionne qu'en NTFS.
    Reste à intégrer le principe dans un setup, ça doit bien pouvoir être possible, non ?
    Le souci de la chose, c'est que déjà, c'est louche (l'utilisateur fait le scan d'ADS, il tombe dessus directement), et qu'ensuite, il n'y a matériellement aucune protection réelle. Entre mettre la clé dans le code source de mon exécutable, et mettre la clé dans le flux, je ne vois pas trop la différence...

  17. #17
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Quèsaco ?
    Exemple (entre autre)


    Ton app dispose d'une image bmp en ressource (par exemple)
    Ta clef (sous forme binaire) est stocké a partir du n iéme pixel de l'image jusqu'au nième + Keylen
    Si l'image est un peu complexe c'est indecelable visuellement et encore moin si cette image n'est jamais affichée !!
    Ailleurs dans ton code tu definis les constante qui donnent l'image, l'offset et la longueur pour recuperer la clef

    Tu peux complexifier en mettant un pixel sur 2 ou n

    Etc.. l'imagination des crypteurs et decripteurs n'a pas de limite !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 95
    Points : 74
    Points
    74
    Par défaut
    Ah oui, ok.

    Oui, ça me parait assez bon pour garantir un niveau de sécurité minimum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conserver les informations d'un utilisateur
    Par paladice dans le forum Développement Web avec .NET
    Réponses: 6
    Dernier message: 18/06/2013, 15h51
  2. [Débutant] comment conserver les informations d'un utilisateur dans une variable?
    Par beaudelaire dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/12/2011, 06h31
  3. retrouver les informations "résumé" d'une base
    Par VVE dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/07/2004, 15h10
  4. Afficher les informations du système
    Par orisis dans le forum Windows
    Réponses: 8
    Dernier message: 10/06/2004, 15h10
  5. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo