Teil 2: TPM-Kommandos und Programmierschnittstellen

TPM - Trusted Platform Module

TPM - Trusted Platform Module

Teil 2: TPM-Kommandos und Programmierschnittstellen

TPM - Trusted Platform Module


Der zweite Teil dieser Artikelserie gibt zunächst einen Überblick über die wichtigsten TPM-Kommandos. Daran anschließend werden diverse Programmierschnittstellen vorgestellt, nämlich PowerShell, WMI und .NET. Die Beschreibung und Realisierung kompletter Beispiele mit lauffähigem Programmcode rundet diesen Artikelteil ab, wobei sowohl ein universelles C-API als auch eine Bibliothek von Microsoft Research vorgestellt werden.

Software Stack

Die verfügbaren TPM-Kommandos der aktuellen Version 1.2 sind als separates Teildokument der gesamten Spezifikation verfügbar [1]. Diese Kommandos können über eine Programmierschnittstelle an ein TPM geschickt werden, um von dem so genannten TCG Software Stack (TSS) verarbeitet zu werden. Der TSS ist ein vom jeweiligen Hersteller unabhängiges High-Level-API, das die interne Komplexität des TPM vom Anwendungsprogrammierer fernhält. Beispielsweise werden die für eine Autorisierung erforderlichen Details oder das Generieren von Bytesequenzen sowie die von einem Applikationsprogrammierer schwer zu durchschauenden Aspekte in überschaubare, kompakte TPM-Kommandos abgebildet.

Grundsätzlich werden verschieden Arten von Kommandos unterschieden. Das Kommando TPM_Init wird beispielsweise nicht von einer Software aufgerufen, sondern durch die Hardware getriggert. In diesem Fall kommt der Trigger von dem LPC-Bus der Hauptplatine (Plattform). Weiterhin werden Kommandos dahingehend unterschieden, ob sie zwingend sicher ausgeführt werden müssen, oder ob die sichere Ausführung nicht unbedingt notwendig ist. Sicher auszuführende Kommandos sind in Hardware realisiert und mit dem Präfix TPM gekennzeichnet.

stoiber_tpm2_1.tif_fmt1.jpgAbb. 1: TSS – Architekturübersicht

TPM Device Driver befinden sich auf der untersten Ebene, d.  h. auf der gleichen Ebene wie die Kernkomponenten des Betriebssystems (Abb. 1). Die hier laufenden Prozesse starten im so genannten Kernel Mode und haben somit hohe Ausführungsprivilegien.

Neben einer TSS Device Driver Library realisiert der User-Mode in der mittleren Schicht zahlreiche Manager, die über das TSS-Core-Service-Interface den Link zu der Applikationsschicht herstellen. Unterstützt werden nicht nur lokale Applikationen, sondern auch via RPC-Server geeignete Remote-Plattformen. Ein Cryptographic-Infrastructure-Interface fungiert als proprietäre Applikationsschnittstelle und ermöglicht den Zugriff über diverse Implementierungen wie beispielsweise .NET, PKCS#11 (cryptoki.dll) oder PowerShell. Generell laufen die von einem Anwender gestarteten Prozesse im User-Mode ab. Ein typischer Userprozess ist beispielweise das Verschlüsseln von Daten, das folgendermaßen abläuft (wobei der Terminus Seal in dem Kontext eines TPM nichts anderes als Verschlüsselung bedeutet):

  • Ein Userprozess schickt das Kommando TPM_CreateWrapKey(Keyinfo) an das TPM.

  • Das TPM schickt einen Keyblob an den Userprozess.

  • Der Userprozess schickt das Kommando TPM_LoadKey2(Keyblob) an das TPM.

  • Das TPM schickt ein Handle an den Userprozess.

  • Der Userprozess schickt das Kommando TPM_Seal(Handle, Data) an das TPM.

  • Das TPM schickt einen SealedBlob an den Userprozess.

Neben dem oben vorgestellten Snap-in tpm.msc besteht die Möglichkeit, administrative Aufgaben abzuwickeln, indem innerhalb eines Windows-Systems per Kommandozeile bzw. Script (PowerShell etc.) auf ein TPM zugegriffen wird. Weiterhin existieren diverse APIs, die den Zugriff via Programmiersprache bereitstellen.

PowerShell – Programmierschnittstelle

PowerShell stellt in der Version 4 ein paar grundlegende Commandlets für ein TPM-Objekt zur Verfügung. Gemäß Tabelle 1 können hiermit allgemeine Informationen über den Status des TPM abgefragt werden. Darüber hinaus lassen sich auch Operationen durchführen, die den Status des TPM beeinflussen.

Zunächst sollte jedoch festgestellt werden, ob die installierte Version von PowerShell TPM-Commandlets unterstützt. Hierfür kann das Commandlet Get-Command-Module TrustedPlatformModule verwendet werden. Die installierte PowerShell-Version lässt sich durch Ausgabe der Variablen $PSVersionTable.PSVersion ermitteln [2], wobei die Verwendung dieser TPM-Commandlets die Major-Version 4 voraussetzt.

PowerShell-Commandlet

Beschreibung

Clear-Tpm

TPM in den Default-Zustand versetzen

ConvertTo-TpmOwnerAuth

Generieren einer TPM-kompatiblen Passphrase

Disable-TpmAutoProvisioning

Sperren von Auto-Provisioning

Enable-TpmAutoProvisioning

Entsperren von Auto...