Les cartes à puce ou smartcards reposant sur la norme ISO/IEC 7816 sont omniprésentes dans nos vies. Cartes bancaires, cartes Vitale, cartes SIM dans votre smartphone ou encore tantôt cartes permettant l'authentification ou la signature électronique sont autant d'exemples des services que ces petits bouts de plastique peuvent rendre. Il existe maintes solutions permettant d'interagir avec une smartcard sur PC, un Mac ou un SBC sous GNU/Linux, généralement via un lecteur USB CCID. Mais qu'en est-il lorsqu'on souhaite que notre montage à microcontrôleur utilise ce type de périphérique ? Il y a la voie simple avec l'utilisation d'une IC dédiée ou un support intégré au MCU, et la voie plus « créative » que nous allons explorer de ce pas...
Notre objectif ici n'est pas de créer un produit ou même de tenter de démontrer qu'il serait possible de le faire, mais de comprendre comment fonctionne la communication entre une carte à puce (ou plutôt une UICC pour Universal Integrated Circuit Card) et un lecteur (le terminal), et ce, au plus bas niveau. Ceci n'est pas possible avec un lecteur USB ou même un circuit intégré spécialisé comme le SEC1110 ou le SEC1210 de Microchip Technology qui est, de plus, relativement difficile à mettre en œuvre sans équipement adéquat (package QFN-24). Le fait d'arriver à échanger des données entre une smartcard et une carte à microcontrôleur comme une Raspberry Pi Pico, ou un module ESP32, permet de valider la compréhension de la technologie et fournit également les clés pour espionner (sniffing) les communications, lorsqu'elles ne sont pas chiffrées, avec ce type de dispositifs « dans la nature ».
Notez que je ne suis de loin pas le seul à avoir tenté...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première