Page 1 sur 1

Créer une clé de cryptage et la récupérer dans un autre script

Posté : mar. 02 juin 2020 22:49
par badjul
Bonjour,

Je me heurte à un problème que je n'arrive pas à résoudre. Je crée une clé de cryptage dans un script tel que celui ci:
#include <Crypt.au3>

$hKey = _Crypt_DeriveKey("test", $CALG_AES_256)
RegWrite("HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion","key","REG_SZ",$hKey)
MsgBox(0,"",$hKey)
Je stocke le handle obtenu avec _Crypt_DeriveKey dans le registre pour qu'il puisse être récupéré plus tard par un autre script tel que celui-ci:
#include <Crypt.au3>

$handleKey = RegRead("HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion","key")
MsgBox(0,"",$handleKey)
;$hKey = _Crypt_DeriveKey("test", $CALG_AES_256)
;MsgBox(0,"",$hKey)
$mdp = InputBox("Mot de passe","Entrez votre mot de passe à encrypter.")
_Crypt_Startup()
$encryptedData = _Crypt_EncryptData($mdp,$handleKey,$CALG_USERKEY)
$aerror = @error
$aextended = @extended
MsgBox(0,"","@error: " & $aerror & " @extended: " & $aextended)
InputBox("Mot de passe","Copiez/collez votre mot de passe encrypté.",$encryptedData)
Seulement le mot que j'entre dans l'InputBox n'est pas crypté et j'obtiens l'erreur 80 qui correspond à "Impossible de récupérer $CALG_USERKEY AlgID".
Si je commente mes deux premières lignes, que je décommente la 3ème et 4éme et que je met $hKey au lieu de $handleKey dans _Crypt_EncryptData tout fonctionne correctement.

Je me demande si je stocke correctement mon handle ou si il a été relaché de la zone mémoire avant que je ne m'en serve ou si il faut que je transforme ma donnée quand je la récupère en tout cas je ne trouve pas mon problème.

Merci d'avance pour votre aide.

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mar. 02 juin 2020 23:06
par Tlem
Bonsoir.
Un handle est propre au script qui le génère, vous ne pouvez pas l'utiliser dans un autre script.
Pouvez-vous nous expliquer les motivations qui vous pousse à vouloir créer le handle de cryptage dans un autre script que celui qui devra crypter ?

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mer. 03 juin 2020 06:57
par badjul
Merci pour votre réponse je crois avoir pensé à tort qu'un handle était un pointeur vers une adresse mémoire et que je pouvais le transmettre.
Mon but est d'automatiser le déchargement d'un antivirus pour mettre à jour sa base sans avoir à divulguer son mot de passe aux utilisateurs. En fait les nouveaux fichiers étant sur une clé USB est détecté puis l'antivirus déchargé, les fichiers copiés et l'antivirus redémarré sans action de l'utilisateur qui ne voit qu'une barre de progression.
Le script est déjà fonctionnel mais je ne peux pas garder le mot de passe en clair dans mon binaire. Je pensais donc à un script générant une clé qui cache son pointeur dans la base de registre et l'autre le récupérant pour décrypter le mot de passe stocké crypté dans son binaire. Comme ça il n'y avait pas de lien entre les deux scripts, on ne pouvait pas savoir qui avait généré la clé et le désassembler facilement.
Je ne m'embête comme ça pas par plaisir mais par obligation ;)

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mer. 03 juin 2020 08:03
par Tlem
Certe, mais si quelqu'un peux decompiler et analyser le script principal, pourquoi oublierait il les scripts annexes ?

Pour "protéger" votre clé de cryptage, utilisez un serveur Web qui enverra les informations à votre script (par exemple).

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mer. 03 juin 2020 08:43
par badjul
Si le script principal est décompilé la seule information est qu'il récupère un handle dans la base de registre mais pas quel script l'a généré et déposé à cet endroit. Après je ne dis pas que c'était inviolable mais ça complexifiait le crackage.

Les machines que je gère sont complètement isolées et doivent le rester d'où les mises à jour manuelles. Le but est que les mises a jour soient récupérées sur un poste en réseau et mises sur une clé USB et que la personne n'ai qu'à connecter la clé pour que la mise à jour se fasse automatiquement jusqu'à ce qu'elle soit invitée à retirer la clé.
Seulement il faut un mot de passe pour décharger l'antivirus et je n'ai pas le droit de le divulguer ni de le laisser en clair dans mon script.

En tout cas merci de prendre le temps de me répondre.

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mer. 03 juin 2020 13:08
par jchd
On peut "transporter" une clé cryptographique de façon sûre entre machines distantes avec CryptExportKey.
https://docs.microsoft.com/fr-fr/window ... texportkey

Par contre je ne vois pas l'utilité, mais bon...

Re: Créer une clé de cryptage et la récupérer dans un autre script

Posté : mer. 03 juin 2020 19:01
par badjul
Je vais creuser dans ce sens je ne savais pas que cette fonction existait.

Merci pour votre réponse jchd.