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

Windows Forms Discussion :

[C#] Crypto RSA


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut [C#] Crypto RSA
    Bonjour à tous.

    Voici mon probleme: j'ai à ma disposition un document signé (par l'algo RSA), la clé publique du certificat l'ayant signé, mais je n'arrive pas à vérifier l'authenticité de la signature ! Cela semble pourtant être une manip assez basique en terme de crypto mais aucue des classes que j'ai fouillées ne semble pouvoir faire ce que je veux seulement à l'aide de la clé publique...

    N'hésitez pas à me demander des compléments d'informations si vous avez touché de pres ou de loin a ce genre de probleme, je patauge depuis une demi journée ... :/

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    salut
    je crois que tu as un exemple tout fait dans ta frameworksdk à l'adresse locale de ton pc suivante:
    C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Security\PublicKeyCryptography\Readme.htm
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Merci pour ta réponse.

    J'ai jeté un coup d'oeil sur le code que tu m'as donné. Ce n'est malheureusement pas tout a fait ce que je souhaite faire. Dans ce code, il s'agit de crypter/décrypter des messages, alors que moi, j'aimerais vérifier l'authenticité d'un document signé i.e. qqchose du genre:

    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
    16
    17
    public static bool VerifyData(byte[] abyDataToVerify, byte[] abySignature, byte[] abyPublicKey)
    		{
    			try
    			{
    				// Get a reference of a RsaCryptoService provider
    				// involving the smart card
    				RSACryptoServiceProvider objRsaCsp = new RSACryptoServiceProvider (abyPublicKey);
     
    				return objRsaCsp.VerifyData(abyDataToVerify, "SHA1", abySignature);
    			}
    			catch(CryptographicException ex)
    			{
    				Console.WriteLine(ex.Message);
     
    				return false;
    			}   
    		}
    Toutefois, aucune surcharge du constructeur de RSACryptoServiceProvider ne prend une clé publique en parametre. Il doit exister d'autres classes (que je ne trouve pas) ou bien alors je m'y prends de la mauvaise maniere ...

    Une idée?

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Mais cette verif n'est elle pas déjà faite en declenchant une exception CryptographicException :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Non. Je n'arrive pas à faire utiliser a mon objet objRsaCsp le bon algorithme. Et pour ce que j'ai compris du RSA, seule une clé publique est necessaire mais cette classe ne semble pas etre d'accord avec moi

  6. #6
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Il me semble qu'il existe une méthode comme verifyHash qui prend un algo de signature (SHA1 ou MD5) en parametre.

    EDIT: c'est un membre du RSACryptoServiceProvider

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Merci pour ta réponse.

    Je confirme. Mais l'algo va alors utiliser une clé de ton KeyStore. Ce que je veux, c'est pouvoir spécifier la clé...

    Merci! N'hésite pas a envoyer des idees!

  8. #8
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Bon, c'est pas si simple qu'en JAVA mais bon, y'a moyen de s'y retrouver

    Si tu as les clés au format XML .NET, pas de souci, tu les charges avant de faire ton signData ou signHash.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static void VerifySignature(string publicKey, byte[] data, byte[] signature)
    {
     
    RSACryptoServiceProvider rsaSignatureCheck = new RSACryptoServiceProvider();
     
    // charge la clé public depuis la string en xml
    rsaSignatureCheck.FromXmlString(publicKey);
     
    // verifie la signature avec l'algo SHA1 (à utiliser maintenant que le MD5 est faillible)
    bool signatureValid = rsaSignatureCheck.VerifyData(data, "SHA1", signature);
     
    }
    Sinon, c'est plus compliqué tu peux reconstituer un RSAParameters en fournissant les données membres modulus et exponent au minimum je pense que ça suffit (Bon courage
    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
    16
     
    public static void VerifySignature(string publicKey, byte[] data, byte[] signature)
    {
     
    RSACryptoServiceProvider rsaSignatureCheck = new RSACryptoServiceProvider();
     
    // Création d'une clé RSA de toute pieces avec non mimines
    RSAKeyInfo.Modulus = ....
    RSAKeyInfo.Exponent = ....
    rsaSignatureCheck.ImportParameters(RSAKeyInfo);
     
     
    // verifie la signature avec l'algo SHA1 (à utiliser maintenant que le MD5 est faillible)
    bool signatureValid = rsaSignatureCheck.VerifyData(data, "SHA1", signature);
     
    }
    Enfin, c'est en anglais mais l'équivalent FR doit bien exister, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncapi/html/encryptdecrypt2a.asp
    l'exemple de ce que j'ai lu, permet de sortir les infos voulues depuis un certificat text.

    voili voilou

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Tres interessant, tout cela... Dans mon appli, je n'ai la clé publique a utiliser qu'en type byte[] ... J'vais essayer de m'en sortir pour recupérer modulus et exponent mais a mon avis, c'est pas gagné ...

    Mais la science avance !!

  10. #10
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Ce qui m'amène à une question toute bete, as-tu la clé publique ou le certificat ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    La clé publique seulement. Et en byte[] seulement.

  12. #12
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Alors, l'article en anglais va t'interessé au plus au point, puisque qu'il te montre justement comment récupéré les infos que tu cherches à partir d'un clé en byte[].

    Par contre, si y'a plus simple, je suis preneur parce que là....

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Effectivement, je viens de voir que c'est pile poil adapté a ce que je veux (bien qu'il y ait un this.machin sans savoir ds quelle classe on est censé etre, mais bon ...).

    A mon avis pour avoir plus simple, RDV a la sortie du Framework 2

    Merci bcp pour ton aide ô combien precieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Crypto++] RSA ?
    Par nostrora dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 23/03/2012, 12h19
  2. [C#] problème crypto RSA
    Par moulefrite dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/01/2009, 18h41
  3. Crypto RSA - besoin d'aide.
    Par Faiche dans le forum Langage
    Réponses: 6
    Dernier message: 19/10/2006, 19h56
  4. Aide pour crypto RSA
    Par getthematrix dans le forum C++
    Réponses: 10
    Dernier message: 07/01/2006, 14h45
  5. RSA - Crypto
    Par chrdou dans le forum Sécurité
    Réponses: 4
    Dernier message: 11/04/2005, 14h09

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