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

Sécurité Discussion :

Cryptage RSA par clef privée : Impossible à décoder avec OpenSSL


Sujet :

Sécurité

  1. #21
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Exactement, généralement on le transfert pas, mais on set le même des deux côtés.

  2. #22
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    C'est bon, grâce à l'IV correctement initialisé, ça fonctionne. Il fallait le câbler correctement côté PHP puis côté C++/OpenSSL.

    Maintenant, c'est ma signature RSA qui ne fonctionne pas. Bien signé avec la clef privée, impossible de vérifier côté C++ avec la clef publique, grrrrrr....

  3. #23
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Tu fais le contrôle manuellement ?

    Si c'est le cas, il te faut hasher exactement les mêmes données des deux côtés sans inclure la signature.

    Envoie :
    hash(text) -> signaturePriv(hash)

    Réception :
    hash(text) // sans la signature
    déchiffrement de la signature reçu avec clé pub

    comparaison des deux hash, ils doivent être égaux.

  4. #24
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par manticore Voir le message
    Tu fais le contrôle manuellement ?

    Si c'est le cas, il te faut hasher exactement les mêmes données des deux côtés sans inclure la signature.

    Envoie :
    hash(text) -> signaturePriv(hash)

    Réception :
    hash(text) // sans la signature
    déchiffrement de la signature reçu avec clé pub

    comparaison des deux hash, ils doivent être égaux.
    C'est peut-être là le problème...
    J'ai text qui n'est pas gros du tout, donc pas de hash !

    Envoie : Signature du texte non encodé
    signaturePriv(text)

    Réception : Vérification de la signature
    Verify(text,sign_recu)

    Et la fonction vérifie me retourne 0. Le verifie ne demande-t-il pas "binaire qui a généré la signature + signature + clef publique) pour vérifier que tout est OK ?

  5. #25
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    La signature est un hash chiffré par la clé privé.

    Essaye de comparer les deux textes, si tu as un seul bit qui change c'est foutu, donc peut-être un espace à la fin. Un caractère '\0' ?

  6. #26
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Non, c'est du binaire, 32 octets, et exactement identique !
    Peut-être le mode de signature ou des algos différent...

  7. #27
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par manticore Voir le message
    La signature est un hash chiffré par la clé privé.

    Essaye de comparer les deux textes, si tu as un seul bit qui change c'est foutu, donc peut-être un espace à la fin. Un caractère '\0' ?
    Est-ce obligatoire ? Il faut obligatoirement faire un hash des données ? J'ai 32 octets, le hash me prendra plus de place.
    OpenSSL me retourne l'erreur suivante : "Block type is not 01".
    Tu as une idée ? Ou il faut que j'encode dans ma licence avec "data" + "hash data" + "sign(hash data)" ?

  8. #28
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Quel peut être la différence entre CRYPT_RSA_SIGNATURE_PKCS1 et CRYPT_RSA_SIGNATURE_PSS ?
    Si je signe avec le mode CRYPT_RSA_SIGNATURE_PKCS1 j'obtiens algorithm mismatch !

    Je rappelle qu'en chargeant la clef publique, je suis bien en mesure de décoder la signature au sein de PHP mais pas en C++ avec la librairie OpenSSL.

    Grrrrrrrrr

  9. #29
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Bon, avec l'aide d'un ami j'ai (ou plutôt il a) trouvé.
    Coté php il faut initialiser la fonction de hachage à utiliser. De même côté C++ avec OpenSSL, il faut lui passer le hash des données en clair et non pas les données elles mêmes

    Reste un souci: comment assigner sous OpenSSL la structure RSA (clef publique) avec la clef plain text ? RSA sait facilement charger une clef contenue dans un fichier mais si je décide de mettre la clef directement dans le programme (ce qui évite d'avoir un fichier supplémentaire à balader) je ne sais pas comment en extraire les données pour initialiser la clef RSA.

    En fait PEM_read_RSA_PUBKEY prend un FILE * en entrée et moi je voudrais initialiser RSA directement avec le contenu du FILE *

    Une idée ? Un bout de code ?

    EDIT : je post cette question dans un nouveau thread, je passe le sujet en résolu, et merci encore !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [C#] Cryptographie par clefs privée/publique
    Par dev01 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/08/2011, 21h44
  2. Utilisation de deux bibliothèques différentes pour le cryptage RSA --> impossible ?
    Par Djobird dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/01/2011, 17h25
  3. Connexion SSH avec clefs privée/publique
    Par NikoBe dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 12/06/2007, 20h50
  4. [VB.NET2.0] cryptage RSA avec clef privée
    Par AP dans le forum Framework .NET
    Réponses: 4
    Dernier message: 17/04/2007, 15h35
  5. cryptage clef privee / clef publique
    Par maminova77 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 07/03/2006, 08h34

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