IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème de cryptographie (à l'import de la clé RSA)!


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut Problème de cryptographie (à l'import de la clé RSA)!
    Bonjour, je suis un novice en la matière je tiens à le dire avant tout chose !

    Voilà, je suis actuellement en stage, et chargé d'un module ce cryptographie, à savoir validation de certificat et de signature numérique. Le sujet est passionant il faut l'admettre mais à s'en tirer les cheveux. Pour ma part, j'ai fait pas mal de recherche la dessus, et je vois à peu prés comment marche la chose, les normes européennes et pourrais parler pendant des heures de l'histoire de la cryptographie à travers les âges (bon aprés 5 jours de documentation et de recherche, pas bien dur).

    voilà mon problème :
    J'ai mon modulus, notons M, et mon exposent, notons E.
    M a une taille de 128 octets (1024 bits) et E de 8 octets (64 bits).
    j'ai insérer M et E en brute dans mon code pour les tests.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim M as byte() = #Modulus#
    dim E as byte() = #exponent#
    ou dim M as String = #Modulus#
    dim E as string = #exponent#
    j'ai créer un RSAparameter et un RSAPKCS1SignatureDeformatter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Keyrsa as new RSAparameter 
    dim rsa as new RSAPKCS1SignatureDeformatter
    J'ai testé plusieurs façon de faire mais à chaque fois le problème pêche à l'import de la clé RSA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsa.importparameters(Keyrsa) (avec Keyrsa.Modulus = M et Keyrsa.exponent = E)
    rsa.FromXmlString(Keyrsa) (avec Keyrsa = <RSAKeyValue><Modulus>M</Modulus><Exponent>E</Exponent></RSAKeyValue>)
    cependant à chaque fois il me relève une erreur "Cryptographicexception : données incorrectes."
    De quoi cela pourrait il venir?
    est ce que la marche a suivre de base est correcte ou non?

    Merci d'avance pour les réponse !

    Amicalement vierax.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Aprés encore plusieurs recherches je crois comprendre que le problème viendrait du fait que mon Module fait 1024 bits et que, àpriori, vb.net ne gére pas une si grande capacité de nombre.

    ToW?

    Merci d'avance pour votre aide.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    Bonjour,
    Je fais de la crypto triple DES sans problème, donc je n'ai pas de code à te fournir pour RSA mais...

    - As-tu vérifié dans l'aide la taille requise des tableaux de byte pour cet algorithme (en général, tu as un Initialisation Vector et une clef, et chaque algorithme de cryptage a besoin d'une taille précise pour fonctionner).
    - Il y a peut être aussi une limitation de valeur pour ton exposant (et tu aurais alimenté à la main une valeur trop élevée).

    Ce ne sont que des pistes...
    Envois nous ton code, peut être celà fera t'il avancer le schmilblik ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Voilà le code en question, il a subit plusieurs modification entre temps avec de nombreux test de ma part mais dans l'idée il donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     Dim modulusS As String = #Modulus#        
            Dim modulus As Byte() = modulusS en byte
            Dim exponentS As String = #Exponent
            Dim exponent As Byte() = exponentS en byte
     
            'Test avec le Xml
            'Dim keyXmlString As String = "<RSAKeyValue><Modulus>" + modulusS + "</modulus><Exponent>" + exponentS + "</Exponent></RSAKeyValue>"
     
            Dim rsa As New Cryptography.RSACryptoServiceProvider
            Dim Keyrsa As New Cryptography.RSAParameters
     
            Keyrsa.Modulus = modulus
            Keyrsa.Exponent = exponent
            rsa.ImportParameters(Keyrsa)
            'RSAcsp.FromXmlString(keyXmlString);
    l'erreur relevé : Cryptography.cryptographyexception : donnée incorrect.

    La longueur de la clé que je met fais bien 128 octets, et l'exposant a bien la taille de 8 octets, pas de problème à ce niveau là, c'est certain.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    OK, merci pour le code.
    Es-tu sur que tu as renseigné tous les paramètres requis ?
    L'ami MSDN me donne une liste bien plus complète que Exponent et Modulus.
    Peut être tout simplement que certains paramètres nécessaires à cet algo ne sont pas renseigné ?

    D Represents the D parameter for the RSA algorithm.
    DP Represents the DP parameter for the RSA algorithm.
    DQ Represents the DQ parameter for the RSA algorithm.
    Exponent Represents the Exponent parameter for the RSA algorithm.
    InverseQ Represents the InverseQ parameter for the RSA algorithm.
    Modulus Represents the Modulus parameter for the RSA algorithm.
    P Represents the P parameter for the RSA algorithm.
    Q Represents the Q parameter for the RSA algorithm.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Je sais que msdn donne une tel liste mais la plupart des autres informations sont obsoléte. Je m'explique.

    L'algorithme utilisé est rsa qui fonctionne avec une paire de clé : la clé privé et la clé publique. Je suis en possession de la clé publique a savoir n et e (le module et l'exposant donc).
    Les autres information (d, p, q...) sont des information en rapport avec la clé privé (p, q nombre premier servant a calculer n, ect ect...) ils n'ont donc pas de rapport avec la phase de déchiffrement qui m'interesse.

    Je pense avoir remplit les bon champs, et le remplissage des champs secondaires est inutile ici.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    OK

    Tu as un topic côté C# qui aborde le même sujet et qui semble avoir été résolu.
    C'est un bon réflexe qu'on devrait avoir, nous VB-istes: c'est d'espionner ces gens un peu bizarres qui programment en C# car leur topic est souvent plus fourni que celui de VB

    http://www.developpez.net/forums/d67...me-crypto-rsa/

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    J'étais déjà passé sur ce topic lors de mes recherches cependant le problèmes n'est pas le même. Il faut pour ma part des données que je récupère dans la signature donc je ne peux me contenter de faire un .verify.

    Voici comment se présente la chose :
    Nous avons un Certificat, dont nous prenons le contenus (Cc)
    On hash le Cc avec le SHA1 on obtient H(Cc).
    On rehash (là je n'ai pas encore celui utilisé mais je n'en suis pas encore là), oui encore, pour obtenir H(H(cc).
    On fait une concaténation : 4B | BA | H(Cc) | H(H(Cc) | BC auquel on ajoute un identifiant.
    On crypte en RSA avec la clé privé.
    On obtient une signature de 194 octets.

    On mette cette signature dans le fichier. Pour que, par la suite, l'on puisse vérifier que le document est original (c'est à que j'intervient ! )

    Il faut donc que je décrypte la premiere partie (la signature de 194 octets) avec la clé publique qui est en ma possession.

    Problème : ça veux pas y faire, comme il le dirait par ici.

    Je pense que ça vient du fait que ma clé fait 128 octets (1024 bits), en effet j'ai trouvé un programme qui fait la formule c^e mod m. Celui ci marche avec une clé de 64 octets (j'ai coupé la mienne en deux ) mais pas au délà (test avec 72 et 128).

    De quoi cela pourrait il venir?

    Ps : j'ai aussi testé avec une clé de 64 bits sur le RSACryptoServiceProvider... Mais cela n'a pas marché ^^ !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Rectification, cela marche avec une clé de 127bits et non 128 (63,5O au lieu de 64O)... Bizarre.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Bon beaucoup de progression, mais pas encore les résultat escompté. J'ai décelé un autre problème.
    Voici mon exposant en Hexa : "00 00 00 00 00 01 00 01" (oui drôle de tête)
    il faut que je le passe dans une string donc je fais chr(00) mais là, évidemment, y'a un problème car c'est le caractère null, donc du coup il ne veux pas l'interpréter. et quand je fais un xml du tout j'ai :
    "<RSAKeyValue><Modulus>ValeurModulus</Modulus><Exponent></Exponent></RSAKeyValue>"

    bon il y a déjà du progrés, car j'ai réussit à décrypter une partie, mais le format n'est pas bon (pas la forme donnée par la norme européene). Donc je pense qu'il faut que je régle le problème de cet exponent.

    Des suggestion ?

    Merci d'avance.

    Ps : 10001 hexa = 65537, valeur correct que l'on a dans la NE donc l'exponent trouvé est bon, tout comme le modulus

  11. #11
    Invité de passage
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Par défaut
    Salut,

    il ne te reste plus qu'a tout réécrire à la main,
    Librairie bigint (existe déjà)
    algorithme d'exponentiation (?)
    ...

    En cherchant dans les forums et les codes sources ça doit pouvoir se faire, non ? Reste à voir si le vb n'est pas trop lent pour ça.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Je crois qu'en effet je n'ai pas d'autre solution que celle ci.

    Pour les librairies BigInt, est ce que quelqu'un peux me donner une explication dessus, sur le fonctionnement en général car je n'aime pas utiliser un code que je ne comprends pas.
    Comment marche t il en somme. Ainsi si possible me rediriger vers une de ces libraire (je vais bien sûr faire mes recherche de mon côté.)

    Quand aux algos d'exponentiation et de modulation, cela sera une autre paire de manche ^^, mais bon faut bien se donner du mal sinon l'informatique ne serait pas marrant.

    Je vais quand même continuer a chercher du côté net des sources, j'avais trouvé celle ci (j'arrive a avoir un résultat, mais il n'est pas correct):
    http://www.di-mgt.com.au/crypto.html#dhvb
    ---> http://www.di-mgt.com.au/src/basModExp.bas.html
    J'ai également regardé du côté de Chilkat (lui il me pose un problème au niveau de l'exponent, car il n'arrive aps a chiffrer le chr(0) ce qui est normal):
    http://www.chilkatsoft.com/
    --->http://www.chilkatsoft.com/rsa-dotnet.asp

    Si quelqu'un avais une solution pour le chr(0) peut être que cela marcherait il avec Chilkat, je ne sais pas. Je continue mes recherches.
    Si jamais j'arrive à venir à devoir faire ma propres librairie, je suis pas sortit ^^surtout en 4 semaines :p

    Edit : Les raisons qui font que je pense que la clé est correct et le certificat également est que lorsque j'utilise un certificat d'une carte test (donc faites avec des cartes test utilisant une paire de clé différente) le résultat n'est pas concluant avec la source donné ci-dessus, or avec un certificat d'une vrai carte, il l'est.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Je suis toujours ouvert à toutes propositions de solutions (et rien d'autre )

    Pour le moment je suis en train d'essayer de faire une classe bigInt bien que je ne sache pas trés bien ce que c'est :s ! (Je fait des tableaux de byte et je code les opérations associé, je suis pas sûr que ce soit cela le principe d'une telle classe, car à la fin je pense que cela sera trés lourd et long à éxécuter.)
    Si quelqu'un à de nouvelle piste sur mon premier problème j'accepte, sinon des infos sur une classe BigInt serait les bienvenues =) !

Discussions similaires

  1. problème de package d'importation
    Par Mangacker dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/01/2007, 11h06
  2. Réponses: 2
    Dernier message: 19/12/2006, 18h37
  3. Problème lors de l'import de Oracle 9i à XE
    Par cedrich dans le forum Oracle
    Réponses: 7
    Dernier message: 29/09/2006, 16h16
  4. Réponses: 8
    Dernier message: 27/07/2006, 09h40
  5. Réponses: 2
    Dernier message: 28/10/2005, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo