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.
Qui sommes nous ?
Notre équipe est constituée de 7 étudiants en 4ème année au
département informatique de l'INSA Rennes :
Ce projet académique, réalisé sur l'année 2022-2023, est encadré par
Gildas AVOINE et Jules DUPAS.
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).