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 :

Mise en place de cryptage


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Mise en place de cryptage
    Bonjour,

    J'ai créé un système d'authentification en C++. Il permet d'authentifier un client via un socket. Je me suis documenté sur le sujet et j'ai trouvé que le système de défi réponse convenait parfaitement à mon projet car le mot de passe ne circule pas par le réseau. Le problème, c'est que je ne sais pas quelle librairie utiliser. J'ai regardé libgmp pour générer des nombres très grands et openssl pour le sha1 mais il y a aussi la librairie crypto++ qui sert aussi à ça. Comme c'est la première fois que je veux crypter des données, je voulais avoir d'autres avis.

    Cordialement,
    Joda89

  2. #2
    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,

    Je crois que tu es parti sur un soupe relativement mal comprise des différentes possibilités qui te sont offerte

    OpenSSL est une bibliothèque qui implémente le protocole SSL (Secure Sockets Layer), c'est à dire, la manière dont deux ordinateurs distants vont "communiquer entre eux".

    Les bibliothèques Sha-X sont des bibliothèques fournissant des fonctions de hashage, c'est à dire, des fonctions renvoyant des "sommes de controle" basée sur sur les données analysées en évitant autant que possible les risques de "collision" (comprend : le fait que deux ensembles de données distincts fournissent une somme de controle identique) mais sans espoir de retrouver l'ensemble de données d'origine

    La bibliothèque crypto++ quant à elle fournit des fonctions de cryptographie, c'est à dire des fonctions qui permettent de rendre les informations incompréhensible à toute personne (ou logiciel) ne disposant pas des informations qui permettront de décrypter la donnée envoyée.

    Enfin, le système défi réponse consiste à cumuler un certain nombre de données issues de plusieurs sources (typiquement une donnée issue du "client" et une autre issue du "serveur"), à les faire passer dans une "moulinette" particulière de manière à obtenir une "réponse" que le client devra renvoyer au serveur afin de faire comprendre que le client dispose bien des meme données que le serveur.

    GMP est totalement hors catégorie, étant donné qu'elle ne fournit "que" la possibilité de manipuler des grand nombres

    Pour expliquer un peu d'avantage les choses, nous pourrions dire que:
    • SSL est le langage qu'un chinois et un francais pourraient décider d'un commun accord d'utiliser afin d'arriver à se comprendre
    • SHA-X permet essentiellement de s'assurer que les données qui sont transmises n'ont pas été altérées (pour quelque raison que ce soit) entre le moment où elles sont émises par le serveur et le moment où le client les reçoit
    • crypto++ permet à l'émetteur de "coder" un message afin de le rendre incompréhensible à toute personne mal intentionnée et au récepteur de récupérer le message d'origine (en appliquant l'algorithme inverse de celui qui a été utilisé pour le codage)
    SSL est donc un choix "cohérent" en terme de protocole de communication, "simplement" parce qu'il rend la tache difficile à une "personne mal intentionnée" qui souhaiterait venir écouter ce qui se dit entre les deux ordinateurs.

    Par contre, pour décider entre l'utilisation de SHA-X ou de crypto, il faut s'intéresser à l'utilisation qui est faite des données qui sont transmises.

    SHA-X sera excellent pour transmettre des informations qui ne devront pas être récupérées sous leur forme d'origine, telles qu'un mot de passe par exemple, parce qu'il suffit au serveur de le faire passer sa version du mot de passe "dans la moulinette" pour s'assurer que la somme qu'il obtient est identique à celle qui a été envoyée par le client après qu'il ait fait passer le mot de passe (introduit par l'utilisateur) dans la meme "moulinette".

    SHA-X sera aussi excellent pour s'assurer qu'un fichier n'a pas été corrompu lors du transfert car si on change ne serait-ce qu'une lettre dans le fichier, la somme calculée par le récepteur sera totalement différente de la somme fournie par l'émetteur.

    Si, par contre, il faut que le récepteur puisse récupérer les données d'origine (par exemple, un numéro de compte banquaire, un montant de transaction et un bénéficiaire), crypto s'avérera être la meilleure solution, car ce que crypto sait faire, crypto sait le défaire

    Le système "défi réponse" est particulièrement utile pour éviter de faire transiter des informations utiles:

    Sachant que tant l'émetteur que le récepteur dispose d'une information "fixe" (par exemple : un numéro de code bancaire), si on rajoute une information "aléatoire" (en cela qu'elle est déterminée à un instant T) fournie par le serveur, que l'on fait passer le tout dans une moulinette donnée, le client devra renvoyer une réponse qui correspond à celle que le serveur aura calculée pour la partie fixe à laquelle il aura rajouté l'information aléatoire.

    Son cas d'utilisation est fort proche de celle de SHA-X pour la transmission du mot de passe, à ceci prêt qu'il n'y a strictement aucun rapport entre la partiie fiixe et la réponse à envoyer / recevoir (étant donné qu'il faut prendre, en plus, la partie "aléatoire").

    Maintenant que j'ai (ou du moins que j'espère ) permis démêler un peu tout ce que tu n'avais apparemment pas correctement saisi, je vais quand meme essayer de répondre à ta question

    Dans le stricte carde de ce que tu demandes, à savoir une authentification, je dirais que le choix devrait donc se limiter à SHA-X ou au système "défi réponse", en sachant qu'ils souffrent cependant tous les deux du même problème : le fait qu'il est possible de générer (par exemple en utilisant la méthode dite "brute force" ) d'arriver à générer plus ou moins facilement une "collision" (même si elle demande du temps et des ressources) qui permet de "faire croire" au récepteur que les bonnes données ont été utilisée par l'émetteur
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Salut

    Je te remercie de m'avoir répondu aussi rapidement.
    Donc si je résume bien je peux oublier crypto++ car les données que j'envoi au client son aléatoire. Par contre je ne vois pas comment utiliser openssl avec un défi réponse. Je te donne un exemple de ce que j'avais imaginé :

    Le client envoi une demande au serveur avec juste le login
    Le serveur vérifie si le login existe puis récupère le mot de passe crypter en sha1 dans les tables sql a partir de cette donnée on crée un clé a = sha1 (concat (mot de passe + nombre aléatoire)) je l'envoi au client. Le client décrypte le sha1 et enlevé la partie mot de passe qu'il a lui même générer et enfin il renvoi le résultat au serveur. Le serveur compare les deux nombre si il faut identique le client a le bon mot de passe. C’est comme cela que fonctionne le défi réponse de ce que j'ai vu.

    Cordialement

  4. #4
    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
    Citation Envoyé par Joda89 Voir le message
    (snip) Le client décrypte le sha1 et enlevé la partie mot de passe qu'il a lui même générer et enfin il renvoi le résultat au serveur. (snip)
    Ca, ce n'est pas possible : sha-1 n'offre pas la possibilité de récupérer ce qui a servi à fournir la signature!!!

    Non, l'idée, c'est plutot:
    • 1- le serveur choisi de manière aléatoire une information qu'il va demander au client de "convertir" selon certaines règles
    • 2- Le client utilise les informations dont il dispose (login, mot de passe, autres), qu'il manipule pour obtenir des informations identiques à ce à quoi elles ressemble coté serveur (par exemple: le mot de passe codé sha-1) pour calculer la réponse
    • 3- le client renvoie la réponse au défi
    • 4- le serveur utilise les les informations dont il dispose (login, mot de passe éventuellement crypté sha-1, ...) pour calculer la réponse au défi qu'il a posé au client
    • 5- le serveur compare la réponse du défi envoyée par le client à la réponse qu'il a lui-même calculé
    • 6a - si les deux correspondent, l'acces est autorisé
    • 6b - si les deux ne corresondent pas, l'accès est refusé
    • 7 - on peut éventuellement recommencer un nombre limité de fois
    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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Salut
    ok je vois bien le prosses je te remercie encore pour ton aide je te tiens au courant de mon avancement .


    cordialement

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

Discussions similaires

  1. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  2. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15
  3. mise en place serveur web intranet
    Par gui4593 dans le forum Installation
    Réponses: 7
    Dernier message: 01/01/2004, 18h18
  4. Mise en place d'index....??
    Par liv dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/12/2003, 11h04

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