Spécifications cryptographiques - TrueCrypt v6.0a
Transcription
Spécifications cryptographiques - TrueCrypt v6.0a
SOGETI Infrastructure Services 6 - 8, Rue Duret 75016 Paris Evaluation CSPN TrueCrypt v6.0a Tél. : +33(0)1.58.44.55.66 Fax : +33(0)1.58.44.26.19 Spécifications cryptographiques Référence SOGETI : K08-JBB-CR-672-2008 Version 1.2 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a VALIDITE DU DOCUMENT Identification Client Projet Evaluation CSPN Fournisseur SOGETI IS/ESEC Validité du document Action Rédaction Date 18/08/2008 Nom J.-B. BEDRUNE Fonction Consultant sécurité Visa Historique des modifications Date création 18/08/2008 Date application V.R. Évolution 1.0 15/09/2008 1.1 20/10/2008 1.2 Création du document • Ajout de commentaires sur le mode XTS • Justification sur l’absence de détection des clés faibles Prise en compte des commentaires de la DCSSI Diffusion (suivie en mise à jour) Pascal Chour DCSSI Diffusion en copie (non suivie) Édouard JEANSON SOGETI ESEC Manager Référence des documents utilisés Version 3 Référence Nom Documentation TrueCrypt 6.0 Par sa conception et sa réalisation technique originale, ce document est protégé par les dispositions régissant le droit de la propriété intellectuelle. Il est notamment interdit sous peine de poursuites d'imiter ou de reproduire en tout ou partie cette conception et réalisation technique de ce document. Il est également interdit de transmettre à des tiers ce document, ou de divulguer tous renseignements et informations contenus dans ce document, ou toute information permettant l'imitation ou la reproduction totale ou partielle de ce document. Ce document est l’unique propriété de SOGETI IS, et toute reproduction et/ou divulgation, sans autorisation expresse et préalable de SOGETI IS, est interdite. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 2 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a TABLE DES MATIERES VALIDITE DU DOCUMENT ..................................................................................................................................... 2 TABLE DES MATIERES ........................................................................................................................................... 3 IDENTIFICATION DU PRODUIT EVALUE ................................................................................................................. 4 1. DESCRIPTION DES MECANISMES CRYPTOGRAPHIQUES ............................................................................... 7 1. 2. 3. 4. 5. 6. 2. CONFORMITE DES MECANISMES CRYPTOGRAPHIQUES ............................................................................. 15 1. 2. 3. 4. 3. CONFORMITE PAR SEQUENCES ETALONS .................................................................................................................15 CONFORMITE PAR REVUE DE CODE SOURCE .............................................................................................................20 CONFORMITE DU GENERATEUR D’ALEA ...................................................................................................................21 CONFORMITE DES FONCTIONS DE CALCUL D’INTEGRITE ..............................................................................................21 ROBUSTESSE DES MECANISMES CRYPTOGRAPHIQUES .............................................................................. 22 1. 2. 3. 4. 4. ALGORITHMES DE CHIFFREMENT – MODES DE CHIFFREMENT ........................................................................................7 HACHAGE DES DONNEES ........................................................................................................................................9 INTEGRITE DES DONNEES .......................................................................................................................................9 GENERATION D’ALEA ............................................................................................................................................9 METHODES DE GENERATION DES ELEMENTS SECRETS .................................................................................................13 EFFACEMENT DES ELEMENTS SECRETS .....................................................................................................................15 ROBUSTESSE DES ALGORITHMES DE CHIFFREMENT SYMETRIQUE...................................................................................22 PROCEDURES DE VALIDATION DES ELEMENTS SECRETS................................................................................................23 TRAITEMENT DU MOT DE PASSE UTILISATEUR ...........................................................................................................24 MECANISME DE DERIVATION DE CLE PBKDF2 .........................................................................................................25 BIBLIOGRAPHIE .......................................................................................................................................... 26 FIN DU DOCUMENT ............................................................................................................................................ 26 SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 3 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Identification du produit évalué Nom de l’éditeur Nom du produit Nº de version analysée Correctifs éventuels appliqués SOGETI I.S. Division : Consulting Agence : ESEC. TrueCrypt Foundation TrueCrypt 6.0a Réf : K08-JBB-CR-672-2008 Page 4 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Sommaire VALIDITE DU DOCUMENT ..................................................................................................................................... 2 TABLE DES MATIERES ........................................................................................................................................... 3 IDENTIFICATION DU PRODUIT EVALUE ................................................................................................................. 4 1. DESCRIPTION DES MECANISMES CRYPTOGRAPHIQUES ............................................................................... 7 1. 2. 3. 4. 5. 6. 2. ALGORITHMES DE CHIFFREMENT – MODES DE CHIFFREMENT ........................................................................................7 Algorithmes de chiffrement implémentés ...........................................................................................................7 Séquences d’algorithmes de chiffrement utilisées ..............................................................................................7 Modes de chiffrement .........................................................................................................................................7 HACHAGE DES DONNEES ........................................................................................................................................9 INTEGRITE DES DONNEES .......................................................................................................................................9 GENERATION D’ALEA ............................................................................................................................................9 Description générale............................................................................................................................................9 Éléments extérieurs ...........................................................................................................................................10 Alimentation du tableau d’aléa ......................................................................................................................... 11 Fonction de mélange .........................................................................................................................................11 Obtention d’aléa................................................................................................................................................12 METHODES DE GENERATION DES ELEMENTS SECRETS .................................................................................................13 Génération de la clé maitresse et de la clé secondaire......................................................................................13 Génération des clés d’en-tête ............................................................................................................................13 Génération des fichiers clés ...............................................................................................................................15 EFFACEMENT DES ELEMENTS SECRETS .....................................................................................................................15 CONFORMITE DES MECANISMES CRYPTOGRAPHIQUES ............................................................................. 15 1. CONFORMITE PAR SEQUENCES ETALONS .................................................................................................................15 Conformité de l’implémentation d’AES .............................................................................................................15 Conformité de l’implémentation de Twofish .....................................................................................................16 Conformité de l’implémentation de Serpent .....................................................................................................16 Conformité de l’implémentation de SHA-512 ....................................................................................................16 Conformité de l’implémentation de Whirlpool ..................................................................................................18 Conformité de l’implémentation de RIPEMD-160 .............................................................................................19 Conformité de l’implémentation de PBKDF2 .....................................................................................................19 Conformité de l’implémentation du mode XTS ..................................................................................................20 2. CONFORMITE PAR REVUE DE CODE SOURCE .............................................................................................................20 Effacement des données sensibles ....................................................................................................................20 Algorithme de dérivation de clé PBKDF2 ...........................................................................................................21 3. CONFORMITE DU GENERATEUR D’ALEA ...................................................................................................................21 4. CONFORMITE DES FONCTIONS DE CALCUL D’INTEGRITE ..............................................................................................21 3. ROBUSTESSE DES MECANISMES CRYPTOGRAPHIQUES .............................................................................. 22 1. ROBUSTESSE DES ALGORITHMES DE CHIFFREMENT SYMETRIQUE...................................................................................22 Twofish ..............................................................................................................................................................22 AES.....................................................................................................................................................................22 Serpent ..............................................................................................................................................................22 Mode opératoire XTS pour le chiffrement par blocs ..........................................................................................23 2. PROCEDURES DE VALIDATION DES ELEMENTS SECRETS................................................................................................23 3. TRAITEMENT DU MOT DE PASSE UTILISATEUR ...........................................................................................................24 Description générale..........................................................................................................................................24 SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 5 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Manipulation des fichiers clés ...........................................................................................................................24 4. MECANISME DE DERIVATION DE CLE PBKDF2 .........................................................................................................25 4. BIBLIOGRAPHIE .......................................................................................................................................... 26 FIN DU DOCUMENT ............................................................................................................................................ 26 SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 6 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Ce document présente les mécanismes cryptographiques mis en œuvre dans TrueCrypt 6.0. Il recense en particulier les différences existantes entre cette version et la version 4.2 précédemment évaluée. 1. Description des mécanismes cryptographiques 1. Algorithmes de chiffrement – Modes de chiffrement Algorithmes de chiffrement implémentés Les volumes TrueCrypt peuvent être chiffrés avec les fonctions suivantes : Algorithme Taille de clé (bits) Taille de bloc (bits) Mode opératoire AES 256 128 XTS, LRW, CBC Serpent 256 128 XTS, LRW, CBC Twofish 256 128 XTS, LRW, CBC Blowfish 448 64 LRW, CBC CAST5 128 64 LRW, CBC 3DES 192 (168 utilisés) 64 LRW, CBC Seuls les algorithmes AES, Serpent et Twofish utilisant le mode opératoire XTS peuvent être utilisés lors de la création d’un volume TrueCrypt avec la version 6.0. Les autres algorithmes et modes opératoires sont présents pour des raisons de compatibilité avec les anciens volumes. Séquences d’algorithmes de chiffrement utilisées Les séquences de chiffrement correspondent à deux cas : • Au sein d’un mode de chiffrement, l’opération de chiffrement est réalisée à l’aide d’algorithmes de chiffrement en cascade. • La séquence de chiffrement est une suite de modes de chiffrements successifs. Chaque bloc est chiffré en mode CBC avec une fonction de chiffrement, puis chiffré de nouveau en mode CBC avec une fonction de chiffrement différente. Séquence AES-Twofish AES-Twofish-Serpent Serpent-AES Serpent-Twofish-AES Twofish-Serpent AES-Blowfish AES-Blowfish-Serpent Taille de clé (bits) 256, 256 256, 256, 256 256, 256 256, 256, 256 256, 256 256, 448 256, 448, 256 Taille de bloc (bits) 128 128 128 128 128 128, 64 128, 64, 128 Mode opératoire XTS, LRW, outer CBC XTS, LRW, outer CBC XTS, LRW, outer CBC XTS, LRW, outer CBC XTS, LRW, outer CBC Inner CBC Inner CBC Seules les 4 premières séquences sont utilisables lors de la création d’un nouveau volume, en utilisant le mode XTS. Le chiffrement se fait en cascade. Toutes les autres séquences sont présentes pour des raisons de compatibilité avec les anciens volumes. Modes de chiffrement Trois modes de chiffrement sont implémentés. Le mode XTS est le seul utilisable lors de la création SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 7 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a d’un volume. Les modes CBC et LRW sont présents pour pour des raisons de compatibilité. Le mode XTS mis en œuvre est celui décrit dans IEEE 1619 (1). Modes inner CBC, outer CBC et LRW Ces modes sont détaillés dans laa spécification cryptographique de la version 4.2. 4.2 Mode XTS Le mode XTS est défini comme suit : où : • • • • • • est la multiplication de deux polynômes sur le corps binaire GF(2) modulo ! 1; 1 est la clé de chiffrement (256 bits pour chaque algorithme supporté, soient AES, Serpent et Twofish ; 2 est la clé secondaire (256 bits pour chaque algorithme supporté, soient AES, Serpent et Twofish ; est l’indice du bloc à l’intérieur d’une unité de d données ; l’indice du premier bloc est 0 ; est l’indice de l’unité de données pour ; l’indice du premier bloc est 0 ; est un élément premier de 2 qui correspond au polynôme (i.e., 2). Dans le cas de TrueCrypt, la taille de chaque unité de données est toujours de 512 octets, quelle que soit la taille des secteurs. Figure 1 - Chiffrement AES-XTS SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 8 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a 2. Hachage des données Une fonction de hachage spécifiée par l’utilisateur est utilisée par le générateur d’aléa de TrueCrypt comme fonction de « mélange » pseudo-aléatoire, et lors de la dérivation des clés de l’en-tête de volume (HMAC reposant sur une fonction de hachage, comme spécifié dans PKCS #5 v2.0). Lors de la création d’un nouveau volume, le générateur d’aléa génère une clé maîtresse, une clé secondaire (en mode XTS), et un sel. Les fonctions de hachage utilisées sont : - RIPEMD-160 (taille du condensat : 160 bits) ; - SHA-512 (taille du condensat : 160 bits) ; - Whirlpool (taille du condensat : 512 bits) ; - SHA-1 (taille du condensat : 160 bits). Les fonctions de hachage SHA-256 et SHA-384 sont également présentes dans les sources de TrueCrypt, mais ne sont pas utilisés. Il n’est pas possible d’utiliser SHA-1 lors de la création d’un nouveau volume. Cette primitive n’est présente que pour des raisons de compatibilité avec les anciens volumes. 3. Intégrité des données Lors du déchiffrement de l’en-tête du volume avec le mot de passe utilisateur, des vérifications d’intégrité sont effectuées sur les données de l’en-tête, afin de s’assurer que le mot de passe entré est correct. L’intégrité de chaque en-tête d’un volume déchiffré est vérifiée par deux CRC-32 : le premier, situé à l’adresse 72, est le CRC-32 des octets 256 à 511. Le second, à l’adresse 252, est celui des octets 64 à 251. Une autre vérification est effectuée lors de la vérification du déchiffrement de l’en-tête : les 4 octets à l’adresse 4 doivent être égaux à la chaine « TRUE » en ASCII. 4. Génération d’aléa Description générale Les seules différences entre le générateur d’aléa de la version 4.2 et celui de la version 6.0a sont : • l’utilisation d’un tableau d’aléa de 640 octets. La version 4.2 travaillait sur un tableau de 320 octets ; • la fonction de mélange est appelée chaque fois que 16 octets sont ajoutés dans le tableau, et non plus 8 ; • les fonctions de hachage utilisées : SHA-1 a été remplacé par SHA-512 ; Le générateur d’aléa est utilisé pour générer la clé de chiffrement maitresse, la clé secondaire (pour le mode XTS), le sel de l’en-tête du volume, les fichiers de clés et les données aléatoires remplissant un nouveau volume. La fonction de génération d’aléa ne repose pas sur un standard. Sa conception repose sur les travaux présentés dans(2) et (3). SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 9 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Cette fonction utilise un tableau d’aléa " alimenté par des données fournies par le système d’exploitation, le générateur cryptographique fourni par le système d’exploitation, les frappes clavier et le mouvement de la souris. Une fonction de mélange est appelée dès que 16 nouveaux octets ont été ajoutés dans le tableau. Éléments extérieurs Les différents types de sources utilisées sont : • les mouvements de la souris hookés à l’aide de SetWindowsHookEx ; • les frappes clavier hookés à l’aide de SetWindowsHookEx ; • des valeurs retournées par le(s) générateur(s) d’aléa du système : o CryptoAPI : 640 octets retournés par la fonction CryptGenRandom ; • les statistiques des interfaces réseau ; o Tampon alloué par la fonction NetStatisticsGet. Les informations sont récupérées sur les services « Server » et « Workstation » ; • des données statistiques sur les disques o Tampon retourné par DeviceIoControl avec le code IOCTL_DISK_PERFORMANCE sur chaque disque ; • Des valeurs diverses retournées par plusieurs API, récoltées à 500ms d’intervalle. o Fonctions renvoyant un entier de 4 octets : GetActiveWindow GetCapture GetClipboardOwner GetClipboardViewer GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetCurrentTime GetDesktopWindow GetFocus GetInputState GetMessagePos GetMessageTime GetOpenClipboardWindow GetProcessHeap GetProcessWindowStation GetQueueStatus o Fonctions remplissant un tableau d’octets : GetCaretPos GetCursorPos GlobalMemoryStatus GetThreadTimes (tous les tampons retournés sont utilisés) GetProcessTimes (tous les tampons retournés sont utilisés) GetProcessWorkingSetSize (tous les tampons retournés sont utilisés) GetStartupInfo QueryPerformanceCounter, ou GetTickCount en cas d’échec SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 10 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Contrairement aux autres fonctions, les fonctions GetStartupInfo et QueryPerformanceCounter ne peuvent être appelées qu’une seule fois. Les fonctions utilisant ces sources sont : • KeyboardProc : le hook sur les frappes clavier ; • MouseProc : le hook sur les mouvements de la souris ; • FastPoll : la fonction d’alimentation rapide. Cette fonction est appelée toutes les 500ms par un thread d’alimentation, ThreadSafeThreadFunction, ainsi que par la fonction RandGetBytes, qui retourne des séquences d’octets aléatoires. Alimentation du tableau d’aléa Les fonctions précédentes écrivent toutes des données dans le tableau d’aléa. L’ajout d’une valeur dans le tableau d’aléa " se fait avec la fonction RandaddByte. Avant qu’une valeur ne soit écrite dans ce tableau, elle est préalablement convertie en suite d’octets (par exemple, un nombre de 32 bits est converti en 4 octets). Les octets sont ensuite écrits dans le tableau avec une addition module 28 (et non pas en remplaçant les anciennes valeurs du tableau) à l’endroit où est positionné le curseur dans le tableau. Après qu’un octet a été écrit, le curseur, appelé nRandIndex, est décalé d’un octet. Une fois le curseur arrivé à la fin du tableau, il est repositionné au début du tableau. Quand 16 octets ont été ajoutés au tableau, une fonction de « mélange » RandMix est appliquée sur l’intégralité du tableau. Algorithme : RandaddByte Entrée : un octet v Sortie : pas de sortie 1. "#$#% "#$#% &'# 640 2. "+,-+./+.01 2 "+,-+./+.01 &'# 2 3. Si "#$#% &'# 16 0 Faire: a. Mélanger " avec RandMix 4. Fin Si 5. "#$#% "#$#% 1 Fonction de mélange Le rôle de cette fonction est de disperser au maximum l’entropie de chaque octet ajouté sur la totalité du tableau d’aléa. Cette fonction est appelée sur la totalité du tableau chaque fois que 16 octets ont été écrits sur celui-ci. Algorithme : RandMix Entrée : pas de valeur d’entrée Sortie : pas de valeur de sortie 1. Soit " le tableau d’aléa 2. Soit H la fonction de hachage sélectionnée par l’utilisateur (SHA-512, RIPEMD-160 ou Whirlpool) 3. l est la longueur en octets du condensat retourné par la fonction H. Si H est RIPEMD-160, l = 20 ; si H est SHA-512 ou Whirlpool, l = 64 4. z est la longueur en octets du tableau d’aléa (640 octets) 5. q z / l – 1 (par exemple, si H est Whirlpool, alors q = 9) 6. " est divisé en blocs de l octets : B0… Bq Pour 0 ; ; < faire : SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 11 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a a. = > ?B@ A ?B A ?… ABC [le tableau d’aléa est haché par la fonction H, qui retourne le condensat M] b. BD BD = 7. " ?B@ A ?B A ?… ABC 1. 2. 3. 4. Par exemple, si q = 1, le tableau d’aléa sera mélangé comme suit : ?B@ AB " B@ B@ >B@ AB ? B B >B@ AB ? " B@ AB ? Obtention d’aléa Deux fonctions retournent des suites d’octets aléatoires : • RandpeekBytes retourne une partie de tableau d’aléa. • RandgetBytes retourne une partie du tableau d’aléa, et met à jour ce dernier en appelant les fonctions d’alimentation du tableau et la fonction de mélange. La taille des données retournées lors de chaque appel à une de ces fonctions est inférieure ou égale à la taille du tableau d’aléa, soit 640 octets. RandpeekBytes Cette fonction retourne directement des valeurs contenues dans le tableau d’aléa. Elle est appelée pour afficher l’état du tableau d’aléa lors de la génération des clés de chiffrement du volume, dans l’interface utilisateur de TrueCrypt Format. L’état complet du tableau n’est jamais affiché. La fonction est également utilisée lors du formatage des volumes, si l’option de formatage rapide n’est pas activée : le volume est rempli de données aléatoires retournées par cette fonction. Les données ne sont pas écrites en clair : elles sont chiffrées avec deux clés temporaires E1, E2 en mode XTS, avec l’algorithme de chiffrement utilisé pour le chiffrement du volume. Ces clés sont générées avec randgetBytes. Algorithme : randpeekBytes Entrée : un tableau G de taille H octets Sortie : le tableau G rempli avec H octets aléatoires 1. Si H I 640 Alors : a. Retourner une erreur 2. Fin Si 3. Soit " "@ , " , … "JKL le tableau d’aléa 4. Copier "@ , " , … "MN dans G RandgetBytes randgetBytes retourne une suite d’octets aléatoires. Elle remet à jour le tableau d’aléa, contrairement à randpeekBytes. Un paramètre d’entrée spécifie si la fonction d’alimentation lente doit être appelée avant de retourner des données. Algorithme : randgetBytes Entrée : un tableau G de taille H octets, un booléen forceSlowPoll SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 12 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Sortie : le tableau G rempli avec H octets aléatoires 1. Si forceSlowPoll est VRAI ou que SlowPoll n’a jamais été appelé Faire : a. Appeler SlowPoll 2. Fin Si 3. Appeler FastPoll 4. Si H I 640 Alors : a. Retourner une erreur 5. Fin Si 6. Pour 0 ; O H Faire : a. GD "D b. 1 &'# 640 7. Fin Pour 8. Pour 0 ; 640 O H Faire : a. "D ~"D en notant ~ l’opérateur complément à 2 9. Fin Pour 10. Appeler FastPoll 11. Pour 0 ; O H Faire : a. GD GD "D b. 1 &'# 640 12. Fin Pour Les données aléatoires obtenues par l’intermédiaire de cette fonction sont les clés de chiffrement du volume, le sel de l’en-tête de volume, l’en-tête du volume caché s’il n’y a pas de volume caché (l’entête est alors rempli de données aléatoires), les fichiers clés, la génération des clés temporaires de chiffrement lors du remplissage des volumes nouvellement formatés, et l’identifiant de volume pour les partitions FAT. 5. Méthodes de génération des éléments secrets Génération de la clé maitresse et de la clé secondaire Les clés maitresse et secondaire sont retournées par la fonction randgetBytes. Leur taille dépend des algorithmes utilisés. Par exemple, en utilisant AES, Serpent ou Twofish, la clé primaire et la clé secondaire auront toutes deux une longueur de 256 bits. Ces tailles seront trois fois plus grandes si les 3 algorithmes de chiffrement symétrique disponibles sont utilisés en cascade. Génération des clés d’en-tête Principe de fonctionnement La clé d’en-tête est utilisée pour chiffrer et déchiffrer la zone chiffrée de l’en-tête d’un volume TrueCrypt. Cet en-tête contient la clé maître utilisée pour chiffrer le volume. TrueCrypt utilise PBKDF2, décrit dans PKCS #5 v2.0, pour générer la clé d’en-tête et la clé secondaire d’en-tête (en mode XTS). Un sel de 512 bits est utilisé. Il est généré par la fonction randgetBytes lors de la création du volume. La fonction de dérivation de la clé maitresse repose sur un HMAC-SHA-512, un HMAC-RIPEMD-160 ou un HMAC-Whirlpool selon la fonction de hachage choisie par l’utilisateur. La longueur des clés dérivées SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 13 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a n’est pas dépendante de la fonction de hachage. Par exemple, la clé d’en-tête d’un volume chiffré avec AES-256 sera toujours 256 bits, même si un HMAC-RIPEMD-160 est utilisé (le mode XTS nécessite en fait une clé secondaire. Ce sont donc deux clés de 256 bits qui doivent être générées). La fonction de dérivation effectue 1000 itérations (ou 2000 si la fonction de hachage utilisée est RIPEMD-160) lors de la dérivation de la clé maitresse, conformément aux préconisations de PBKDF2. Les clés d’en-tête pour les modes en cascade sont toutes mutuellement indépendantes, bien que dérivées d’un même mot de passe. Par exemple, pour la cascade AES-Twofish-Serpent, la fonction de dérivation de la clé d’en-tête dérive du mot de passe une clé de 768 bits (et, en mode XTS, une clé secondaire d’elle aussi 768 bits). La clé générée est ensuite divisée en 3 clés de 256 bits (en mode XTS, la clé secondaire est également divisée, et on obtient au final 6 clés de 256 bits). La première clé est utilisée par Serpent, la seconde par Twofish et la dernière par AES. Traitement du mot de passe utilisateur Mot de passe utilisateur Le traitement du mot de passe utilisateur est le même que dans la version 4.2. Une fonction est appliquée aux fichiers clé, et au mot de passe s’il est présent, pour obtenir un mot de passe modifié de 64 octets. Dans le cas où il n’y a pas de fichiers clés, le mot de passe utilisateur n’est pas modifié. Fichiers clés Le mécanisme de traitement des fichiers clés est identique à celui de la version 4.2. Un traitement est appliqué au contenu de chaque fichier clé pour obtenir l’équivalent d’un mot de passe de 64 caractères. TrueCrypt recommande l’utilisation de fichiers clés d’au moins 30 caractères, contre 16 dans la version 4.2. Le paramètre preserveTimestamp des fonctions KeyFilesApply et KeyFileProcess a été supprimé. Il indiquait si l’empreinte de temps des fichiers clés devait être préservée, afin de masquer les accès en lecture faits par TrueCrypt. La préservation de l’empreinte est maintenant forcée. Dérivation selon PKCS #5 v2.0 La fonction de dérivation est identique à celle de la version 4.2. Seule une fonction de hachage a été remplacée. Cette fonction dérive les clés d’en-tête à partir du mot de passe modifié et de la graine du disque chiffré. Elle remplit un tableau d’octets, dont la taille dépend des algorithmes de chiffrement utilisés. Deux clés par algorithme utilisé sont générées en mode XTS. Pour un chiffrement AES, cette fonction retournera donc un tableau de 512 bits, qui sera ensuite coupée en deux clés de 256 bits. Cas de SHA-1 : La fonction de hachage SHA-1 est remplacée par SHA-512. Les modifications par rapport à la version précédente sont les suivantes : • L’appel à la fonction derive_key_sha1 est remplacé par l’appel à derive_key_sha512. • La fonction de génération d’aléa hmac-SHA-1 est remplacée par hmac-SHA-512. • Le nombre d’itérations est fixé à 1000 et non à 2000. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 14 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Génération des fichiers clés Les fichiers clés sont remplis par les données retournées par la fonction randgetBytes du générateur d’aléa. 6. Effacement des éléments secrets Les méthodes d’effacement des éléments secrets sont les mêmes que celles utilisées dans la version 4.2. 2. Conformité des mécanismes cryptographiques 1. Conformité par séquences étalons Des fonctions de tests des fonctions cryptographiques sont mises en œuvre dans TrueCrypt. Ces vérifications se font par séquences étalons, et sont exécutées au lancement du programme et à la demande de l’utilisateur. Les tests sont très basiques, en grande partie à cause des contraintes de temps d’exécution. Ces tests n’ont pas été pris en compte pour l’évaluation de la conformité des algorithmes. Les tests ont été réalisés à partir de séquences étalons. Les fonctions de chiffrement sont toutes des candidates pour AES. Ce sont les séquences générées par l’implémentation de référence qui ont été utilisées. Les séquences étalons des fonctions de hachage proviennent de sources diverses. Conformité de l’implémentation d’AES Les suites étalon utilisées sont celles du NIST : http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip. Les tests ont été réalisés sur : • Chiffrement AES en mode ECB avec des clés de 256 bits • Déchiffrement AES en mode CBC avec des clés de 256 bits Il s’agit de tests de Monte Carlo. L’algorithme utilisé pour le chiffrement est le suivant : Algorithme : AESMonteEncryptECB Entrées : Une clé K1 de 256 bits, un message m1 Sortie : VRAI si le test est correct, FAUX sinon 1. Initialiser E@ et &@ 2. Pour 0 ; O 400 Faire : a. Pour 0 ; Q O 10000 Faire : i. Calculer RS %T &S ii. &SU RS b. Fin Pour c. Vérifier que Ci est conforme. Sinon retourner FAUX d. Générer ki+1 3. Fin Pour SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 15 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a 4. Retourner VRAI Le test est analogue pour le déchiffrement, en utilisant la fonction de déchiffrement dk au lieu de ek. La conformité du chiffrement et du déchiffrement en mode CBC n’a pas été étudiée, ce mode n’étant plus disponible dans la version 6. Les résultats en mode ECB sont positifs. Algorithme Test Résultat AES AESMonteEncryptECB OK AES AESMonteDecryptECB OK Conformité de l’implémentation de Twofish Les tests sont identiques à ceux réalisés sur AES. Les séquences étalon sont ceux fournis au NIST lors de la soumission pour AES : http://www.schneier.com/code/twofish-kat.zip Les résultats en mode ECB sont positifs. Algorithme Test Résultat Twofish TwofishMonteEncryptECB OK Twofish TwofishMonteDecryptECB OK Conformité de l’implémentation de Serpent Les tests sont identiques à ceux réalisés sur AES. Les séquences étalon sont ceux fournis au NIST lors de la soumission pour AES : http://www.cl.cam.ac.uk/~rja14/Papers/serpent.tar.gz Les résultats en mode ECB sont positifs. Serpent SerpentMonteEncryptECB Résultat Serpent SerpentMonteEncryptECB OK Serpent SerpentMonteDecryptECB OK Conformité de l’implémentation de SHA-512 Les tests réalisés sur SHA-512 utilisent les séquences étalon du NIST (« SHA Test Vectors for Hashing Byte-Oriented Messages »). Ils sont disponibles à l’adresse : http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip La méthodologie utilisée est fondée sur celle du NIST détaillée dans (4). Il s’agit d’effectuer trois tests : un avec des messages courts, un avec des messages longs et un dernier avec des messages pseudoaléatoires. Messages courts Une mise en œuvre de SHA doit générer correctement des empreintes pour des messages de longueur arbitraire. Le test suivant porte sur la génération d’empreintes sur plusieurs messages courts, c'est-àdire dont la longueur est inférieure à l’espace de travail utilisé par l’algorithme. Les empreintes sont calculées sur une série de messages de taille 0 à 1024 bits, par échelon de 8 bits. Algorithme : SHA512ShortMsg Entrée : une liste de 129 éléments (mi, hi), avec mi des messages de longueur 0 à 1024 bits SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 16 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Sortie : VRAI si le test a réussi, FAUX sinon. 1. Pour 0 ; ; 128 Faire : a. Calculer WDX >&D b. Si WDX Y WD : i. Retourner FAUX c. Fin Si 2. Fin Pour 3. Retourner VRAI Messages longs Une mise en œuvre de SHA doit générer correctement des empreintes pour des messages dépassant la longueur de l’espace de travail de SHA. La taille m des messages vérifiés varie de & 99 ; H ; & [ 100 avec l taille de l’espace de travail (ici 1024 bits), soit ici : 1024 8 [ 99 [ , 1 ; ; 128. Algorithme : SHA512LongMsg Entrée : une liste de 128 éléments (mi, hi) avec mi des messages de longueur 1816 à 102400 bits Sortie : VRAI si le test a réussi, FAUX sinon 1. Pour i de 1 à 129 Faire : a. Calculer WDX >&D b. Si WDX Y WD Alors : i. Retourner FAUX c. Fin Si 2. Fin Pour 3. Retourner VRAI Messages pseudo-aléatoires Il s’agit d’un test de Monte Carlo. Les messages sont générés à partir d’une graine de 512 bits. La graine est utilisée par un générateur d’aléa pour créer 100000 empreintes. Une empreinte sur 1000 est enregistrée et vérifiée. Algorithme : SHA512Monte Entrée : une graine s, une liste de messages WS , 0 ; Q O 100 Sortie : VRAI si le test a réussi, FAUX sinon 1. Pour 0 ; Q O 100 Faire : a. & & &@ \ b. Pour i de 3 à 1003 Faire : i. Calculer &D >&DNK |&DN |&DN c. Fin Pour d. &S \ &@@ e. Si &S Y WS : i. Retourner FAUX f. Fin Si 2. Fin Pour 3. Retourner VRAI Les trois tests sont positifs. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 17 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Algorithme SHA-512 SHA-512 SHA-512 Test SHA512ShortMsg SHA512LongMsg SHA512Monte Résultat OK OK OK Remarque : des tests identiques ont également été réalisés avec SHA-1, même si celui-ci n’est plus disponible dans la version 6. Les tests s’adaptaient facilement, cette fonction a donc également été testée. Les résultats sont également tous positifs. Conformité de l’implémentation de Whirlpool Les séquences étalon utilisées sont celles de la soumission de l’algorithme pour le projet NESSIE. La mise en œuvre utilisée par TrueCrypt est l’implémentation NESSIE de référence, légèrement modifiée. Les tests ont tout de même été réalisés. Les séquences étalon sont disponibles ici : http://planeta.terra.com.br/informatica/paulobarreto/whirlpool.zip Trois tests ont été effectués : • un test sur des messages de taille variable ayant tous leurs bits à zéro ; • un autre sur des messages de 512 bits contenant un seul bit à 1 ; • un dernier sur un message de 512 bits à 0, et dont l’empreinte est ré-hachée 100 000 000 de fois. Messages de longueur variable Ce test calcule l’empreinte de messages de taille allant de 0 à 1023 bits. Tous les bits de chaque message sont à zéro. Les résultats obtenus sont comparés à la séquence de référence. Algorithme : NESSIELength Entrée : une liste d’empreintes WD , 0 ; O 1024 Sortie : VRAI si le test a réussi, FAUX sinon 1. Pour 0 ; O 1024 Faire : a. Générer un message M de longueur i bits, avec tous ses bits à 0 b. Calculer WDX >= c. Si WDX Y WD : i. Retourner FAUX d. Fin Si 2. Fin Pour 3. Retourner VRAI Message de 512 bits contenant un seul bit à 1 Ce test calcule l’empreinte de 512 messages mi de 512 bits. Le ième bit,0 ; O 512, est mis à 1 pour chacun des messages. Les résultats obtenus sont comparés à la séquence de référence. Algorithme : NESSIEOneBit Entrée : une liste d’empreintes WD , 0 ; O 512 Sortie : VRAI si le test a réussi, FAUX sinon 1. Pour 0 ; O 512 Faire : a. Générer un message M de 512 bits dont seul le ième bit est mis à 1 b. Calculer WDX >= c. Si WDX Y WD : SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 18 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a i. Retourner FAUX d. Fin Si 2. Fin Pour 3. Retourner VRAI Calcul d’une empreinte sur 100 millions d’itérations Ce test calcule l’empreinte d’un message de 512 bits tous à zéro. L’empreinte résultante est ensuite hachée, ceci 100 millions de fois. Algorithme : NESSIEHundredMillion Entrée : une empreinte h Sortie : VRAI si le test à réussi, FAUX sinon 1. Générer m la chaine de 512 bits tous à 0 2. Pour 0 ; O 100000000 Faire : a. Calculer h’ = H(M) b. M = h’ 3. Fin Pour 4. Si h = h’ retourner VRAI, sinon retourner FAUX Les trois tests sont positifs. Algorithme Whirlpool Whirlpool Whirlpool Test NESSIELength NESSIEOneBit NESSIEHundredMillion Résultat OK OK OK Conformité de l’implémentation de RIPEMD-160 Les tests sur RIPEMD-160 ont été effectués à partir des séquences disponibles ici : http://homes.esat.kuleuven.be/~bosselae/ripemd160.html Seules 9 séquences sont disponibles. Les résultats sont tous positifs. Algorithme RIPEMD-160 Test RIPEMDTestVectors Résultat OK Conformité de l’implémentation de PBKDF2 La fonction de dérivation de clés PBKDF2 a été testée à partir des séquences étalons disponibles dans la RFC 3962 (« Advanced Encryption Standard (AES) Encryption for Kerberos 5 »). La fonction sous-jacente utilisée est un HMAC-SHA1. Peu de séquences étalons utilisant d’autres fonctions de hachage sont disponibles. La mise en œuvre de PBKDF2 avec les fonctions de hachage utilisées par TrueCrypt 6 a été vérifiée par revue du code source. Les différences trouvées portent uniquement sur l’appel de fonctions de hachage différentes pour chaque HMAC. La graine, le mot de passe et leurs longueurs, ainsi que le nombre d’itérations sont variables dans les différentes séquences. Les résultats obtenus sont positifs. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 19 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Algorithme PBKDF2 Test PBKDF2-HMAC-SHA1TestVectors Résultat OK Conformité de l’implémentation du mode XTS La mise en œuvre du mode XTS a été vérifiée à partir des séquences étalon spécifiées dans IIIE 1619(1). N’ayant pas accès à la version complète de ce document, les vecteurs ont été récupérés depuis les sources d’OpenBSD à l’adresse : http://www.openbsd.org/cgi-bin/cvsweb/src/regress/sys/crypto/aesxts/ Les séquences disponibles utilisent AES comme fonction de chiffrement, avec des clés de 128 ou 256 bits. Les tests ont porté sur les 5 séquences avec des clés de 256 bits. TrueCrypt utilise les mêmes séquences lors de son lancement pour vérifier la conformité de la mise en œuvre. Des tests indépendants ont toutefois été réécrits. Les résultats obtenus sont positifs. Algorithme Test Résultat XTS-AES XTS-AES256TestVectors OK Les mêmes fonctions sont utilisées l’utilisation du mode XTS avec les autres fonctions de chiffrement disponibles. Nous considérons donc que la mise en œuvre de ce mode est correcte. 2. Conformité par revue de code source Effacement des données sensibles L’effacement des données sensibles se fait toujours en appelant la fonction burn, définie dans le fichier Tcdefs.h. Cette macro-fonction est définie comme suit : 1. #define burn(mem, size) 2. do { 3. volatile char *burnm = (volatile char *) (mem); 4. int burnc = size; 5. RtlSecureZeroMemory (mem, size); 6. while (burnc--) *burnm++ = 0; 7. } while (0) Deux procédures d’effacement sont donc appelées : la seconde remet tous les octets de la mémoire à zéro. La première, définie dans WinNT.h, fait exactement la même chose : elle n’a pas d’utilité réelle si le programme est compilé avec Visual Studio 2008. Contexte des algorithmes de chiffrement Les fonctions de chiffrement sont toujours utilisées à l’aide d’un wrapper sur les fonctions de bas niveau. En particulier, un contexte de chiffrement est manipulé par 3 fonctions : crypto_open, crypto_loadkey et crypto_close. crypto_open alloue une structure de type KEY_INFO, contenant entre autres des clés de chiffrement et les contextes de chiffrement associés. Elle est initialisée à 0 et verrouillée en mémoire à l’aide de VirtualLock si elle est appelée en mode utilisateur. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 20 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a crypto_close détruit les données du contexte en appelant la fonction burn, puis déverrouille la structure avec VirtualUnlock. Enfin, la mémoire précédemment allouée est libérée. Il y a donc un mécanisme de sécurité empêchant la copie des clés sur le disque. Les contextes de chiffrement, et donc les variables intermédiaires utilisées par les fonctions de chiffrement, sont correctement effacés si la fonction crypto_close est appelée quand les clés de chiffrement ne sont plus nécessaires. Une revue du code source semble montrer que cette fonction est toujours appelée. Algorithme de dérivation de clé PBKDF2 La fonction de dérivation de clé PBKDF2 présente un problème de mise en œuvre : les fonctions derive_u_whirlpool, derive_u_sha512 et derive_u_ripemd160 ne convertissent pas correctement l’index de bloc en notation big endian. Seul l’octet de poids faible est pris en compte, les trois autres étant considérés nuls. Le mécanisme mis en œuvre présente alors des cycles de longueur 256 fois la taille des condensats générés : • 5120 octets pour RIPEMD-160 ; • 16384 pour SHA-512 et Whirlpool. Ce problème n’a aucun impact sur la sécurité du produit : les appels à cette demandent au maximum des données de 1536 octets (soient 6 clés de 256 bits). Enfin, toutes les variables intermédiaires sensibles sont correctement effacées, quelle que soit la fonction de hachage utilisée. La fonction de dérivation de clé PBKDF2 telle que mise en œuvre dans TrueCrypt n’est pas de niveau standard. Le problème de mise en œuvre identifié, déjà présent dans la version 4.2, ne crée toutefois, tel qu’il est utilisé, aucun affaiblissement de nature cryptographique. 3. Conformité du générateur d’aléa Le générateur d’aléa est le même que celui mis en œuvre dans la version 4.2, à ceci près que le tableau d’aléa utilisé est deux fois plus grand. Les conclusions sont donc les mêmes que celles de la version 4.2. La règle suivante n’est pas respectée : • RègleSArchiGDA-2 : Un générateur physique d’aléa ou des éléments secrets combinés avec une mémoire non volatile doivent être employés. Le générateur est formé d’un état perturbé par des éléments extérieurs ne constituant pas une véritable source physique d’aléa, retraités par une fonction de hachage cryptographique de niveau standard. Cette composition n’est pas reconnue de niveau standard pour la génération d’aléa selon le référentiel de la DCSSI. 4. Conformité des fonctions de calcul d’intégrité L’intégrité de l’en-tête de volume déchiffré est assurée par deux CRC-32 et une chaine de 4 octets. Le CRC-32 n’est pas un mécanisme cryptographique, tout comme la comparaison d’une partie de l’en-tête SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 21 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a avec 4 octets fixés. Ces informations, en particulier la valeur « TRUE », donnent des informations sur les données présentes dans l’en-tête. Toutefois, l’en-tête est chiffré avec les mêmes algorithmes que ceux utilisés pour le chiffrement du volume. Une attaque à texte clair partiellement connu ne paraît pas envisageable. Le mécanisme de vérification de l’intégrité des données n’est pas de niveau standard. Il faut cependant noter qu’il est principalement utilisé pour authentifier l’utilisateur plus que pour vérifier l’intégrité des données de l’en-tête. 3. Robustesse des mécanismes cryptographiques 1. Robustesse des algorithmes de chiffrement symétrique Twofish Twofish est une fonction de chiffrement par blocs, utilisant des blocs de 128 bits. TrueCrypt utilise Twofish avec des clés de 256 bits. Aucune attaque n’a été publiée sur Twofish depuis l’évaluation de la version 4.2 de TrueCrypt. L’algorithme Twofish est un algorithme de chiffrement par bloc de niveau standard. AES TrueCrypt utilise AES avec des clés de 256 bits. L’AES, tel qu’il est spécifié dans le FIPS-197, est un mécanisme de chiffrement par blocs de niveau standard (5). Serpent Serpent est un algorithme de chiffrement par blocs utilisant des blocs de 128 bits. TrueCrypt utilise Serpent avec des clés de 256 bits. Il n’existe actuellement pour la version non réduite de Serpent aucune attaque théorique plus efficace qu’une recherche exhaustive. La meilleure attaque contre Serpent est une attaque par cryptanalyse différentielle linéaire. Elle attaque 11 tours (Serpent possède 32 tours) avec une complexité en temps de 2139,2 et 2125,3 textes clairs choisis (6). Cette attaque est donc totalement théorique. L’algorithme Serpent est un algorithme de chiffrement par bloc de niveau standard. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 22 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a Mode opératoire XTS pour le chiffrement par blocs Le mode opératoire LRW était utilisé dans la version 4.2 de TrueCrypt. Des problèmes de sécurité sont apparus sur ce mode (7). C’est pourquoi le mode XTS est maintenant utilisé. Il s’agit d’une variante du mode XEX, justement utilisé pour pallier les problèmes rencontrés avec le mode LRW. Le mode XTS introduit l’utilisation d’une clé secondaire, appelée « clé de torsion », et permet le vol de texte chiffré (« Ciphertext stealing »). Le mode XTS utilisé avec AES a été standardisé par l’IEEE P1619 (Standard for Cryptographic Protection of Data on Block-Oriented Storage Device)(8). Le mode XTS est en cours de standardisation par le NIST, en tant que mode opératoire pour l’AES. Le NIST a lancé un appel à commentaires, qui s’est terminé le 3 septembre 2008. Les commentaires ont été publiés sur le site du NIST le 12 septembre 2008 (9). Les critiques portent essentiellement sur l’utilisation d’une clé secondaire pour le mode XTS : la taille des clés est doublée. Certains jugeant l’utilisation du mode XEX, qui n’utilise qu’une seule clé, plus pertinente. TrueCrypt n’utilise pas le vol de texte chiffré : le mode XEX aurait également pu être utilisé. Aucun problème de sécurité n’a été relevé dans les commentaires. Un commentaire apporte une preuve de sécurité du mode XTS (10). La DCSSI recommande (5) l’emploi d’un mode opératoire de chiffrement non déterministe, ce qui est le cas du mode XTS. À ce jour, aucune attaque n’est publiée sur ce mode. Des critiques ont été faites quant à l’abandon du mode LRW pour IEEE P1619 : elles insistaient sur le fait que ce mode était soumis à études depuis des années, ce qui n’était pas le cas des autres modes proposés, comme XTS. Une attention particulière a été portée sur les conséquences de l’écriture d’une des clés de chiffrement sur le disque, un problème de ce type ayant entrainé l’abandon du mode LRW par l’IEEE 1619. Nous n’avons trouvé aucune attaque de ce type avec le mode XTS. La règle et la recommandation suivantes sont respectées : • RègleSModeChiff-1 : Au sein du modèle de sécurité correspondant à l’usage du mode de chiffrement, il ne doit exister aucune attaque de complexité inférieure à2+ , où est la taille en bits du bloc. • RecomSModeChiff-1 : L’emploi d’un mode opératoire de chiffrement non déterministe est recommandé. L’algorithme XTS utilisé avec AES, Serpent ou Twofish est un mécanisme de chiffrement symétrique de niveau standard. 2. Procédures de validation des éléments secrets Il n’est plus possible de créer des volumes chiffrés avec le mode LRW. La fonction DetectWeakSecondaryKey, testant la faiblesse des clés secondaires pour ce mode, a donc été supprimée. Son utilisation n’était pas fondée d’un point de vue cryptographique (9). TrueCrypt ne vérifie pas si une clé faible est utilisée pour le mode XTS. Les développeurs considèrent que la probabilité d’utiliser une clé faible est nulle : /* Note: XTS mode could potentially all blocks in one data unit on the (i.e. 512 bytes of the volume would create a TrueCrypt volume with such SOGETI I.S. Division : Consulting Agence : ESEC. be initialized with a weak key causing volume to be tweaked with zero tweaks be encrypted in ECB mode). However, to a weak key, each human being on Earth Réf : K08-JBB-CR-672-2008 Page 23 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a would have to create approximately 11,378,125,361,078,862 (about eleven quadrillion) TrueCrypt volumes (provided that the size of each of the volumes is 1024 terabytes). */ Le chiffrement effectué par la clé secondaire (clé de « torsion ») peut donner produire une valeur de « torsion » nulle pour une unité de données : On note _ . Si = 0 pour une unité de donnée d’indice donnée, alors _ 0 pour chaque bloc d’indice cette unité de donnée. Tout bloc de cette unité de donnée sera alors chiffré en mode ECB : La sécurité à l’intérieur de cette unité de donnée sera celle du mode opératoire ECB. La probabilité d’utiliser une telle clé faible sur une unité de données fixée est d’environ 1/2 . Cette probabilité est négligeable et le risque introduit est en accord avec les recommandations de la DCSSI. 3. Traitement du mot de passe utilisateur Description générale Un volume peut être monté avec un mot de passe et/ou des fichiers clés. Le mot de passe est stocké dans une structure Password contenant sa longueur, d’au plus 64 caractères, et sa valeur. Des opérations sur les fichiers clés sont effectuées afin d’obtenir également une structure Password pour l’ensemble des fichiers clés. Enfin, les deux structures obtenues sont fusionnées, avec une addition octet par octet modulo 2 . Le mot de passe n’est pas modifié, et les clés de chiffrement sont directement dérivées de sa valeur. Les opérations effectuées sur les fichiers clés sont détaillées dans la partie suivante. Manipulation des fichiers clés Les données des fichiers clés sont traitées afin d’obtenir un « mot de passe aléatoire » pour le volume, d’une taille fixe de 64 octets. On peut donc la considérer comme une fonction de hachage. L’algorithme de traitement KeyFileProcess pour chaque fichier clé est le suivant : Algorithme : KeyFileProcess Entrée : un tableau # #@ , # , … , #M de longueur H octets, contenu du fichier clé, un tableau d’aléa @ , , … , J` de 64 octets Sortie : le tableau d’aléa modifié 1. RbR 0 2. Q 0 3. Pour 1 ; ; H Faire : a. RbR cdef32#D , RbR b. S S RbR h 24 &'# 2 c. SU SU RbR h 16 &'# 2 d. SU SU RbR h 8 &'# 2 e. SUK SUK RbR &'# 2 f. Q Q 3&'# 64 4. Retourner SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 24 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a UPDC32 est la fonction de mise à jour de CRC-32. Elle prend en paramètre un octet à traiter, et le haché courant. Elle retourne la nouvelle valeur du haché. est utilisé pour l’ensemble des fichiers clés. Sa valeur est mise à jour chaque fois qu’un nouveau fichier clé est traité. Il est trivial de trouver des collisions dans cette fonction. Exemple : Prenons une chaine de 13 caractères, contenant les données « TrueCrypt 6.0 ». Le CRC de ces données est 0x9392B2F1. Lors de l’appel de la fonction KeyFileProcess, 52 octets vont être écrits dans . Ajoutons maintenant 4 autres caractères à cette chaine, formés de façon à ce que le CRC-32 de la chaine complète soit nul. Pour cela, on rajoute les octets 0xF1, 0xB2, 0x92 et 0x93. Après l’ajout du 16e octet, Q va valoir 0. Le 17e et dernier octet sera donc écrit au début de . Le haché ayant une valeur nulle, les valeurs de ne seront pas modifiées. On crée un fichier conteneur de test, protégé par un fichier clé contenant les données « TrueCrypt 6.0\xF1\xB2\x92\x93 ». Le volume peut alors être monté avec le fichier clé suivant : « TrueCrypt 6.0\xF1\xB2\x92 ». Il est possible de monter un volume TrueCrypt avec plusieurs fichiers clés différents. Le mécanisme utilisé pour traiter les fichiers clés n’atteint pas le niveau standard. 4. Mécanisme de dérivation de clé PBKDF2 Le mécanisme de dérivation de clé est le même que celui de la version 4.2. Dans la version 4.2, il était possible d’entrer des mots de passe de plus de 64 caractères ; seuls les 64 premiers caractères étaient alors utilisés. Ce n’est plus possible dans cette version. Lorsqu’un mot de passe court est entré, un message d’avertissement est affiché, préconisant d’utiliser des mots de passe d’au moins 20 caractères. Dans la version 4.2, ce message s’affichait si le mot de passe entré par l’utilisateur faisait moins de 12 caractères. La version 6 n’affiche ce message que si le mot de passe fait moins de 20 caractères. Le nombre d’itérations pour PBKDF2 n’est plus 2000 pour chaque fonction de hachage : 1000 itérations sont utilisées pour SHA-512 et Whirlpool, en raison de la lenteur de ces algorithmes par rapport aux précédents algorithmes utilisés (RIPEMD-160 et SHA-1). Ceci ne pose toutefois pas de problème de sécurité, et suit la recommandation de PKCS#5 d’utiliser au moins 1000 itérations. Aucune attaque n’a été publiée sur PBKDF2 depuis la version 4.2 de TrueCrypt. Le mécanisme de dérivation des clés PBKDF2, utilisé comme spécifié dans PKCS#5, est un mécanisme cryptographique de niveau standard. SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 25 / 26 Évaluation CSPN Spécifications cryptographiques – TrueCrypt v6.0a 4. Bibliographie 1. IEEE. IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices. 2008. 978-0-7381-5363-6. 2. Gutmann, Peter. Software Generation of Practically Strong Random Numbers. 1998. 3. Ellison, Carl. Cryptographic Random Numbers. Carl Ellison's home page. [Online] Novembre 11, 1995. http://world.std.com/~cme/P1363/ranno.html. 4. NIST. The Secure Hash Algorithm Validation System (SHAVS). 2004. 5. DCSSI. Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques de niveau de robustesse standard. 2006. 6. Eli Biham, Orr Dunkelman, Nathan Keller. Differential-Linear Cryptanalysis of Serpent. Lecture notes in computer science. 2003. 7. Hars, Laszlo. P1619: how serious is the leak of K2? IEEE Standards Working Group Areas. [Online] Juin 2, 2006. http://grouper.ieee.org/groups/1619/email/msg00962.html. 8. IEEE 1619. The XTS-AES Tweakable Block Cipher. 2008. 9. NIST. Comments on the proposal to approve XTS-AES. NIST.gov. [Online] Septembre 12, 2008. http://csrc.nist.gov/groups/ST/toolkit/BCM/comments.html. 10. Moses Liskov, Kazuhiko Minematsu. Comments on XTS-AES. 2008. 11. DCSSI. Cotation cryptographique des mécanismes cryptographiques du projet TRUECRYPT. Paris : s.n., 2008. 12. Jonathan Brossard, Iviz Technosolutions Pvt. Ltd. Bypassing pre-boot authentication passwords by instrumenting the BIOS keyboard buffer (practical low level attacks against x86 pre-boot authentication softwares). Calcutta : s.n., 2008. 13. ntldr. Critical vulnerabilities in TrueCrypt 5.1. openPGP in Russia. [Online] Mars 11, 2008. http://www.pgpru.com/novosti/2008/kriticheskajaujazvimostjvtruecrypt51. 14. Alexei Czeskis, David J. St. Hilaire, Karl Koscher, Steven D. Gribble, Tadayoshi Kohno, Bruce Schneier. Defeating Encrypted and Deniable File Systems: TrueCrypt v5.1a and the Case of the Tattling OS and Applications. s.l. : 3rd Usenix Workshop on Hot Topics in Secuirty, 2008. FIN DU DOCUMENT SOGETI I.S. Division : Consulting Agence : ESEC. Réf : K08-JBB-CR-672-2008 Page 26 / 26