Solution de contrôle d'accès
[15 mn de lecture - paru le 11/5/2003 - Public : Débutant]
|
   
|
Auteur
5. Système d’authentification du client sous Windows pocket pc 2002
5.1. Organisation du développement
Le but est de développer un moyen
de faire du contrôle d’accès embarqué en mettant au point un logiciel. Ce
logiciel permet de vérifier si une personne est autorisée à accéder à un lieu
par exemple.
Nous devions développer ce
logiciel pour un PDA sans limite de temps ou d’argent. Nous avons développé
pour un HP5450 (empreinte digitale, wireless 802.11b…), ayant pour système
d’exploitation Pocket PC2002. Le choix se porta sur ce modèle pour la simple et
bonne raison qu’il comportait un périphérique d’authentification biométrique :
le lecteur d’empreinte digitale.
Création
du programme : récupération de l’empreinte
Avant toute chose, nous nous
devons de savoir quelques petites choses sur les implémentations de
périphériques Biométriques. Un consortium (BioAPI) s’est crée pour mettre en
place les spécifications relatives à la biométrie et les moyens de stockage de
données biométriques.
Ils ont mis en place le « Biometric Identification
Record » (BIR) pour récupérer n’importe données biométriques venant d’une
application : incluant des données brutes, des données intermédiaires prêt
pour la vérification ou l’identification. Voici la structure d’un BIR :

Pour utiliser le périphérique d’acquisition d’empreinte
digital il nous faut tout d’abord initialiser le périphérique avec la fonction:
BioAPI BioAPI_Init(const BioAPI_Version *Version,
uint32 Reserved1,
const void * Reserved2,
uint32 *Reserved3,
const void * Reserved4);
Versionétant une variable de type BioAPI_Version.
Les variables Reservedx sont des valeurs d’entrées réservées
qui sont à 0 ou NULL.
Puis nous voulions essayer de récupérer une empreinte et de l’afficher.
Pour cela nous avons initialisé le périphérique, puis avons appelé la fonction :
BioAPI BioAPI_Capture(BioAPI_HANDLE ModuleHandle,
BioAPI_BIR_PURPOSE Purpose,
BioAPI_BIR_HANDLE_PTR CapturedBIR, BioAPI_BIR_HANDLE_PTR AuditData,
sint32 Timeout
);
ModuleHandle est mis à 0 par défaut.
Purposeindique le but de la saisie de données biométrique. (Dans notre cas ça
sera BioAPI_PURPOSE_ENROLLpour la capture de l’empreinte)
CapturedBIRest une structure dans laquelle les données seront
utilisées pour une identification ou une vérification.
AuditDataest structure dans laquelle les données serviront pour
d’autres choses. (Affichage de l’empreinte par exemple)
Timeout, comme son nom l’indique, spécifie le temps que le
périphérique doit attendre avant d’arrêter l’acquisition
En ce qui concerne l’affichage, il faut
rajouter à notre fenêtre une frame. Puis créer une fonction qui va appliquer un
objet CPaintDC à notre fenêtre, et qui lui affichera l’empreinte en question.
Jusque là ce que nous avons fait est de
récupérer l’empreinte puis la stocker dans un fichier binaire grâce à la
fonction fopen en mode binaire et la fonction write qui nous permet d’écrire
dans le fichier.
Puis ce que nous avons fait, est de comparer une empreinte stockée sur le
disque dur du PDA et une empreinte acquise par le périphérique pour pouvoir
dire si une personne est enregistrée ou pas. Pour ce faire, nous lançons une
acquisition de l’empreinte avec la fonction BioAPI_Capture, récupérons les données dans le fichier de stockage,
et appelons la fonction
BioAPI BioAPI_VerifyMatch
(BioAPI_HANDLE ModuleHandle,
const BioAPI_FAR *MaxFARRequested,
const BioAPI_FRR *MaxFRRRequested,
const BioAPI_BOOL *FARPrecedence,
const BioAPI_INPUT_BIR
*ProcessedBIR,
const BioAPI_INPUT_BIR
*StoredTemplate,
BioAPI_BIR_HANDLE *AdaptedBIR,
BioAPI_BOOL *Result
ModuleHandle est mis à 0 par défaut.
Pour les variables MaxFARRequested,
MaxFRRRequested, FARPrecedence sont mis à NULL car les
critères FAR et FRR ne sont pas nécessaires.
ProcessedBIRest le BIR à vérifier.
StoredTemplateest le BIR avec lequel le ProcessedBIR sera analysé.
AdaptedBIR est un paramètre qui peut être a NULL si une BIR
particulier n’est pas demandé.
Resultest une variable indiquant si les deux empreintes
correspondent ou pas.
Pour le moment nous en sommes à un système de contrôle d’accès embarqué,
mais ce que nous voulons faire c’est que toute la partie vérification,
identification se fasse sur un serveur distant, car la capture et vérification
d’empreinte demande beaucoup de ressources matériel ce qui entraîne un temps de
réponse un peu long. (De l’ordre de 2-5 secondes)
Gestion
des erreurs
Dans la gestion des erreurs, il fallait que nous sachions si
l’empreinte acquise était de bonne qualité ou pas pour être traiter. Pour cela
il fallait regarder dans l’en-tête du Biometric identification record, dans le
champ header puis le champ quality, si la valeur de ce champ était égale à 0,1,
ou 2. Nous considérons que si la valeur est 0, la capture n’a pas eu une image
de bonne qualité et que la procédure d’acquisition doit être recommencée. Dans
les autres cas, 1 et 2, l’image est traitable et nous pouvons par la suite
enchaîner sur d’autres fonctions.
Toutes les fonctions de la BioAPI retourne une variable :
Typedef
uint32 BioAPI_Return ;
#define BioAPI_OK
Dans cette variable, on y stocke le BioAPI_OK, toutes les
valeurs d’erreurs des valeurs spécifiques à BSP et retourné par un fournisseur
de service de haut niveau, toutes les erreurs concernant le périphériques.
5.2. Problèmes rencontrés
Le plus gros problème que nous ayons rencontré
fut un manque considérable de documentations sur les pocket pc, la
programmation embarquée. Problème due à la jeunesse de la technologie (en
comparaison avec les ordinateurs de bureau. De plus, nous n’avons pas rencontré
autant de personnes qui développent sur PDA que de personnes développant sur un
PC. Les seules solutions que nous pourrions fournir : les forums et les
newsletters.
La stabilité de l’OS fut et l’est
toujours un problème. Car par moment, le système « freeze » et on se
retrouve dans l’obligation de rebooter la machine. Rebooter qui peut parfois
provoquer un reset et tout ce qui a été
fait est perdu, et il faut recommencer la configuration de la machine. Pour le
moment aucune solution trouvé. (Peut-être passer à pocket pc 2003)
Un des problèmes récurrents
sur les forums et même quand on développe : Certaines classes ou fonctions
ne sont pas implémenter ou ne le sont que partiellement. Pour ce la, soit on
trouve les sources sur Internet ou soit on se met à les coder.
|