Resursvirtualisering
Den primära funktionen för TBS är att effektivt dela vissa begränsade TPM-resurser: nycklar, auktorisering och transportsessioner.
När en instans av en av dessa resurser skapas skapar TBS en virtuell instans av resursen och returnerar en referens till den här virtuella instansen i resultatkommandoströmmen (i stället för den faktiska referensinstansen som returneras av TPM). TBS upprätthåller en mappning mellan det virtuella handtaget och det faktiska handtaget internt. Om TPM får slut på utrymme för att lagra fler resurser av en viss typ sparas befintliga instanser av resursen selektivt och avlägsnas tills TPM kan lagra den nya resursen. När de gamla resurserna krävs igen läser TBS in de sparade kontexterna (sparar och avlägsnar andra resurser om det behövs) innan kommandot skickas.
All virtualisering i TBS utförs för en specifik kontext. Varje kontext får bara komma åt virtuella resurser som skapats specifikt för dess räkning, samt de fysiska resurser på TPM som motsvarar dessa virtuella resurser. Som standard är det totala antalet virtualiserade resurser begränsat till 500. Det här numret kan ändras genom att skapa eller ändra ett DWORD- registervärde med namnet MaxResources under HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm. Användning av TBS-resurser i realtid kan observeras med hjälp av verktyget Prestandaövervakare för att spåra antalet TBS-resurser. Den här begränsningen blev föråldrad med Windows 8 och Windows Server 2012.
Begränsade TPM-resurser som inte virtualiseras av TBS (till exempel räknare och NV-lagring) måste delas gemensamt mellan programvarustackar.
Not
Den här referensvirtualiseringen gör att kommandon som innehåller nyckelhandtag i beräkningen av HMAC-auktoriseringsparametrar misslyckas. Därför kan många kommandon som är inaktuella i TPM version 1.2 inte användas av programprogramvara i TBS-miljön.
Resursgränser
Med TPM kan anropare köra frågor mot dess funktioner för att avgöra hur mycket utrymme som är tillgängligt för vissa typer av resurser. Vissa av dessa resursgränser, till exempel mängden tillgängligt utrymme för nycklar, auktoriseringssessioner och transportsessioner, utökas effektivt av TBS via virtualisering. TBS-begränsningar, som styrs av MaxResources registerinställning, är vanligtvis mycket större än de faktiska begränsningarna för den underliggande TPM-maskinvaran. Ingen mekanism tillhandahålls för att köra frågor mot TBS-begränsningar separat från TPM-maskinvarugränserna. Den här TBS-begränsningen blev föråldrad med Windows 8 och Windows Server 2012.
Nycklar
TBS virtualiserar nyckelhandtag så att nycklar kan tas bort transparent från TPM när de inte används och läses in på TPM igen när de behövs. När en nyckel skapas associerar TBS ett virtuellt handtag med den inlästa nyckeln. Samma virtuella handtag används för resursens livslängd. Handtagen för virtuella nycklar är endast giltiga i kontexten som skapade dem och de associerade resurserna bevaras inte längre än kontextens livslängd.
Skapa nycklar med TPM_LoadKey2
Om en nyckel skapas med hjälp av kommandot TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load eller TPM2_LoadExternal ersätter TBS handtaget i returbyteströmmen med ett virtuellt nyckelhandtag som du väljer. Därför ser TBS till att varje virtuellt handtag är unikt. Om TBS upptäcker en kollision (en extremt osannolik händelse) tar TBS bort nyckeln från TPM och informerar den anropande programvaran. Programvaran kan sedan skicka åtgärden igen. Den här processen kan upprepas tills TBS får ett unikt nyckelhandtag.
Rensa nycklar
TBS ogiltigförklarar handtaget för den virtuella nyckeln när den tar emot ett TPM_FlushSpecific eller TPM2_FlushContext meddelande för det virtuella handtaget från klientkontexten. Om nyckeln finns fysiskt på TPM när tömningsmeddelandet tas emot, rensar TBS nyckeln från TPM vid den tidpunkten.
Tillfälligt borttagning av nycklar
När du tar bort en nyckel från TPM för att göra plats för ett nytt objekt kör TBS ett TPM_SaveContext- eller TPM2_ContextSave-kommando på nyckeln innan det avlägsnas.
Återställa nycklar
När ett kommando som refererar till en inläst nyckel skickas till TBS ser det till att nyckeln finns fysiskt på TPM. Om nyckeln inte finns återställer TBS den med ett anrop till TPM_LoadContext eller TPM2_ContextLoad. Om en nyckel inte kan återställas till TPM returnerar TBS TPM_E_INVALID_KEYHANDLE som TPM-resultat.
TBS ersätter varje virtuellt handtag som är associerat med en nyckel i en kommandoström med det fysiska handtaget för nyckeln som läses in på TPM. Om ett kommando skickas med en virtuell referens som inte känns igen av TBS i kontexten för anroparen formaterar TBS en felström för anroparen med TPM_E_INVALID_KEYHANDLE.
Auktoriseringssessioner
Auktoriseringssessioner skapas genom att anropa TPM_OIAP, TPM_OSAP eller TPM_DSAP. I varje fall innehåller returbyteströmmen det fysiska TPM-handtaget för den nyligen skapade auktoriseringssessionen. TBS ersätter detta med ett virtuellt handtag. När auktoriseringssessionen senare refereras ersätter TBS det virtuella handtaget i kommandoströmmen med det fysiska handtaget för auktoriseringssessionen. TBS säkerställer att livslängden för den virtuella auktoriseringssessionen matchar den fysiska auktoriseringssessionen. Om en klient försöker använda en virtuell referens som har upphört att gälla formaterar TBS en felström med fel TPM_INVALIDAUTHHANDLE.
Sessionsplatserna är begränsade och TBS kan få slut på externa platser där du kan spara auktoriseringssessionskontexter. Om detta händer väljer TBS en auktoriseringssession för att ogiltigförklara så att den nya kontexten kan sparas. Ett program som försöker använda den gamla kontexten måste återskapa auktoriseringssessionen.
TBS ogiltigförklarar den virtuella auktoriseringssessionen när något av följande fall inträffar:
Flaggan för fortsatt användning som är associerad med auktoriseringssessionen i den returnerade kommandoströmmen från TPM är FALSE-.
Ett kommando som använder en auktoriseringssession misslyckas.
Ett kommando körs som ogiltigförklarar auktoriseringssessionen som är associerad med kommandot (till exempel TPM_CreateWrapKey).
En nyckel som är associerad med en OSAP- eller DSAP-session avlägsnas från TPM med ett anrop till TPM_FlushSpecific eller TPM2_FlushContext (utan hänsyn till om det här kommandot har sitt ursprung i TBS eller programvara på högre nivå).
TBS synkroniserar automatiskt om auktoriseringssessionerna efter en lyckad körning av vissa icke-terministiska kommandon för att säkerställa att TBS-tillståndet förblir konsekvent med TPM-tillståndet. De kommandon som påverkas är:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
I vart och ett av följande fall rensas auktoriseringssessionen på TPM automatiskt av TPM:
Skapa auktoriseringssessioner
Handtag för virtuell auktoriseringssession är endast giltiga i kontexten som skapade dem, och de associerade resurserna bevaras inte längre än till den associerade kontextens livslängd.
Rensa auktoriseringssessioner
TBS ogiltigförklarar den virtuella auktoriseringssessionen om den tar emot ett TPM_FlushSpecific- eller TPM2_FlushContext-kommando för det virtuella handtaget från klientkontexten. Om auktoriseringssessionen finns fysiskt på TPM när tömningskommandot tas emot, rensar TBS den fysiska sessionen från TPM omedelbart.
Tillfälligt borttagning av auktoriseringssessioner
När du tar bort en auktoriseringssession från TPM för att göra plats för en ny entitet, kör TBS TPM_SaveContext eller TPM2_ContextSave på den auktoriseringssessionen.
Återställa auktoriseringssessioner
När ett auktoriserat TPM-kommando skickas till TBS ser TBS till att alla virtuella auktoriseringssessioner som anges i kommandot finns fysiskt på TPM. Om någon av auktoriseringssessionerna inte finns återställer TBS dem med ett anrop till TPM_LoadContext eller TPM2_ContextLoad. Om en auktoriseringssession inte kan återställas till TPM returnerar TBS TPM_E_INVALID_HANDLE som TPM-resultat.
TBS ersätter varje virtuell referens som är associerad med en auktoriseringssession i en kommandoström med det fysiska handtaget för auktoriseringssessionen som läses in på TPM.
Om ett kommando skickas med ett virtuellt handtag som inte känns igen av TBS i kontexten för anroparen formaterar TBS en felström för anroparen med felet TPM_E_INVALID_HANDLE.
Transportsessioner
Not
Hanteringen av transportsessioner enligt beskrivningen här är specifik för Windows Vista och Windows Server 2008.
Transportsessioner är en mekanism som tillhandahålls av TPM som gör det möjligt för en programvarustack att kryptera data i ett kommando när de skickas mellan programvaran och TPM. Detta hindrar en angripare från att fånga upp data när de passerar över maskinvarubussen.
Viktig
Endast nyttolastdata krypteras. De kommandon som körs kan fortfarande identifieras.
Tyvärr förhindrar den här mekanismen även TBS från att undersöka nyttolastdata. I de flesta fall är detta inte ett problem eftersom TBS endast ändrar hanterar, inte nyttolastdata. När det gäller TPM_LoadContext omfattas dock den returnerade resursreferensen av krypteringen. Därför förhindrar TBS försök att utföra en TPM_LoadContext åtgärd som omfattas av en transportsession.
TBS blockerar följande kommandon under transportsessionen:
- TPM_EstablishTransport
- TPM_ExecuteTransport
- TPM_Terminate_Handle
- TPM_LoadKey
- TPM_EvictKey
- TPM_SaveKeyContext
- TPM_LoadKeyContext
- TPM_SaveAuthContext
- TPM_LoadAuthContext
- TPM_SaveContext
- TPM_LoadContext
- TPM_FlushSpecific
När något av dessa kommandon omfattas av en transportsession returnerar TBS TPM_E_EMBEDDED_COMMAND_UNSUPPORTED som TPM-resultat.
Transportsessionshandtag virtualiseras på ett sätt som liknar nyckelhandtag och auktoriseringshandtag. Det finns ett begränsat antal sparade transportsessionskontextfack tillgängliga på TPM.
TBS ogiltigförklarar den virtuella transportsessionen om något av följande fall inträffar:
Flaggan för fortsatt användning som är associerad med transportsessionen i returkommandoströmmen från TPM är FALSE-.
Precis som med auktoriseringssessioner ovan synkroniserar TBS automatiskt om transportsessioner efter lyckad körning av vissa nondeterministiska kommandon för att säkerställa att TBS-tillståndet förblir konsekvent med TPM-tillståndet. De kommandon som påverkas är:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
I vart och ett av dessa fall rensas transportsessionen på TPM automatiskt av TPM:
Skapa transportsessioner
TBS skapar ett virtuellt handtag för varje transportsession som skapas av en klient. Virtuella transporthandtag är endast giltiga i den kontext som skapade dem och de associerade resurserna bevaras inte längre än till den associerade kontextens livslängd.
Rensa transportsessioner
TBS ogiltigförklarar den virtuella transportsessionen om den tar emot ett TPM_FlushSpecific kommando för det virtuella handtaget från klientkontexten. Om transportsessionen finns fysiskt på TPM när tömningskommandot tas emot, rensar TBS den fysiska sessionen från TPM omedelbart.
Tillfälligt borttagning av transportsessioner
När du tar bort en transportsession från TPM för att göra plats för en ny entitet kör TBS TPM_SaveContext på den transportsessionen.
Återställa transportsessioner
När ett TPM_ExecuteTransport-kommando skickas till TBS ser TBS till att den transportsession som avses i kommandot finns fysiskt på TPM. Om transportsessionen inte finns återställer TBS den med ett anrop till TPM_LoadContext.
TBS ersätter det virtuella handtaget som är associerat med transportsessionen i en kommandoström med det fysiska handtaget för transportsessionen som läses in på TPM. Om ett kommando skickas med ett virtuellt handtag som inte identifieras av TBS i kontexten för anroparen formaterar TBS en felström för anroparen med hjälp av TPM_E_INVALID_HANDLE.
Exklusiva transportsessioner
Exklusiva omslutna transportsessioner är ett sätt för programvara på toppnivå att avgöra om någon annan programvara har åtkomst till TPM under en kommandokedja. De hindrar inte annan programvara från att komma åt TPM, de ger bara skaparen av transportsessionen ett sätt att fastställa att någon annan åtkomst inträffade. TBS gör inget specifikt för att hindra exklusiva transportsessioner, men det är något oförenligt med dem. TBS försöker duplicera det naturliga beteendet för TPM genom att vara transparent, så det gynnar inte kommandon från kontexter som upprättar en exklusiv transportsession. Om till exempel klient B skickar ett kommando när klient A är i en exklusiv transportsession kommer den att ogiltigförklara den exklusiva transportsessionen för klient A.
Kommandon som initieras av TBS kan också avsluta den exklusiva transportsessionen. Detta inträffar när klient A är i en exklusiv transportsession och ett kommando som körs av klienten A anropar en resurs som inte finns fysiskt i TPM. Den här situationen utlöser tbs virtualiseringshanteraren för att köra ett TPM_LoadContext kommando för att tillhandahålla resursen, vilket avslutar den exklusiva transportsessionen för klient A.