Cela va faire bientôt un an que j’ai rejoint Doctolib. La sécurité est au cœur de ce que nous faisons. L’entreprise est certifiée HDS (Hébergeur de données de santé) depuis la fin 2021 pour les activités 5 et 6 : administration et exploitation des systèmes d’information contenant des données de santé. En plus de cela, l’entreprise est aussi certifiée ISO 27001.
Afin de garantir enfin que nos données de santé restent uniquement accessibles à notre médecin, Doctolib utilise la technologie du chiffrement de bout en bout. Enfin, l’entreprise a annoncé le rachat de la société Tanker au début de l’année 2022.
Je vous propose de découvrir le principe de chiffrement de bout-en-bout, et plus exactement, le principe de chiffrement en enveloppe, par l’utilisation de clés asymétriques et de clés symétriques. Comme d’habitude, je vais rester simple et j’utiliserai des images pour illustrer mes explications. Je n’ai aucune prétention académique, et je vous indiquerai où trouver d’autres ressources chez Doctolib ou Tanker pour compléter votre niveau d’information.
Qu’est-ce que le chiffrement de bout en bout ?
Le chiffrement de bout-en-bout (End-to-End encryption) est un mode de communication sécurisé, qui permet à 2 personnes ou plus, d’échanger des informations chiffrées. Lorsque l’on dit chiffré, cela veut dire qu’un message en clair est transformé en une suite de chiffres et de lettres, avec des formules mathématiques. Si quelqu’un venait à intercepter l’échange, il ne verrait qu’une suite de données complètement illisibles. Doctolib ou Tanker n’ont aucun moyen de déchiffrer l’échange, pour lire le message initial.
Dans le cadre de Doctolib, le chiffrement de bout-en-bout est un enjeu sur le long terme. Le médecin doit pouvoir consulter le détail d’une prescription pour un patient. Comment un médecin peut-il échanger avec un patient de façon complètement chiffrée ? Comment garantir que chaque échange, chaque ordonnance, chaque message lié à une consultation est bien chiffré avec des clés différentes à chaque fois ?
Nous allons avoir besoin de présenter les 2 principes de chiffrement utilisés dans le chiffrement de bout-en-bout : le chiffrement symétrique, et le chiffrement asymétrique.
Les clés symétriques
Le chiffrement symétrique repose sur un secret partagé entre l’émetteur et le récepteur. Il est donc important de conserver le secret partagé, ou la clef partagée, dans un endroit très sûr et inaccessible à personne d’autres, que l’émetteur et le récepteur.
Par conséquent, l’enjeu devient alors de trouver un moyen pour échanger le secret entre les 2 parties. Si le Patient et le Médecin pouvaient échanger leur secret en face à face, cela permettrait de résoudre ce problème. Mais si vous souhaitez créer autant de secrets que de conversations, comment peut-on échanger ces secrets de façon sûre et sécurisée ?
Les clés asymétriques
Il existe ensuite un deuxième principe en sécurité qui repose sur des algorithmes de chiffrement asymétriques. Ces systèmes utilisent une paire de clé, au lieu d’utiliser une seule clé. Une clé publique et une clé privée.
La clé publique permet uniquement de fermer une enveloppe. Tout le monde peut utiliser votre clé publique, glisser un message secret et ensuite verrouiller cette enveloppe.
Seule la clé privée, détenue par vous, peut alors ouvrir cette enveloppe pour en lire le contenu. Les clés privées asymétriques ne quittent pas votre navigateur ou votre téléphone portable.
Si nous n’avions que le système symétrique, Doctolib ne pourrait pas fonctionner correctement, pour plusieurs raisons. Tout d’abord l’échange de secrets ne peut se faire que dans un échange sécurisé entre les 2 parties.
Ensuite, si vous perdez votre téléphone portable avec votre secret, il sera impossible de déchiffrer vos messages. Et cela, définitivement.
La question devient alors « comment le système peut-il garantir la sécurité de l’échange entre le patient et le médecin, au cours du temps ? »
Le chiffrement par enveloppe
L’idée du protocole est simple : nous allons utiliser la clé publique du médecin pour chiffrer le secret à partager, et stocker l’ensemble sur un serveur tiers.
Le Patient et le Médecin vont chacun avoir une clé secrète et une clé publique. Lorsque le patient souhaite démarrer un échange avec le médecin, pour une consultation en particulier, il va utiliser la clé publique du médecin pour lui envoyer le secret. Ce qui est d’abord important de comprendre c’est que chaque document, chaque consultation aura sa propre clé secrète. Même si une clé venait à être dévoilée, cela ne dévoile qu’un tout petit échange entre un patient et un médecin.
Lorsque le médecin reçoit le message, il utilise sa clé secrète pour ouvrir l’enveloppe, puis la clé symétrique bleue pour déchiffrer le message. Il obtient alors le document sur son poste de travail.
Le serveur de clés sécurisées stocke les clés publiques du médecin et du patient, ainsi que les clés secrètes enfermées dans une enveloppe sécurisée.
Ajoutons à cela que les messages seront signés afin de garantir que l’auteur de chaque enveloppe est bien le Patient, ou le Médecin.
Nous définissons donc le chiffrement de bout-en-bout comme une communication qui reste chiffrée, entre un périphérique et un autre, sans que personne ne puisse lire, modifier ou effacer le contenu.
La chaîne de confiance
Cependant, comment le Patient et le Médecin peuvent convenir d’une clé commune s’il ne sont pas ensemble ? Comment faire aussi si jamais je change de téléphone portable ?
Plus compliqué : comment s’assurer que la clé publique verte, envoyée par le serveur sécurisé, appartient bien au médecin ? Comment s’assurer qu’elle n’aurait pas été remplacée par une autre clé ?
Tanker a utilisé des principes que l’on retrouve dans la blockchain : la chaîne de confiance.
Les clés privées ne quittent jamais les périphériques (votre téléphone portable ou l’ordinateur du médecin). Ces clés publiques/privées permettent de sécuriser les échanges, comme expliqué précédemment.
Votre téléphone portable avec l’application Doctolib, sécurisé avec votre code, est donc un élément dans lequel vous avez confiance, que vous contrôlez. Il peut donc aussi servir à ajouter un autre périphérique, comme un ordinateur de bureau, après avoir effectué les opérations d’identification et de sécurisation.
L’ajout d’un nouveau bloc dans la chaîne de confiance est une opération sensible. Doctolib d’une part, effectue une vérification de votre identité en tant que client Doctolib. Tanker d’autre part, vérifie votre téléphone portable avec, par exemple, l’envoi d’un SMS. Les 2 éléments pourront ensuite permettre l’ajout d’un nouveau téléphone dans la chaîne de confiance.
Le principe de la chaîne de confiance est le suivant : chaque action est enregistrée dans un bloc, lui-même chiffré et ajouté dans une chaîne de confiance. Le fait par exemple d’enregistrer mon téléphone portable, en plus de mon ordinateur, va être sécurisé par l’ajout d’un jeton de confiance. L’action d’ajouter un autre utilisateur dans une conversation, ou le fait de bloquer un autre utilisateur sont des événements que l’on peut stocker dans une chaîne de confiance.
Ensuite, chaque interlocuteur de cette chaîne va pouvoir recalculer et vérifier l’ensemble des maillons. Il peut s’assurer qu’aucun tiers ne s’est ajouté, et que donc, il peut avoir confiance dans les éléments de cette chaîne.
Alors, comment démarrer la chaîne ? Comment faire si vous perdez votre unique téléphone portable avec votre compte Doctolib ?
Les virtual devices
Lors de la première utilisation du système, et après avoir vérifié votre identité avec 2 facteurs différents, le système va créer un périphérique virtuel, qui sera stocké chiffré sur les serveurs chez Tanker. La clé publique de ce périphérique sera ajoutée dans la chaîne de confiance. La clé privée reste sur le serveur de Tanker, en étant chiffrée.
Pour protéger cette clé privée chez Tanker, le système utilise une clé symétrique, connue uniquement de Doctolib et de l’utilisateur final. Notez que cette clé symétrique ne donne accès qu’au périphérique virtuel, et en aucun cas à des données chiffrées.
Quelqu’un ayant accès à un serveur chez Doctolib n’aurait pas accès à la clé privée, stockée chez Tanker. Et inversement, une personne ayant accès à Tanker, ne pourra pas déchiffrer la clé car il n’a pas la clé symétrique.
Pour sécuriser le tout, Tanker effectue une vérification de l’identité du patient indépendamment de ce que peut faire Doctolib. Pour retrouver l’accès à son périphérique virtuel, le patient doit donc s’authentifier auprès de Doctolib, et ensuite auprès de Tanker. Avec ces 2 éléments, l’utilisateur pourra alors déchiffrer la clé secrète de son périphérique virtuel, afin d’ajouter un autre périphérique dans la chaîne de confiance.
Ce système permet de résoudre le problème de la perte de son téléphone portable par exemple. A aucun moment les clés secrètes des échanges quittent le stockage de votre navigateur. C’est l’utilisation combinée de votre navigateur et de votre identité qui permet de chiffrer les échanges.
Je vous invite à lire la documentation du protocole créé par Tanker, dans les liens ci-dessous. Je ne suis pas un expert de la sécurité, et j’ai voulu rester assez simple.
Conclusion
En premier lieu, une solution technique n’est qu’un élément de la chaîne de sécurité. La confiance que vous, en tant que patient, accordez à Doctolib, est importante. Ensuite, charge à Doctolib d’assurer la confidentialité et la sécurité des données. Il y a une obligation légale et un cadre juridique qui nous permet de s’assurer que personne ne peut accéder à vos données de santé. Sans système pour retrouver sa clé, vous pourriez perdre définitivement des informations de santé importantes.
Dans un deuxième temps, il est important de rappeler que Doctolib ne peut pas accéder à nos données de santé. L’entreprise est financée par les abonnements que payent les médecins pour utiliser le logiciel. Aucune donnée ne pourra être utilisée aujourd’hui ou dans le futur.
Pourquoi le rapprochement de Tanker et de Doctolib n’impacte-t-il pas la sécurité de nos données ? Il existe toujours 2 tiers distincts, et un système basé sur une chaîne de confiance, que vous, et uniquement vous, avez démarré.
Ressources
Merci à Romain Mekarni et à Aloïs Jobard pour leur aide et la relecture de cet article.
Tanker a publié dès 2018 en open-source les spécifications du protocole et les principes de la chaîne de confiance sur GitHub.
Doctolib et Tanker ont publié un White paper qui m’a été utile pour comprendre et revoir le fonctionnement du chiffrement de bout en bout.
WhatsApp a publié un livre blanc détaillé sur le chiffrement de bout-en-bout dans le cadre d’une messagerie. Il utilise Signal, et le système développé par la société Open Whisper Systems. Si vous souhaitez une version plus simple à lire, Amit Panghal a publié WhatsApp‘s End to End Encryption, How does it work?.
Si vous souhaitez contacter les équipes Sécurité de Doctolib : https://www.doctolib.fr/security.txt
Le Podcast No Limit Secu, traite dans son épisode #342, de la sécurité chez Doctolib avec Cédric Voisin, RSSI groupe Doctolib et Renaud Durand, Ingénieur sécurité.
Mise à jour 31/03/2022 : Romain Mekarni, ingénieur cybersécurité chez Doctolib, a publié un article très détaillé sur le chiffrement et la protection des données de santé chez Doctolib le 31 mars 2022.
0 no like
Captcha !== turing test