Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2889 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Résolu] Algo de création d'une clé de validation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Algo de création d'une clé de validation

n°1875728
titbabou
Posté le 21-04-2009 à 10:00:47  profilanswer
 

Bonjour à tous !
 
Je suis apprenti au département informatique d'une boite qui gère pas mal d'entrées et de sorties de matos info. Mon projet principal jusqu'à présent a été de mettre au point un moyen rapide et gratuit pour restaurer (comprenez "réinstaller" ) des machines avant qu'elles ne partent en clientèle.
 
J'ai donc bossé sous Clonezilla et sa partie Live CD afin de créer des DVD bootables contenant l'image à restaurer. Comme les DVD seraient, dans certains cas, envoyés par courrier à certains clients, et que les images en questions contiennent un Windows XP VLK (clé validable à l'infini), il a fallu que j'implémente un système pour empêcher quelqu'un de réinstaller son PC perso quand bon lui semble. J'ai donc fait un script en Shell qui génère pseudo-aléatoirement un entier sur 10 caractères, l'affiche à l'écran. Le client nous appelle alors, nous communique l'entier donné, nous le rentrons dans un programme en tant que variable "a" et on retourne au client f(a). Le soucis c'est que la fonction f(x) est vraiment pas très résistante (polynôme du second degré) et qu'il faudrait que je trouve un moyen soit de la renforcer, soit d'utiliser un autre algo.  
 
L'idée est donc de renforcer mon code, qui est par la suite encodé par "shc". J'ai bien conscience que mon "système" n'est pas super sécurisé, c'est pas le but ; il s'agit simplement de décourager un peu les petits malins qui voudraient récupérer XP gratos.
 
Avez-vous des idées pour améliorer la protection ?  
 
Merci d'avance pour vos tuyaux.
 
Hub
 
PS : si vous avez besoin du code actuel, demandez-le moi, je le posterai.


Message édité par titbabou le 23-04-2009 à 10:15:56
mood
Publicité
Posté le 21-04-2009 à 10:00:47  profilanswer
 

n°1875736
Sve@r
Posté le 21-04-2009 à 10:14:14  profilanswer
 

La première phrase de tout bouquin de crypto est: La sécurité d'un chiffrement ne doit pas être basée sur le secret de l'algo mais sur la clef utilisée.
 
Donc si tu bases ton algo sur le secret de f(), c'est raté.
 
Je peux te proposer md5. Ton client t'envoie ses 10 caractères "a" (clef publique). Tu as de ton coté généré 10 caractères "b" pour ce client (clef privée). Tu associes a+b, tu calcules le md5(a+b) ce qui donne c => tu envoies c au client qui le rentre dans sa bécane.
 
C'est d'ailleurs la façon de faire pour les mots de passe Linux. Le fichier shadow contient la clef md5 du mot de passe, tu rentres ton mot de passe qui est hashé par md5 et le système vérifie la correspondance des hash.
 
Voir du coté de la commande md5sum...
 
Toutefois je te dirais de pas trop t'inquiéter. Les petits malins qui veulent xp iront sur la mule. Et tout ce que tu fait n'empêchera pas ton client de récupérer ce xp pour lui et ses potes donc...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1875842
titbabou
Posté le 21-04-2009 à 14:19:05  profilanswer
 

Merci Sve@r !
 
Je suis un débutant en matière de crypto et j'aurais besoin d'un coup de main pour utiliser md5.
 
D'après le manuel, md5sum ne bosse que sur des fichiers. Soit. Mettons qu'un client m'envoie une clé publique "12345" et que ma clé privée soit "23456". a+b = 12345+23456 = 246801. Je fais alors le md5 de 246801 ? Ou est-ce que je dois mettre 246801 dans un fichier et en faire le md5 (ca me semble bizarre) ?
 
Une fois que j'ai le md5 de 246801, je lui renvoie, mais comment mon programme va faire pour s'assurer que la clé publique était bonne ?
 
Merci d'avance, et désolé d'être un plow :D

n°1876129
titbabou
Posté le 22-04-2009 à 09:50:03  profilanswer
 

Petit UP :)
 
On m'a conseillé aussi SHA-1, SHA-2, Whirlpool, etc. Bref, j'ai compris qu'il fallait que je me tourne vers l'une de ces solutions. Mais pourront-elles fonctionner de la manière suivante :
 
1) Le  PC du client génère un entier aléatoire (et ce à chaque fois que l'on boot sur le DVD), la chiffre (via md5, SHA-x, etc.)
2) Le client me donne cette clé (clé publique donc). J'ai de mon côté une clé privée (fixe ?). Je les "mélange" (<- je ne connais pas l'opération qui intervient ici).
3) J'obtiens un résultat que je retourne à mon client
4) Il la rentre dans son PC. Le programme confirme que la clé publique ET la clé privée étaient valides, et continue l'installation.
 
Comme j'y connais vraiment rien en sécu pour l'instant (mes cours commencent plus tard), j'ai besoin d'un coup de main pour éclaircir le fonctionnement d'une telle opération. Comment mélanger la clé privée et la clé publique ? J'imagine que ça dépend de la méthode de cryptage ? Comment le PC client pourra vérifier que les clés données n'étaient pas des fausses (d'un point de vue algo) ?
 
Merci encore pour votre aide :)
 
Hub

n°1876626
titbabou
Posté le 23-04-2009 à 09:58:21  profilanswer
 

J'ai implémenté mon code sans trop de problème mais j'en rencontre un nouveau. Le hash donné par la fonction sha1sum sous Unix n'est pas le même que celui donné par les générateurs que l'on peut trouver sur Internet ou par SHA1.dll que je voulais utiliser (via AutoIt).

 

Exemple :

 

root@VM-Ubuntu: /# echo -e fzujzihwiy | sha1sum
eb0b0de50652f85eb17f7cce23816129506d608c  -

 

Mais sur le net, quels que soient les sites sur lesquels j'essaie, j'obtiens toujours le hash suivant :
b83924b4eb4f293fb59c864ba6e225254a405113

 

Idem sous AutoIt.

 

Donc j'en conclus que soit ma fonction sha1sum a un soucis, soit je m'en sers pas bien.

 

Une idée ?


Message édité par titbabou le 23-04-2009 à 09:58:46
n°1876635
titbabou
Posté le 23-04-2009 à 10:14:51  profilanswer
 

J'ai trouvé !
 
il fallait faire un echo -n  et non un echo -e qui rajoutait un retour à la ligne :)

n°1878297
Sve@r
Posté le 27-04-2009 à 14:37:34  profilanswer
 

titbabou a écrit :

D'après le manuel, md5sum ne bosse que sur des fichiers.


En fait, le manuel est un peu mal écrit. md5sum, comme toute commande Unix, travaille de base sur l'entrée standard.
Donc tu peux taper md5sum sans rien. Là le prompt disparait et tu tapes ce que tu veux en terminant par une ligne vide sur laquelle tu tapes "CTRL-D" (End Of Text). La commande récupère ce qui a été entré et le traite. Il en va de même pour les commandes simples style "cat" ou "wc".
 
Ainsi, à la base, si tu veux hasher un fichier, tu peux faire "cat fichier |md5sum". Idem pour compter un fichier "cat fichier |wc"
 
Maintenant md5sum est un peu mieux développée et si tu lui passes un argument, alors elle prendra cet argument comme fichier à hasher. Pareil pour wc. Mais ceci n'est pas une obligation.
 
Et donc si tu veux hasher une chaine, rien ne t'empêche de faire "echo chaine | md5sum". Ce mécanisme se retrouvera chaque fois que tu voudras envoyer une chaine sur un traitement quelconque => echo "chaine" |traitement
 

titbabou a écrit :

Merci d'avance, et désolé d'être un plow :D


Pas grave  :sol:
 

titbabou a écrit :

J'ai trouvé !
 
il fallait faire un echo -n  et non un echo -e qui rajoutait un retour à la ligne :)


Arf le fameux "\n". Même si on ne le voit pas, il existe quand-même !!!
 
echo -n => ne met pas de retour à la ligne. Parfois il n'est pas implémenté. Tu peux alors le remplacer par "printf" mais cette commande récente n'est pas forcément présente non plus. Solution portable: echo "truc" |awk '{printf("%s", $0)}'
 
echo -e => interprète les codes spéciaux comme justement des codes spéciaux (mettre de la couleur, etc)


Message édité par Sve@r le 27-04-2009 à 14:42:15

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Résolu] Algo de création d'une clé de validation

 

Sujets relatifs
[RESOLU]Affichage DIV sur place dispo avec ascensseurproblème boucle while
Création de feuille en masse à renomer sous VB[resolu]supprimer un cookie
[résolu] Servlet : impossible de setter la valeur d'un cookie[Résolu] Comment récupérer une variable asp en jscript
question sur un tableau[résolu][Creation d'un Shell] Simuler un environ avec env -i
Algo / concepts de correction du flouPassage d'une fonction sans paramètre en paramètre d'une autre[résolu]
Plus de sujets relatifs à : [Résolu] Algo de création d'une clé de validation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR