Salut à tous,
Je développe en ce moment un petit bot Do fus avec un collègue, le but étant principalement de bosser sur une IA. (le tout en C++ avec la lib Boost et STL)
Pour le moment il ne s’agit de rien de très sérieux car il n'est pas certain que nous puissions passer beaucoup de temps sur ce projet, voyons ça plus comme un passe temps ^^.
Mais à terme, si le projet devenait sérieux, il pourrait être intéressant de rendre le projet open-source.
En cherchant un peu je suis tombé sur différent sujet très instructif sur ce forum, du coup comme je bloque un peu en ce moment je me dit qu'il y à sûrement ici des gens qui peuvent m'informer un peu.
Le problème est encore une question sur le packet HelloConnect, j'ai bien lu au moins 3 ou 4 sujets sur ce packet ici mais pourtant je constate des choses pas claire du tout.
Dans les anciennes versions du client on trouvait une constante PUBLIC_KEY, qui servait (d’après ce que j'ai pu lire ici) à décoder une private key avec laquelle le client devait chiffrer le password (une fois salté puis hashé).
Il y a déjà 2 choses qui me dérange :
- (1) Je ne connaît que très peu RSA, mais il me semble qu'une public key sert à chiffrer et non à déchiffrer et inversement pour la private key. S'agit-t-il d'une confusion au cœur même des sources du client ou alors j'ai raté un truc ?
- (2) Le fait que le password soit salt puis hash semble indiquer que les password des clients sont enregistré en claire dans la DB du serveur officiel o_O ? (ou alors j'ai raté un double hash ?)
Du coup j'ai considéré que la clef static que l'on trouve sur d'autre sujet est une clef RSA privé et non public.
Dans un premier temps, avant de commencer à coder un truc pour décoder la key, j'essai simplement de le faire avec openssl dans un terminal:
openssl rsautl -verify -inkey static-private-key.pem -in public-key.pem.enc -out public-key.pem
mais je n'obtient que des "unable to load Private Key" ...
Et lorsque que je vérifie avec openssl la key (openssl rsa -in static-private-key.pem -check) et de la même manière il me répond que cette key n'est pas une clef privée.
J'ai aussi tester de le considérer comme un certificat mais rien ne semble passé (je precise que j'ai bien changé les header footer à chaque fois) du coup je me demande :
- (3) J'ai tord sur mon raisonnement de public/private key ou il s'agit d'un certificat ? (ou alors je ne sais simplement pas utiliser openssl :p et c'est fort probable)
- (4) La key a-t-elle changé depuis le temps ?
Et une dernière question, (5) où ce trouve maintenant, dans les sources, la public key (enfin verifykey) ? la class qui devrait la contenir est vide, c'est un système d'anti-retro-engineering ?
Merci d'avance !
EDIT:
Le fait d’écrire ce post m'a finalement débloqué sur quelque unes de mes questions:
(5) J'ai finalement trouvé où ce trouvé la nouvelle key, est ce trouve dans les binaryData.
(4) Et elle a bien changée depuis le temps.
(3) Et effectivement il faut bien une PublicKey dans pour faire un verify (ce qui n'est visiblement pas exactement un decryptage) intéressant comme outil =). Mais je n'arrive toujours pas à decoder avec openssl :
openssl rsautl -verify -inkey static-private-key.pem -keyform PEM -pubin -in public-key.pem.enc.bin
j'obtiens l'erreur : "RSA operation error
140504773994128:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:rsa_eay.c:661"
J'imagine que c'est le choix de l'algo qui passe pas.