다음을 통해 공유


리소스 가상화

TBS의 기본 기능은 키, 권한 부여 및 전송 세션과 같은 제한된 특정 TPM 리소스를 효율적으로 공유하는 것입니다.

이러한 리소스 중 하나의 instance 만들 때 TBS는 리소스의 가상 instance 만들고 결과 명령 스트림에서 이 가상 instance 대한 핸들을 반환합니다(TPM에서 반환된 실제 핸들 instance 아닌). TBS는 내부적으로 가상 핸들과 실제 핸들 간의 매핑을 유지 관리합니다. TPM이 지정된 형식의 더 많은 리소스를 보유할 공간이 부족하면 TPM이 새 리소스를 보유할 수 있을 때까지 리소스의 기존 인스턴스가 선택적으로 저장되고 제거됩니다. 이전 리소스가 다시 필요한 경우 TBS는 명령을 제출하기 전에 저장된 컨텍스트(필요한 경우 다른 리소스 저장 및 제거)를 로드합니다.

TBS의 모든 가상화는 특정 컨텍스트를 대신하여 수행됩니다. 각 컨텍스트는 해당 가상 리소스에 해당하는 TPM의 물리적 리소스뿐만 아니라 특별히 생성된 가상 리소스에만 액세스할 수 있습니다. 기본적으로 모든 가상화된 리소스의 총 수는 500개로 제한됩니다. 이 숫자는 HKEY_LOCAL_MACHINE\Software\Microsoft\Tpm에서 MaxResources라는 DWORD 레지스트리 값을 만들거나 수정하여 변경할 수 있습니다. 성능 모니터 도구를 사용하여 TBS 리소스 수를 추적하여 실시간 TBS 리소스 사용량을 관찰할 수 있습니다. 이 제한은 Windows 8 및 Windows Server 2012 사용되지 않습니다.

TBS에 의해 가상화되지 않은 제한된 TPM 리소스(예: 카운터 및 NV 저장소)는 소프트웨어 스택 간에 협조적으로 공유되어야 합니다.

참고

이 핸들 가상화는 HMAC 권한 부여 매개 변수 계산에 키 핸들을 포함하는 명령이 실패하도록 합니다. 따라서 TPM 버전 1.2에서 사용되지 않는 많은 명령은 TBS 환경의 애플리케이션 소프트웨어에서 사용할 수 없습니다.

 

리소스 한도

TPM을 사용하면 호출자가 해당 기능을 쿼리하여 특정 유형의 리소스에 사용할 수 있는 공간을 확인할 수 있습니다. 키, 권한 부여 세션 및 전송 세션에 사용할 수 있는 공간의 양과 같은 일부 리소스 제한은 가상화를 통해 TBS에 의해 효과적으로 확장됩니다. MaxResources 레지스트리 설정에 의해 제어되는 TBS 제한 사항은 일반적으로 기본 TPM 하드웨어의 실제 제한보다 훨씬 큽니다. TPM 하드웨어 제한과 별도로 TBS 제한 사항을 쿼리하기 위한 메커니즘이 제공되지 않습니다. 이 TBS 제한은 Windows 8 및 Windows Server 2012 사용되지 않습니다.

구성

TBS는 키가 사용되지 않을 때 TPM에서 투명하게 언로드되고 필요할 때 TPM에 다시 로드될 수 있도록 키 핸들을 가상화합니다. 키를 만들 때 TBS는 가상 핸들을 로드된 키와 연결합니다. 리소스의 수명 동안 동일한 가상 핸들이 사용됩니다. 가상 키 핸들은 해당 핸들을 만든 컨텍스트에서만 유효하며 연결된 리소스는 컨텍스트의 수명 이후에도 유지되지 않습니다.

  • TPM_LoadKey2 사용하여 키 만들기

    TPM_LoadKey2, TPM2_CreatePrimary, TPM2_Load 또는 TPM2_LoadExternal 명령을 사용하여 키를 만드는 경우 TBS는 반환 바이트 스트림의 핸들을 선택한 가상 키 핸들로 바꿉니다. 결과적으로 TBS는 각 가상 핸들이 고유하도록 합니다. TBS가 충돌(극히 드문 이벤트)을 감지하면 TBS는 TPM에서 키를 언로드하고 호출 소프트웨어를 알릴 수 있습니다. 그러면 소프트웨어가 작업을 다시 제출할 수 있습니다. 이 프로세스는 TBS가 고유한 키 핸들을 가져올 때까지 반복될 수 있습니다.

  • 키 지우기

    TBS는 클라이언트 컨텍스트에서 해당 가상 핸들에 대한 TPM_FlushSpecific 또는 TPM2_FlushContext 메시지를 받으면 가상 키 핸들을 무효화합니다. 플러시 메시지를 받을 때 키가 TPM에 물리적으로 있는 경우 TBS는 해당 시간에 TPM에서 키를 플러시합니다.

  • 일시적으로 키 제거

    새 항목을 위한 공간을 만들기 위해 TPM에서 키를 제거할 때 TBS는 키에서 TPM_SaveContext 또는 TPM2_ContextSave 명령을 실행한 후 제거합니다.

  • 키 복원

    로드된 키를 참조하는 명령이 TBS에 제출되면 키가 TPM에 실제로 있는지 확인합니다. 키가 없는 경우 TBS는 TPM_LoadContext 또는 TPM2_ContextLoad 호출하여 복원합니다. 키를 TPM으로 복원할 수 없는 경우 TBS는 TPM_E_INVALID_KEYHANDLE TPM 결과로 반환합니다.

TBS는 명령 스트림의 키와 연결된 각 가상 핸들을 TPM에 로드된 키의 실제 핸들로 바꿉니다. 호출자의 컨텍스트에서 TBS에서 인식할 수 없는 가상 핸들을 사용하여 명령을 제출하는 경우 TBS는 TPM_E_INVALID_KEYHANDLE 사용하여 호출자에 대한 오류 스트림의 형식을 지정합니다.

권한 부여 세션

권한 부여 세션은 TPM_OIAP, TPM_OSAP 또는 TPM_DSAP 호출하여 생성됩니다. 각 경우에 반환 바이트 스트림에는 새로 만든 권한 부여 세션의 실제 TPM 핸들이 포함됩니다. TBS는 이를 가상 핸들로 대체합니다. 이후에 권한 부여 세션이 참조되면 TBS는 명령 스트림의 가상 핸들을 권한 부여 세션의 물리적 핸들로 바꿉니다. TBS는 가상 권한 부여 세션의 수명이 실제 권한 부여 세션의 수명과 일치하도록 합니다. 클라이언트가 만료된 가상 핸들을 사용하려고 하면 TBS는 오류 TPM_INVALIDAUTHHANDLE 오류 스트림의 형식을 지정합니다.

세션 슬롯이 제한되며, TBS가 권한 부여 세션 컨텍스트를 저장할 외부 슬롯이 부족할 수 있습니다. 이 경우 TBS는 새 컨텍스트를 성공적으로 저장할 수 있도록 무효화할 권한 부여 세션을 선택합니다. 이전 컨텍스트를 사용하려는 애플리케이션은 권한 부여 세션을 다시 만들어야 합니다.

TBS는 다음 경우 가상 권한 부여 세션을 무효화합니다.

  • TPM에서 반환된 명령 스트림의 권한 부여 세션과 연결된 계속 사용 플래그는 FALSE입니다.

  • 권한 부여 세션을 사용하는 명령이 실패합니다.

  • 명령과 연결된 권한 부여 세션(예: TPM_CreateWrapKey)을 무효화하는 명령이 실행됩니다.

  • OSAP 또는 DSAP 세션과 연결된 키는 TPM_FlushSpecific 또는 TPM2_FlushContext 호출하여 TPM에서 제거됩니다(이 명령이 TBS에서 시작되었는지 또는 상위 수준의 소프트웨어에서 시작되었는지 여부에 관계없이).

    TBS는 TBS 상태가 TPM 상태와 일관되게 유지되도록 특정 비결정적 명령을 성공적으로 실행한 후 권한 부여 세션을 자동으로 다시 동기화합니다. 영향을 받는 명령은 다음과 같습니다.

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

다음 각 경우에서 TPM의 권한 부여 세션은 TPM에 의해 자동으로 플러시됩니다.

  • 권한 부여 세션 만들기

    가상 권한 부여 세션 핸들은 생성된 컨텍스트에서만 유효하며 연결된 리소스는 연결된 컨텍스트의 수명 이후에도 유지되지 않습니다.

  • 권한 부여 세션 지우기

    TBS는 클라이언트 컨텍스트에서 가상 핸들에 대한 TPM_FlushSpecific 또는 TPM2_FlushContext 명령을 수신하는 경우 가상 권한 부여 세션을 무효화합니다. 플러시 명령이 수신될 때 권한 부여 세션이 TPM에 물리적으로 있는 경우 TBS는 TPM에서 실제 세션을 즉시 플러시합니다.

  • 권한 부여 세션 일시적으로 제거

    새 엔터티를 위한 공간을 만들기 위해 TPM에서 권한 부여 세션을 제거하면 TBS는 해당 권한 부여 세션에서 TPM_SaveContext 실행하거나 TPM2_ContextSave 실행합니다.

  • 권한 부여 세션 복원

    승인된 TPM 명령이 TBS에 제출되면 TBS는 명령에 참조된 모든 가상 권한 부여 세션이 TPM에 물리적으로 있는지 확인합니다. 권한 부여 세션이 없는 경우 TBS는 TPM_LoadContext 또는 TPM2_ContextLoad 호출하여 복원합니다. 권한 부여 세션을 TPM으로 복원할 수 없는 경우 TBS는 TPM_E_INVALID_HANDLE TPM 결과로 반환합니다.

TBS는 명령 스트림의 권한 부여 세션과 연결된 각 가상 핸들을 TPM에 로드된 권한 부여 세션의 실제 핸들로 바꿉니다.

호출자의 컨텍스트에서 TBS에서 인식할 수 없는 가상 핸들을 사용하여 명령을 제출하는 경우 TBS는 오류 TPM_E_INVALID_HANDLE 호출자에 대한 오류 스트림의 형식을 지정합니다.

전송 세션

참고

여기에 설명된 대로 전송 세션 처리는 Windows Vista 및 Windows Server 2008과 관련이 있습니다.

 

전송 세션은 소프트웨어 스택이 소프트웨어와 TPM 간에 전달될 때 명령의 데이터를 암호화할 수 있도록 하는 TPM에서 제공하는 메커니즘입니다. 이렇게 하면 악의적 사용자가 하드웨어 버스를 통과할 때 데이터를 가로채지 못하게 됩니다.

중요

페이로드 데이터만 암호화됩니다. 실행 중인 명령은 여전히 식별할 수 있습니다.

 

아쉽게도 이 메커니즘은 TBS가 페이로드 데이터를 검사하지 못하게 합니다. 대부분의 경우 TBS는 페이로드 데이터가 아닌 핸들만 수정하기 때문에 문제가 되지 않습니다. 그러나 instance TPM_LoadContext 경우 반환된 리소스 핸들은 암호화에서 처리됩니다. 따라서 TBS는 전송 세션이 적용되는 TPM_LoadContext 작업을 수행하려는 시도를 방지합니다.

TBS는 전송 세션에서 다음 명령을 차단합니다.

  • 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

이러한 명령 중 하나가 전송 세션에서 처리되면 TBS는 TPM_E_EMBEDDED_COMMAND_UNSUPPORTED TPM 결과로 반환합니다.

전송 세션 핸들은 키 핸들 및 권한 부여 핸들과 유사한 방식으로 가상화됩니다. TPM에서 사용할 수 있는 저장된 전송 세션 컨텍스트 슬롯의 수는 제한되어 있습니다.

다음 경우 TBS는 가상 전송 세션을 무효화합니다.

  • TPM에서 반환 명령 스트림의 전송 세션과 연결된 계속 사용 플래그는 FALSE입니다.

    위의 권한 부여 세션과 마찬가지로 TBS는 TBS 상태가 TPM 상태와 일관되게 유지되도록 특정 비결정적 명령을 성공적으로 실행한 후 전송 세션을 자동으로 다시 동기화합니다. 영향을 받는 명령은 다음과 같습니다.

    • TPM_ORD_Delegate_Manage
    • TPM_ORD_Delegate_CreateOwnerDelegation
    • TPM_ORD_Delegate_LoadOwnerDelegation

이러한 각 경우에서 TPM의 전송 세션은 TPM에 의해 자동으로 플러시됩니다.

  • 전송 세션 만들기

    TBS는 클라이언트에서 만든 각 전송 세션에 대한 가상 핸들을 만듭니다. 가상 전송 핸들은 만든 컨텍스트에서만 유효하며 연결된 리소스는 연결된 컨텍스트의 수명 이후에도 유지되지 않습니다.

  • 전송 세션 지우기

    TBS는 클라이언트 컨텍스트에서 가상 핸들에 대한 TPM_FlushSpecific 명령을 수신하는 경우 가상 전송 세션을 무효화합니다. 플러시 명령이 수신될 때 전송 세션이 TPM에 물리적으로 있는 경우 TBS는 TPM에서 물리적 세션을 즉시 플러시합니다.

  • 일시적으로 전송 세션 제거

    TPM에서 전송 세션을 제거하여 새 엔터티를 위한 공간을 확보하면 TBS는 해당 전송 세션에서 TPM_SaveContext 실행합니다.

  • 전송 세션 복원

    TPM_ExecuteTransport 명령이 TBS에 제출되면 TBS는 명령에서 참조된 전송 세션이 TPM에 물리적으로 있는지 확인합니다. 전송 세션이 없으면 TBS는 TPM_LoadContext 호출을 사용하여 복원합니다.

TBS는 명령 스트림의 전송 세션과 연결된 가상 핸들을 TPM에 로드된 전송 세션의 실제 핸들로 바꿉니다. 호출자의 컨텍스트에서 TBS에서 인식할 수 없는 가상 핸들을 사용하여 명령을 제출하는 경우 TBS는 TPM_E_INVALID_HANDLE 사용하여 호출자에 대한 오류 스트림의 형식을 지정합니다.

단독 전송 세션

단독 래핑된 전송 세션은 최상위 소프트웨어가 명령 체인 중에 다른 소프트웨어가 TPM에 액세스했는지 여부를 확인하는 방법입니다. 다른 소프트웨어가 TPM에 액세스하는 것을 방지하지 않으며 전송 세션 작성자에게 다른 액세스가 발생했음을 확인하는 수단을 제공합니다. TBS는 독점적 인 전송 세션을 방해하기 위해 특정 아무것도하지 않지만, 그들과 다소 호환되지 않습니다. TBS는 투명하게 TPM의 자연스러운 동작을 복제하려고 시도하므로 배타적 전송 세션을 설정하는 컨텍스트의 명령을 선호하지 않습니다. 예를 들어 클라이언트 A가 단독 전송 세션에 있을 때 클라이언트 B가 명령을 제출하면 클라이언트 A의 단독 전송 세션이 무효화됩니다.

TBS에서 시작한 명령은 배타적 전송 세션을 종료할 수도 있습니다. 이는 클라이언트 A가 단독 전송 세션에 있고 클라이언트 A가 실행하는 명령이 TPM에 물리적으로 존재하지 않는 리소스를 호출할 때 발생합니다. 이 상황은 TBS 가상화 관리자가 TPM_LoadContext 명령을 실행하여 해당 리소스를 공급하도록 트리거합니다. 그러면 클라이언트 A의 단독 전송 세션이 종료됩니다.