Udostępnij za pośrednictwem


Wirtualizacja zasobów

Podstawową funkcją TBS jest efektywne współużytkowanie niektórych ograniczonych zasobów modułu TPM: kluczy, autoryzacji i sesji transportu.

Po utworzeniu wystąpienia jednego z tych zasobów usługa TBS tworzy wirtualne wystąpienie zasobu i zwraca dojście do tego wystąpienia wirtualnego w strumieniu poleceń wynikowych (a nie rzeczywiste wystąpienie dojścia zwrócone przez moduł TPM). TbS utrzymuje mapowanie między dojściem wirtualnym a rzeczywistym uchwytem wewnętrznie. Jeśli moduł TPM zabraknie miejsca do przechowywania większej ilości zasobów danego typu, istniejące wystąpienia zasobu są selektywnie zapisywane i eksmitowane, dopóki moduł TPM nie będzie mógł przechowywać nowego zasobu. Gdy stare zasoby są ponownie wymagane, usługa TBS ładuje zapisane konteksty (zapisywanie i eksmitowanie innych zasobów w razie potrzeby) przed przesłaniem polecenia.

Cała wirtualizacja w TBS jest wykonywana w imieniu określonego kontekstu. Każdy kontekst może uzyskiwać dostęp tylko do zasobów wirtualnych utworzonych w jego imieniu, a także zasobów fizycznych w module TPM odpowiadającym tym zasobom wirtualnym. Domyślnie łączna liczba wszystkich zwirtualizowanych zasobów jest ograniczona do 500. Tę liczbę można zmienić, tworząc lub modyfikując wartość rejestru DWORD o nazwie MaxResources w HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm. Użycie zasobów tbs w czasie rzeczywistym można zaobserwować za pomocą narzędzia Monitor wydajności do śledzenia liczby zasobów TBS. To ograniczenie stało się przestarzałe w systemach Windows 8 i Windows Server 2012.

Ograniczone zasoby modułu TPM, które nie są zwirtualizowane przez usługę TBS (takie jak liczniki i magazyn NV), muszą być współdzielone wspólnie między stosami oprogramowania.

Nuta

Ta obsługa wirtualizacji powoduje niepowodzenie poleceń zawierających uchwyty kluczy w obliczeniu parametrów autoryzacji HMAC. W związku z tym wiele poleceń przestarzałych w module TPM w wersji 1.2 nie może być używanych przez oprogramowanie aplikacji w środowisku TBS.

 

Limity zasobów

Moduł TPM umożliwia obiektom wywołującym wykonywanie zapytań dotyczących jego możliwości w celu określenia, ile miejsca jest dostępne dla niektórych typów zasobów. Niektóre z tych limitów zasobów, takie jak ilość miejsca dostępnego dla kluczy, sesji autoryzacji i sesji transportu, są skutecznie rozszerzane przez TBS za pośrednictwem wirtualizacji. Ograniczenia usługi TBS, które są kontrolowane przez ustawienie rejestru MaxResources, są zwykle znacznie większe niż rzeczywiste ograniczenia sprzętu modułu TPM. Żaden mechanizm nie jest dostarczany do wykonywania zapytań dotyczących ograniczeń usługi TBS niezależnie od limitów sprzętu modułu TPM. To ograniczenie usługi TBS stało się przestarzałe w systemach Windows 8 i Windows Server 2012.

Klucze

Usługa TBS wirtualizuje uchwyty kluczy, dzięki czemu klucze mogą być w sposób niewidoczny dla modułu TPM, gdy nie są używane i ładowane z powrotem do modułu TPM, gdy są potrzebne. Po utworzeniu klucza usługa TBS kojarzy dojście wirtualne z załadowanym kluczem. Ten sam uchwyt wirtualny jest używany przez okres istnienia zasobu. Dojścia kluczy wirtualnych są prawidłowe tylko w kontekście, który je utworzył, a skojarzone zasoby nie są zachowywane poza okresem życia kontekstu.

  • Tworzenie kluczy za pomocą TPM_LoadKey2

    Jeśli klucz jest tworzony przy użyciu TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load lub TPM2_LoadExternal polecenia, usługa TBS zastępuje uchwyt w strumieniu bajtów powrotnych wybranym uchwytem klucza wirtualnego. W związku z tym tbS gwarantuje, że każda obsługa wirtualna jest unikatowa. Jeśli tbS wykryje kolizję (niezwykle mało prawdopodobne zdarzenie), TBS zwalnia klucz z modułu TPM i informuje o oprogramowaniu wywołującym. Oprogramowanie może następnie ponownie przesłać operację. Ten proces można powtórzyć, dopóki usługa TBS nie uzyska unikatowego uchwytu klucza.

  • Czyszczenie kluczy

    Usługa TBS unieważnia dojście klucza wirtualnego po odebraniu komunikatu TPM_FlushSpecific lub TPM2_FlushContext dla tego dojścia wirtualnego z kontekstu klienta. Jeśli klucz jest fizycznie obecny w module TPM po odebraniu komunikatu opróżniania, usługa TBS opróżnia klucz z modułu TPM w tym czasie.

  • Tymczasowe usuwanie kluczy

    Podczas eksmitowania klucza z modułu TPM w celu utworzenia miejsca na nowy element usługa TBS wykonuje TPM_SaveContext lub TPM2_ContextSave polecenie na kluczu przed jego eksmitowanie.

  • Przywracanie kluczy

    Gdy polecenie odwołujące się do załadowanego klucza jest przesyłane do tbS, gwarantuje, że klucz jest fizycznie obecny w module TPM. Jeśli klucz nie jest obecny, usługa TBS przywraca go za pomocą wywołania TPM_LoadContext lub TPM2_ContextLoad. Jeśli nie można przywrócić klucza do modułu TPM, usługa TBS zwraca TPM_E_INVALID_KEYHANDLE w wyniku modułu TPM.

TbS zastępuje każdy uchwyt wirtualny skojarzony z kluczem w strumieniu poleceń fizycznym uchwytem klucza załadowanego na moduł TPM. Jeśli polecenie jest przesyłane z dojściem wirtualnym, który nie jest rozpoznawany przez TBS w kontekście obiektu wywołującego, tbS formatuje strumień błędu dla obiektu wywołującego z TPM_E_INVALID_KEYHANDLE.

Sesje autoryzacji

Sesje autoryzacji są tworzone przez wywołanie TPM_OIAP, TPM_OSAP lub TPM_DSAP. W każdym przypadku strumień bajtów zwracanych zawiera fizyczny uchwyt modułu TPM nowo utworzonej sesji autoryzacji. TbS zastępuje to dojściem wirtualnym. Po odwołyniu się do sesji autoryzacji usługa TBS zastępuje dojście wirtualne w strumieniu poleceń fizycznym dojściem sesji autoryzacji. TbS zapewnia, że okres istnienia sesji autoryzacji wirtualnej jest zgodny z sesją autoryzacji fizycznej. Jeśli klient próbuje użyć wygasłego dojścia wirtualnego, usługa TBS formatuje strumień błędów z błędem TPM_INVALIDAUTHHANDLE.

Miejsca sesji są ograniczone, a TBS może zabrakło miejsc zewnętrznych, w których można zapisać konteksty sesji autoryzacji. W takim przypadku usługa TBS wybierze sesję autoryzacji, aby unieważnić, aby można było pomyślnie zapisać nowy kontekst. Aplikacja, która próbuje użyć starego kontekstu, musi ponownie utworzyć sesję autoryzacji.

Usługa TBS unieważnia wirtualną sesję autoryzacji, gdy wystąpi dowolny z następujących przypadków:

  • Flaga kontynuuj użycia skojarzona z sesją autoryzacji w zwróconym strumieniu poleceń z modułu TPM jest FALSE.

  • Polecenie korzystające z sesji autoryzacji kończy się niepowodzeniem.

  • Wykonywane jest polecenie, które unieważnia sesję autoryzacji skojarzona z poleceniem (na przykład TPM_CreateWrapKey).

  • Klucz skojarzony z sesją OSAP lub DSAP jest eksmitowany z modułu TPM z wywołaniem TPM_FlushSpecific lub TPM2_FlushContext (bez względu na to, czy to polecenie pochodzi z TBS, czy z oprogramowaniem wyższego poziomu).

    Usługa TBS automatycznie ponownie synchronizuje sesje autoryzacji po pomyślnym wykonaniu niektórych nieokreślonych poleceń, aby upewnić się, że stan TBS pozostaje spójny ze stanem modułu TPM. Polecenia, których dotyczy problem, to:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

W każdym z następujących przypadków sesja autoryzacji w module TPM jest opróżniona automatycznie przez moduł TPM:

  • Tworzenie sesji autoryzacji

    Wirtualne dojścia sesji autoryzacji są prawidłowe tylko w kontekście, który je utworzył, a skojarzone zasoby nie są zachowywane poza okresem życia skojarzonego kontekstu.

  • Czyszczenie sesji autoryzacji

    Usługa TBS unieważnia sesję autoryzacji wirtualnej, jeśli otrzyma TPM_FlushSpecific lub TPM2_FlushContext polecenia dla dojścia wirtualnego z kontekstu klienta. Jeśli sesja autoryzacji jest fizycznie obecna w module TPM po odebraniu polecenia opróżniania, usługa TBS natychmiast opróżnia sesję fizyczną z modułu TPM.

  • Tymczasowe usuwanie sesji autoryzacji

    Podczas eksmitowania sesji autoryzacji z modułu TPM w celu utworzenia miejsca dla nowej jednostki usługa TBS wykonuje TPM_SaveContext lub TPM2_ContextSave w tej sesji autoryzacji.

  • Przywracanie sesji autoryzacji

    Po przesłaniu autoryzowanego polecenia modułu TPM do usługi TBS usługa TBS gwarantuje, że wszystkie sesje autoryzacji wirtualnej, o których mowa w poleceniu, są fizycznie obecne w module TPM. Jeśli którakolwiek z sesji autoryzacji nie jest obecna, usługa TBS przywraca je za pomocą wywołania TPM_LoadContext lub TPM2_ContextLoad. Jeśli nie można przywrócić sesji autoryzacji do modułu TPM, usługa TBS zwraca TPM_E_INVALID_HANDLE jako wynik modułu TPM.

TbS zastępuje każdy dojście wirtualne skojarzone z sesją autoryzacji w strumieniu poleceń fizycznym dojściem sesji autoryzacji załadowanej na moduł TPM.

Jeśli polecenie jest przesyłane z dojściem wirtualnym, który nie jest rozpoznawany przez TBS w kontekście obiektu wywołującego, tbS formatuje strumień błędu dla obiektu wywołującego z błędem TPM_E_INVALID_HANDLE.

Sesje transportu

Nuta

Obsługa sesji transportu zgodnie z opisem w tym miejscu jest specyficzna dla systemów Windows Vista i Windows Server 2008.

 

Sesje transportu to mechanizm zapewniany przez moduł TPM, który umożliwia stosowi oprogramowania szyfrowanie danych w poleceniu podczas przekazywania między oprogramowaniem a modułem TPM. Zapobiega to przechwyceniu danych przez przeciwnika podczas przechodzenia przez magistralę sprzętową.

Ważny

Zaszyfrowane są tylko dane ładunku. Polecenia, które są wykonywane, nadal można zidentyfikować.

 

Niestety, ten mechanizm uniemożliwia również usłudze TBS badanie danych ładunku. W większości przypadków nie jest to problem, ponieważ usługa TBS modyfikuje tylko dojścia, a nie dane ładunku. Jednak w przypadku TPM_LoadContext na przykład zwrócony uchwyt zasobu jest objęty szyfrowaniem. W związku z tym tbS uniemożliwia próby wykonania TPM_LoadContext operacji objętej sesją transportową.

Usługa TBS blokuje następujące polecenia w ramach sesji transportu:

  • 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

Gdy dowolne z tych poleceń jest objęte sesją transportu, usługa TBS zwraca TPM_E_EMBEDDED_COMMAND_UNSUPPORTED jako wynik modułu TPM.

Dojścia sesji transportu są zwirtualizowane w sposób podobny do uchwytów kluczy i dojść autoryzacji. W module TPM jest dostępna ograniczona liczba zapisanych miejsc kontekstu sesji transportu.

Usługa TBS unieważnia sesję transportu wirtualnego, jeśli wystąpi którykolwiek z następujących przypadków:

  • Flaga kontynuuj użycia skojarzona z sesją transportu w strumieniu poleceń powrotnych z modułu TPM jest FALSE.

    Podobnie jak w przypadku powyższych sesji autoryzacji usługa TBS automatycznie ponownie synchronizuje sesje transportu po pomyślnym wykonaniu niektórych nieokreślonych poleceń w celu zapewnienia, że stan TBS pozostaje zgodny ze stanem modułu TPM. Polecenia, których dotyczy problem, to:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

W każdym z tych przypadków sesja transportu modułu TPM zostanie automatycznie opróżniona przez moduł TPM:

  • Tworzenie sesji transportu

    Usługa TBS tworzy dojście wirtualne dla każdej sesji transportu utworzonej przez klienta. Uchwyty transportu wirtualnego są prawidłowe tylko w kontekście, który je utworzył, a skojarzone zasoby nie są zachowywane poza okresem życia skojarzonego kontekstu.

  • Czyszczenie sesji transportu

    Usługa TBS unieważnia sesję transportu wirtualnego, jeśli otrzyma polecenie TPM_FlushSpecific dla dojścia wirtualnego z kontekstu klienta. Jeśli sesja transportu jest fizycznie obecna w module TPM po odebraniu polecenia opróżniania, usługa TBS natychmiast opróżnia sesję fizyczną z modułu TPM.

  • Tymczasowe usuwanie sesji transportu

    Podczas eksmitowania sesji transportu z modułu TPM w celu utworzenia miejsca dla nowej jednostki usługa TBS wykonuje TPM_SaveContext na tej sesji transportu.

  • Przywracanie sesji transportu

    Po przesłaniu polecenia TPM_ExecuteTransport do tbS usługa TBS gwarantuje, że sesja transportu określona w poleceniu jest fizycznie obecna w module TPM. Jeśli sesja transportu nie jest obecna, usługa TBS przywraca ją za pomocą wywołania TPM_LoadContext.

TbS zastępuje wirtualny uchwyt skojarzony z sesją transportu w strumieniu poleceń fizycznym uchwytem sesji transportu załadowanej do modułu TPM. Jeśli polecenie jest przesyłane z dojściem wirtualnym, który nie jest rozpoznawany przez TBS w kontekście obiektu wywołującego, tbS formatuje strumień błędu dla obiektu wywołującego przy użyciu TPM_E_INVALID_HANDLE.

Sesje transportu na wyłączność

Ekskluzywne opakowane sesje transportu to sposób na oprogramowanie najwyższego poziomu w celu określenia, czy jakiekolwiek inne oprogramowanie uzyskało dostęp do modułu TPM podczas łańcucha poleceń. Nie uniemożliwiają one innego oprogramowania uzyskiwania dostępu do modułu TPM, po prostu dają twórcy sesji transportowej środki określania, że wystąpił inny dostęp. TBS nie robi nic specyficznego dla utrudniania wyłącznych sesji transportowych, ale jest to nieco niezgodne z nimi. Usługa TBS próbuje zduplikować naturalne zachowanie modułu TPM, ponieważ jest przezroczysta, więc nie faworyzuje poleceń z kontekstów, które ustanawiają wyłączną sesję transportu. Jeśli na przykład klient B przesyła polecenie, gdy klient A znajduje się w ekskluzywnej sesji transportu, unieważni wyłączną sesję transportową klienta A.

Polecenia inicjowane przez usługę TBS mogą również zakończyć sesję transportu na wyłączność. Dzieje się tak, gdy klient A znajduje się w ekskluzywnej sesji transportu, a polecenie wykonywane przez klienta A wywołuje zasób, który nie jest fizycznie obecny w module TPM. Taka sytuacja powoduje, że menedżer wirtualizacji TBS wykonuje polecenie TPM_LoadContext, aby dostarczyć ten zasób, co kończy wyłączną sesję transportową klienta A.