GOLDEN PASSWORDS - STOCKEZ VOS MOTS DE PASSE !

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 9 août 2009 à 17:39
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 9 avril 2010 à 16:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50425-golden-passwords-stockez-vos-mots-de-passe

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 avril 2010 à 16:09
Probablement une erreur d'unicode alors. Désolé ... mais de toute façon le fichier exemple contient que des messages idiots, tu n'accéderas pas à mes mots de passe :p

Cordialement, Bacterius !
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
9 avril 2010 à 16:05
- Delphi 2009 :
Couleau vide
Login vide
MDP vide
Comentaire : des tas et des tas de caracteres chinois ....

- Delphi 2005 :
Couleau noir
Login vide
MDP vide
Comentaire : vide

Dans les deux delphi, si je cree ma table, ca ouvre sans bug. Décidemment je ne connaitrais jamais tes mots de passe !!! Bizarre donc.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 avril 2010 à 02:18
Salut Yannba,
"Un probleme d'incompatibilité avec XP et seven ??"
j'ai conçu cette source sous XP et ensuite Vista, bizarre ...
Je vais retélécharger la source et essayer pour voir.

...

Apparemment chez moi ça marche (mis à part un léger bug d'affichage de la toolbar), sous Delphi 6.
Quelle version de Delphi utilises-tu ? Car les caractères chinois me font penser à l'unicode, et il est possible que cela pose un problème de lecture du fichier (et de parsage des champs) à cause de la différence unicode/ascii ... le problème vient sûrement de là si tu utilises une version récente de Delphi.

Cordialement, Bacterius !
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
8 avril 2010 à 17:45
Ah apparemment, un probleme avec l'affichage :
Comentaire : des tas et des tas de caracteres chinois ....
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
8 avril 2010 à 17:44
Bonjour,

C'est peut-etre sans importance, mais si j'essaie d'ouvrir le fichier exemple, ca ne marche pas.
Par contre si je cree un fichier pour le reouvrir par la suite aucun probleme.
Un probleme d'incompatibilité avec XP et seven ??

Login vide
MDP vide
Comentaire : Œ?????? ..........
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
18 août 2009 à 15:20
Bonjour,

Bacteius, si je me permet de tenter de te conseille un peux dans le dommaine c'est parce que dans un autre monde que celui de windows, je articipe au développement d'un de ces petits outils que certains apellent en francais "troussau de clefs", et qui en gros fait la meme chose que ton programme.

Au debut cet outil a eu du mal a s'imposer et a etre compris par les utilisateur (encore maintenant,il n'est utiliser que tres partiellement).

Des le départ ce project a été abordé en visant un maximum de sécurité. En effet il falais un outil utilisable et dont la sécurité devais etre acceptable par la majorité.

Le choix final a été de laisser l'utilisateur libre d'utiliser le ou les algo(s) de cryptage qu'il veut.

Cet autre os est plus flexible, il permet ce genre de choses tres facilement,il suffit d'installer les composants (paquets) et de configurer un fichier (voir d'ajouter un ou des scripts).

Malheureusement la meme technique sous windows me semble complexe a mettre en oeuvre.
Cependant pour etre utilsable réellement, il faut passer par une securité aceptable.

J'ai regardé un peux ton ago perso, je ne vois pas pourquoi tu ne pourrais pas le "mélanger" a ssl par exemple, ton algo meme si "incertain" niveau sécurité (puisque non certfié) permetrais quand meme de brouiller les pistes, je ne pense pas que son utilisation serais nusible ou povoqueras des failles de sécurité, un rsa+ton algo+ssl,ca deviendrais a mon avis une sécurité plus que "acceptable" et rendrais ton outil fonctionnel et utilisble réellement, il serais dommage de ne pas rendre fonctionnel ton outil qui a mon sens a une place parmis les gestionnaires de mot de passe.

En plus il aurais l'avantage que ses sources sonts disponibles...

ni69, de rien pour les précision delphi est "une usine a gaz" et en plus chaque version du compilateur apporte son lot de surprises....

Bon Coding...

ManChesTer.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 août 2009 à 13:22
Effectivement il a raison, le seul point pouvant possiblement être amélioré est bel et bien la sécurité :

- utiliser des algos résistants (AES, Blowfish);
- eventuellement cumuler plusieurs algos ... car le fichier de stockage dépasse rarement le mégaoctet (ou a la rigueur, la dizaine de mégaoctets) pour une personne normale, donc les performances ne s'en ressentiront pas trop.

Le reste me semble correct (ergonomie, fonctionnalités), enfin du moins pour moi, qui ai horreur des usines à gaz comportant dix mille boutons et trois cents menu déroulants ...

Merci également Manchester, précisions utiles sur la gestion des String en Delphi.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
18 août 2009 à 10:05
@ ManChesTer : Merci de ces précisions, elles sont fort utiles :)

@ Bacterius : ManChesTer a raison concernant la sécurité, et je le soutiens sur ce point. Si tu tiens à faire un programme réellement utilisable par d'autres, et pas un "simple gadget", il faut vraiment modifier ce point. Au moins pour atteindre un niveau de sécurité suffisant en regard des informations à protéger.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
18 août 2009 à 03:16
"juste la sécurité qui peut etre mieux"

Evidemment, algo maison, mais si tu veux on peut tenter AES+Blowfish+3DES, le tout avec 3 clefs mathématiquement liées, couplé d'une authentification SHA-512 ... mais après on se s'arrête plus ... pourquoi pas effectuer 100 fois cette combinaison ? Et pourquoi pas 1000 fois ? Etc ...

Cordialement, Bacterius !
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
18 août 2009 à 03:04
Bacterius, je le savais, j'attndais cette réponce, mdr

Avec certains "os" ou plutot la facon dont on fais tourné cet os ,fais un teste en vm (eg: virtualbox 64 bits fesant tourné xp 32 ou vice versa), tu veras, la c'est la cata le fillchar sans move...

D'autre part un string peut etre unicode, le fillchar sur un unicode fais parfois une nouvelle variable comme a:="123" a="124" te laisse 123 en ram c'est du aux routinnes de conversions de la vcl... voila le pourquoi de ma var "vide" (qui doit etre du meme type que la var a "effacer").
En plus tu dois maitrisé la totalité des doublons de cette variable fait par delphi ou la vcl ou meme les apis (la vcl appelant les apis)...

Perso, pour ce genre d'appli, je me passe de la vcl, et j'utilise les apis textout sur dc (en dessin) afin d'éviter tout problemes liés aux apis,vcl, unicode etc... Pour etre franc, je l'écrit en asm direct, les routines que le compilateur delphi utilise lors du déploiement de ce type de variables prennent baucoups de libertés...

Le second move remet dans la "varlist" le pointeur de la variable a 0 de cette facon, il est plus complexe de retrouver ou celle ci pointais dans la ram.
c'est un peux comme quand tu fais freeandnil (ou monobject.free; monobject:=nil;) pour un object.
Evidament réutiliser cette variable apres va générer une erreur.

Sinon, je trouve ta gestion interessante, bravo a toi, juste la sécurité qui peut etre mieux mais le parfait n'existe pas dans ce dommaine.

Bon Coding...

ManChesTer.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
17 août 2009 à 16:36
Un FillChar suffit largement Manchester ^^, pas besoin du reste.

Cordialement, Bacterius !
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
17 août 2009 à 14:19
Bonjour,

En effet la sécurité a 100% n'existe pas cependant on peut toujours tenter de s'en approcher...

Par exemple pour "bien" proteger un mot de passe que l'on veut placer dans un fichier, souvent on utilise une ou plusieurs sur encryption.

un exemple :
le mot de passe est "CodeS-SourceS"
nous encrypton avc rsa 2048 CodeS-SourceS
ce qui donne un premier résultat.
Ensuite avec un second algo on ré-encypte le résultat ou une partie du résultat.
En mélangant plusieurs algo le "pirate" devra etre capable de casser les algos succesifs... Ce qui complique fortement son travail.
Etant doné que la vitesse n'a que peux d'importance dans le stockage de mot de passe 5 ou 6 sur encryptions me semble pouvoir etre unesécurité acceptable. Surtout si l'on change régulièrement les mots de passes et que ceux-ci sont suffisament long et complexes.

Autre chose, une simple astuce pour bien vider et detruire une variable de type string:

var monnulstring : string;

mastringvar='PassAdetruire';
fillchar(#0,monulstring,length(mastringvar));
move(monnulstring[1],mastringvar[1],length(mastringvar));
move(monulstring,mastringvar,sizeof(mastringvar));

Bon Coding...

ManChesTer.
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
15 août 2009 à 20:58
C'est juste :)
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 août 2009 à 19:32
"Les techniques de contournement évoluent au même titre (voire plus rapidement parfois) que les techniques de protection !"
c'est l'éternel souci:
dès que l'on met une protection en place il faut s'assurer aussitôt de posséder l'antidote...
tout dépend évidemment du niveau de protection que l'on veut mettre.
Mais pour en revenir aux mots de passe sensibles, nous sommes d'accords sur un point: "ne pas les stocker".
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
15 août 2009 à 13:41
Les techniques de contournement évoluent au même titre (voire plus rapidement parfois) que les techniques de protection !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
15 août 2009 à 13:40
@ Cantador : Rassure-toi, je ne suis pas grand fan des séries TV ! Cependant je sais que certains lecteurs d'empreintes digitales reconnaissent avec succès de fausses empreintes reproduites (il faut parfois pas chercher très loin pour obtenir l'originale : on peut la trouver parfois sur le lecteur lui-même), tout comme certains logiciels de reconnaissance faciale se font berner par des photographies...
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 août 2009 à 12:06
"il ne faut pas que l'on te coupe un doigt !"
faut pas trop regarder les séries TV..

La protection biométrique en est à sa début :
les prochains micros seront à reconnaissance vocale, rétinienne etc. etc.
il sera très difficile de pénétrer un système...
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
15 août 2009 à 09:16
erratum :
"Je n'ai pas parlé d'utiliser des chaînes de caractères totalement aléatoires pour les mots de passe, mais pour les "questions secrètes/réponses secrètes", qui se doivent de ne pas représenter de faiblesse trop notoire en matière de sécurité."
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
15 août 2009 à 09:15
Je n'ai pas parlé d'utiliser des chaînes de caractères totalement aléatoires pour les mots de passe, mais pour les "questions secrètes/réponses secrètes", qui se doivent pas de ne pas représenter de faiblesse trop notoire en matière de sécurité.

Dans l'idéal, il faudrait en faire de même avec ses mots de passe, mais il semble évidemment complexe de retenir des identifiants aléatoires différents pour chaque session que l'on est amené à ouvrir. Cela peut cependant se contourner facilement en transformant des phrases en mots de passe, ce qui donne une impression de "pseudo-aléatoire".

Ainsi, la phrase suivante :
"Ceci est une Phrase qui me permet de m'Authentifier sur DelphiFR !"
peut donner, en prenant la première lettre de chaque mot et en transformant [une -> 1] et [sur -> @] :
"Ce1Pqupdm'A@D!"

Ce qui est un bon mot de passe (14 caractères + alpha + différente casse + numérique + caractères spéciaux + "introuvable" à partir de dictionnaires + ...)

(note : ne prenez même pas la peine d'essayer, ceci n'est pas mon mot de passe sur CS :p)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 août 2009 à 00:18
Seulement ces solutions sont incompatibles : il est difficile de se souvenir de plusieurs mdp différents, et des caractères aléatoires sont bien souvents impossibles à mémoriser.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
14 août 2009 à 23:31
Aucune sécurité n'existe en informatique, inutile de se leurrer.

Protection biométrique --->>> il ne faut pas que l'on te coupe un doigt ! Et il faut également noter que les lecteurs biométriques vendus dans le commerce sont pour la plupart faillibles (au niveau matériel OU même logiciel!)...

La meilleure solution de "pseudo-sécurité" reste bien évidemment d'avoir un mot de passe différent pour chaque demande d'identification, et qu'il ne réside que dans la mémoire de l'utilisateur. De plus, mieux vaut entrer des suites de caractères aléatoires dans tous les champs "question secrète/réponse secrète" que l'on peut trouver!
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 août 2009 à 22:54
Pour la calculette, et si on te la vole ?
--->>> Protection biométrique !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 17:51
L'entraînement du docteur Kawashima m'a indiqué que mon cerveau avait 43 ans. J'ai testé ce matin ... Pour la calculette, et si on te la vole ? Au moins on est sûr de pas se faire chourer son cerveau ... enfin ... à voir avec les progrès à venir.

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 août 2009 à 17:47
Mais je l'ai vu çà !!!!!! (lol)
Une simple calculette de poche à mémoire suffit (avec aucune connexion possible à un réseau)
.....ou avoir une bonne mémoire cervicale comme Bacterius.

cantador
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 17:36
Rien ne vaut le post-it sur le bureau :o

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 août 2009 à 17:25
hé oui, le meilleur moyen pour se faire pirater de l'information sensible, c'est de la stocker sur un ordinateur..

Et dans ce domaine, les meilleurs se sont tous faits avoir
(Pentagone, Armée française, Scotland Yard etc.)

Ce qui n'enlève rien à ton travail de qualité Bacterius..
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 14:59
Merci Cantador pour ce petit remontant ^^

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 août 2009 à 14:51
heu, plus simple : ne pas stocker ses mots de passe.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 03:47
Mise à jour :
- possibilité de redimensionner la fenêtre (j'ai dû déplacer un bouton pour cela)
- clic sur l'icône de la barre des tâches = affichage de la fenêtre

Prochaine étape (et pas petite ...) : tenter de réaliser l'idée de Ni69 (utiliser differemment les codes couleurs, par exemple). Bref, il faut y réfléchir :s

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 02:29
Ce qu'il faut donc faire :
- clic sur l'icône de la barre des tâches

Mais comment peut-on faire l'implémentation de ton idée ? (avec le logiciel "gestion.exe") ?

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 01:24
T'as remarqué que AES à l'envers ça fait SEA ? lol je viens de le remarquer ...
Oui effectivement SEA est par flux/flot, même si son architecture laisse à penser que c'est par bloc. Je prends des blocs pour aller plus vite, mais j'applique la même opération bit-à-bit logique. Et je ne me suis pas basé sur AES, autant faire quelque chose d'innovant :p
Si tu regardes bien, LEA s'occupe de générer une suite totalement aléatoire d'entiers 32 bits pour chaque clef, puis additionne/soustrait cette suite avec le message.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
10 août 2009 à 01:20
Si c'est bon sur XP et 7, il ne devrait pas y avoir de problème sur Vista... Enfin on ne sait jamais !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
10 août 2009 à 01:19
C'est bon si SEA est par flots. J'étais parti du principe qu'il était par Blocs (SEA ressemble à AES, et j'ai cru que tu t'étais basé là dessus, or AES est bien par Blocs !)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 01:06
Ou alors de Vista ... (désolé j'ai lu trop vite, j'avais cru lire "XP SP 2").

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 01:05
Ah j'oubliais pour John Dogget, ça vient vraisemblablement de Delphi 2007. A mon avis les mécanismes inhérents à l'objet TApplication sont différents. Mais j'ai pas D2K7 sous la main pour tester ... dis ... tu veux pas ... ? lol

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 août 2009 à 01:03
@Beckerich : Ah merci :p content que ça te plaise.

@ni69 & John Dogget : Ok pour le clic sur l'icône (gestionnaire d'évènement TrayOnClick).
Et pour la sécurité, je ne comprends pas. J'utilise bien deux fois SEA pour la sauvegarde, mais cela est très facilement arrangé. Mais pour l'ouverture du fichier, je décrypte d'abord l'empreinte et je ne continue que si le mot de passe est bon.

"Il faut dans l'idéal que ton fichier ne contienne qu'un seul encodage des données (sinon cela revient à fournir à un attaquant deux informations, et on revient au même point)
"

Faire SEA(Donnée1, Clef) + SEA(Donnée2, Clef) est équivalent à SEA(Donnée1 + Donnée2, Clef), car SEA est un algorithme de chiffrement par flux (et non par bloc comme son code semble le suggérer). Donc au fond il n'y a qu'un seul encodage de données ? Enfin je suis embrouillé là ...

Cordialement, Bacterius !
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
10 août 2009 à 00:33
cool tes composants Bacterius, surtout ta barre de progression, je les ai découvert ce soir en surfant sur ta fiche, trop balaise...
Je t'échange 2 barils de source contre 2 kilos de macarons citron et pistache ;-))

Salutations,
Luc.
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
10 août 2009 à 00:02
D'ailleurs, aucun problème chez moi sous Windows 7 et Windows XP concernant la non-disparition de l'application de la barre des tâches (problème de John Dogget)
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
10 août 2009 à 00:00
Oh j'oubliais, l'apparition de la fenêtre à la suite d'un double-clic dans le systray serait souhaitable (je rejoins là l'avis de John Dogget)
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 23:57
"Gestion" : en très gros c'est ça, mais ne pas forcément faire un fichier par application. Plusieurs applications peuvent être enregistrées dans un même fichier de données.


Pour l'aspect sécurité, je pense que nous nous sommes mal compris.
Ce que je te propose se résume au schéma suivant :
[BLOC_1] = empreinte LEA de [PASSWORD]
[BLOC_2] = données, c'est à dire combinaisons login/password/comments

Lors de l'enregistrement, tu encodes (SEA) l'ENSEMBLE [ [BLOC_1] [BLOC_2] ], ce qui te donne [BLOC_CODE], que tu enregistres dans le fichier.
Lors de l'ouverture du fichier, tu décodes (SEA) l'ENSEMBLE [BLOC_CODE], PUIS tu sépares le résultat en [BLOC_1] et [BLOC_2].
Ce n'est que maintenant que tu vérifies si [BLOC_1] = [PASSWORD], et si c'est le cas, tu charges les données contenues dans [BLOC_2].

De ce que j'ai compris, tu utilises actuellement deux fois SEA pour la sauvegarde (une fois pour l'encodage de l'empreinte, une autre fois pour l'encodage des données. Il faut dans l'idéal que ton fichier ne contienne qu'un seul encodage des données (sinon cela revient à fournir à un attaquant deux informations, et on revient au même point)
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
9 août 2009 à 23:26
Je suis sous Delphi 2007 et Vista SP2
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 23:18
Normalement elle ne reste pas visible ... sous quel Delphi/OS/SP es-tu ?
Oui le double-clic est voulu (enfin pas voulu mais c'est supposé faire ça), c'est clic droit : menu surgissant.

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
9 août 2009 à 23:10
Le comportement de la reduction dans la barre des tâches est'il voulu ?
- quand on reduit l'application, on a le popup dans le systray mais l'application reste visible dans la barre des tâches
- quand on double-clic sur l'icône du systray, il ne se passe ... rien
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 22:23
Et pour ton exemple sur Gestion.exe, en gros tu voudrais faire que :
1. L'utilisateur crée un compte nommé "Gestion", entre les paramètres (nom de la fenêtre, etc ...).
2. L'utilisateur se connecte à ce compte.
3. L'utilisateur lance Gestion.exe
4. A ce moment, notre logiciel se rend compte que Gestion.exe est lancé, et va donc, accordément aux paramètres saisis par l'utilisateur, injecter les mots de passe adéquats directement dans les TEdit de Gestion.exe via des messages ?

(de façon générale)

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 22:21
"LEA ou AES ne sont pas "sûrs""
Tu voulais sûrement dire "LEA ou SEA" :p

Et oui c'est ce qu'il se passait dans la toute première version déposée sur CS. Mais je crois avoir mis à jour (j'y ai pensé), en encryptant également l'empreinte LEA.
Regarde le code du CheckPassword du cryptosystème actuel :

{ Dans B, on stocke l'empreinte du mot de passe du fichier }
F.ReadBuffer(B, SizeOf(THash));
{ On décrypte l'empreinte }
Encrypt(B, SizeOf(THash), A, OP_DECRYPT);
{ On compare }
Result := SameHash(A, B);

Mais tu as raison, j'avais commis cette faute dans la première version, ce qui donnait à l'attaquant l'empreinte sur un plateau d'argent.

Mais tu ne sais pas tout ! Juste avant de poster sur CS, j'ai modifié en urgence l'algorithme SEA. En effet, il n'était pas du tout adapté pour l'utilisation que ce logiciel en fait. Dans la version "traditionnelle" de SEA, on va hasher le mot de passe, puis hasher le hash du mot de passe, etc ... Seulement, avec cette méthode, voilà ce qu'il se passait :

E est l'empreinte LEA du mot de passe.

On va donc placer dans le fichier l'empreinte LEA, puis la crypter (la fonction de cryptage est appellée C, et de décyptage C-1) :
Puisque SEA ajoute le hashage de la clef au message, on a donc : C(E, Clé) = 2E
Tu vois l'énorme faille ? Mais j'ai corrigé, maintenant c'est différent.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 22:12
:-)

Non, pas nécessairement de protocole. Un exemple :
- une application GESTION.EXE me demande, par l'intermédiaire d'une fenêtre de connexion, un login/password pour la gestion d'une DB
- ces login/password sont stockés dans ton logiciel
- si une session est ouverte sur ton logiciel (un utilisateur a ouvert son fichier protégé), ton logiciel reconnaît la fenêtre de GESTION.EXE, réupère les Handle des Edit correspondant aux login/password, injecte dedans les identifiants, et valide.
- l'utilisateur n'a rien eu à faire, et il est automatiquement connecté sur sa DB. Le logiciel GESTION.EXE n'a jamais eu à entrer en contact avec ton logiciel, qui s'est chargé de tout.



Un point important également sur la sécurité de la méthode de stockage (même si il est établi que de toute façon, LEA ou AES ne sont pas "sûrs") : tu utilises le mot de passe principal à deux fins différentes dans la lecture du fichier : d'une part tu testes une valeur de hachage (empreinte LEA sur 64 bits), et d'autre part tu décodes (SEA) le reste du texte. C'est une méthode qui peut sembler plus sécurisée au premier abord, mais qui se révèle être une faiblesse !

D'un point de vue cryptanalytique, cela fournit à un attaquant DEUX informations sur le mot de passe, au lieu d'UNE seule, si tu ne faisais que crypter le contenu ! Si quelqu'un entreprenait de décrypter un de tes fichiers de données, il pourrait donc faire des recoupements, etc... et arriver beaucoup plus vite à ses fins.

Je crois savoir pourquoi tu as opté pour ce système (?) : cela te permet de vérifier que le mot de passe est correct et de ne pas tenter de charger dans ta liste des données illisibles (décodées avec un mauvais password).
Ainsi, il serait plus judicieux à mon sens si tu tiens à garder cette caractéristique, de mettre l'empreinte LEA à l'INTERIEUR du contenu encodé par SEA. Lors du décodage, tu vérifies l'empreinte (64 premiers bits décodés), et si ça colle, tu traite le reste des données.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 21:57
Ne t'inquiète pas, c'est juste un exercice, je sais bien que les algorithmes fait maison ne sont rien comparés à ceux qui ont fait leur preuves. Si j'avais voulu faire quelque chose de professionnel, j'aurais utilisé de l'AES.
Pour les injections, tu voudrais dire, créer une sorte de protocole de communication entre une application tierce et notre cryptosystème afin de permettre à cette application de se connecter à un fichier, et à effectuer des opérations dessus par programmation ?

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 21:53
Il ne s'agit pas du tout de les enregistrer en clair. Seulement de les communiquer automatiquement à une application qui en aurait besoin par injection dans les Edit d'identification.

En général, les algorithmes d'encodage "maison" sont beaucoup beaucoup plus faibles que les renommés et éprouvés (Twofish, Triple DES, Rijndael ...), pour de multiples raisons :
- leurs créateurs ne sont pas des experts en cryptologie (il faut de solides connaissances en la matière pour envisager des scénarios d'attaque complexes, et ainsi protéger son algorithme)
- ils n'ont pas subi de cryptanalyse poussée par des experts
- de nombreuses faiblesses sont exploitables (par exemple les tunnels dans les algos de hachage)
- etc...
Il est donc fortement déconseillé de s'en servir pour réellement protéger des données sensibles. Ca va si ça reste dans le cadre du "bricolage".
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 21:10
- Pour la fenêtre, pas trop de problèmes, j'ai restreint la possibilité de redimensionner la fenêtre pour ne pas massacrer la disposition de la toolbar, mais il suffit de mettre la propriété Wrappable de cette dernière à True ... Pour les boutons ... on peut les mettre sur deux rangées.

- Le deuxième paragraphe je comprends pas trop bien ... enregistrer les identifiants et les mots de passe ... moyen quoi, si c'est enregistré en clair. Je pense qu'il faudrait mieux enregistrer leurs empreintes. Mais je ne comprends pas le reste ?

- Pour l'encodage SEA, au fond je ne peux pas trop me prononcer dessus non plus vu que j'en suis l'inventeur (également celui de LEA) et que je l'ai pas encore présenté devant des hommes en noir lol ! Les sources sont comprises dans le zip.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 21:05
Sinon, je ne connais pas vraiment l'encodage SEA, donc je ne peux pas me prononcer sur sa sécurité.
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 21:05
Alors niveau ergonomie, peut-être serait-il utile de laisser l'utilisateur modifier la taille de la fenêtre. J'ai tendance à considérer qu'un stockeur de mots de passe doit se faire discret, et pas trop prenant pour l'utilisateur (diminue peut-être un peu la taille de la fenêtre et celle des boutons ?)

Après, dans le cadre d'une évolution future, il serait sympa d'implémenter une procédure d'auto-login sur des applications externes :
En plus d'enregistrer les identifiants et mots de passe, tu pourrais garder en mémoire le path de l'application et le nom/titre de la fenêtre demandant ces login/password, et si une fenêtre ouverte correspond à quelque-chose d'enregistré dans le fichier de données courant (donc une fois que l'utilisateur a entré son mot de passe principal), faire en sorte de communiquer directement les infos, sans que l'utilisateur n'ait à le faire !

(je sais pas si c'est très clair la manière dont je l'explique... :p)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:53
Et sinon qu'en penses-tu côté ergonomie, fonctionnalités et tout ?

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:41
:p

Reste à appliquer ça sur toute donnée sensible (Data et les données de List).

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:38
On a eu la même idée à quelques minutes d'écart, je viens de voir ton post :p
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:35
Le zip est posté, tu peux tester le FillChar ^^

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:34
Oui, c'est pourquoi j'utilise :

FillChar(Pwd[1], Length(Pwd), 1);

Ce qui a pour effet de remplacer la RAM qui contenait le mot de passe par des #1.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:34
Il faut que je teste une méthode utilisant FillChar
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:33
A chaque réattribution de la valeur d'un élément string, un programme delphi utilise des emplacements mémoire différents.

Ainsi, si tu fais
str := 'abcd';
str := '0123';

Alors les deux valeurs 'abcd' et '0123' seront présentes dans la RAM.
Cela ne suffit donc pas de faire str := ''; comme tu le préconises !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:31
Justement je me suis toujours demandé ... j'ai ma réponse.
C'est gagné chez moi, Ni69, j'ai réussi à bien nettoyer (FillChar(Pwd[1], Length(Pwd), 1);). J'envoie le zip.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:28
A savoir que la libération des composants concernés (par Free) ne nettoie leur ancien contenu de la RAM...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:28
En fait, à chaque fois qu'on demandait le mot de passe à l'utilisateur (variables S), et dans le cryptosystème (paramètres Password), dès qu'on en a plus besoin, je fais "Variable := ''". Ca a réduit le nombre d'occurences à 1 revendiquée à l'ouverture, et 1 non revendiquée non nettoyée à la fermeture.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:27
J'ai réussi à réduire à 1 seule occurence à l'ouverture, et lorsqu'on ferme le fichier, cette occurence n'est plus revendiquée, mais n'est pas libérée non plus ... Et il s'agit probablement de la variable Pwd.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:25
Effectivement, List et Data ne contiennent pas le mot de passe... Reste qu'il est bien présent quatre fois dans la RAM !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:18
Et quand on y pense, Data non plus ne contient pas le mot de passe ... Il contient seulement son empreinte cryptée ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 20:12
Je crois que je vais écarter la statusbar de la question en lui ôtant le mot de passe ... après tout il n'a pas à être là. Ca sera déjà ça de gagné. Et je vais essayer de centraliser un maximum les occurences mémoire du mot de passe principal.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 20:01
Tout semble être là, vu qu'il y a quatre occurences du mot de passe en mémoire lors de l'ouverture.

Une piste serait d'utiliser ReadProcessMemory pour localiser les occurences du mot de passe, et WriteProcessMemory pour les remplacer. Mais c'est un cercle totalement vicieux, car la lecture des données de la mémoire de l'application elle-même entraînera le stockage des données lues également dans la même mémoire, à un autre endroit !... Ainsi si on récupère toute la mémoire d'un coup, l'application doublera sa RAM allouée pour stocker le résultat, et on n'en finit plus.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 19:15
Bon alors si on résume, quels sont les endroits susceptibles de contenir des informations sensibles :

- Variable string "Pwd". Elle n'est pas libérée à la fermeture du fichier.
- Variable TStringList "Data". Son contenu est "Clear" à la fermeture, mais cela semble insuffisant.
- Variable TListView "List". Son contenu est "Clear" à la fermeture, mais cela semble insuffisant.
- Barre de status "StatusBar". Son contenu est effacé à la fermeture, mais cela semble insuffisant.

J'en ai raté ?

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 19:12
Ah pas actualisé. Bon ben je vais faire divers tests, puis voir ce que ça donne à chaque fois ... :s

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 19:11
[Après ouverture, avant fermeture]

"DelphiFR" offsets :
009FB7F5
00A029AD
00A029EC
00A02CCD
00A0313C
00A03DE8

[Après fermeture]

"DelphiFR" offsets :
009FB7F5
00A029AD
00A029EC
00A0313C
00A03DE8

Effectivement il y a un grave problème là lol.

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 19:08
C'est déjà fait (j'ai utilisé un éditeur Hexa pour lire la RAM de ton process) !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 19:06
Ni69, je vais faire un test avec un petit prog qui lit la mémoire d'un autre processus, pour voir si le mot de passe maître est conservé lorsqu'on ferme le fichier.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 18:59
Mais ... on a des variables (Data.Text, ListView.Items, StatusBar.Panels[0].Text). Ne pointent-elles pas sur ces données ?
Bon j'ai mis à jour :
- correction du bug de l'Ajouter
- suppression du log
- suppression des erreurs variées
- ajout d'un filtrage par couleur dans la recherche (possibilité de l'ignorer)
- double-clic dans la liste de résultats de recherche corrigée

On va pouvoir se pencher sur le problème de libération de la RAM ... car c'est bien beau d'avoir une fonction rechercher mais si on peut retrouver les mots de passe dans la RAM c'est pas terrible ...

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 18:55
C'est évidemment possible. Encore faut-il connaître l'emplacement de cette zone, qui est variable selon le contenu et les exécutions successives !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 18:54
Mais n'existe-t-il pas une technique de "déchiquetage" ?
Imaginons que la zone que l'on veut libérer se situe entre l'offset 0x00000002 et 0x00000008.
Il y a des données très sensibles entre ces deux offsets.
1. On remplit cette zone de mémoire avec des zéros (ZeroMemory).
2. On libère cette mémoire.

?

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 18:51
Je ne sais pas vraiment comment libérer spécifiquement des zones de mémoire comme celles-ci (je recherche). Mais une solution de contournement serait de n'afficher les données que sous forme d'images, par dessin sur le canvas des composants (bon ok, ça reste aussi dans la RAM, mais ce serait beaucoup plus difficile à localiser)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 18:44
[Mode comique]
Oui ben c'est inévitable le but c'est quand même de les voir les mots de passe
comique

Faut-il procéder à un écrasement puis à une libération pour un nettoyage total (remplir les données avec des caractères nuls, puis libérer ?).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 18:43
Ah ok parce que je commençais à plus rien comprendre (je suis allé voir asciitable.com).
Bon, le bug d'ajouter est réglé, le log est effacé, dans le Cryptosystem.Close, on a bien "Data.Clear", ce n'est pas suffisant pour effacer les traces du fichier dans la RAM ? Et pour les erreurs multiples c'est règlé aussi. Il me reste la recherche par couleurs et le double clic ...

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 18:42
Le problème en fait, c'est que comme tu affiches tes Login/Pwd sous forme textuelle dans ta fenêtre (dans la ListView pour les Mots de Passe stockés, et dans la StatusBar pour le Mot de Passe Principal), le programme les retient dans la RAM, et on peut ainsi trouver relativement facilement (après ouverture/fermeture du fichier) ce genre d'infos dans la RAM en clair :
[Mot de passe : "DelphiFR"]
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 18:38
Ah non désolé, j'avais lu trop vite !
Le #1 convient très bien (j'ai pas beaucoup dormi et je pensais que tu utilisais les deux caractères "#1" comme séparation !)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 18:34
Le #1 est un caractère imprimable ? Arf j'ai pas fait attention ... toute façon il suffit de changer PARSE_CHAR.
Pour l'ajouter, je vais mettre à jour.
Pour la fenêtre de recherche, tu veux dire pouvoir choisir un code couleur pour approfondir le filtrage ? Et le double clic est une bonne idée, pas pensé à ça.
Merci pour l'avertissement pour la RAM, je vais voir (il m'avait semblé faire un Data.Clear pour nettoyer les mots de passe dans la RAM à la fermeture des fichiers ?). Et pour les exceptions ... finalement je suis content que tu me dises ça car ça me gênait tous ces messages différents.
Je mets à jour ... merci :)

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 août 2009 à 18:28
Salut,

Je viens de regarder ton code. Je pense qu'il serait mieux d'employer des caractères non imprimables comme séparateurs. En effet, le #1 peut être utilisé dans des mots de passe...

Petits détails : quand on fait Ajouter, puis directement Annuler, la ligne se créée quand même dans ton fichier, il faudrait qu'elle soit supprimée! Dans la fenêtre de recherche, il serait peut-être bien d'ajouter également les codes couleur. Un double-clic sur la ligne pourrait avoir le même effet qu'un clic sur "Aller à..."

Il y a un petit problème : une fois le fichier de données fermé, les mots de passe restent dans la RAM !
Au niveau de la sécurité, je pense aussi que le principe du Log est superflu, et qu'il serait plus sage de ne pas différencier les erreurs RES_LOAD_ERROR, RES_CHECK_ERROR ansi que RES_GET_ERROR, car cela indique directement à un attaquant potentiel où se situe l'impossibilité d'accès. Autant rester vague !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
9 août 2009 à 17:39
Toutes remarques et surtout, propositions d'améliorations (aussi bien sur le cryptosystème que sur les fonctionnalités de l'application) seront grandement appréciées :)

Cordialement, Bacterius !
Rejoignez-nous