Renforcer la sécurité de ses conteneurs chiffrés à l’aide de VeraCrypt

Conception et implémentation d’un mécanisme permettant de chiffrer et déchiffrer un keyfile supplémentaire directement sur sa carte PKCS#11 qui contient un certificat de sécurité afin de pouvoir bénéficier des fonctionnalités cryptographiques fournies par ce type de cartes à puce.

QU'EST CE QUE VERACRYPT ?


Ce projet s'appuie sur un logiciel dont le code est open source : VeraCrypt.

Disponible notamment sur les trois principaux OS (Windows, Linux, Mac OS), VeraCrypt permet à ses utilisateurs de créer des volumes de stockage virtuels chiffrés et dissimulables. De plus, il est possible de faire de même avec des partitions entières. VeraCrypt succède d'un fork du logiciel TrueCrypt. Il est développé depuis 2014 par IDRIX, une société dirigée par Mounir Idrassi. Des contributeurs extérieurs participent aussi au développement du logiciel.

Depuis juin 2013, VeraCrypt a été téléchargé plusieurs millions de fois, établissant ainsi sa réputation en tant qu'outil de premier plan pour la protection des données. Son adoption est si significative qu'il a été recommandé par Reporters Sans Frontières dans leur Guide de Protection des Sources de 2021. De plus, l'Agence Nationale de la Sécurité des Systèmes d'Information ( ANSSI) préconise l'utilisation de VeraCrypt, et il a été inclus dans le Socle Interministériel des Logiciels Libres en 2018, faisant partie du catalogue géré par la DINUM..

Le code source de VeraCrypt a été soumis à deux audits de sécurité. En 2016, Quarkslab, une entreprise française spécialisée dans la protection et l'analyse de logiciels, a réalisé le premier audit. Le deuxième audit a eu lieu en 2020, mené par le Fraunhofer Institute for Secure Information Technology au nom du Federal Office for Information Security (BSI) d’Allemagne.

QUEL EST L'OBJECTIF ?


L’objectif principal du projet est de rajouter une nouvelle fonctionnalité au logiciel VeraCrypt. Jusqu’à présent, VeraCrypt permet à ses utilisateurs d’utiliser des keyfiles pour renforcer l’entropie de leurs mots de passe. Ces keyfiles sont des fichiers pouvant être de n’importe quel type qui peuvent être utilisés lors du chiffrement du volume et qui sont nécessaires lors du déchiffrement, le cas échéant. Ils peuvent être stockés sur n’importe quel support physique, notamment sur des cartes PKCS#11.

Actuellement il est possible d’utiliser des cartes à puce PKCS#11 mais uniquement en tant que moyen de stockage. Afin d’exploiter pleinement la capacité de cette carte, sa fonction cryptographique sera utilisée pour participer au chiffrement et déchiffrement du keyfile. Cette fonctionnalité sera principalement utile dans le milieu de l’entreprise.

Cette nouvelle fonctionnalité permet de renforcer la sécurité de chiffrement d’un volume VeraCrypt. En effet, à l'heure actuelle, lorsqu’une carte PKCS#11 est utilisée en tant que moyen de stockage d’un keyfile, les utilisateurs peuvent utiliser un même keyfile pour différents conteneurs. L’utilisation de la capacité cryptographique de la carte permet de s’assurer que chaque conteneur a «une clé» (qui peut être une composition de plusieurs mots de passes/keyfiles) différente.

COMMENT L'ATTEINDRE ?


1.1 Rappel général

L’objectif de la solution est de pouvoir proposer à l’utilisateur de renforcer la sécurité de ses conteneurs chiffrés à l’aide de VeraCrypt. L’une des possibilités envisagées est de chiffrer et déchiffrer un keyfile supplémentaire directement sur sa carte PKCS#11 qui contient un certificat de sécurité afin de pouvoir bénéficier des fonctionnalités cryptographiques fournies par ce type de cartes à puce.

Quelques termes essentiels :

  • « master key » est la clé qui sert à déchiffrer les données du conteneur.
  • « header key » est la clé qui sert à déchiffrer le header.
  • « header » désigne les 512 octets d’en-tête d’un volume qui contiennent notamment la master key.
  • « champ du keyfile chiffré », que l’on notera champ KC, désigne l’emplacement qui contiendra le nouveau keyfile chiffré et qui est situé dans le header.
  • Le formatage OAEP (Optimal Asymmetric Encryption Padding) est un formatage pour le chiffrement asymétrique, il est notamment recommandé pour le chiffrement RSA par le NIST [ 7 ]. Ce formatage, grandement présent et utilisé sur les cartes PKCS#11 augmente la longueur du texte clair, après un chiffrement avec RSA le chiffré est plus long que le texte clair. Ce formatage est utilisé sur la carte de l’utilisateur.

1.2 Création d’un volume

La création d’un volume chiffré s’effectue à l’aide d’un keyfile de 64 octets généré de façon pseudoaléatoire avec le générateur de nombres aléatoires sécurisé inclus dans VeraCrypt. Les données du conteneur sont chiffrées avec la master key générée par VeraCrypt et qui est présente dans le header.

Ensuite, la header key est générée avec la fonction de combinaison mélangeant les potentiels mots de passe, les keyfiles sélectionnés ainsi que le nouveau keyfile généré. Cette clé est utilisée pour chiffrer le header. Le contenu du champ KC est alors envoyé en clair à la carte PKCS#11, qui le chiffrera avec la clé publique (Kpub) sélectionnée par l’utilisateur. Ce chiffré de taille variable (compris entre 256 et 512 octets) sera stocké dans le champ KC.

1.3 Montage d’un volume

Le chiffré du keyfile dans le champ KC est envoyé à la carte PKCS#11 qui va le déchiffrer à l’aide de la clé privée Kpriv. Le keyfile sera renvoyé à VeraCrypt. Par la suite, le header sera déchiffré avec la clé générée par la combinaison des potentiels mots de passe et keyfiles comprenant éventuellement celui du champ KC.

Enfin, les données du conteneur pourront être déchiffrées avec la master key présente dans le header. Avec ce système, le keyfile ne sera jamais stocké en clair, mais permettra juste une fois déchiffré d’avoir accès au conteneur.

QUI SOMMES NOUS ?


Notre équipe est constituée de 7 étudiants en 4ème année au département informatique de l'INSA Rennes :

  • Malvin CHEVALLIER
  • Jean HAUROGNE
  • Axel HOMERY
  • Antoine MARCHAL DOMBRAT
  • Guillaume MERCHEZ
  • Simon PORTIER
  • Adrienne RESSY
Ce projet académique, réalisé sur l'année 2023-2024, est encadré par Gildas AVOINEet Mounir IDRASSI.

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_PKCS11 est un fork du code source de VeraCrypt, modifié sur la branche "pkcs#11_dev" pour y ajouter notre fonctionnalité.


POC PKCS11_VeraCrypt contient une preuve de concept en Python permettant d'extraire les certificats et données de cartes à puce de type PKCS#11.


WebPage correspond au code source de la page que vous êtes actuellement en train de lire.

English version