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

C Discussion :

question sur openssl, MD5, SHA1


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut question sur openssl, MD5, SHA1
    Bonjour à tous,
    je suis sur un projet de programme sous linux, et ce projet consiste à signer un paquet de données soit en SHA1 ou MD5 avec une clef publique et privée (privée pour coder, publique pour lire).
    Donc au début j'ai trouvé la fonction RSA_sign mais je me suis vite aperçu qu'elle ne fonctionne que sur une petite quantité de données, or mes paquets peuvent être très voluminieux.
    Après en creusant un peu je suis tombé sur les fonction MD5 et SHA1, qui semblent faire une sorte de checksum (avec leur propre algo), et cette signature je la repasse par la fonction RSA_sign (qui me demande la clef privée).
    Je voulais savoir si c'était la bonne façon de faire ou s'il y en avait une autre ?
    J'ai aussi trouvé la fonction RSA_encrypt, mais je ne sais pas si c'est adapté à ce que je veux faire ?
    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    MD5 et SHA1 sont des fonctions de hachage. Tu peux hacher du clair vers un condensé, mais pas faire l'action inverse.

    Tu peux en effet utiliser RSA pour chiffre/déchiffre avec un mécanisme de chiffrement à clés publiques, ou PGP, qui est lui aussi à clé publique et qui n'a pas de limite de taille pour la taille des données (à vérifier..)
    Pour PGP, tu as GnuPG qui fonctionne très bien en ligne de commande!

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    merci pour ta réponse.
    Première question, sur le therme hachage, effectivemet dans tout ce que j'ai pu lire il parle de hachage mais je n'en saisie pas bien ce que ça signifie.
    Je ne veux pas utiliser des lignes de commande mais des appels de fonctions dans mon code.
    Est ce que PGP utilise les clefs publique et privée, comme RSA ?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 378
    Points : 23 670
    Points
    23 670
    Par défaut
    Hello,

    Citation Envoyé par SuperSeb95 Voir le message
    Donc au début j'ai trouvé la fonction RSA_sign mais je me suis vite aperçu qu'elle ne fonctionne que sur une petite quantité de données, or mes paquets peuvent être très voluminieux.
    RSA_sign() est faite pour signer un document. L'idée consiste à faire d'abord un condensé de tes données avec une fonction rapide comme SHA ou MD5, par exemple, puis ne coder avec ta clé privée que cette signature.

    Si tu veux chiffrer des tes données, vois plutôt :
    — RSA_private_encrypt ;
    — RSA_private_decrypt ;
    — RSA_public_encrypt ;
    — RSA_public_decrypt ;

    Citation Envoyé par SuperSeb95 Voir le message
    merci pour ta réponse. Première question, sur le therme hachage, effectivemet dans tout ce que j'ai pu lire il parle de hachage mais je n'en saisie pas bien ce que ça signifie.
    Voir : http://fr.wikipedia.org/wiki/Table_de_hachage et http://fr.wikipedia.org/wiki/Fonction_de_hachage

    En soi, une table de hachage (traduction approximative de hash table) est une table organisée sur le modèle paire clé-valeur, laquelle clé est déterminée selon un critère particulier concernant la valeur à stocker. Et, à ce titre, on utilise une « fonction de hachage » qui, pour une certaine donnée passée en paramètre, te donne la clé correspondante. Cette clé, en principe, te permet d'accéder directement à l'entrée de la table concernée, donc en O(1). C'est utile lorsque tu souhaites regrouper des éléments qui n'ont pas de relation d'ordre entre eux, par exemple des couleurs. C'est aussi utilisé lorsque l'on cherche à faire un compromis entre le temps de triage et le temps de recherche d'un élément.

    Cela dit, il faut que la fonction de hachage d'une part soit rapide (sinon aucun intérêt). D'autre part, ce procédé implique pratiquement toujours que la fonction soit surjective, et donc qu'une même clé peut éventuellement correspondre à plusieurs éléments.

    Exemple simple : une fonction de hachage qui prend un mot en entrée et te rend sa première lettre : « appel » → « a ».

    C'est trivial à mettre en place, et si tu veux stocker tous les mots du dictionnaire, alors tu peux les stocker en vrac dans 26 listes différentes désordonnées. En recherchant ensuite un mot, la première lettre te donne immédiatement la liste dans laquelle il faut chercher et même si, de là, tu es obligé de tous les examiner un par un, ça ne fait que 1/26ème de la masse totale (ce n'est pas tout-à-fait vrai parce que l'ensemble des mots n'est uniformément réparti mais l'idée générale reste la même). Pourquoi est-ce efficace ? Parce que l'on sait à l'avance que le mot est composé de lettres de l'alphabet et que celles-ci sont au nombre de 26. C'est ce qui se passe lorsque tu ouvres un dictionnaire ou que tu cherches un nom dans l'annuaire : si tu cherches un nom en « Z », tu ne commences pas par le début. :-)


    Ça, c'est pour l'idée globale mais, en crypto, on n'utilise les fonctions de hachage que pour leur propriétés, à savoir associer rapidement et de manière certaine une clé de taille fixe dans un ensemble déterminé à une donnée arbitraire, et pas pour faire du hachage en particulier.

    Donc, dans le cas de MD5, quelque soit la longueur initiale des données, la formule est relativement facile à calculer et va toujours te renvoyer un résultat sur 32 bits. Ça veut dire qu'en théorie, deux documents distincts pourrait donner le même résultat, mais ceux-ci devraient être tellement différents qu'il serait impossible de les confondre. On va donc se servir de cette propriété pour identifier facilement un document ou bloc de données.

    Comme, a contrario, le RSA est beaucoup plus lent à calculer, lorsque l'on veut signer un document, on commence par un faire un condensé MD5 aux yeux de tous et on crypte ce condensé. Ça va plus vite et c'est généralement suffisamment fiable pour ce que l'on veut en faire.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Merci Obsidian pour cette réponse détaillée

    Un dernier point sur la fonction RSA_sign, est ce que la taille de la signature dépend de la taille de la clef ? parce que j'ai utilisé une clef en 128, la fonction fonctionne ( ) bien, par contre, j'ai fait le test avec 32 et la ça ne marche plus.
    En gros, je voudrais une signature sur 32 octets et pas 128.

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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