NFC P2P vs Host Card Emulation : quelles différences ?
Voyons pas à pas les différences entre le NFC HCE (Host Card Emulation) et le NFC P2P (pair-à-pair).
Ce sont deux schémas de communication fondés sur la même technologie NFC, mais répondant à des cas d’usage très différents.
Host Card Emulation (HCE)
HCE signifie Host Card Emulation : c’est une implémentation particulière du mode d’émulation de carte en NFC.
Émuler une carte signifie qu’un appareil électronique — typiquement un smartphone — se comporte exactement comme une carte à puce sans contact. C’est le principe fondateur de la virtualisation des cartes de paiement, de transport, des badges de contrôle d’accès, des cartes de fidélité et d’autres identifiants, directement sur smartphone.
Il existe ici deux implémentations différentes, selon le niveau de sécurité recherché.
Les cartes de paiement et de transport, sensibles, sont généralement virtualisées dans un composant sécurisé inviolable, où toutes les clés cryptographiques sont sérieusement protégées contre les attaques connues. Selon les architectures, ce composant sécurisé peut être la carte SIM (ou UICC) du smartphone, gérée par l’opérateur mobile, ou une puce dédiée sur la carte mère, appelée secure element, dont le fabricant du smartphone garde le contrôle. Or, de nombreuses applications de cartes sans contact peuvent se satisfaire d’un niveau de sécurité inférieur à celui des systèmes bancaires. Et virtualiser une carte dans un composant sécurisé est un processus complexe et coûteux, qui suppose de s’associer à l’opérateur ou au fabricant qui contrôle la SIM ou le secure element.
Pour toutes ces applications, le Host Card Emulation est la solution de choix. La logique de la carte à puce ne s’exécute plus dans un composant sécurisé mais directement dans le processeur du smartphone, comme n’importe quelle application classique. Cela réduit considérablement la complexité, raccourcit les délais de développement, et permet de déployer les cartes virtualisées via les stores d’applications.
En résumé, le NFC HCE permet d’émuler une carte à puce sans contact en ajoutant seulement quelques lignes de code à une application mobile — pour peu que la plateforme le permette. Android implémente cette technologie depuis la version 4.4 ; iOS, de son côté, reste plus restrictif sur ce point.
De nombreux lecteurs SpringCard communiquent avec une application HCE exactement comme ils communiqueraient avec une véritable carte à puce sans contact. Certains de nos dispositifs sont également capables d’inverser le schéma, et de permettre à un PC Windows ou Linux de devenir lui-même un hôte HCE.
NFC pair-à-pair (P2P)
Le NFC pair-à-pair, à l’opposé, n’a que peu à voir avec les transactions de carte à puce. Le NFC P2P n’est rien d’autre qu’un canal de communication courte distance qui, comme tout canal de communication, permet de véhiculer pratiquement n’importe quel protocole réseau et n’importe quelle donnée applicative entre deux appareils.
Le NFC Forum a spécifié un protocole réseau dédié au NFC P2P, nommé LLCP. Au-dessus de cette pile protocolaire se trouve le service NFC SNEP, conçu pour transmettre le contenu d’un tag NFC d’un appareil à l’autre.
En résumé, plutôt que d’émuler un tag NFC pour partager un contenu — URL, carte de visite, paramètres Wi-Fi ou Bluetooth —, un smartphone peut simplement utiliser SNEP pour pousser ce même contenu vers un autre smartphone. C’est la technologie qui se cachait derrière « Android Beam ». Grâce à une implémentation logicielle LLCP/SNEP côté hôte, de nombreux dispositifs SpringCard sont également capables de pousser des données NFC vers un smartphone.
LLCP, la pile protocolaire réseau du NFC, a été conçue pour rester ouverte et extensible. Elle s’avère toutefois relativement complexe et, compte tenu des limites intrinsèques de la communication NFC — portée très courte, débit limité à quelques kilo-octets par seconde —, son intérêt s’estompe face au Bluetooth Low Energy.
Aujourd’hui, on peut considérer que le NFC pair-à-pair se limite globalement à SNEP, le service de push NDEF. C’est un moyen pratique d’envoyer une information courte d’un appareil à un autre, mais qui ne tire pas pleinement parti du caractère bidirectionnel de ce canal de communication.