Crypter un mot de passe
Salut,
J'ai créé un système d'identifiant / mot de passe pour attribuer des droits en fonction des utilisateurs. Aujourd'hui le mot de passe est enregistré dans un tableau avec les autres paramètres de chaque profil, et quand l'utilisateur se connecte à l'outil, le mot de passe qu'il saisi est comparé au mot de passe mémorisé.
Ca permet évidemment toutes les dérives, il suffit d'accéder au fichier où sont stockés les mots de passe pour ouvrir les droits et surtout obtenir la signature de n'importe quel utilisateur pour les actions faites sur l'outil.
Du coup je cherche une fonction qui me permettrait de crypter, à sens unique, le mot de passe pour n'enregistrer que ce cryptage dans la base, et contrôler l'accès à l'outil en comparant le cryptage du mot de passe saisi par l'utilisateur avec la base de données.
Est ce que ça existe ?
Merci d'avance
Manu
Bonjour,
Une réponse toute bête : pourquoi ne pas associer utilisateur et mot de passe dans un module, passer par ce module pour donner l'accès après renseignement du nom de l'utilisateur et du mot de passe, mot de passe qui lui aura été attribué discrètement.
Tu me diras que dans ce cas il suffirait d'accéder au VBA projet pour trouver les mots de passe, mais non si 'l'accès au VBA projet est lui même protégé.
Cette proposition est certes basique, mais à approfondir.
Cordialement
Jacky
Bonjour à tous,
De base Excel est une vrai passoire en terme de sécurité. Je ne sais pas à quelle point ton fichier doit être sécurisé Manu31 ?
Jacky, un MDP VBA Projet est très très facile à craquer en quelques minutes, on trouve aisément des logiciels sur le net.
Un code de cryptage serait très simple à réaliser, cependant qui qu'onques crack ou trouve la macro de cryptage peut facilement décrypter tout les MDP du coup..
A+
Gabin37,
Je suis d'accord avec toi : on peut très facilement "craké" une protection de VBA Project toute simple avec mot de passe, mais il existe un moyen qui, me semble-t-il, bidouille (je ne connais plus le terme exact) le code tout en permettant son utilisation. Il me semble que cette méthode est assez sûre.
Cdlt
Jacky
En effet, l'idée c'est de rendre le code bcp plus compliqué à comprendre, en utilisant un méli mélo de procédure fonctions et nom de variable indigestes pour que même en ayant accès au code, on à du mal à comprendre ce qu'il fait (dans le cas d'un code de cryptage par exemple.)
Mais c'est clairement du bidouillage, si le besoin est d'avoir une réelle protections sur les données, des signatures etc il faut investir dans des logiciels et services spécialisés dans le domaine.
Bonjour, la méthode de cryptage d'un code VBA s'appel l' "Obfuscation" et ce n'est pas du bidouillage.
Il faut les outils pour crypter mais il l'est clair qu'après, la lecture du code vba devient impossible à lire.
(variable renomée, commentaire supprimés, lignes blanches supprimés.... )
J'ignore si certains logiciels d'ofuscation sont gratuit ?
Bonjour,
si j'ai bien compris ton soucis premier est que les mdp ne soient pas lisibles directement.
Tu peux le faire facilement avec XOR qui présente l'avantage d'être réversible.
Tu cryptes mdpUtilisateur1 avec ton mdpAdmin pour obtenir mdp2.
Depuis mdp2 tu récupères mdpUtilisateur1 avec ton mdpAdmin et la même fonction.
Function chiffrerXOR(ByVal ch As String, pw As String) As String
' chiffre la chaine ch avec le pw
' fonction réversible pour récupérer ch avec le même pw depuis ch chiffré
Dim i As Long, j As Long, car As Long
For i = 1 To Len(ch)
j = j Mod Len(pw) + 1
car = Asc(Mid(ch, i, 1))
If car >= 128 Then car = car - 128
car = car Xor Asc(Mid(pw, j, 1))
If car <= 32 Then car = car + 128
Mid(ch, i, 1) = Chr(car)
Next i
chiffrerXOR = ch
End FunctionCa pourrait suffire à ton besoin (renommer fonction pour plus de discrétion...).
Exemple :
bon, tu n'auras qu'une capture écran, le téléchargement ne fonctionne pas
arg, idem pour les captures écrans, fais ton exemple tout seul
| mdp util1 | mdp admin | mdp chiffré | mdp récupéré |
| A_ED2f€ze | VousTrouverezJamaisMonMDP | —007f”o“ | A_ED2f€ze |
ça c'est passé...
eric
Bonsoir à tous
l'admin du site Sébastien vous permet de faire l'offuscation d'un code... et donc les mots de passe..
je ne sais pas si cela peut servir..
https://www.excel-pratique.com/fr/astuces_vba/proteger-code-vba
Fred
Bon j'arrive pas à répondre à chaque commentaire, donc je fais un fourre tout...
Jacky : l'utilisateur doit être libre de modifier son mot de passe ou le régénérer en cas d'oubli. Pour ça j'ai créé une routine qui crée un mot de passe aléatoire envoyé par mail, à la création du profil de l'utilisateur ou quand il en change, et qu'il doit changer à sa première connexion. S'il était en dur dans la macro je devrais être disponible en permanence pour assurer le " service après vente " et matériellement c'est pas possible, c'est qu'une activité associative.
Gabin37 : Mon projet est un logiciel de gestion d'un atelier de maintenance d'un aéroclub (et potientiellement d'un atelier de maintenance professionnel si mon projet de reconversion abouti). Les actions de chaque utilisateur serviront entre autre à justifier son expérience récente pour le renouvellement de ses licences mais aussi en cas d'accident pour les enquêtes. Je dois pouvoir garantir à mon autorité de tutelle que personne ne se connecte avec le compte d'un autre utilisateur.
eriiic : si le cryptage est réversible il sera toujours possible de retrouver le mot de passe original à partir de sa forme cryptée, justement ce que je veux éviter. Tant qu'il est à sens unique ça n'imposera même pas d'avoir à bloquer l'accès à l'algorythme de cryptage qui pourra être en dur dans la macro.
Pour les autres réponses : c'est pas le code VBA en lui même que j'ai besoin de crypter mais uniquement le mot de passe que l'utilisateur choisit / saisit à la connexion. Y'aura d'autres étapes mais chaque chose en son temps.
Manu
Bonsoir Manu31,
Je comprends très bien ton problème. La solution que j'ai donnée est évidemment comme je l'ai précisée simpliste et basique. par contre, bien que je ne l'ai jamais utilisée, la proposition de Xmenpl qui consiste à "Obfuscater" (est ce correct comme expression ?) me semble intéressante. Toutefois ta proposition de création de mot de passe aléatoire envoyé par mail me plait beaucoup et m'intéresserait beaucoup.
Bonnes fêtes de Noël et de fin d'année
Cordialement
Jacky
Re,
eriiic : si le cryptage est réversible il sera toujours possible de retrouver le mot de passe original à partir de sa forme cryptée, justement ce que je veux éviter.
il faut tout lire et tester.
Réversible ça veut dire que tu chiffres et déchiffres avec la même fonction .
La version chiffrée dans ton fichier annexe sera inutilisable sans ton mdp pour la déchiffrer...
eric
bonsoir,
je te propose un hachage MD5 c'est irréversible !
Sub TestMD5()
Dim s As String
s = "71140553442112312345ABCDE"
Debug.Print StringToMD5Hex(s)
End Sub
Function StringToMD5Hex(ByVal s As String) As String
Dim enc As Object
Dim bytes() As Byte
Dim pos As Long
Dim outstr As String
Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
bytes = StrConv(s, vbFromUnicode)
bytes = enc.ComputeHash_2(bytes)
For pos = 1 To UBound(bytes) + 1
outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2))
Next pos
StringToMD5Hex = outstr
Set enc = Nothing
End FunctionBonsoir,
en terme de "navigabilité" un simple fichier Excel "sécurisé" suffit à justifier le travail effectué par des opérateurs dans les aéroclubs ?
J'en apprend tous les jours vous savez...
@Jacky : en fait c'est plutôt obfusquer son code que de le obfuscater... => obfusquer -> obfuscation comme fabriquer -> fabrication
Moi de mon coté j'ai un fichier qui a le code VBA protégé par mot de passe (c'est vrai c'est pas top, mais il faut pouvoir le faire en live car là le fichier sera certainement en réseau fermé), puis il vérifie à l'ouverture s'il y a les macros activées (sinon ça sert à rien de mettre tout ceci en place) et il vérifie la présence d'un "certain fichier" sur une clé USB brachée sur l'ordinateur (si ce n'est pas le cas le fichier se ferme).
Mais tout ceci peut tomber à l'eau par l'ouverture du fichier avec Calc, non ?
On peut imaginer un "certain fichier" unique par utilisateur, du coup le MdP est transformée en clé USB ! Reste qu'il ne faut pas que cette clé soit dupliqué, donc il pourrait y avoir un MdP à taper une fois l'application ouverte... Ou alors investir dans une solution "pro" avec serveur externe et de réels droits administrateur...
@ bientôt
LouReeD
Tenez, un exemple de cryptage décryptage de César + Vigenère :
Trouver sur le Net il y a "longtemps", ce que j'aime bien c'est qu'une même donnée donne un code crypté différent !
@ bientôt
LouReeD
Bonsoir,
voilà, j'ai retrouvé ce fameux fichier !
Je vous laisse essayer de l'ouvrir avec Excel, mais pour y arriver, il faut activer les macros, puis avoir une clé USB avec un fichier LouReeD.dat (ou LRD.dat je ne sais plus !
@ bientôt
LouReeD
Il faut bien une clé USB et non pas un disque dur externe ! Je viens d'en faire les frais !
Et contrairement à ce qui a été annoncé au dessus, il n'y a que la protection du fichier LRD.dat sur clé USB, l'activation du code VBA n'y est pas et il n'y a pas non plus le mot de passe pour le code VBA. Maintenant si une personne a Open Office ou assimilé afin de voir comment le fichier réagit, merci.
Et si on accède au code VBA, alors l'obfuscation peut être une muraille de plus...
@ bientôt
LouReeD
Re,
tu vas être déçu, il s'ouvre sans difficulté sur libre office :
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Function DossierExiste(NomDossier As String) As Boolean
DossierExiste = Dir(NomDossier, vbSystem + vbDirectory + vbHidden) <> ""
End Function
Sub Test_Existe()
S = USBD
If Len(S) = 1 Theneric
Jacky : J'ai pas mon fichier sous la main. Je t'envoie ça dès que possible.
Eriiic : dans le fonctionnement que j'imagine, le mot de passe utilisateur est crypté à sa création et enregistré dans un tableau sur Excel. Le mot de passe saisit à la connexion est crypté à son tour et ce cryptage est comparé à celui enregistré dans la base. A aucun moment il n'y a de décryptage et il ne faut surtout pas qu'il soit possible. D'autre part, le mot de passe admin peut être amené à être modifié, s'il sert de clé de cryptage il invalidera tous les mots de passe utilisateur. Par contre je me garde l'idée générale sous le coude, il va aussi falloir à terme que je crypte les adresses mail (sinon il suffit d'utiliser celle d'un autre utilisateur pour réinitialiser son mot de passe et avoir accès à son compte). Et là par contre il faudra les décrypter pour envoyer les mails.
dysorthographie : merci de l'idée, ça a l'air de convenir. Mais vu qu'il semble que le hash MD5 ne soit plus considéré comme robuste depuis quelques années, ce sera juste une solution transitoire en attendant de trouver plus actuel.
LouReed : il suffit de démontrer à l'OSAC que la solution qu'on utilise permet de répondre aux exigences règlementaires mais oui un fichier Excel suffit, certains aéroclubs fonctionnent encore avec des fiches cartonnées remplies à la main. Et y'a pas les aéroclubs qui utilisent Excel, dans mon boulot j'ai des compagnies aériennes qui l'utilisent aussi, et nous mêmes pour gérer nos audits lors des transactions avion on utilise uniquement que ça : c'est customisable au besoin, y'a pas besoin d'un support client pour peu que tout le monde ait un minimum de connaissance du logiciel et quand on est à l'autre bout du monde au milieu de la pampa y'a pas besoin de connexion internet pour accéder à un serveur, ... Les statuts sont ensuite signés par une personne accréditée par l'OSAC, c'est cette signature qui sert de garantie (j'ai même vu une compagnie aérienne qui signait ses statuts en insérant un scan de la signature du responsable qualité dans le fichier Excel... C'est pourtant une compagnie nationale de premier plan...). L'outil que j'utilise depuis 2014 n'est pas sécurisé du tout, il n'y a aucune identification de l'opérateur et n'importe qui peut signer une tâche au nom de n'importe qui juste en cliquant sur un CommandButton au nom de la personne à qui il veut attribuer la tâche, mais pour compenser l'OSAC m'impose une édition papier des dossiers de travaux avec une signature manuelle de chaque utilisateur à qui les tâches ont été attribuées pour confirmer qu'il les accepte. Avec une identification sécurisée de l'opérateur celui qui déclarera une tâche ne pourra le faire que sous son nom et je devrais pouvoir me dispenser de de l'édition papier et passer à l'archivage numérique, en plus de disposer d'un historique que je n'ai pas aujourd'hui.
Celà dit l'idée d'un fichier sur une clé USB est intéressant, je vais peut être fouiller un peu de ce côté là pour sécuriser les fichiers de données parce que ça sert à rien de sécuriser l'identification de l'opérateur si on peut ensuite accéder aux données et les modifier manuellement. Pour l'instant accéder à ce fichiers par l'intermédiaire du logiciel n'est possible que par l'administrateur mais il faut aussi que je verrouille l'accès des fichiers eux mêmes.
Manu
Le mot de passe saisit à la connexion est crypté à son tour et ce cryptage est comparé à celui enregistré dans la base. A aucun moment il n'y a de décryptage et il ne faut surtout pas qu'il soit possible.
Le mot de passe saisit à la connexion est crypté à son tour et ce cryptage est comparé à celui enregistré dans la base
tu peux faire comme ça aussi.
D'autre part, le mot de passe admin peut être amené à être modifié, s'il sert de clé de cryptage il invalidera tous les mots de passe utilisateur.
j'ai dit mdp admin, mais c'est un mot de passe dédié au chiffrage.
Et si tu veux du robuste et que la proposition de dysorthographie ne te suffit pas, tu peux aller faire un tour sur la page que je t'ai indiquée.
Et pour la protection des fichiers, garde en tête qu'on peut ouvrir des fichiers en refusant les macros (avec Shift ouvrir). Toute protection en ce sens est souvent illusoire. Tu peux tout au plus décourager en compliquant
eric
Bonjour
@eriiic : non pas déçu vu que je l'annonce dans le message
Comme dit plus haut Excel est "une passoire". Maintenant en jouant le jeu, Excel n'ouvre pas le fichier tant que la clé n'est pas là...
@ bientôt
LouReeD