Compartir a través de


Virtualización de recursos

La función principal de TBS es compartir eficazmente determinados recursos de TPM limitados: claves, autorización y sesiones de transporte.

Cuando se crea una instancia de uno de estos recursos, TBS crea una instancia virtual del recurso y devuelve un identificador a esta instancia virtual en el flujo de comandos de resultado (en lugar de la instancia de identificador real devuelta por el TPM). El TBS mantiene una asignación entre el identificador virtual y el identificador real internamente. Si el TPM se queda sin espacio para contener más recursos de un tipo determinado, las instancias existentes del recurso se guardan y expulsan selectivamente hasta que el TPM pueda contener el nuevo recurso. Cuando se vuelven a requerir los recursos antiguos, TBS carga los contextos guardados (guardando y expulsando otros recursos si es necesario) antes de enviar el comando.

Toda la virtualización de TBS se realiza en nombre de un contexto específico. Cada contexto solo puede acceder a los recursos virtuales creados específicamente en su nombre, así como a los recursos físicos del TPM que se correspondan con esos recursos virtuales. De forma predeterminada, el número total de todos los recursos virtualizados está limitado a 500. Este número se puede modificar creando o modificando un valor del Registro DWORD denominado MaxResources en HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm. El uso de recursos TBS en tiempo real se puede observar mediante la herramienta Monitor de rendimiento para realizar un seguimiento del número de recursos TBS. Esta restricción se ha quedado obsoleta con Windows 8 y Windows Server 2012.

Los recursos de TPM limitados que no están virtualizados por el TBS (como contadores y el almacén nv) deben compartirse de forma cooperativa entre las pilas de software.

Nota

Este control de virtualización hace que se produzcan errores en los comandos que incluyen identificadores de clave en el cálculo de parámetros de autorización HMAC. Como resultado, el software de aplicación no puede usar muchos comandos en desuso en la versión 1.2 de TPM en el entorno de TBS.

 

Límites de recursos

El TPM permite a los autores de llamadas consultar sus funcionalidades para determinar cuánto espacio está disponible para determinados tipos de recursos. Algunos de estos límites de recursos, como la cantidad de espacio disponible para las claves, las sesiones de autorización y las sesiones de transporte, se amplían eficazmente mediante la virtualización de TBS. Las limitaciones de TBS, controladas por la configuración del Registro MaxResources , suelen ser mucho mayores que las limitaciones reales del hardware TPM subyacente. No se proporciona ningún mecanismo para consultar limitaciones de TBS por separado de los límites de hardware de TPM. Esta limitación de TBS se ha quedado obsoleta con Windows 8 y Windows Server 2012.

Teclas

El TBS virtualiza los identificadores de clave para que las claves se puedan descargar de forma transparente desde el TPM cuando no se usan y se cargan de nuevo en el TPM cuando se necesitan. Cuando se crea una clave, TBS asocia un identificador virtual a la clave cargada. El mismo identificador virtual se usa durante la vigencia del recurso. Los identificadores de clave virtual solo son válidos en el contexto que los creó y los recursos asociados no se conservan más allá de la vida del contexto.

  • Creación de claves con TPM_LoadKey2

    Si se crea una clave mediante el comando TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load o TPM2_LoadExternal, TBS reemplaza el identificador en la secuencia de bytes de retorno por un identificador de clave virtual de su elección. Como resultado, TBS garantiza que cada identificador virtual sea único. Si el TBS detecta una colisión (un evento extremadamente improbable), TBS descarga la clave del TPM e informa al software que realiza la llamada. A continuación, el software puede volver a enviar la operación. Este proceso se puede repetir hasta que TBS obtiene un identificador de clave único.

  • Borrar claves

    TBS invalida el identificador de clave virtual cuando recibe un mensaje de TPM_FlushSpecific o TPM2_FlushContext para ese identificador virtual desde el contexto de cliente. Si la clave está físicamente presente en el TPM cuando se recibe el mensaje de vaciado, TBS vacía la clave del TPM en ese momento.

  • Eliminación temporal de claves

    Al expulsar una clave del TPM para dejar espacio para un nuevo elemento, TBS ejecuta un comando TPM_SaveContext o TPM2_ContextSave en la clave antes de expulsarlo.

  • Restauración de claves

    Cuando un comando que hace referencia a una clave cargada se envía a TBS, garantiza que la clave esté presente físicamente en el TPM. Si la clave no está presente, TBS la restaura con una llamada a TPM_LoadContext o TPM2_ContextLoad. Si no se puede restaurar una clave en el TPM, TBS devuelve TPM_E_INVALID_KEYHANDLE como resultado del TPM.

El TBS reemplaza cada identificador virtual asociado a una clave en un flujo de comandos por el identificador físico de la clave cargada en el TPM. Si se envía un comando con un identificador virtual que el TBS no reconoce en el contexto del autor de la llamada, TBS da formato a un flujo de error para el autor de la llamada con TPM_E_INVALID_KEYHANDLE.

Sesiones de autorización

Las sesiones de autorización se crean llamando a TPM_OIAP, TPM_OSAP o TPM_DSAP. En cada caso, el flujo de bytes devuelto contiene el identificador de TPM físico de la sesión de autorización recién creada. EL TBS lo reemplaza por un identificador virtual. Cuando posteriormente se hace referencia a la sesión de autorización, TBS reemplaza el identificador virtual en el flujo de comandos por el identificador físico de la sesión de autorización. El TBS garantiza que la duración de la sesión de autorización virtual coincida con la de la sesión de autorización física. Si un cliente intenta usar un identificador virtual expirado, TBS da formato a un flujo de error con TPM_INVALIDAUTHHANDLE de error.

Las ranuras de sesión están limitadas y el TBS puede agotarse de ranuras externas en las que guardar contextos de sesión de autorización. Si esto sucede, TBS elige una sesión de autorización para invalidar para que el nuevo contexto se pueda guardar correctamente. Una aplicación que intente usar el contexto anterior deberá volver a crear la sesión de autorización.

TBS invalida la sesión de autorización virtual cuando se produce cualquiera de los casos siguientes:

  • La marca continue-use asociada a la sesión de autorización en el flujo de comandos devuelto desde el TPM es FALSE.

  • Se produce un error en un comando que usa una sesión de autorización.

  • Se ejecuta un comando que invalida la sesión de autorización asociada al comando (como TPM_CreateWrapKey).

  • Una clave asociada a una sesión de OSAP o DSAP se expulsa del TPM con una llamada a TPM_FlushSpecific o TPM2_FlushContext (sin tener en cuenta si este comando se originó con el TBS o con software de nivel superior).

    El TBS volverá a sincronizar automáticamente las sesiones de autorización después de ejecutar correctamente determinados comandos no deterministas para asegurarse de que el estado TBS sigue siendo coherente con el estado de TPM. Los comandos afectados son:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

En cada uno de los casos siguientes, el TPM vacía automáticamente la sesión de autorización en el TPM:

  • Creación de sesiones de autorización

    Los identificadores de sesión de autorización virtual solo son válidos en el contexto que los creó y los recursos asociados no se conservan más allá de la vida del contexto asociado.

  • Borrar sesiones de autorización

    TBS invalida la sesión de autorización virtual si recibe un comando TPM_FlushSpecific o TPM2_FlushContext para el identificador virtual del contexto de cliente. Si la sesión de autorización está físicamente presente en el TPM cuando se recibe el comando flush, TBS vacía la sesión física del TPM inmediatamente.

  • Eliminación temporal de sesiones de autorización

    Al expulsar una sesión de autorización del TPM para dejar espacio para una nueva entidad, TBS ejecuta TPM_SaveContext o TPM2_ContextSave en esa sesión de autorización.

  • Restaurar sesiones de autorización

    Cuando se envía un comando TPM autorizado a TBS, TBS garantiza que todas las sesiones de autorización virtual a las que se hace referencia en el comando estén físicamente presentes en el TPM. Si alguna de las sesiones de autorización no está presente, TBS las restaura con una llamada a TPM_LoadContext o TPM2_ContextLoad. Si no se puede restaurar una sesión de autorización en el TPM, TBS devuelve TPM_E_INVALID_HANDLE como resultado del TPM.

El TBS reemplaza cada identificador virtual asociado a una sesión de autorización en un flujo de comandos por el identificador físico de la sesión de autorización cargada en el TPM.

Si un comando se envía con un identificador virtual que no reconoce el TBS en el contexto del autor de la llamada, TBS da formato a un flujo de error para el autor de la llamada con el error TPM_E_INVALID_HANDLE.

Sesiones de transporte

Nota

El control de las sesiones de transporte como se describe aquí es específico de Windows Vista y Windows Server 2008.

 

Las sesiones de transporte son un mecanismo proporcionado por el TPM que permite a una pila de software cifrar los datos en un comando a medida que pasa entre el software y el TPM. Esto evita que un adversario intercepte los datos a medida que pasa sobre el bus de hardware.

Importante

Solo se cifran los datos de carga útil. Los comandos que se ejecutan todavía se pueden identificar.

 

Desafortunadamente, este mecanismo también impide que el TBS examine los datos de carga. En la mayoría de los casos, esto no es un problema porque el TBS solo modifica los identificadores, no los datos de carga. Sin embargo, en el caso de TPM_LoadContext por ejemplo, el identificador de recursos devuelto está cubierto por el cifrado. Por lo tanto, TBS impide que se intente realizar una operación de TPM_LoadContext cubierta por una sesión de transporte.

El TBS bloquea los siguientes comandos en la sesión de transporte:

  • 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

Cuando cualquiera de estos comandos está cubierto por una sesión de transporte, TBS devuelve TPM_E_EMBEDDED_COMMAND_UNSUPPORTED como resultado del TPM.

Los identificadores de sesión de transporte se virtualizan de forma similar a los identificadores de clave y los identificadores de autorización. Hay un número limitado de ranuras de contexto de sesión de transporte guardadas disponibles en el TPM.

TBS invalida la sesión de transporte virtual si se produce alguno de los casos siguientes:

  • La marca continue-use asociada a la sesión de transporte en el flujo de comandos de devolución del TPM es FALSE.

    Al igual que con las sesiones de autorización anteriores, TBS volverá a sincronizar automáticamente las sesiones de transporte después de la correcta ejecución de determinados comandos no deterministas para asegurarse de que el estado TBS sigue siendo coherente con el estado de TPM. Los comandos afectados son:

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

En cada uno de estos casos, el TPM vaciará automáticamente la sesión de transporte en el TPM:

  • Crear sesiones de transporte

    TBS crea un identificador virtual para cada sesión de transporte creada por un cliente. Los identificadores de transporte virtual solo son válidos en el contexto que los creó y los recursos asociados no se conservan más allá de la vida del contexto asociado.

  • Borrar sesiones de transporte

    TBS invalida la sesión de transporte virtual si recibe un comando TPM_FlushSpecific para el identificador virtual desde el contexto del cliente. Si la sesión de transporte está físicamente presente en el TPM cuando se recibe el comando flush, TBS vacía la sesión física del TPM inmediatamente.

  • Eliminación temporal de sesiones de transporte

    Al expulsar una sesión de transporte del TPM para dejar espacio para una nueva entidad, TBS se ejecuta TPM_SaveContext en esa sesión de transporte.

  • Restaurar sesiones de transporte

    Cuando se envía un comando TPM_ExecuteTransport al TBS, TBS garantiza que la sesión de transporte a la que se hace referencia en el comando esté presente físicamente en el TPM. Si la sesión de transporte no está presente, TBS la restaura con una llamada a TPM_LoadContext.

El TBS reemplaza el identificador virtual asociado a la sesión de transporte en un flujo de comandos por el identificador físico de la sesión de transporte cargada en el TPM. Si se envía un comando con un identificador virtual que no reconoce el TBS en el contexto del autor de la llamada, TBS da formato a un flujo de error para el autor de la llamada mediante TPM_E_INVALID_HANDLE.

Sesiones de transporte exclusivas

Las sesiones de transporte encapsuladas exclusivas son una manera de que el software de nivel superior determine si cualquier otro software ha accedido al TPM durante una cadena de comandos. No impiden que otro software acceda al TPM, simplemente dan al creador de la sesión de transporte un medio para determinar que se ha producido algún otro acceso. El TBS no hace nada específico para impedir sesiones de transporte exclusivas, pero es algo incompatible con ellas. El TBS intenta duplicar el comportamiento natural del TPM al ser transparente, por lo que no favorece los comandos de contextos que establecen una sesión de transporte exclusiva. Por ejemplo, si el cliente B envía un comando cuando el cliente A está en una sesión de transporte exclusiva, invalidará la sesión de transporte exclusiva del cliente A.

Los comandos iniciados por TBS también pueden finalizar la sesión de transporte exclusiva. Esto sucede cuando el cliente A está en una sesión de transporte exclusiva y un comando ejecutado por el cliente A llama a un recurso que no está presente físicamente en el TPM. Esta situación desencadena el administrador de virtualización de TBS para ejecutar un comando TPM_LoadContext para proporcionar ese recurso, que finaliza la sesión de transporte exclusiva del cliente A.