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 :

authentification par carte à puce : utiliser un thread ou un processus


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut authentification par carte à puce : utiliser un thread ou un processus
    Bonjour à tous,
    je sais pas trop me servir des thread et processus. Je connais un peu le principe. Je travaille sous linux.

    Le contexte : je dois écrire un programme qui propose deux manières d'authentification à l'utilisateur.
    1) sois par login / mdp classique
    2) sois par carte à puce
    L'interface principale propose par défaut le mode classique : login / mdp. Cependant, si une carte à puce a été insérée, je dois changer d'interface qui demande à l'utilisateur d'entrer son code PIN.
    Je dois alors gérer les évènements relatifs à la carte.
    je pense que jdois créer un thread A ( ou un processus Père ?) qui est charger d'afficher l'interface par défaut et donc recueillir le login / mdp si une carte n'a pas été insérée.
    Je dois créer une autre thread B ( ou un processus Fils ?) qui change l'interface après avoir detecter l'insertion d'une carte, affichant "carte insérée" à l'utilisateur et demandant "veuillez afficher votre code pin".
    Le thread A ( ou le processus père ? ) sera notifié dès que le thread B ( ou le processus fils ? ) aura detecté une carte. Si pendant que le thread B attend qu'une carte soit insérée et que l'utilisateur a deja entré un login/mdp, le thread B doit se tuer, c'est à dire cesser d'attendre.

    Le problème : il me faut des threads ou des processus ?? ou aucun des deux.

    merci pour votre aide

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Hello,

    Pour moi je vois pas trop l'interet d'avoir 2 thread pour gerer la chose.
    N'y aurait-il pas moyen de s'enregistrer a deux evenements :

    - le 1er serait l'insertion d'une carte a puce dans un lecteur (qui remonte sans doute de tes drivers).
    - le deuxieme serait interne a ton programme lorsque le user rentre son login, tu envois l'event login/MDP entered

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut utiliser un processus ou un thread
    L'interêt de deux threads ( ou deux processus ? ) c'est, d'une part un thread se charge de demander à l'utilisateur son login et mot de passe en cas d'oubli de la carte à puce. D'autre part, en "parallèle", une autre thread vérifie si une carte a été insérée. Si c'est le cas, on bascule directement sur une autre interface demandant le code PIN.

    mon problème :
    1) Je vois pas comment procéder autrement sans les threads ( ou processus ? ) car quand le programme arrive à la phase à laquelle il demande à l'utilisateur d'entrer son login mdp, il peut pas en meme temps vérifier si une carte a été insérée.
    2) Je dois utiliser un thread ou un processus ? Je maitrise pas bien la notion de processus et de thread.

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Points : 169
    Points
    169
    Par défaut
    Il faudrait que tu bloque ton application dès lors qu'une carte est insérée ou que la personne commence à taper son login.

    Enfin je pense puisque imaginons que je tape un morceau de Login, je rentre une carte et je la sort ?! Ca mettrait le bazar...

    Oui, les threads pour faire ce genre de choses sont vraiment bien.

    Voie aussi du coté des sémaphores. Ils te permettent de bloquer une ressource temporairement, ça pourrait t'être utile.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Hello,

    Comment ton application va t-elle savoir qu'une carte a ete insere?

    La facon dont je verrai la chose est la suivante:

    - tu as un driver pour ta carte a puce qui detecte (de la facon qu'il veut, certainement un pooling) qu'il y'a une carte qui a ete inseree dans le lecteur. A priori ce n'est pas a toi de faire cette partie, et ta premiere thread sera la.


    - Dans ton programme il y'aura quelque chose comme:


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    static sem_t sem;
     
    static void ma_cb_kd_une_carte_est_inseree()
    {
        //Authentification par carte.
        sem_post(&sem)
    }
     
    static void * key_event_routine(void *user_data)
    {
        //faire ta detection de login/mdp ici
     
        if(authentification_ok)
            sem_post(&sem);
    }
     
     
    void main (void)
    {
        pthread_t thread;
        pthread_attr_t attr;
        struct sched_param param;
     
        pthread_attr_init(&attr);
        pthread_create(&thread, &attr, key_event_routine, NULL);
        pthread_attr_destroy(&attr);
     
        carte_a_puce_insered_event_register(ma_cb_kd_une_carte_est_inseree);
     
        sem_init(&sem, 0, 1);
     
        //When for a post from anybody.
        sem_wait(&sem);
     
        pthread_cancel(thread);
     
        //Authentification done.
    }
    Sinon tu peux gerer la chose avec une librairie (je pense a la SDL) auquel cas tu n'as pas besoin de thread. Mais en effet, apres avoir reflechi un peu plus, sans ca, tu es oblige de faire un thread!

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    le fonctionnement de mon programme est le suivant ( je fais du PAM en fait ):
    - le gdm contient le main() du progrmme, se charge de communiquer avec l'utilisateur. Le mode d'authentification (login/mdp ou carte à puce) lui est complètment transparent. c'est :
    - libpam qui s'en charge du mode d'authentification. Il lit un fichier de config et selon le type d'authentification spécifiée, il charge le module d'authentification qui peut être une authenfication simple (login/mdp : on charge alors pam_unix.so) ou aussi par carte à puce, on charge :
    - pam_pkcs11.so qui est une bibliothèque dynamique contenant les fonctions permettant de s'authentifier par carte à puce. C'est lui aussi qui se charge de la detection d'une carte à puce.

    remarques :
    - l'intérêt d'utiliser des bibliothèque dynamique dans ce cas est de ne pas recompiler gdm à chaque fois qu'on change de mode d'authentification.
    - ces trois programmes ne forment finalement qu'un seul process.
    - Le seul fichier dont je m'occupe est donc pam_pkcs11.c que je compile en pam_pkcs11.so
    - la source de gdm n'est pas accessible.


    ma question :
    -- pourrais - je créer mon thread dans pam_pkcs11.so ( qui lui ne contient pas le main() )
    -- a ma connaissance on fait pthread_create( ) dans main. Serait - de faux ?

Discussions similaires

  1. [JavaCard] Authentification par carte à puce
    Par valdano dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 16/10/2012, 19h19
  2. Authentification par carte magnétique
    Par afrodje dans le forum Sécurité
    Réponses: 3
    Dernier message: 11/06/2010, 10h12
  3. Authentification par carte magnétique
    Par afrodje dans le forum Composants
    Réponses: 0
    Dernier message: 25/05/2010, 10h58
  4. authentification par carte à puce : TPS ?
    Par ikuzar dans le forum Administration système
    Réponses: 0
    Dernier message: 07/06/2009, 23h13
  5. authentification visage par carte à puce
    Par imene_t1 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 10/01/2008, 11h28

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