Menu

mardi 12 mars 2013

Trusted Platform Module







0x01 Introduction
    Le module de plateforme sécurisée (TPM) est une puce matérielle conçue pour permettre aux ordinateurs d'atteindre des niveaux plus élevés de sécurité. 
Il existe actuellement 100 millions de TPM, principalement dans les ordinateurs portables professionnels faits par HP, Dell, Sony, Lenovo, Toshiba etc. Des applications logicielles utilisent le TPM, tel que BitLocker de Microsoft qui est une spécification de protection des données et permet de chiffrer l'intégralité d'un lecteur.

     Les TPM sont fabriqués par les constructeurs de puces, tel que Atmel, Broadcom, Infineon, Sinosun, STMicroelectronics, et Winbond et ils sont spécifiés par le Trusted Computing Group qui est est un consortium d'entreprises d'informatique (Compaq, HP, IBM, Intel, Microsoft, AMD, etc.) visant à sécuriser les équipements et communications informatiques.


0x02 Les fonctionnalités du TPM
Le module de plateforme sécurisée propose trois types de fonctionnalités: 
  • Stockage sécurisée: Les processus de l'utilisateurs peuvent stoker des données chiffrées par une clé. Cette clé est disponible que pour le TPM et personne d'autre ne peut la voir.
  • Mesure et reporting: une plateforme permettant de créer des rapports de l'état de configuration. Par exemple, considérons une application web qui comprend un serveur web et un serveur de base de données qui s'exécutent sur différents compartiments mais sur la même hôte physique, le fonctionnement de cette application dépend du bon fonctionnement de chaque composant qui s'exécute dans son propre environnement.
  • Authentification: une plateforme peut obtenir des clés par lesquelles elle peut s'authentifier de manière fiable.

0x03 Stockage sécurisée
Pour stocker des données à l'aide d'un module TPM, la première étape consiste à créer des clés TPM afin de les utiliser pour chiffrer les données. Les clés TPM sont organisées en une structure arborescente, comme le montre la figure ci-dessous. 


Structure des clés TPM
    Après l'initialisation du TPM, un processus appelé «TPM_TakeOwnership» est invoqué. Cette commande permet de créer la clé racine de stockage (SRK: Storage Root Key). Ce dernier est utilisé pour protéger les clés TPM crées par les applications, de sorte que ces clés ne peuvent pas être utilisées sans le TPM. Le SRK est défini par le Trusted Computing Group.
    Par la suite, un processus utilisateur peut appeler «TPM_CreateWrapKey» pour créer une clé fils d'une clé existante. Une fois la clé est crée, elle peut être chargée à l'aide de la commande «TPM_LoadKey2», et peut être ensuite utilisée dans des opérations nécessitants une clé (par exemple : TPM_Seal).
    Pour chaque clé TPM est associée une chaîne de 160 bits appelée authdata, créée lors de la création de la clé et spécifiée par le processus utilisateur, et est considérée comme un mot de passe autorisant l'utilisation de la clé. Elle contrôle les capacités du module: lire, écrire, utilisation des objets stockés dans le TPM et l'exécution des commande TPM. 

    La commande «TPM_CreateWrapKey» prends comme arguments: la clé parent de la clé à créer, une nouvelle valeur de authdat de la clé qui va être créée, type de clé (sealing: clé de chiffrement relative à RSA, Binding, Signature, etc. ) et l'autorisation HMAC basée sur le authdata de la clé parent.
    Cette fonction retourne un blob (binary large object) constitué de la partie publique de la nouvelle clé et un package chiffré, ce package contient la clé privée et le authdata de la nouvelle clé, et est chiffré avec la clé parent.
Ainsi, cette commande crée la clé, mais sans la stocker, elle la retourne chiffrée au processus utilisateur. La clé nouvellement créée n'est pas encore disponible pour l'utilisation par la TPM.

    Pour pouvoir utiliser une clé TPM, cette dernière doit être chargée avec «TPM_LoadKey2». Cette commande prend comme argument le blob retourné par la commande «TPM_CreateWrapKey», et retourne un handle (un numéro qui permet d'identifier un objet sous Windows), c'est un pointeur vers la clé stockée dans la mémoire TPM. Les commandes qui utilisent la clé chargée l'identifie par le handle. Étant donnée que «TPM_LoadKey2» utilise un déchiffrement par la clé parent, il faut que cette clé soit chargée et ça nécessite une autorisation HMAC basée sur le authdata de la clé parent.
La clé racine de stockage (SRK) est chargée en permanence et sa valeur de handle est bien connue, et par conséquent elle ne nécessite jamais d'être chargé.

    Une fois la clé est chargée, une commande de chiffrement telle que «TPM_Seal» peut être utilisée. Elle prend comme argument le handle de la clé de chiffrement, les données à chiffrer , des informations sur les PCR (Platform Configuration Registers) à lesquels le Seal doit être lié, et les données chiffrés. Ça nécessite une autorisation HMAC basée sur le authdata de la clé de chiffrement. 
    
0x04 Session d'autorisation
    Toutes les commandes vues précédemment doivent être exécutées dans une session d'autorisation. Il existe deux types de session: 
  • OIAP: (Object Independent Authorisation Protocol) qui permet de créer une session manipulant n'importe quel objet, mais ne fonctionne que pour certaines commandes.
  • OSAP: (Object Specific Authorisation Protocol) qui permet une session manipulant un objet spécifique spécifié lors de la mise en place de la session.
Une session d'autorisation commence au moment où la commande «TPM_OIAP» ou «TPM_OSAP» est exécutée avec succès.

0x05 Plateforme de mesure et de reporting
    Le TPM contient un certain nombre de registres appelé Registres de Configuration de la Plateforme (PCRqui sont des portions de mémoire volatiles de 160 bits (pour stocker des condensats SHA-1) permettant de stocker l'état d'une plateforme. Un registre de ce type peut, par exemple, mémoriser le fabricant de la carte mère, le fabricant du processeur, la version de micro-logiciel de la plateforme, etc.

0x06 Plateforme d'authentification
    Chaque TPM possède une unique paire de clés publique/privée appelé EK (Endorsement Key), définie au moment de la fabrication et habituellement certifiée par le fabricant. Cette partie privée de la clé de type EK n'est jamais accessible à l'extérieur du TPM. La partie publique de la clé de type EK aide à reconnaître un TPM authentique. Elle peut être changée par le propriétaire de la plateforme. EK est destinée à être une clé à long terme et peut être considérée comme l'identité du TPM.
    TPM génère, lors de l'utilisation de la commande «TPM_TakeOwnership», une paire de clés publique/privée appelée la clé racine de stockage (SRK) qui est utilisée pour protéger les clés du module créées par applications, pour que ces clés ne puissent être utilisées sans le TPM.

          1x06 Confidentialité de l'autorité de certification
                                                        /** to do */

          2x06 Attestation anonyme directe 
    Direct Anonymous Attestation (DAA) est un protocole cryptographique qui permet l'authentification à distance d'une plateforme de confiance, tout en préservant la confidentialité de l'utilisateur. En DAA, il y a quatre parties:

  • L'hôte qui consite en une plateforme exécutant un système d'exploitation et une application logicielle,
  • Le TPM à l'intérieur de la hôte,
  • L'émetteur, il vérifie le certificat EK, et délivre des informations d'identification qui peuvent être utilisées pour signer le AIK (Attestation Identity Keys).
  • Le vérificateur qui va vérifier le certificat dans l'AIK.

Aucun commentaire:

Enregistrer un commentaire