Pour la 10ème semaine de l'année 2023, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !
De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !
Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !
Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker :)
Le numéro 190, celui de février 2023, du magazine Full Circle en français est publié même pas dix jours après sa sortie en anglais. Dommage que l'on ne puisse pas partager le champagne avec vous ! En tout cas, cela vous laisse le temps d'écrire un article ou un courriel vous-même et de l'envoyer à Ronnie (même en français) avant la date limite, le dimanche 12 mars.
Quoi qu'il en soit, vous pouvez visionner ou télécharger ce numéro sur notre page NUMÉROS ou le récupérer directement en cliquant sur la couverture ci-dessous.
Dans ce numéro, vous pourrez lire les contributions de (par ordre de leur apparition) :
Erik (alias ErikTheUnready) : les Actus, Command & Conquer - où il nous explique ce que c'est qu'un shell, deux dessins, et Q. ET R. ;
Greg Walters, qui a réussi à faire biper son ordinateur grâce à Python et une petite bibliothèque qui s'appelle « beepy » ! ;
Alan Germain présente Rescuezilla comme un programme efficace et facile de la sauvegarde et la récupération d'un disque ou, même, d'une partition ;
Robert Boardman, qui a repris le tutoriel sur le LaTeX, nous montre comment facilement créer un livre entier à partir de plusieurs chapitres distinctes ;
Mark Crutch nous livre la partie 130 (!) d'Inkscape ;
Ronnie, notre rédacteur en chef, continue son tutoriel sur FreeCAD ;
Knightwise raconte son histoire sur Ubuntu et un portable Surface Go 2. Il espérait devoir travailler de façon héroïque pour mettre Ubuntu sur cette machine de Microsoft en rencontrant plein de problèmes, mais il a été bien déçu !?! et
Adam Hunt fait, non pas une, mais deux critiques de distributions : Xubuntu 22.10 (quasi parfaite) et MX Linux qu'il qualifie de distribution « impressionnante ».
Tout le reste (les jeux, Ubuntu au quotidien, etc.) est supposé être DE RETOUR LE MOIS PROCHAIN. On peut espérer que ce sera le cas... Et n'oubliez pas que vous avez le temps d'envoyer quelque chose à Ronnie !!!
Notre petite équipe vous souhaite bonne lecture,
Bab, scribeur et relecteur, darkjam, traducteur, d52fr, traducteur et relecteur, et moi-même, AuntieE, traductrice et relectrice.
pgBackRest aims to be a reliable, easy-to-use backup and restore solution that can seamlessly scale up to the largest databases and workloads by utilizing algorithms that are optimized for database-specific requirements.
— Permalien
Jusque là réservés à Hollywood et aux entreprises les plus sécurisées, ces dernières années les lecteurs d’empreinte ont débarqué dans notre vie quotidienne via nos smartphones, et l’intérêt porté par l’industrie à ces capteurs les rend aujourd’hui accessibles à tout un chacun.
Dans ce tutoriel nous allons voir comment nous pouvons utiliser un lecteur d’empreinte digitale, ici le modèle R307 de l’entreprise GROW, avec le Raspberry Pi.
Le but sera donc de connecter le lecteur d’empreinte R307 au Raspberry Pi afin de pouvoir vérifier l’identité d’une personne via son empreinte digitale, et de déclencher un programme en cas de reconnaissance de l’empreinte, ceci afin de vous permettre, par exemple, de créer un système d’authentification, ou de porte sécurisée !
Le matériel nécessaire pour utiliser un lecteur d’empreinte digitale avec le Raspberry Pi.
Avant de passer à la suite, faisons la liste du matériel qui vous sera nécessaire pour créer votre lecteur d’empreinte digitale à base de Raspberry Pi. Vous aurez donc besoin du matériel suivant :
À noter qu’il s’agit ici uniquement du matériel pour la partie lecteur d’empreinte, si vous souhaitez par exemple utiliser ce lecteur pour créer un système de porte connectée, alors vous aurez besoin du matériel adapté pour cette autre partie, comme un relais 12V, un verrou électronique, une alimentation électrique 12v.
Pourquoi avoir choisi un lecteur d’empreinte digitale optique et plus spécialement le modèle R307 ?
Avec les différentes technologies disponibles, pourquoi avons-nous choisis d’utiliser un lecteur d’empreinte optique, et pourquoi spécialement le R307 de GROW ?
Si nous avons choisis un lecteur d’empreinte optique, c’est parce que ce type de lecteur nous semble convenir à un plus large éventail de situations.
Ce type de capteur, de par sa conception, ne nécessite pas de contact direct entre le doigt et le capteur électronique. Il est donc globalement possible d’isoler totalement la partie électronique de l’environnement, et de ne laisser exposé que la plaque de verre, laquelle ne craint aucune intempérie et pourra facilement être nettoyée en cas de pluie, éclaboussures, etc, voir pourquoi pas remplacée en cas de dommages plus importants.
Ce type de capteur est également moins sensible aux problèmes d’empreintes « sales », et notamment aux problèmes d’humidité (doigt mouillé en cas de pluie, transpiration en cas de températures élevées comme en ce moment, etc.).
Quand au choix du module R307 plutôt qu’un autre, ce sont les facteurs suivants qui ont motivé notre choix : le module est trouvable très facilement et pour un prix abordable ; le module est bien documenté par le fabricant (vous trouverez la documentation ici) ; il est directement compatible avec le Raspberry Pi ; le R307 supporte le stockage des empreintes digitales et leur vérification en interne, idéal pour une utilisation simplifiée ; il supporte aussi la récupération des empreintes brutes, idéal pour une utilisation avancée ; il existe une bibliothèque Python open-source pour interagir avec le module.
Comment connecter le lecteur d’empreinte digitale R307 au Raspberry Pi.
Quand vous touchez au port GPIO du Raspberry Pi, pensez toujours à débrancher le Raspberry avant toute manipulation, un court circuit est vite arrivé !
La première étape de ce tutoriel va être de connecter notre lecteur d’empreintes digitales au Raspberry Pi, et pour cela nous allons commencer par consulter la documentation fournie par le constructeur, le « datasheet », et particulièrement ce que l’on appelle le « pinout », c’est-à-dire la position et l’ordre des différents connecteurs.
En lisant un peu la documentation et en observant ce schéma, on se rend rapidement compte de deux choses. Premièrement que le lecteur communique via une connexion de type « serial », comme l’indique notamment la présence d’un port TXD (Transmit Data) et RXD (Receive Data). Deuxièmement que le module peut être alimenté soit en 5V, soit en 3.3V.
Le Raspberry Pi dispose à la fois de ports 3.3V et 5V, dans notre cas nous allons faire le choix d’alimenter le lecteur en 5V.
Nous allons donc brancher le module de la façon suivante :
Lecteur R307
Raspberry Pi(numérotation physique)
Pin 1 – 5V
Pin 2 – 5V
Pin 2 – GND
Pin 6 – GND
Pin 3 – TXD
Pin 10 – UART0 RXD
Pin 4 – RXD
Pin 8 – UART0 TXD
Pin 5 – TOUCH
Non connecté
Pin 6 – 3.3V
Non connecté
Tableau de connexion entre les ports du lecteur R307 et ceux du Raspberry Pi.
Dans la pratique faire le branchement peut être un peu plus compliqué que prévu. En effet, le module utilise un connecteur micro JST avec un pas beaucoup plus petit que les connecteurs 1.27mm que nous utilisons d’habitude. Par défaut le module est souvent fourni par les vendeurs avec un connecteur JST femelle d’un côté et des câbles sans connecteur de l’autre côté. Vous allez donc devoir ajouter des ports GPIO pour pouvoir connecter le module à votre Raspberry.
Si vous ne possédez pas ce type de matériel, pas de panique, vous pouvez toujours couper un câble Dupont femelle, et utiliser un fer à souder pour le raccorder au câble de base. Si vous en avez, n’hésitez pas à ajouter un bout de gaine thermorétractable pour protéger la soudure des contacts électriques involontaires. À défaut, un bout de scotch est déjà une première protection.
Installer les librairies Python pour le lecteur d’empreinte R307 et configurer le Raspberry Pi.
Maintenant que nous avons branché le lecteur d’empreinte, et avant de passer au code pour utiliser le lecteur d’empreinte, nous allons devoir installer les librairies Python utilisées pour contrôler le lecteur d’empreinte digitale, ainsi que configurer le Raspberry Pi pour activer le port série.
Nous allons donc commencer par mettre à jour la liste des dépôts et nous assurer que Python3 et PIP3 soient installés sur le Raspberry Pi. Pour cela, lancez simplement la commande ci-dessous et attendez la fin :
Installer la librairie PyFingerprint pour contrôler le lecteur R307
Pour contrôler le lecteur d’empreinte digitale, nous allons utiliser une librairie développée par Bastian Raschke (merci à lui). Et comme Python est un langage merveilleux, il nous suffit pour cela d’utiliser PIP, le gestionnaire de paquets de Python, en lançant la commande ci-dessous :
sudo pip3 install pyfingerprint
Activer le port série du Raspberry Pi
Dernière étape avant de passer au code, nous devons activer le port série du Raspberry Pi afin de pouvoir communiquer avec le lecteur d’empreinte. En effet, par défaut le port série est désactivé, et sur les modèles les plus récents il est potentiellement employé pour la communication bluetooth.
Pour commencer nous allons ajouter l’utilisateur actuel à la liste des utilisateurs ayant le droit d’utiliser le port série. Pour cela, lancez la commande ci-dessous :
Si vous ne l’avez pas fait, redémarrer le Raspberry Pi pour vous assurer que toutes les modifications ont été prises en compte.
Nous allons maintenant pouvoir passer à la dernière étape, le code !
Le code pour enregistrer, vérifier et extraire une empreinte digitale avec le R307.
Pour la dernière étape de ce tutoriel, nous allons réaliser quatre programmes qui vous permettrons d’enregistrer une nouvelle empreinte dans la mémoire du lecteur, de supprimer une empreinte de la mémoire du lecteur, de lire une empreinte digitale et de vérifier si elle correspond à une empreinte stockée dans le lecteur, et enfin de prendre et de télécharger la photo d’une empreinte.
Ces quatre programmes sont relativement simples, mais suffisamment fonctionnels pour pouvoir être utilisés tels quels, notamment grâce à l’appel automatique vers des scripts externes. Vous pouvez bien évidemment les modifier pour les adapter à vos besoins.
Nous n’allons pas nous attarder sur le code lui même, d’abord parce que ce serait très long, ensuite parce qu’il nous semble assez simple et assez largement commenté pour être compris par toute personne sachant un minimum développer en Python. Si vous ne connaissez pas Python et que vous souhaitez apprendre les bases rapidement, je vous invite à consulter notre cours pour apprendre les bases de Python.
L’ensemble du code est disponible ici sur notre GitHub, pour l’installer il vous suffit donc de le télécharger et de le décompresser. Vous pouvez le faire manuellement, ou bien directement via la ligne de commande ci-dessous :
Si cette solution n’est pas forcément la plus adaptée dans le cadre d’un grand nombre d’utilisateurs, c’est en revanche une solution très simple à mettre en place et très adaptée pour une utilisation à plus petite échelle.
Pour enregistrer une nouvelle empreinte, il vous suffit de lancer le script enroll.py, il vous sera alors demandé de placer votre doigt sur le lecteur d’empreinte, ceci deux fois de suite pour assurer une bonne qualité de l’image enregistrée.
Supprimer une empreinte de la mémoire interne du lecteur.
La mémoire interne du R307 permet le stockage de 1000 empreintes, à priori vous devriez donc avoir de quoi voir venir. Néanmoins, vous pouvez avoir besoin de supprimer des empreintes digitales du module, par exemple pour révoquer l’accès d’une personne.
Pour cela, vous pouvez lancer le script delete.py, qui vous demandera le numéro de l’empreinte à supprimer.
Rechercher et vérifier si une empreinte digitale correspond à une empreinte sauvegardée.
C’est probablement la fonctionnalité qui vous intéresse le plus, lire une empreinte et vérifier si elle correspond à une empreinte déjà enregistrée dans le système. Comme nous l’expliquons dans notre article sur le traitement, l’analyse et de la recherche d’empreintes digitales, sachez qu’une empreinte digitale n’est jamais reconnue de façon parfaite, comme l’est par exemple un mot de passe, mais plutôt avec un score de correspondance plus ou moins haut.
Pour cela, vous pouvez lancer le script verify.py. Contrairement aux autres scripts qui se lancent une seule fois, ce script continuera de tourner dans une boucle infinie jusqu’à ce que vous l’arrêtiez manuellement en faisant Ctrl + C.
À chaque tour de boucle, le script vous demandera de placer un doigt sur le lecteur, et attendra jusqu’à détecter une empreinte. Une fois que le script aura capturé une empreinte, il va chercher parmi toutes les empreintes déjà enregistrées dans le lecteur si l’une d’elle correspond à la nouvelle empreinte.
Si aucune empreinte ne correspond, que l’empreinte est trop sale, etc., le programme déclenchera alors le script on_match_failed.sh situé dans le même dossier que le programme de base.
À l’inverse, si une empreinte correspondante est trouvée, le programme déclenchera alors le script on_match_success.sh et lui passera deux paramètres :
Le premier paramètre sera la position dans la mémoire interne de l’empreinte correspondante.
Le second paramètre sera le score de confiance dans l’empreinte. Plus ce score est élevé, plus la confiance est forte.
Il vous suffit donc de modifier les script bash pour déclencher l’événement de votre choix selon qu’une empreinte a été reconnue ou non !
Télécharger la photo brute d’une empreinte
Si vous envisagez de créer un système dans lequel des photos brutes d’empreintes sont échangées et stockées, je vous encourage fortement à lire notre article sur le traitement des empreintes digitales, et particulièrement le chapitre traitant des risques liés au stockage de ce type de données. Une empreinte brute qui fuite, ce n’est pas comme un mot de passe, ça ne peut pas se changer !
Un des intérêts du R307 c’est qu’il permet de récupérer la photo brute d’une empreinte, telle que capturée par le lecteur.
Si cela a peu d’intérêt pour les usages les plus simples, cela permet en revanche de créer des systèmes plus complexes dans lesquels il est possible de centraliser les images pour les faire analyser par un autre logiciel que celui du lecteur, ou encore pour créer un système de synchronisation permettant de gérer une flotte complète de lecteurs.
Pour lire une empreinte digitale et sauvegarder sa photo, vous pouvez utiliser le script download_image.py en lui passant en paramètre le nom du fichier dans lequel sauvegarder l’empreinte. Le fichier généré sera une image au format BMP.
Conclusion
Vous savez désormais comment utiliser un lecteur d’empreinte digitale avec votre Raspberry Pi.
Il ne vous reste plus qu’à intégrer ce lecteur à vos projets. Pour cela il vous suffit de modifier les scripts on_match_success.sh et on_match_failed.sh pour déclencher les actions de votre choix, ou bien vous inspirer de ce code de base pour créer un système plus complexe !