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 :

Cryptage en C++ : Simple, léger et sûr ?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 70
    Points : 38
    Points
    38
    Par défaut Cryptage en C++ : Simple, léger et sûr ?
    Bonjour,

    je suis à la recherche d'une implémentation d'un algorithme de cryptage. Seulement, j'aimerais autant qu'elle soit légère ( En évitant une bibliothèque entière dédiée à ça ), simple ( -> Utilisation facile avec des std::string, ou au moins un exemple avec ), sûre ( Algorithme reconnu, pas un simple XOR ) et portable.

    Mais j'ai bien l'impression que je demande la lune... A moins que quelqu'un ait la perle rare ?

    Merci d'avance !

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    qui soit pas dédié et sur ... je connais pas. (qui soit pas dédié tout court d'ailleurs je connais pas).

    Sinon un xor c'est sur... si ta passphrase est aussi longue que la chaine a craquée.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    AES, ou RC4, c'est simple, léger, efficace, et encore solide.

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Goten Voir le message
    Sinon un xor c'est sur... si ta passphrase est aussi longue que la chaine a craquée.
    Et à usage unique

  5. #5
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    Est ce que la fonction de chiffrement doit être réversible ? Sinon, il y a MD5.
    La valeur n'attend pas le nombre des années

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Goa,
    Citation Envoyé par Jenna Voir le message
    Est ce que la fonction de chiffrement doit être réversible ? Sinon, il y a MD5.
    Elle doit l'être, sinon on ne parle pas de chiffrage.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par droggo Voir le message
    Elle doit l'être, sinon on ne parle pas de chiffrage.
    On parle bien du chiffrement des mots de passe et pourtant ce n'est pas réversible.
    La valeur n'attend pas le nombre des années

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Ce n'est parce que beaucoup de gens raconte des âneries qu'elle deviennent vraies pour autant.

    MD5, ce n'est pas du chiffrement mais du hachage.

  9. #9
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    MD5, ce n'est pas du chiffrement mais du hachage.
    Je suis tout à fait d'accord. Il n'empêche que l'on peut utiliser des fonctions de hachage pour faire du chiffrement non réversible. Les mots de passe dans le fichier /etc/shadow sont chiffrés par défaut avec MD5.
    La valeur n'attend pas le nombre des années

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Non, ce n'est pas du chiffrement. l'utilisation de ce terme est juste incorrect.

    Chiffrer, c'est stocker l'info de telle manière qu'elle ne soit pas intelligible. Or, dans le cas du hachage, l'info n'est pas enregistrée (puisque la fonction de hachage n'est pas bijective). C'est complètement différent !

    Le hachage permet simplement de vérifier qu'une information source provient du même ensemble qu'un autre. Le nombre d'ensemble étant très grand dans un cas de fonctions comme MD5, cela peut-être utilisé pour les mots de passe.

    Mais des fonction de hachage bien plus simples sont utilisés par exemple pour la correction d'erreur (bit de parité sur les liaison RS232, CRC pour les CD ou bien d'autres supports, etc . . .).

    Parler de chiffrage dans un tel cas est bien un abus de langage, et c'est totalement incorrect.

    Pour s'en convaincre, il suffit de voir qu'une fonction comme modulo x est une (mauvaise) fonction de hachage.

  11. #11
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    Chiffrer, c'est stocker l'info de telle manière qu'elle ne soit pas intelligible.
    D'accord sur ce point.

    Citation Envoyé par deadalnix Voir le message
    Or, dans le cas du hachage, l'info n'est pas enregistrée (puisque la fonction de hachage n'est pas bijective). C'est complètement différent !
    Et pourtant, si on prend l'exemple des mots de passe Unix, la fonction de "transformation" (je ne dis pas chiffrement puisque cela te froisse ) est une fonction de hash (souvent, c'est MD5) et c'est l'empreinte qui est enregistrée dans le fichier /etc/shadow.

    Comme quoi il est possible de rendre incompréhensible de l'information sans pour autant utiliser une fonction réversible.

    Citation Envoyé par deadalnix Voir le message
    Parler de chiffrage dans un tel cas est bien un abus de langage, et c'est totalement incorrect.
    Chacun sa sensibilité, moi, cela ne me choque pas (dans le contexte que je décris)
    La valeur n'attend pas le nombre des années

  12. #12
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    En même temps, on ne chiffre pas le mot de passe sous unix, on fait comme partout, on stock un hash, parce que le but n'est pas de stocker le mot de passe, mais de stocker une valeur qu'on pourra identifier.
    Stocker le mot de passe est juste intolérable. Ca voudrait dire que si on arrive a entrer sur ton système, on a le mot de passe. C'est une hérésie. Alors que stocker un hash, rentrer sur le système ne donne pas le mot de passe, il faut encore trouver un mot de passe qui donnera le même hash.
    Chiffrer n'est définitivement pas la même chose que hasher.
    Il est vrai cependant que beaucoup de personnes utilisent le mot "chiffrer" ou "crypter" en parlant des hash, mais c'est un tort. C'est pareil que les gens qui parlent de "routeur" en désignant les "modem-routeur-switch-wifi". Juste parce que du point de vue markerting c'est mieux de dire "routeur" que "modem-routeur-switch-wifi". Du coup, pour la plupart des gens, un routeur c'est un modem avec 4 ports Ethernet en sortie et du wifi, alors que dans cette définition, la partie routeur n'apparait même pas.
    Ce n'est pas parce que certains utilisent le mot qu'il est bon pour autant

  13. #13
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Avec tout ca on a pas répondu à la question d'origine...
    Voila une implémentation simple du blowfish, un chiffrement rapide et de bonne qualité.
    http://www.codeproject.com/KB/securi...px?msg=2665930
    edit: Ou directement sur le site de blowfish : http://www.schneier.com/blowfish-download.html

    Sinon, le AES ici, mais je suis pas sur de la licence (pas regardé en fait ^^').
    http://www.lomont.org/Software/Misc/AES/AES.php

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Citation Envoyé par Jenna Voir le message
    Comme quoi il est possible de rendre incompréhensible de l'information sans pour autant utiliser une fonction réversible.
    L'information n'est pas stockée. Une infinité d'information donnent le même hash. L'information n'est plus la. Elle n'a donc pas été chiffrée. On a bien un truc incompréhensible au final, mais qui ne contient plus l'info originelle (c'est bien pourquoi ce n'est pas bijectif).

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Merci pour vos réponses ( et pour le petit débat ), je me suis tourné vers l'AES

  16. #16
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    L'information n'est pas stockée. Une infinité d'information donnent le même hash. L'information n'est plus la. Elle n'a donc pas été chiffrée. On a bien un truc incompréhensible au final, mais qui ne contient plus l'info originelle (c'est bien pourquoi ce n'est pas bijectif).

    hein? Une infinité ? justement le principe du hash c'est d'éviter les collisions ...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Un hash de qualité à divers attributs. En fonction de ce pourquoi on l'utilises, on en choisira certains au détriment d'autres.

    Éviter les collision est une caractéristique recherchée. Mais ce qu'on entend par la, c'est en fait de bien répartir les hachages. En effet, partant d'un ensemble infini vers un ensemble fini, tu aura forcement des collisions. Ce qu'on cherche à faire quand l'on dit que l'on veux éviter les collisions, c'est qu'on fait en sorte que toutes les valeurs hachées aient sensiblement la même probabilité. En effet, plus ces probabilités sont disparates, et plus il se produira de collisions.

    L'étude du paradoxe des anniversaires nous montre que, avec une fonction de hachage parfaite, tu as une chance sur deux d'avoir une collision ou plus entre sqrt(N) éléments si le hachage peut prendre N valeurs.

    À ce jeu la, la fonction module est excellente par exemple.

    Une autre qualité d'un bon hachage est le fait qu'un modification mineure dans le clair donne un hachage complètement différent. C'est une propriété très importante dans le domaine de la sécurité. À ce jeu la, le modulo est nul.

    On va aussi chercher à ce qu'il soit rapide à calculer. Cela est capital dans le cas d'un table de hachage par exemple. Par contre, cela n'est pas important en sécurité.

  18. #18
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    En plus simple, un hash à une taille finie, donc il existe un nombre exacte de hash possible.
    Mais un hash se calcul a partir de et n'importe quoi, de n'importe quelle taille.
    Donc, pas besoin de démonstration mathématique compliquée pour comprendre qu'il y a une infinité de données qui donneront le même hash, elles seront juste très différentes les unes des autres et n'auront probablement pas du tout la même taille.
    (Entre ici et le topic sur le bcrypt on en aura parlé du hash/chiffrement ces deux derniers jours D'ailleur je m'en vais me renseigner sur cette histoire du paradoxe de l'anniversaire, ca a l'air intéressant )

  19. #19
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par deadalnix Voir le message
    Un hash de qualité à divers attributs. En fonction de ce pourquoi on l'utilises, on en choisira certains au détriment d'autres.

    Éviter les collision est une caractéristique recherchée. Mais ce qu'on entend par la, c'est en fait de bien répartir les hachages. En effet, partant d'un ensemble infini vers un ensemble fini, tu aura forcement des collisions. Ce qu'on cherche à faire quand l'on dit que l'on veux éviter les collisions, c'est qu'on fait en sorte que toutes les valeurs hachées aient sensiblement la même probabilité. En effet, plus ces probabilités sont disparates, et plus il se produira de collisions.

    L'étude du paradoxe des anniversaires nous montre que, avec une fonction de hachage parfaite, tu as une chance sur deux d'avoir une collision ou plus entre sqrt(N) éléments si le hachage peut prendre N valeurs.

    À ce jeu la, la fonction module est excellente par exemple.

    Une autre qualité d'un bon hachage est le fait qu'un modification mineure dans le clair donne un hachage complètement différent. C'est une propriété très importante dans le domaine de la sécurité. À ce jeu la, le modulo est nul.

    On va aussi chercher à ce qu'il soit rapide à calculer. Cela est capital dans le cas d'un table de hachage par exemple. Par contre, cela n'est pas important en sécurité.
    Je sais bien tout ça, c'est juste que j'avais mal interprété ce que tu voulais dire. (les joies de lire vite...)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  20. #20
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par ctxnop Voir le message
    En plus simple, un hash à une taille finie, donc il existe un nombre exacte de hash possible.
    Mais un hash se calcul a partir de et n'importe quoi, de n'importe quelle taille.
    Donc, pas besoin de démonstration mathématique compliquée pour comprendre qu'il y a une infinité de données qui donneront le même hash, elles seront juste très différentes les unes des autres et n'auront probablement pas du tout la même taille.
    (Entre ici et le topic sur le bcrypt on en aura parlé du hash/chiffrement ces deux derniers jours D'ailleur je m'en vais me renseigner sur cette histoire du paradoxe de l'anniversaire, ca a l'air intéressant )
    Le paradoxe des anniversaires vient du fait qu'il suffit de regrouper 23 personnes pour avoir une chance sur deux de trouver au moins deux personnes ayant leur anniversaire le même jour, et que, avec 53 personnes, les chances sont supérieures à 99 %, alors qu'il y a, pour les années non bissextiles, 365 jours par an.

    Bien sur, ces probabilités sont calculées sans prendre une date de naissance particulière en compte, mais, au niveau des sommes de hashage, nous observons un paradoxe similaire lorsque l'on s'intéresse au nombre de messages dont il faut évaluer les sommes qu'il faut observer pour avoir une chance sur deux (ou plus) d'obtenir une collision.

    En d'autres termes, ce paradoxe met en évidence la "facilité" avec laquelle il est possible d'obtenir une collision "sur demande", si l'on ne prend pas en compte une somme de hashage donnée.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Algo de cryptage simple
    Par Muesko dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 12/09/2006, 14h53
  2. [Crypt]Fonction simple de cryptage des données
    Par Agoye dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/08/2006, 19h35
  3. [Sécurité] Cryptage simple d'entier
    Par Florent08800 dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2006, 15h26
  4. Problème cryptage simple de fichier
    Par darthnexus dans le forum C++
    Réponses: 4
    Dernier message: 03/06/2006, 18h16
  5. Cryptage Simple de mot de passe
    Par xavmax dans le forum C++Builder
    Réponses: 12
    Dernier message: 29/11/2005, 23h44

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