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 Function

Ca 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 util1mdp adminmdp chiffrémdp récupéré
A_ED2f€zeVousTrouverezJamaisMonMDP—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 Function

Bonsoir,

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 ! et comme je n'arrive plus à l'ouvrir...) de présent à la racine.

@ 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 Then

eric

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

Rechercher des sujets similaires à "crypter mot passe"