[Mise à jour – 28 mai] : ajout du paragraphe sur les failles de sécurité de StopCovid.
Vous avez dû beaucoup entendre parler de Contact Tracing, de StopCovid et de l’API de Google et Apple Exposure Notification ces derniers jours. Mais en fait, qu’est-ce que ça veut dire, comment ça marche, à quoi ça sert ? La réponse dans cet article.
Tracing ou tracking ?
Il ne faut pas confondre le tracing (traçage) et le tracking (suivi). Le tracking consiste à suivre et enregistrer les individus, c’est-à-dire leur position géographique. Cette technologie a été utilisée dans certains pays asiatiques, notamment pour tenter de contrôler l’épidémie de Coronavirus. Elle pose de nombreuses questions, en terme de respect de la vie privée et de surveillance de masse par exemple.
Les applications StopCovid et le système d’Apple et Google, Exposure Notification, sont des technologies de contact tracing. Elles tracent de façon anonyme les contacts entre les différentes personnes, mais ne les suivent pas. En aucun cas ces systèmes enregistrent les coordonnées géographiques des individus.
Comment fonctionne le Contact Tracing
Au début de l’épidémie à Coronavirus, début 2020, des ingénieurs de pays asiatiques ont eu l’idée de développer des applications de contact tracing. L’objectif de ces applications est de détecter les contacts à risque dans la population, et d’avertir les personnes potentiellement contaminées afin qu’elles prennent des mesures (mise en quarantaine, test de dépistage…) permettant de casser la chaîne de contagion.
Aujourd’hui deux tendances se dessinent. De nombreux gouvernements développent leur propre solution de contact tracing, dont la France avec StopCovid. D’autres utilisent Exposure Notification, la solution de contact tracing développée par Google et Apple. Quelle que soit la solution, le principe général est similaire.
Les applications utilisent un protocole de communication à courte portée (quelques mètres), le Bluetooth. Chaque téléphone ayant une application de contact tracing installée partage en permanence en Bluetooth un identifiant unique, mais anonyme. En parallèle, sont collectés les identifiants anonymes des autres personnes, autour de soi, ainsi que l’heure et la durée du contact. Ensuite, suivant un système (qui dépend des différentes solutions, voir plus bas), un utilisateur peut se déclarer comme étant contaminé par le virus. Tous ses contacts jugés à risque, c’est-à-dire avec un contact suffisamment long et proche, mesuré grâce à la puissance de réception du réseau Bleutooth, se verront notifiés. Ils pourront alors se rapprocher des autorités pour passer un test de dépistage, et se mettre en quarantaine s’ils sont contaminés.
Comme dit précédemment, les applications de contact tracing ont toutes le même principe général. Cependant, des différences importantes existent suivant les protocoles. Je vous explique.
Le contact tracing, est-ce efficace ?
Personne ne peut réellement répondre à cette question. Les gouvernements s’accordent à dire qu’elle est complémentaire à du tracing humain, réalisé par des brigades de santé. Selon une étude récente de chercheurs d’Oxford, une telle application montre des effets dès 10 à 15% d’utilisation, et permet de totalement contrôler une épidémie si elle est utilisée par 60 à 70% des habitants, en complément de mesures de confinement et de tests.
Les applications réalisées par Singapour et l’Australie par exemple ne semblent pas avoir permis de contrôler l’épidémie. Cependant, ces applications fonctionnaient mal sur les téléphones récents en raison de restrictions liées au Bluetooth (voir plus tard).
[the_ad id= »985″]
StopCovid : un système centralisé
La France a choisi de développer sa propre solution de A à Z nommée StopCovid. Cela signifie qu’elle devra se soumettre aux limitations du Bluetooth sur les iPhone et les téléphones Android récents, mises en place afin d’éviter les abus d’utilisation de ce protocole réseau. Si l’application est en arrière plan ou si l’écran est verrouillé, l’application se mettra en veille profonde au bout de quelques minutes et ne pourra ni émettre ni recevoir les identifiants anonymes en Bluetooth.
Le gouvernement a annoncé qu’une parade avait été trouvée, il serait possible de réveiller l’application si un téléphone n’étant pas soumis à ces restrictions, passait à côté. Mais cela signifie que l’application ne fonctionnera pas s’il n’y a que des iPhone ou des Android récents dans les parages.
Pas moins de 9 acteurs développent cette solution depuis un mois et demi : l’Inria (qui dirige le projet), l’ANSSI, Orange, Withings, Lunabee Studio, Dassault Systems, Capgemini, Inserm, Santé publique France.
Le gouvernement français, au travers du secrétaire d’État chargé du numérique Cédric O, a décidé de développer son propre protocole, appelé ROBERT. Il a été conçu par l’INRIA en partenariat avec l’Allemagne. C’est son implémentation qui est au cœur de StopCovid. Celui-ci est basé sur une architecture centralisée. Un serveur central (dont l’autorité reste à définir) s’occupe de générer et collecter une grande partie des données. Les téléphones ne sont alors que des relais, qui communiquent régulièrement avec la base de données centrale. L’Allemagne, elle, a décidé d’abandonner ce protocole il y a quelques semaines au profit de l’API Exposure Notification, jugée plus sécurisé et efficace. La DINUM (Direction interministérielle du numérique) souhait, elle aussi, utiliser l’API de Google et Apple. Le choix de créer notre propre solution aurait été motivé par une volonté de souveraineté nationale selon le secrétaire d’État. [Personnellement j’ai du mal à voir en quoi l’API de Google et Apple ne respecte pas notre souveraineté nationale numérique, étant donné qu’aucune donnée n’est envoyée sur les serveurs des GAFA, voir le paragraphe sur Exposure Notification].
Concrètement, après le téléchargement de l’application, le serveur central va générer un pseudonyme aléatoire pour chaque utilisateur, ainsi qu’une liste d’identifiants anonymes (c’est-à-dire générés suivant des algorithmes aléatoires), découlant du pseudonyme. Les téléphones des utilisateurs utiliseront ensuite le Bluetooth pour diffuser un des identifiants parmi la liste communiquée par le serveur. Cet identifiant est renouvelé régulièrement afin d’éviter qu’une personne malveillante puisse reconnaître et suivre une personne via son identifiant anonyme. Le serveur devra donc régulièrement communiquer une nouvelle liste d’identifiants, qui sera transférée à l’application de l’utilisateur par internet.
Déclaration d’un malade
Lorsqu’un individu est malade, il peut choisir de l’indiquer dans l’application. Pour cela il devra scanner, grâce à StopCovid, un QR Code fourni par le laboratoire de test afin d’authentifier l’acte, et éviter que le système ne soit perturbé par de fausses déclarations. L’application va alors envoyer au serveur central la liste des contacts de l’individu des derniers jours, ainsi que des informations sur ceux-ci telles que la durée du contact, la date et l’heure ainsi que la qualité du signal Bluetooth reçu (dépendant de la distance entre les individus).
Détection d’un contact à risque
C’est le serveur qui va déterminer, pour chaque contact établi, le risque entrainé par l’exposition. Le serveur, ayant accès à une base de données incluant toutes les personnes en contact avec un malade ainsi que la durée du contact et la force du signal, peut évaluer le risque. Si ce risque dépasse un seuil, alors l’identifiant de la personne en contact avec le malade sera étiqueté comme potentiellement contaminé par un malade.
Régulièrement (probablement quotidiennement), l’application interrogera la base de données afin de vérifier si son utilisateur est étiqueté comme à risque ou non. Le serveur, connaissant déjà la liste de tous les identifiants anonymes de chaque utilisateur, comparera donc ces identifiants avec ceux étiquetés comme potentiellement malades. S’il trouve une correspondance, l’application indiquera à l’utilisateur qu’il est potentiellement contaminé.
Failles trouvées dans StopCovid
Un bug bounty a été lancé le 27 mai, il permet à une sélection restreinte de hackers d’être récompensé pour trouver des failles de sécurité dans l’application. Le 28 mai de nombreuses failles avaient déjà été soumises dont plusieurs sont jugées préoccupantes. On n’a pour l’instant pas d’information sur ces failles, et on ne sait pas si elles pourront être corrigées avant le lancement de l’application, autour du 31 mai.
Robert Baptiste, chercheur en sécurité connu sous le pseudo de Elliot Alderson, a soumis une dizaine de failles à lui tout seul aux développeurs de StopCovid, par exemple.
Un bug bounty public (accessible à tous, et non plus à un pool restreint de hackers) doit voir le jour début juin, soit après la sortie de l’application.
En conclusion, la majorité des données sont générées et stockées sur le serveur central (pseudonyme, identifiants anonymes, contacts avec une personne à risque…). Les téléphones, eux, se contentent de collecter les identifiants anonymes des contacts sur les derniers jours, et d’envoyer cette liste si son propriétaire se déclare comme contaminé. Les données sont toutes anonymisées. L’application ne devrait pas bien fonctionner s’il n’y a que des téléphones récents aux alentours.
API Exposure Notification de Google et Apple: un système décentralisé
De l’autre côté, Apple et Google, les fondateurs d’iOS (le système d’exploitation des iPhone) et d’Android (le système d’exploitation des autres smartphones), ont collaboré de façon inédite afin de proposer une API commune. Cette API est directement intégrée dans les systèmes d’exploitation, elle n’est donc pas soumise aux restrictions qui s’appliquent à StopCovid. Elle fonctionne en permanence, sur iPhone et Android, que l’application soit ouverte ou non, le téléphone déverrouillé ou non.
Une API est une interface de programmation. Concrètement c’est une boite à outils contenant les algorithmes les plus complexes de la solution. On retrouvera les fonctions permettant de générer les identifiants aléatoires, de chiffrer les données, de créer le réseau Bluetooth, de collecter les identifiants aux alentours… C’est en quelque sorte le cœur du système, la partie technique.
Cette API a pour but de faciliter le développement de la solution par les gouvernements. Ceux-ci n’ont plus qu’à développer l’application (l’interface graphique), et à réaliser des appels à l’API Exposure Notification d’Apple et Google. Cela leur évite de tout réécrire.
Le principe général d’Exposure Notification est similaire à StopCovid. Mais dans le détail, le fonctionnement est très différent. Cette API repose sur un système décentralisé. Des serveurs doivent quand même être mis en place afin de stocker quelques données (il faut bien faire le lien entre les malades et les contacts à risque), mais Apple et Google laissent le soin aux gouvernements de les mettre en place. L’API inclus tous les outils nécessaires au fonctionnement des serveurs, mais c’est bien les gouvernements qui devront stocker les données. Google et Apple n’ont pas accès aux données et, a fortiori, ne les stockent pas.
Cette solution repose sur un système décentralisé. Cela signifie donc que la très grande majorité des données, anonymisées, sont générées et stockées dans une enclave sécurisée, sur les smartphones. Très peu sont envoyées aux serveurs.
L’identifiant partagé en Bluetooth par l’application est généré directement sur le téléphone. Il est renouvelé toutes les 10 à 15 min, et n’est jamais stocké sur un serveur.
Cet identifiant anonyme est obtenu en appliquant un algorithme à la Clef d’Identification. Cette Clef d’Identification est générée à partir de la Clef d’Exposition. La Clef d’Exposition est générée aléatoirement toutes les 24h.
Lorsque deux téléphones se croisent, ils s’échangent en Bluetooth leurs identifiants ainsi que des métadonnées (force du signal, version du logiciel etc.). Celles-ci sont chiffrées, et ne peuvent être déchiffrées que grâce à la Clef d’Identification.
Déclaration d’un malade
Lorsqu’une personne est malade elle peut, si elle le souhaite et avec son consentement explicite, l’indiquer à l’application. Celle-ci devra authentifier le test (via un code fourni par le laboratoire de test) afin d’éviter les fausses déclarations. Ensuite, l’application enverra au serveur de manière chiffrée et sécurisée la liste des Clefs d’Identification qu’elle a utilisées ces derniers jours (pour générer les identifiants et chiffrer les métadonnées envoyées aux autres utilisateurs), ainsi que des métadonnées comme l’heure de validité des clefs. On note que ce ne sont pas les identifiants (anonymes) directement qui sont envoyés au serveur, mais leurs clefs (anonymes).
Détection de contact à risque
Régulièrement, les applications téléchargent depuis le serveur la liste des Clefs d’Identification qui correspondent aux personnes contaminées. Les téléphones vont ensuite comparer ces clefs avec les contacts qu’ils ont détecté les jours précédents. Pour rappel, les métadonnées envoyées par les contacts qu’on a rencontrés sont déchiffrables grâce à leur clef. Maintenant que les téléphones ont les Clef d’Identification des malades, ils vont essayer de déchiffrer les métadonnées reçues, et comparer l’heure de contact dans ces métadonnées avec l’heure de contact indiquée par le serveur. Si cela correspond (à 2h près), cela veut dire que ce téléphone a croisé un malade.
Maintenant que les métadonnées reçues lors du contact ont pu être déchiffrées, le téléphone va déterminer en local si la force du signal et la durée du contact ont été suffisamment élevés pour lever une alerte. En cas d’alerte, seul l’utilisateur sera averti du contact à risque, l’information ne sera jamais envoyée sur aucun serveur.
Pour conclure, la solution proposée par Apple et Google est basée sur un système décentralisé. Les serveurs (mis en place par les gouvernements, et non par Apple et Google), génèrent et recueillant très peu de données, et des données anonymes. Les téléphones s’occupent de la majorité du travail, notamment le calcul des contacts à risque. La solution semble sécurisée, le détail des algorithmes de chiffrement utilisés est disponible ici.
Et ailleurs, on utilise quoi ?
Les premiers pays ayant développé des applications de contact tracing n’ont pas pu utiliser l’API Exposure Notification, car celle-ci n’est disponible que depuis le 18 mars.
Cependant, depuis cette date plus de 22 pays ont annoncé vouloir l’utiliser, dont un bon nombre de pays européens comme l’Italie, la Grande-Bretagne et l’Allemagne.
En France, un débat aura lieu à l’Assemblée mercredi 27 mai. L’application StopCovid devait initialement sortir la semaine du 11 mai, mais elle a été repoussée au 2 juin.
[the_ad id= »985″]
Mon avis personnel
Personnellement, je ne pense pas qu’un modèle centralisé soit la meilleure solution. Alors que le respect de la vie privée doit être un élément très important pour une app de contact tracing, mettre en place un serveur stockant et collectant beaucoup de données n’est pas une bonne idée. Même si les données sont anonymisées, et les serveurs bien sécurisés. La meilleure protection pour les données personnelles est de ne pas les collecter !
Par ailleurs, la solution française fonctionnera mal sur les téléphones récents, contrairement à la solution d’Apple et Google qui fonctionne bien sur tous les smartphones.
Elle nécessitera de lourds moyens de développement (9 acteurs majeurs font partie du projet), et un temps de développement de presque 2 mois. Même si elle doit sortir le 2 juin, j’ai du mal à imaginer une sortie avant mi-juin au mieux, soit un mois après Exposure Notification. Un mois en temps de guerre, c’est long.
Cédric O a poussé en faveur de ce projet (contre l’avis de la DINUM) pour promouvoir la « souveraineté nationale numérique ». Est-ce qu’on ne se trompe pas de combat ? À mon avis, il est bien plus important d’avoir des équivalents français de solutions pérennes (comme Zoom, Google Drive, Gmail etc.) plutôt que d’une app éphémère. De plus, les américains ne stockent aucune donnée dans le cas d’Exposure Notification, et une partie de la solution a été développée… par des ingénieurs français d’Apple, spécialisés dans le chiffrement des données.
Vous dites :
Par ailleurs, la solution française fonctionnera mal sur les téléphones récents, contrairement à la solution d’Apple et Google qui fonctionne bien sur tous les smartphones.
Vous oubliez que sur iPhone, l’Exposure Notification API n’est disponible que sur iOS version 13.5, ce qui écarte donc des téléphones encore pas mal utilisés : iPhone 5S, 6, 6 Plus. StopCovid peut par contre y être utilisée (iOS 11.4 minimum).