Java Public key et message d'authentification

A

Anonymous

Invité
#1
Bonjour,

J'ai finalement refait mon programme en Java mais je n'arrive toujours à comprendre comment encrypter mon credential avec la clé publique envoyée par le serveur.

Voici un aperçu de ce que me sort mon programme : il me semble que tout est bon sur la reception des données !


Voici mon client socket Dofus : https://github.com/wamilou/DofusBot/blo ... lient.java
Ma classe permettant de lire (pas encore écrire mais ça sera fait quand j'aurai compris comment créer le credential) : https://github.com/wamilou/DofusBot/blo ... acket.java
Et ma classe HelloConnectMessage pour désérialiser le message : https://github.com/wamilou/DofusBot/blo ... ssage.java

Pour retrouver la clé publique, je fais celà :
Code:
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(hcm.getKey());
PublicKey pub = keyFactory.generatePublic(publicKeySpec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
}
Voici l'erreur que je reçois quand j'exécute mon code pour créer la clé publique depuis les données :


Faut-il faire quelque chose pour récupérer la clé ou j'ai raté un truc ?
Merci d'avance.

EDIT : J'ai trouvé comment créer le credentials mais j'ai toujours une erreur de clé invalide ! Quelqu'un a une solution ???
 
A

Anonymous

Invité
#2
Bon, j'ai pris un peu de temps à regarder le code source de Dofus ainsi que "croiser" plusieurs informations du forum.
Mais j'aimerai un peu d'aide sur des trucs tout con, alors pour l'encryptage des credentials, ce que j'ai retenu, il faut :
- Encrypter nos données avec cette clé public récupérée avec RSA et X509

Ai-je compris en grande partie le fonctionnement ?
Après je sais pas exactement comment en Java implanter ça puisque je n'ai jamais vraiment toucher au RSA jusqu'à présent !
Voilà ce que j'ai fait : (m_key est de type String)


Mais celà me retourne toujours comme quoi la clé est invalide :/, je dois surement me tromper quelque part !
Si quelqu'un pouvait éclairer ma lanterne! Merci d'avance :)
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#3
J'te file un gros indice et ensuite faudra voir par toi-même. Ça m'a moi-même demandé une semaine de documentation sur le RSA pour comprendre exactement comment ça fonctionnait et ça n'a pas arrêté de me servir depuis. Donc ce genre de doc n'est jamais perdu.

- T'as une clé publique quelque part dans le client
- T'as un truc chiffré que tu reçois dans HelloConnectMessage
- Tu dois déchiffrer ce que tu as reçu dans HCM avec la clé publique du client
- Ça te donne une nouvelle clé publique toute fraîche
- Tu chiffres ce que tu dois chiffrer avec cette nouvelle clé et tu balances le tout au serveur
 

Gohu

Membre Actif
Inscrit
16 Novembre 2013
Messages
222
Reactions
2
#4
C'est pas un indice c'est la solution .... x)
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#5
J'ai pas dit indice, j'ai dit gros indice.
Et c'est pas vraiment la solution, il reste des mystères. :)
 
A

Anonymous

Invité
#6
Merci. Par contre, quand je fais une recherche avec JPEXS, le logiciel crash après avoir fait la recherche dans 500-800 fichiers script.
Est-ce que quelqu'un a déjà eu ce problème et/ou sait comment résoudre ce problème ? (je suis sous Windows 7 64 bits)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
Options -> Enable Automatic Deobfuscation ;)
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#8
Ou alors tu fais pas le kikoo et tu exporte toutes les sources et t'utilises un vrai editeur de texte qui gere la recherche comme ça devrait être fait.
 
A

Anonymous

Invité
#9
Non mais même, exportant tout (j'ai déjà essayé) ça plantait en plein milieu :/
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#10
-> Précédent message -> :ugeek:
 
A

Anonymous

Invité
#11
La clé, ça ne serait pas ça ? ( merci en passant pour la solution pour le logiciel :) )


D'ailleurs, la signature key qui se trouve 2 "fichiers" plus bas, elle sert à quoi ? (je suis curieux) :)

EDIT : Sinon, je me pose une question, normalement, le cryptage RSA est sensé empêcher le décryptage des données avec une clé publique non ? Parce que actuellement, que ça soit en C ou Java si j'essaye de décrypter avec la clé ci-dessus, le programme provoque une erreur.
En plus, si j'ai bien compris, la clé récupérée est cryptée et signée non ?
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#12
C'est bien la bonne clé, il me semble.
Elle sert à signer et crypter la clé reçue.
Par contre, cette clé est stockée dans un format un peu particulier, je sais pas exactement comment ça s'appelle, mais en gros, si tu regardes plusieurs implémentations de RSA tu devrais trouver, ce stockage permet d'éviter certains calculs en utilisant le théorème chinois si je me souviens bien :)
 
Inscrit
1 Mai 2014
Messages
20
Reactions
0
#13
C'est du X509 que l'on doit décoder avec la clé qui se trouve dans \com\hurlant\util\der 'OID.as' non?
Mais de toute façon on doit la décoder donc pourquoi ça évite des calculs?
ce stockage permet d'éviter certains calculs en utilisant le théorème chinois si je me souviens bien
Le pire c'est que ce théorème existe...
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#14
En fait, la clé est stockée en PEM. C'est une représentation d'une clé RSA en base64 avec un header et un footer permettant d'identifier le type de clé que c'est.
On dit en RSA qu'une clé chiffre/déchiffre, elle ne crypte/décrypte pas.
Le RSA est un algorithme mathématique. On peut l'utiliser dans le sens qu'on veut, c'est juste des maths après tout.
Donc tu peux chiffrer avec la publique et déchiffrer avec la privée comme tu peux faire l'inverse.

Si avec OpenSSL en C++ tu n'arrives pas a déchiffrer avec la publique, you're doing it wrong.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#15
Pour optimiser avec le théorème des restes chinois : section 3.2.1 de http://pageperso.lif.univ-mrs.fr/~andreea.dragut/enseignementCLAA/CryptoChap3RSA2012.pdf
En gros, on va multiplier des nombres plus petits l'un mod p et l'autre mod q puis retrouver le résultat mod n = pq et c'est plus rapide si on calcule les coefficients du théorème chinois une fois pour toutes puisqu'on gagne alors beaucoup en temps de multiplication et d'exponentiation (essayez de calculer à la main 2**13 mod 7, mod 11 puis mod 77, vous allez vite comprendre, alors que si on a les coefficients du théorème chinois, on obtient le résultat mod 77 par simple combinaison). Enfin, il m'avait semblé quand j'avais regardé vite fait que c'était utilisé. Mais après, si on utilise OpenSSL, y'a même pas besoin de comprendre les délires matheux.
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#16
J'me disais aussi, ton pavé n'a absolument aucun rapport avec le sujet actuel.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#17
Non, mais c'est des maths, et ça explique pourquoi on utilise ce format donnant plus d'informations que nécessaire :p
 
Haut Bas