Resourcevirtualisatie
De primaire functie van de TBS is het efficiënt delen van bepaalde beperkte TPM-resources: sleutels, autorisatie en transportsessies.
Wanneer een exemplaar van een van deze resources wordt gemaakt, maakt de TBS een virtueel exemplaar van de resource en retourneert een ingang naar dit virtuele exemplaar in de resultaatopdrachtstroom (in plaats van het werkelijke handle-exemplaar dat door de TPM wordt geretourneerd). De TBS onderhoudt een toewijzing tussen de virtuele ingang en de werkelijke ingang intern. Als de TPM onvoldoende ruimte heeft om meer resources van een bepaald type op te slaan, worden bestaande exemplaren van de resource selectief opgeslagen en verwijderd totdat de TPM de nieuwe resource kan bevatten. Wanneer de oude resources opnieuw nodig zijn, worden de opgeslagen contexten door de TBS geladen (indien nodig andere resources op te slaan en te verwijderen) voordat de opdracht wordt verzonden.
Alle virtualisatie in de TBS wordt uitgevoerd namens een specifieke context. Elke context mag alleen toegang krijgen tot virtuele resources die specifiek namens deze context zijn gemaakt, evenals de fysieke resources op de TPM die overeenkomt met die virtuele resources. Standaard is het totale aantal gevirtualiseerde resources beperkt tot 500. Dit nummer kan worden gewijzigd door een DWORD-registerwaarde met de naam MaxResources te maken of te wijzigen onder HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm-. Realtime TBS-resourcegebruik kan worden waargenomen met behulp van het hulpprogramma Prestatiemeter om het aantal TBS-resources bij te houden. Deze beperking is verouderd met Windows 8 en Windows Server 2012.
Beperkte TPM-resources die niet worden gevirtualiseerd door de TBS (zoals tellers en NV-archief) moeten gezamenlijk worden gedeeld tussen softwarestacks.
Notitie
Deze handlevirtualisatie zorgt ervoor dat opdrachten die sleutelgrepen bevatten in de berekening van HMAC-autorisatieparameters mislukken. Als gevolg hiervan kunnen veel opdrachten die zijn afgeschaft in TPM-versie 1.2 niet worden gebruikt door toepassingssoftware in de TBS-omgeving.
Resourcelimieten
Met de TPM kunnen bellers query's uitvoeren op de mogelijkheden om te bepalen hoeveel ruimte beschikbaar is voor bepaalde typen resources. Sommige van deze resourcelimieten, zoals de hoeveelheid ruimte die beschikbaar is voor sleutels, autorisatiesessies en transportsessies, worden effectief uitgebreid door de TBS via virtualisatie. TBS-beperkingen, die worden beheerd door de MaxResources registerinstelling, zijn meestal veel groter dan de werkelijke beperkingen van de onderliggende TPM-hardware. Er wordt geen mechanisme opgegeven voor het opvragen van TBS-beperkingen afzonderlijk van de TPM-hardwarelimieten. Deze TBS-beperking is verouderd met Windows 8 en Windows Server 2012.
Sleutels
De TBS virtualiseert sleutelgrepen, zodat sleutels transparant van de TPM kunnen worden verwijderd wanneer ze niet worden gebruikt en weer op de TPM worden geladen wanneer ze nodig zijn. Wanneer een sleutel wordt gemaakt, koppelt de TBS een virtuele ingang aan de geladen sleutel. Dezelfde virtuele ingang wordt gebruikt voor de levensduur van de resource. Virtuele-sleutelingangen zijn alleen geldig in de context die ze hebben gemaakt en de bijbehorende resources blijven niet langer dan de levensduur van de context behouden.
Sleutels maken met TPM_LoadKey2
Als een sleutel wordt gemaakt met behulp van de opdracht TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load of TPM2_LoadExternal, vervangt de TBS de ingang in de retour bytestroom door een virtuele sleutelgreep van de keuze. Hierdoor zorgt de TBS ervoor dat elke virtuele ingang uniek is. Als de TBS een botsing detecteert (een zeer onwaarschijnlijke gebeurtenis), wordt de sleutel door de TBS uit de TPM verwijderd en wordt de aanroepende software geïnformeerd. De software kan de bewerking vervolgens opnieuw indienen. Dit proces kan worden herhaald totdat de TBS een unieke sleutelgreep krijgt.
Sleutels wissen
De TBS maakt de virtuele sleutelgreep ongeldig wanneer deze een TPM_FlushSpecific of TPM2_FlushContext bericht ontvangt voor die virtuele ingang vanuit de clientcontext. Als de sleutel fysiek aanwezig is op de TPM wanneer het leegmakende bericht wordt ontvangen, wordt de sleutel op dat moment door de TBS van de TPM leeggemaakt.
Sleutels tijdelijk verwijderen
Wanneer u een sleutel van de TPM verwijdert om ruimte te maken voor een nieuw item, voert de TBS een TPM_SaveContext of TPM2_ContextSave opdracht uit op de sleutel voordat u deze verwijdert.
Sleutels herstellen
Wanneer een opdracht naar een geladen sleutel wordt verzonden naar de TBS, zorgt deze ervoor dat de sleutel fysiek aanwezig is op de TPM. Als de sleutel niet aanwezig is, herstelt de TBS deze met een aanroep naar TPM_LoadContext of TPM2_ContextLoad. Als een sleutel niet kan worden hersteld naar de TPM, retourneert de TBS TPM_E_INVALID_KEYHANDLE als het TPM-resultaat.
De TBS vervangt elke virtuele ingang die is gekoppeld aan een sleutel in een opdrachtstroom door de fysieke ingang van de sleutel die op de TPM is geladen. Als een opdracht wordt verzonden met een virtuele ingang die niet wordt herkend door de TBS in de context van de aanroeper, maakt de TBS een foutstroom voor de beller op met TPM_E_INVALID_KEYHANDLE.
Autorisatiesessies
Autorisatiesessies worden gemaakt door TPM_OIAP, TPM_OSAP of TPM_DSAP aan te roepen. In elk geval bevat de retour bytestroom de fysieke TPM-ingang van de zojuist gemaakte autorisatiesessie. De TBS vervangt dit door een virtuele ingang. Wanneer er vervolgens naar de autorisatiesessie wordt verwezen, vervangt de TBS de virtuele ingang in de opdrachtstroom door de fysieke ingang van de autorisatiesessie. De TBS zorgt ervoor dat de levensduur van de virtuele autorisatiesessie overeenkomt met die van de fysieke autorisatiesessie. Als een client probeert een verlopen virtuele ingang te gebruiken, wordt met de TBS een foutstroom geformatteerd met een fout TPM_INVALIDAUTHHANDLE.
Sessiesites zijn beperkt en de TBS kan onvoldoende externe sites hebben om autorisatiesessiecontexten op te slaan. Als dit gebeurt, kiest de TBS een autorisatiesessie om ongeldig te maken, zodat de nieuwe context kan worden opgeslagen. Een toepassing die probeert de oude context te gebruiken, moet de autorisatiesessie opnieuw maken.
De TBS maakt de virtuele autorisatiesessie ongeldig wanneer een van de volgende gevallen optreedt:
De vlag voor continue gebruik die is gekoppeld aan de autorisatiesessie in de geretourneerde opdrachtstroom van de TPM, is FALSE.
Een opdracht die gebruikmaakt van een autorisatiesessie mislukt.
Er wordt een opdracht uitgevoerd die de autorisatiesessie die is gekoppeld aan de opdracht ongeldig maakt (zoals TPM_CreateWrapKey).
Een sleutel die is gekoppeld aan een OSAP- of DSAP-sessie wordt verwijderd uit de TPM met een aanroep naar TPM_FlushSpecific of TPM2_FlushContext (zonder rekening te houden of deze opdracht afkomstig is van de TBS of met software op een hoger niveau).
De TBS hersynchroniseert de autorisatiesessies automatisch na een geslaagde uitvoering van bepaalde niet-deterministische opdrachten om ervoor te zorgen dat de TBS-status consistent blijft met de TPM-status. De betrokken opdrachten zijn:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
In elk van de volgende gevallen wordt de autorisatiesessie op de TPM automatisch door de TPM leeggemaakt:
Autorisatiesessies maken
Virtuele autorisatiesessies zijn alleen geldig in de context die ze hebben gemaakt en de bijbehorende resources blijven niet langer dan de levensduur van de gekoppelde context behouden.
Autorisatiesessies wissen
De TBS maakt de virtuele autorisatiesessie ongeldig als deze een TPM_FlushSpecific of TPM2_FlushContext opdracht voor de virtuele ingang van de clientcontext ontvangt. Als de autorisatiesessie fysiek aanwezig is op de TPM wanneer de opdracht leegmaken wordt ontvangen, wordt de fysieke sessie onmiddellijk van de TPM door de TBS leeggemaakt.
Autorisatiesessies tijdelijk verwijderen
Wanneer u een autorisatiesessie van de TPM verwijdert om ruimte te maken voor een nieuwe entiteit, voert de TBS TPM_SaveContext of TPM2_ContextSave uit op die autorisatiesessie.
Autorisatiesessies herstellen
Wanneer een geautoriseerde TPM-opdracht wordt verzonden naar de TBS, zorgt de TBS ervoor dat alle virtuele autorisatiesessies waarnaar in de opdracht wordt verwezen fysiek aanwezig zijn op de TPM. Als een van de autorisatiesessies niet aanwezig is, herstelt de TBS deze met een aanroep naar TPM_LoadContext of TPM2_ContextLoad. Als een autorisatiesessie niet kan worden hersteld naar de TPM, retourneert de TBS TPM_E_INVALID_HANDLE als het TPM-resultaat.
De TBS vervangt elke virtuele ingang die is gekoppeld aan een autorisatiesessie in een opdrachtstroom door de fysieke ingang van de autorisatiesessie die op de TPM is geladen.
Als een opdracht wordt verzonden met een virtuele ingang die niet wordt herkend door de TBS in de context van de beller, maakt de TBS een foutstroom voor de beller op met de fout TPM_E_INVALID_HANDLE.
Transportsessies
Notitie
De verwerking van transportsessies zoals hier wordt beschreven, is specifiek voor Windows Vista en Windows Server 2008.
Transportsessies zijn een mechanisme dat wordt geleverd door de TPM waarmee een softwarestack gegevens in een opdracht kan versleutelen wanneer deze tussen de software en de TPM wordt doorgegeven. Hiermee voorkomt u dat een kwaadwillende persoon de gegevens onderschept terwijl deze de hardwarebus passeert.
Belangrijk
Alleen de nettoladinggegevens worden versleuteld. De opdrachten die worden uitgevoerd, kunnen nog steeds worden geïdentificeerd.
Helaas voorkomt dit mechanisme ook dat de TBS nettoladinggegevens controleert. In de meeste gevallen is dit geen probleem omdat de TBS alleen ingangen wijzigt, niet nettoladinggegevens. In het geval van bijvoorbeeld TPM_LoadContext wordt de geretourneerde resource-handle echter gedekt door de versleuteling. Daarom voorkomt de TBS pogingen om een TPM_LoadContext bewerking uit te voeren die wordt gedekt door een transportsessie.
De TBS blokkeert de volgende opdrachten onder transportsessie:
- 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
Wanneer een van deze opdrachten wordt gedekt door een transportsessie, retourneert de TBS TPM_E_EMBEDDED_COMMAND_UNSUPPORTED als resultaat van tpm.
Transportsessiegrepen worden gevirtualiseerd op een manier die vergelijkbaar is met sleutelgrepen en autorisatie-ingangen. Er is een beperkt aantal opgeslagen contextsites voor transportsessies beschikbaar op de TPM.
De TBS maakt de virtuele transportsessie ongeldig als een van de volgende gevallen optreedt:
De vlag voor continue gebruik die is gekoppeld aan de transportsessie in de retouropdrachtstroom van de TPM is FALSE.
Net als bij bovenstaande autorisatiesessies worden transportsessies automatisch opnieuw gesynchroniseerd met de TBS na een geslaagde uitvoering van bepaalde niet-deterministische opdrachten om ervoor te zorgen dat de TBS-status consistent blijft met de TPM-status. De betrokken opdrachten zijn:
- TPM_ORD_Delegate_Manage
- TPM_ORD_Delegate_CreateOwnerDelegation
- TPM_ORD_Delegate_LoadOwnerDelegation
In elk van deze gevallen wordt de transportsessie op de TPM automatisch door de TPM leeggemaakt:
Transportsessies maken
De TBS maakt een virtuele ingang voor elke transportsessie die door een client is gemaakt. Virtuele transportgrepen zijn alleen geldig in de context die ze hebben gemaakt en de bijbehorende resources blijven niet behouden na de levensduur van de gekoppelde context.
Transportsessies wissen
De TBS maakt de virtuele transportsessie ongeldig als deze een TPM_FlushSpecific opdracht voor de virtuele ingang van de clientcontext ontvangt. Als de transportsessie fysiek aanwezig is op de TPM wanneer de opdracht leegmaken wordt ontvangen, wordt de fysieke sessie onmiddellijk van de TPM door de TBS leeggemaakt.
Transportsessies tijdelijk verwijderen
Wanneer u een transportsessie van de TPM verwijdert om ruimte te maken voor een nieuwe entiteit, voert de TBS TPM_SaveContext uit op die transportsessie.
Transportsessies herstellen
Wanneer een TPM_ExecuteTransport opdracht wordt verzonden naar de TBS, zorgt de TBS ervoor dat de transportsessie waarnaar wordt verwezen in de opdracht fysiek aanwezig is op de TPM. Als de transportsessie niet aanwezig is, herstelt de TBS deze met een aanroep naar TPM_LoadContext.
De TBS vervangt de virtuele ingang die is gekoppeld aan de transportsessie in een opdrachtstroom door de fysieke ingang van de transportsessie die op de TPM is geladen. Als een opdracht wordt verzonden met een virtuele ingang die niet wordt herkend door de TBS in de context van de aanroeper, maakt de TBS een foutstroom voor de beller op met behulp van TPM_E_INVALID_HANDLE.
Exclusieve transportsessies
Exclusieve verpakte transportsessies zijn een manier voor software op het hoogste niveau om te bepalen of andere software toegang heeft tot de TPM tijdens een reeks opdrachten. Ze verhinderen niet dat andere software toegang krijgt tot de TPM, ze geven de maker van de transportsessie een middel om te bepalen of er een andere toegang heeft plaatsgevonden. De TBS doet niets specifieks om exclusieve transportsessies te belemmeren, maar het is enigszins niet compatibel met hen. De TBS probeert het natuurlijke gedrag van de TPM te dupliceren door transparant te zijn, zodat het geen voorkeur geeft aan opdrachten uit contexten die een exclusieve transportsessie tot stand brengen. Als client B bijvoorbeeld een opdracht indient wanneer client A zich in een exclusieve transportsessie bevindt, wordt de exclusieve transportsessie van client A ongeldig.
Opdrachten die zijn geïnitieerd door TBS, kunnen ook de exclusieve transportsessie beëindigen. Dit gebeurt wanneer client A zich in een exclusieve transportsessie bevindt en een opdracht wordt uitgevoerd door client A-aanroepen voor een resource die niet fysiek aanwezig is in de TPM. Deze situatie activeert de TBS-virtualisatiebeheerder om een TPM_LoadContext opdracht uit te voeren om die resource op te geven, waardoor de exclusieve transportsessie van client A wordt beëindigd.