Sdílet prostřednictvím


Virtualizace prostředků

Primární funkcí TBS je efektivní sdílení určitých omezených prostředků TPM: klíče, autorizace a přenosové relace.

Když je vytvořena instance jednoho z těchto prostředků, tbS vytvoří virtuální instanci prostředku a vrátí popisovač této virtuální instance ve výsledném příkazovém proudu (nikoli skutečnou instanci popisovače vrácenou čipem TPM). TbS udržuje mapování mezi virtuálním popisovačem a skutečným popisovačem interně. Pokud čip TPM vyčerpá místo pro uložení více prostředků daného typu, stávající instance prostředku se selektivně uloží a vyřadí, dokud čip TPM nebude moct nový prostředek uchovávat. Po opětovném vyžadování starých prostředků načte sada TBS uložené kontexty (uložení a vyřazení dalších prostředků v případě potřeby) před odesláním příkazu.

Veškerá virtualizace v TBS se provádí jménem konkrétního kontextu. Každý kontext má povolený přístup pouze k virtuálním prostředkům vytvořeným speciálně za něj a také k fyzickým prostředkům na čipu TPM, které těmto virtuálním prostředkům odpovídají. Ve výchozím nastavení je celkový počet všech virtualizovaných prostředků omezen na 500. Toto číslo lze změnit vytvořením nebo úpravou hodnoty DWORD registru s názvem MaxResources v části HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm. Využití prostředků TBS v reálném čase je možné sledovat pomocí nástroje Sledování výkonu ke sledování počtu prostředků TBS. Toto omezení bylo zastaralé pro Windows 8 a Windows Server 2012.

Omezené prostředky TPM, které nejsou virtualizované pomocí TBS (jako jsou čítače a úložiště NV), musí být sdíleny mezi softwarovými zásobníky společně.

Poznámka

Tento popisovač virtualizace způsobí selhání příkazů, které zahrnují popisovače klíčů ve výpočtu parametrů autorizace HMAC. V důsledku toho se mnoho příkazů v tpm verze 1.2 nedá používat v aplikačním softwaru v prostředí TBS.

 

Omezení prostředků

Čip TPM umožňuje volajícím dotazovat se na své schopnosti a určit, kolik místa je pro určité typy prostředků k dispozici. Některá z těchto omezení prostředků, například množství místa dostupného pro klíče, autorizační relace a přenosové relace, jsou efektivně rozšířeny pomocí virtualizace tbS. Omezení TBS, která jsou řízena nastavením registru MaxResources, jsou obvykle mnohem větší než skutečná omezení základního hardwaru TPM. Neexistuje žádný mechanismus pro dotazování omezení TBS odděleně od hardwarových limitů TPM. Toto omezení služby TBS bylo zastaralé v systémech Windows 8 a Windows Server 2012.

Klíče

TbS virtualizuje klíče, aby bylo možné klíče transparentně uvolnit z čipu TPM, když se nepoužívají a načítají zpět do čipu TPM v případě potřeby. Při vytvoření klíče přidruží TBS k načteným klíčům virtuální popisovač. Stejný virtuální popisovač se používá po celou dobu života prostředku. Popisovače virtuálních klíčů jsou platné pouze v kontextu, který je vytvořil, a přidružené prostředky se nezachovají za životností kontextu.

  • Vytváření klíčů pomocí TPM_LoadKey2

    Pokud se klíč vytvoří pomocí příkazu TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load nebo TPM2_LoadExternal, funkce TBS nahradí popisovač ve vráceném bajtovém datovém proudu popisovačem virtuálního klíče podle svého výběru. V důsledku toho tbS zajišťuje, že každý virtuální popisovač je jedinečný. Pokud tbS zjistí kolize (velmi nepravděpodobné události), funkce TBS uvolní klíč z čipu TPM a informuje volající software. Software pak může operaci znovu odeslat. Tento proces lze opakovat, dokud tbS nedostane jedinečný popisovač klíče.

  • Vymazání klíčů

    Funkce TBS zruší platnost popisovače virtuálního klíče, když obdrží TPM_FlushSpecific nebo TPM2_FlushContext zprávu pro tento virtuální popisovač z kontextu klienta. Pokud se klíč fyzicky nachází na čipu TPM při přijetí zprávy vyprázdnění, funkce TBS vyprázdní klíč z čipu TPM.

  • Dočasné odebírání klíčů

    Při vyřazení klíče z čipu TPM, aby se uvolnilo místo pro novou položku, funkce TBS před vyřazením provede na klíč TPM_SaveContext nebo TPM2_ContextSave příkaz.

  • Obnovení klíčů

    Když příkaz, který odkazuje na načtený klíč, se odešle do tbS, zajistí, že klíč fyzicky existuje na čipu TPM. Pokud klíč není k dispozici, funkce TBS ho obnoví voláním TPM_LoadContext nebo TPM2_ContextLoad. Pokud klíč nelze obnovit do čipu TPM, vrátí funkce TBS jako výsledek čipu TPM TPM_E_INVALID_KEYHANDLE.

TbS nahradí každý virtuální popisovač přidružený ke klíči v příkazovém streamu fyzickým popisovačem klíče načteným do čipu TPM. Pokud je příkaz odeslán s virtuálním popisovačem, který není rozpoznán tbS v kontextu volajícího, naformátuje TBS datový proud chyby volajícího s TPM_E_INVALID_KEYHANDLE.

Autorizační relace

Autorizační relace se vytvářejí voláním TPM_OIAP, TPM_OSAP nebo TPM_DSAP. V každém případě návratový bajtový stream obsahuje fyzický popisovač TPM nově vytvořené autorizační relace. Funkce TBS ji nahradí virtuálním popisovačem. Při následném odkazování na autorizační relaci nahradí TBS virtuální popisovač v příkazovém proudu fyzickým popisovačem autorizační relace. TbS zajišťuje, aby životnost virtuální autorizační relace odpovídala relaci fyzické autorizace. Pokud se klient pokusí použít virtuální popisovač s vypršenou platností, naformátuje tbS datový proud chyby s chybou TPM_INVALIDAUTHHANDLE.

Sloty relací jsou omezené a sada TBS může dorazit z externích slotů, ve kterých se mají ukládat kontexty relace autorizace. Pokud k tomu dojde, funkce TBS zvolí autorizační relaci, která se zneplatní, aby se nový kontext mohl úspěšně uložit. Aplikace, která se pokusí použít starý kontext, bude muset znovu vytvořit autorizační relaci.

Služba TBS zruší platnost virtuální autorizační relace v případě, že dojde k některému z následujících případů:

  • Příznak continue-use přidružený k autorizační relaci ve vráceném datovém proudu příkazů z TPM je FALSE.

  • Příkaz, který používá autorizační relaci, selže.

  • Spustí se příkaz, který zneplatní autorizační relaci přidruženou k příkazu (například TPM_CreateWrapKey).

  • Klíč přidružený k relaci OSAP nebo DSAP se z čipu TPM vyřadí s voláním TPM_FlushSpecific nebo TPM2_FlushContext (bez ohledu na to, jestli tento příkaz pochází z TBS nebo se softwarem vyšší úrovně).

    TbS automaticky znovusynchronizuje autorizační relace po úspěšném spuštění určitých nedeterministických příkazů, aby se zajistilo, že stav TBS zůstane konzistentní se stavem TPM. Ovlivněné příkazy jsou:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

V každém z následujících případů se autorizační relace čipu TPM vyprázdní automaticky čipem TPM:

  • Vytváření autorizačních relací

    Obslužné rutiny virtuální relace autorizace jsou platné pouze v kontextu, který je vytvořil, a přidružené prostředky se nezachovají za životností přidruženého kontextu.

  • Vymazání autorizačních relací

    Funkce TBS zruší platnost virtuální autorizační relace, pokud obdrží TPM_FlushSpecific nebo TPM2_FlushContext příkaz pro virtuální popisovač z kontextu klienta. Pokud se autorizační relace fyzicky nachází na čipu TPM při přijetí příkazu pro vyprázdnění, služba TBS okamžitě vyprázdní fyzickou relaci z čipu TPM.

  • Dočasné odebrání autorizačních relací

    Při vyřazení autorizační relace z čipu TPM, aby se uvolnilo místo pro novou entitu, provede služba TBS TPM_SaveContext nebo TPM2_ContextSave v této autorizační relaci.

  • Obnovení autorizačních relací

    Když se do služby TBS odešle autorizovaný příkaz TPM, služba TBS zajistí, aby všechny relace virtuální autorizace uvedené v příkazu byly fyzicky přítomné na čipu TPM. Pokud některá z autorizačních relací neexistuje, funkce TBS je obnoví voláním TPM_LoadContext nebo TPM2_ContextLoad. Pokud se autorizační relace nedá obnovit do čipu TPM, vrátí funkce TBS jako výsledek čipu TPM TPM_E_INVALID_HANDLE.

Sada TBS nahradí každý virtuální popisovač přidružený k autorizační relaci v datovém proudu příkazů fyzickým popisovačem autorizační relace načtené do čipu TPM.

Pokud je příkaz odeslán s virtuálním popisovačem, který není rozpoznán službou TBS v kontextu volajícího, naformátuje tbS datový proud chyby volajícímu s chybou TPM_E_INVALID_HANDLE.

Přenosové relace

Poznámka

Zpracování přenosových relací, jak je popsáno zde, je specifické pro Systém Windows Vista a Windows Server 2008.

 

Přenosové relace představují mechanismus, který čip TPM umožňuje softwarovému zásobníku šifrovat data v příkazu při průchodu mezi softwarem a čipem TPM. To zabrání nežádoucímu člověku v zachycení dat při průchodu přes hardwarovou sběrnici.

Důležitý

Šifrují se jenom data datové části. Spouštěné příkazy je stále možné identifikovat.

 

Tento mechanismus bohužel také brání tbS ve zkoumání dat datové části. Ve většině případů to není problém, protože TBS upravuje pouze popisovače, nikoli data datové části. V případě TPM_LoadContext je však vrácený popisovač prostředků pokryt šifrováním. TbS proto brání pokusům o provedení TPM_LoadContext operace zahrnuté v přenosové relaci.

TbS blokuje následující příkazy v rámci přenosové relace:

  • 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

Pokud se některý z těchto příkazů vztahuje na přenosovou relaci, vrátí funkce TBS TPM_E_EMBEDDED_COMMAND_UNSUPPORTED jako výsledek čipu TPM.

Obslužné rutiny přenosové relace se virtualizují podobným způsobem jako popisovače klíčů a autorizační popisovače. Na čipu TPM je k dispozici omezený počet slotů kontextu uložených přenosových relací.

Funkce TBS zruší platnost virtuální přenosové relace, pokud dojde k některému z následujících případů:

  • Příznak continue-use přidružený k přenosové relaci ve návratovém datovém proudu příkazu z TPM je FALSE.

    Stejně jako u výše uvedených autorizačních relací bude služba TBS po úspěšném provedení určitých nedeterministických příkazů automaticky znovu synchronizovat přenosové relace, aby se zajistilo, že stav TBS zůstane konzistentní se stavem TPM. Ovlivněné příkazy jsou:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

V každém z těchto případů se přenosová relace na čipu TPM vyprázdní automaticky čipem TPM:

  • Vytváření přenosových relací

    TbS vytvoří virtuální popisovač pro každou přenosovou relaci vytvořenou klientem. Virtuální obslužné rutiny přenosu jsou platné pouze v kontextu, který je vytvořil, a přidružené prostředky se nezachovají za životností přidruženého kontextu.

  • Vymazání přenosových relací

    Funkce TBS zruší platnost virtuální přenosové relace, pokud obdrží příkaz TPM_FlushSpecific pro virtuální popisovač z kontextu klienta. Pokud je přenosová relace fyzicky přítomna na čipu TPM při přijetí příkazu pro vyprázdnění, služba TBS okamžitě vyprázdní fyzickou relaci z čipu TPM.

  • Dočasné odebrání přenosových relací

    Při vyřazení přenosové relace z čipu TPM, aby se uvolnilo místo pro novou entitu, provede služba TBS TPM_SaveContext v této přenosové relaci.

  • Obnovení přenosových relací

    Když se do tbS odešle příkaz TPM_ExecuteTransport, služba TBS zajistí, že se přenosová relace uvedená v příkazu fyzicky nachází na čipu TPM. Pokud přenosová relace neexistuje, funkce TBS ji obnoví voláním TPM_LoadContext.

TbS nahrazuje virtuální popisovač přidružený k přenosové relaci v příkazovém streamu fyzickým popisovačem relace přenosu načteným na čip TPM. Pokud je příkaz odeslán s virtuálním popisovačem, který není rozpoznán tbS v kontextu volajícího, naformátuje TBS datový proud chyby volajícího pomocí TPM_E_INVALID_HANDLE.

Exkluzivní přenosové relace

Exkluzivní zabalené přenosové relace představují způsob, jak určit, zda jakýkoli jiný software přistupoval k čipu TPM během řetězu příkazů. Nezabrání jinému softwaru v přístupu k čipu TPM, pouze udělí tvůrci přenosové relace prostředek k určení, že došlo k nějakému jinému přístupu. TBS nedělá nic specifického, aby bránil exkluzivním přenosovým relacím, ale je poněkud nekompatibilní s nimi. TbS se pokusí duplikovat přirozené chování čipu TPM tím, že je transparentní, takže nepodporuje příkazy z kontextů, které vytvářejí exkluzivní přenosovou relaci. Pokud například klient B odešle příkaz, když je klient A ve výhradní přenosové relaci, zneplatní výhradní přenosovou relaci klienta A.

Příkazy iniciované službou TBS můžou také ukončit exkluzivní přenosovou relaci. K tomu dochází v případě, že je klient A ve výhradní přenosové relaci a příkaz spuštěný klientem A volá prostředek, který není fyzicky přítomný v čipu TPM. Tato situace aktivuje správce virtualizace TBS, aby spustil příkaz TPM_LoadContext k poskytnutí tohoto prostředku, který ukončí výhradní přenosovou relaci klienta A.