Qu'est-ce que VeraCrypt ?

Ce projet s’articule autour d’un logiciel de cybersécurité dont le code est open source : VeraCrypt.

Disponible notamment sous Windows, Linux et macOS, VeraCrypt permet à ses utilisateurs de créer des volumes de stockage virtuels chiffrés dissimulables voire même de chiffrer directement des partitions du système d’exploitation sur lequel il est installé.
VeraCrypt succède au logiciel TrueCrypt et est développé depuis mi-2013 par IDRIX, une société dirigée par Mounir Idrassi. Des contributeurs extérieurs participent aussi au développement du logiciel.

Téléchargé plusieurs millions de fois depuis juin 2013, VeraCrypt est une référence dans le domaine de la protection des données. Il a notamment été intégré par Reporters Sans Frontières dans son Guide de Protection des Sources de 2021. Préconisé par l'ANSSI, VeraCrypt a aussi été intégré en 2018 au Socle Interministériel des Logiciels Libres, un catalogue géré par la DINUM.

La sécurité du code source de VeraCrypt a été auditée à deux reprises : une première fois en 2016 par Quarkslab, une entreprise française spécialisée dans la protection et l'analyse de logiciels, puis une deuxième fois en 2020 par le Fraunhofer Institute for Secure Information Technology au nom du Federal Office for Information Security (BSI) d’Allemagne.

Quel est l'objectif ?

Actuellement, la sécurité du chiffrement de VeraCrypt est basée sur l’utilisation d’un mot de passe connu uniquement du propriétaire du volume. Ce dernier a également la possibilité d’utiliser un ou plusieurs fichiers additionnels afin de renforcer l’entropie de son mot de passe : les keyfiles. Ces fichiers, intégrés dans le processus cryptographique de VeraCrypt, peuvent être assimilés à un facteur de double authentification.

Les keyfiles peuvent être stockés sur n'importe quel support, il est possible d’utiliser une mémoire amovible comme une clé USB par exemple. VeraCrypt permet aussi à ses utilisateurs de stocker leurs keyfiles sur une carte à puce suivant le standard PKCS#11, une API définissant une interface générique pour les périphériques cryptographiques.

Seulement, cette approche de stockage des keyfiles sur une carte PKCS#11, bien qu'étant la plus sécurisée, est dédiée à des utilisateurs ayant un minimum de compétences en cybersécurité. De plus, elle réduit drastiquement le déni plausible de l’utilisateur. La présence d’une carte PCKS#11 dans le portefeuille d’un reporter peut attirer l’attention et la suspicion des autorités lors de son passage par les douanes d’un état hostile.

L’utilisation de cartes à puce suivant la norme EMV est une alternative à l’approche mentionnée ci-dessus. Ces cartes de paiement sont répandues dans le monde entier pour une utilisation sans aucun lien avec le chiffrement de volumes virtuels. Avec le passeport, il s’agit certainement des deux dispositifs les plus répandus sur le globe et normés par des standards internationaux. La quasi-totalité des utilisateurs de VeraCrypt possèdent donc au moins une carte EMV.

Utiliser des données internes à la carte EMV du créateur du volume comme keyfiles est donc une façon de mettre en place sa double authentification.

Comment l'atteindre ?

Philosophie du projet

Tout au long de ce projet, des modifications ont été apportées au code source d'une application existante. Il a fallu s'assurer qu'aucune faille de sécurité n'était introduite, que le code produit s'intégrait naturellement dans le code existant, que les modifications étaient minimes afin de faciliter la relecture par d'autres développeurs et enfin que l'interface restait sensiblement la même pour que l'utilisateur ne soit pas trop perturbé par ces changements.

Techniquement, ce projet se divise en deux étapes : la compréhension du fonctionnement des cartes EMV et la modification du code source de VeraCrypt afin d'ajouter cette fonctionnalité.


Étude des cartes EMV

Selon la norme ISO/IEC 7816 sur laquelle s’appuie le standard EMV pour la communication avec contact, le dialogue avec la carte à puce se fait à l'aide de commandes APDU dont la structure contient de nombreux paramètres permettant de préciser quelles informations extraire.

Le module EMVExtractor a donc été imaginé pour assurer la communication entre VeraCrypt et la carte EMV à travers le lecteur de cartes de l’utilisateur. Pour faire face à la diversité de lecteurs sur le marché, Microsoft a développé le standard de communication Personal Computer/Smart Card. Le choix s'est tourné vers la librairie Winscard suivant ce standard et étant disponible à la fois nativement sous Windows, mais aussi sous Linux ou macOS via le paquet PCSCLite.

Concernant les données à extraire de la carte EMV pour les utiliser comme keyfiles, les certificats ICC Public Key Certificate et ISSUER Public Key Certificate ainsi que les données Card Production Life Cycle ont été retenus de part leur unicité propre à la carte.


Modification de VeraCrypt

L'implémentation pour les cartes EMV est inspirée de celle développée pour l'utilisation de cartes PKCS#11 dans VeraCrypt. La fenêtre de sélection des keyfiles sur des cartes à puce a donc été réutilisée : un modèle dédié aux cartes EMV y a été ajouté. Les quatre derniers chiffres des numéros des cartes EMV connectées sont affichés pour en permettre la sélection.

Les cartes de type EMV n'étant disponibles qu'en lecture, certaines fonctionnalités comme la suppression de données (bouton Effacer) ont été désactivées.

En général les utilisateurs de logiciel de cybersécurité aiment être en maîtrise complète des fonctionnalités de l’application. Ainsi, la fonctionnalité EMV est optionnelle et désactivée par défaut dans les paramètres du logiciel.

Un coup d'oeil ?

L'entièreté des productions de ce projet est répartie dans les dépôts dédiés de l'organisation Github de l'équipe.

  • VeraCrypt_EMV est un fork du code source de VeraCrypt, modifié sur la branche dev pour y ajouter la fonctionnalité EMV.
  • EMV_Extractor contient un POC en python et sa traduction en C++ permettant d'extraire les certificats et données de cartes à puce de type EMV.
  • Web_page correspond au code source de la page que vous êtes actuellement en train de regarder.
  • Reports stocke les versions PDF des rapports écrits tout au long des différentes phases du projet (en français uniquement).