신뢰할 수 있는 실행 환경 ACPI 프로필
라이선스: Microsoft는 이 사양의 구현을 생성, 사용, 판매, 영업 제안, 수입, 배포하기 위한 목적으로만 합리적이고 비차별적인 조건으로 필요한 클레임에 대한 무료의 로열티가 없는 라이선스를 사용자에게 부여하는 데 동의합니다. "필요한 클레임"은 이 사양의 필수 부분(선택적 부분의 필수 요소 포함)을 구현하는 데 기술적으로 필요한 Microsoft 소유 또는 Microsoft 관리 특허의 클레임입니다. 여기서, 침해의 원인이 되는 기능은 이 사양에서 단순히 참조되지 않고 자세히 설명됩니다.
1.0 배경
이 사양은 TPM 2.0 디바이스에 대한 ACPI 디바이스 개체 및 Windows 8 데 필요한 ACPI 디바이스 개체와 연결된 제어 메서드를 정의합니다. 제어 메서드는 TCG 물리적 상태 ACPI 인터페이스, 플랫폼 재설정 공격 완화 인터페이스 및 필요에 따라 명령을 TPM 2.0 디바이스로 보내는 ACPI 메서드와 동일하게 구현합니다.
추가 정적 ACPI 표(TPM2)은 TPM 2.0 디바이스와 Windows 8 OS 간의 통신 메커니즘을 정의하는 데 사용됩니다.
참고
Microsoft는 신뢰할 수 있는 컴퓨팅 그룹의 "TPM"을 "TPM 2.0"이라고 합니다.
2.0 요구 사항
이 사양에서는 OS와 펌웨어 환경 간의 [ACPI09]에 지정된 대로 ACPI 기반 통신을 지원하는 컴퓨팅 플랫폼을 가정합니다.
3.0 사용 시나리오(예시에만 해당)
3.1 물리적 상태 명령 전송
일반적인 사용 시나리오는 다음과 같습니다.
애플리케이션은 OS 환경 내에서 TPM 2.0 디바이스가 Windows 8 사용을 위해 완전히 프로비전되지 않은 것을 감지합니다. (이 작업을 수행할 수 있는 방법의 예는 이전 OS 이미지가 TPM 2.0을 프로비전한 후 새 OS 이미지가 설치된 경우입니다.)
애플리케이션은 OS 마법사를 시작하여 TPM 2.0 디바이스를 사용할 수 있도록 준비합니다.
마법사는 UI를 통해 컴퓨터 관리자와 상호 작용하고 TPM 2.0 디바이스 재설정 잠금 권한 부여 값을 사용할 수 없으므로 프로비전하기 위해 관리자가 TPM 2.0 디바이스를 지워야 한다고 결정합니다.
TPM 2.0 디바이스를 지우기 위해 OS에서는 물리적 상태 사용자가 TPM 2.0 디바이스 지우기를 승인했음을 확인한 경우 TPM 2.0 디바이스 개체에 대한 ACPI 제어 메서드를 실행하여 펌웨어에 다음 부팅 시 TPM 2.0 디바이스를 지우는 작업을 수행하도록 요청합니다.
OS에서는 플랫폼을 다시 시작합니다.
부팅 프로세스의 초기 부분에서 펌웨어는 OS에서 보류 중인 요청을 인식하여 TPM 2.0 디바이스를 지웁니다.
펌웨어는 물리적 상태 사용자에게 TPM 2.0 디바이스 지우기를 확인하기 위한 몇 가지 조치를 취하도록 요청하는 UI를 제공합니다.
물리적 상태 사용자는 TPM 2.0 디바이스의 지우기를 확인합니다.
펌웨어는 플랫폼 계층 권한 부여를 사용하여 TPM 2.0 디바이스를 지웁니다.
필요한 경우 TPM 2.0 디바이스 지우기를 유지하기 위해 플랫폼이 즉시 다시 부팅됩니다.
OS가 부팅됩니다.
TPM 2.0 디바이스를 지우기 위한 마지막 OS 요청이 (a) 성공한 경우(b) 물리적 상태 사용자가 확인하지 않았거나 (c) 다른 오류가 있으면 OS에서 TPM 2.0 디바이스의 ACPI 제어 메서드를 통해 쿼리합니다. 다음에서는 TPM 2.0 디바이스가 성공적으로 지워진 것으로 가정합니다.
OS 내의 TPM 2.0 디바이스 프로비저닝 마법사는 추가 명령을 수행하여 Windows 디바이스를 사용할 수 있도록 준비합니다.
3.2 다음 부팅 시 메모리를 지우도록 요청
이 시나리오에서는 플랫폼이 예기치 않게 다시 시작된 후 시스템의 메모리 지우기 기능이 핵심 자료에 대한 시스템 메모리를 수집하는 공격을 방지하는 방법을 보여줍니다.
OS 내에서 TPM 2.0 디바이스가 있는 시스템의 관리자는 OS 볼륨에 대한 BitLocker 기능을 켭니다.
BitLocker 기능은 TPM 2.0 디바이스 ACPI 제어 메서드를 호출하여 TCG 플랫폼 재설정 공격 완화 사양에 정의된 ClearMemory 비트를 설정합니다.
BitLocker 기능은 OS 볼륨을 암호화합니다.
관리자는 화면이 잠긴 상태에서 시스템을 무인 상태로 둡니다.
악의적인 사용자는 실행 중인 동안 시스템을 훔칩니다.
악의적인 사용자는 USB 스틱을 삽입하고 시스템 배터리를 빠르게 제거한 후 다시 삽입합니다.
배터리를 다시 삽입하면 시스템이 부팅을 시작합니다.
ClearMemory 비트가 이전에 설정되었기 때문에 펌웨어는 플랫폼 제조업체에서 제공하지 않은 코드를 실행하기 전에 전체 시스템 메모리를 지웁니다.
USB 디바이스의 코드가 제대로 서명되지 않았더라도 악의적인 사용자는 부팅하는 동안 USB 디바이스로 부팅하도록 펌웨어를 구성합니다.
USB 디바이스의 코드는 시스템 메모리에서 BitLocker 볼륨 마스터 키를 검색하지만 찾을 수 없습니다.
경고
11~16단계는 이전 단계와 비슷하지만 ACPI 대신 UEFI 인터페이스를 사용합니다.
악의적인 사용자는 시스템을 정상적으로 부팅하려고 시도합니다.
TPM 키 보호기를 사용하여 BitLocker를 사용하도록 설정했기 때문에 BootMgr이 실행될 때 올바른 측정값이 TPM 2.0 디바이스에 있기 때문에 BootMgr에서 OS 볼륨의 볼륨 마스터 키를 "봉인 해제"할 수 있습니다.
부팅은 OS 로그온 화면으로 진행됩니다.
악의적인 사용자는 다시 제거한 다음 배터리를 다시 삽입하고 USB 디바이스에서 코드를 부팅합니다.
ClearMemory 비트가 설정되었으므로 시스템 펌웨어는 부팅 중에 전체 시스템 메모리를 지웁니다.
USB 디바이스의 코드가 시스템 메모리를 검사하더라도 OS 볼륨 암호화 키는 메모리에 없습니다.
3.3 TPM 2.0 디바이스에 명령 실행
이 예제는 모든 시스템 아키텍처에 적용되지 않습니다.
Windows TPM 2.0 드라이버는 TPM 2.0 디바이스에 명령을 실행하려고 합니다.
Windows TPM 2.0 드라이버는 Windows TPM 2.0 드라이버 초기화 중 이전에 ACPI 정의 제어 영역에서 읽은 실제 주소로 실행하는 명령을 작성합니다.
Windows TPM 2.0 드라이버는 ACPI 제어 메서드를 실행하여 TPM 2.0 명령을 실행합니다.
Windows TPM 2.0 드라이버는 TPM 명령이 완료되었음을 나타낼 때까지 제어 영역의 레지스터를 폴링합니다.
Windows TPM 드라이버는 Windows TPM 드라이버 초기화 중 이전에 ACPI 정의 제어 영역에서 읽은 실제 주소에서 명령 응답을 읽습니다.
4.0 TPM 2.0 시스템 및 디바이스에 대한 일반 ACPI 요구 사항
4.1 전원 고려 사항
ACPI D1/D2
TPM 2.0 디바이스는 ACPI D1 및/또는 ACPI D2를 지원할 수 있지만 D1 또는 D2에 있는 동안 전원 상태 ACPI D0에 있는 것처럼 동작해야 합니다.
ACPI S3(절전 모드)
TPM 2.0은 S3을 지원할 수 있지만 디바이스의 S3 저전력 상태에서 들어오고 나가는 경우 시스템/플랫폼 제조업체에서 제어해야 합니다.
OS(또는 OS 환경에서 실행되는 다른 소프트웨어)는 TPM 2.0 디바이스를 S3에 배치하거나 TPM 2.0 디바이스가 S3에서 종료되도록 설정할 수 없습니다. 예를 들어 TPM 2.0 디바이스가 버스에 있는 경우 OS는 버스의 전원을 끌 수 없어야 TPM 2.0 디바이스가 S3으로 진입할 수 없습니다.
Windows 8 TPM 드라이버는 S3(절전 모드)로 전환되기 전에 TPM2_Shutdown 명령을 실행하려고 시도합니다.
하드웨어 플랫폼에서 S3을 지원하고 시스템이 S3에 있는 동안 TPM이 상태를 유지하지 않는 경우, 플랫폼은 S3을 다시 시작하는 동안 필요한 TPM2_Init 및 TPM2_Startup(TPM_SU_STATE) 명령을 실행해야 합니다. OS가 S3에 진입하기 전에 TPM2_Shutdown 명령을 완료하지 않았을 수 있습니다. 이로 인해 TPM2_Startup(TPM_SU_STATE)의 반환 결과가 오류를 반환할 수 있습니다. S3에서 다시 시작하는 시스템 펌웨어는 TPM2_Startup 오류를 적절하게 처리해야 합니다. 예를 들어 하드웨어를 통해 TPM에 대한 액세스를 사용하지 않도록 설정하거나, TPM2_Startup(TPM_SU_CLEAR) 명령을 실행하고, 오류 다이제스트(0x01)가 있는 구분 기호를 PCR 0에서 7로 확장하고 NV 인덱스를 잠그는 등의 작업을 수행하여 디바이스를 안전하게 구성합니다.
시스템은 시스템이 잠금 간격(TPM_PT_LOCKOUT_INTERVAL)당 S3에 있었던 시간 동안 TPM 사전 공격 실패 횟수(TPM_PT_LOCKOUT_COUNTER)를 감소시켜 S3에 있는 동안 경과된 시간을 고려해야 합니다. 이를 위해서는 S3에 있는 동안 TPM 시계 및/또는 상태를 유지하기 위해 대기 전압을 제공하는 플랫폼 구현이 필요할 수 있으며, 또한 TPM이 사전 공격 논리에 대한 권한 부여 실패 횟수를 안정적으로 업데이트할 수 있도록 시스템이 저전력 상태인 동안 경과된 시간에 대한 정보를 안전하게 제공할 수 있습니다.
연결된 대기 시스템에 대한 저전력 상태
Windows 8은 연결된 대기 시스템의 저전력 상태에서 들어오고 나갈 때 TPM과 관련된 추가 작업을 수행하지 않습니다. 플랫폼은 시스템이 연결된 대기 시스템의 저전력 상태에서 들어오고 나갈 때마다 TPM이 D0에 있는 것처럼 동작하는 데 필요한 모든 작업을 수행해야 합니다. 이를 위해서는 TPM 클록에 전원을 공급하거나 상태를 유지하기 위해 대기 전압을 제공하는 플랫폼 구현이 필요할 수 있습니다. 또는 시스템이 TPM의 저전력 상태에 있는 동안 경과된 시간에 대한 정보를 플랫폼이 안전하게 제공해야 할 수 있으므로 TPM은 사전 공격 논리에 대한 권한 부여 실패 횟수를 안정적으로 업데이트할 수 있습니다.
시스템 끄기
시스템은 시스템이 잠금 간격(TPM_PT_LOCKOUT_INTERVAL)당 S5에 있었던 시간 동안 TPM 사전 공격 실패 횟수(TPM_PT_LOCKOUT_COUNTER)를 감소시켜 전체 종료 중에 경과된 시간을 안전하게 고려해야 합니다.
4.2 ACPI 표
TPM 2.0 디바이스가 있는 시스템은 아래에 설명된 대로 하드웨어 디바이스 ID 및 OS 공급업체 TPM2(특정 정적 표)가 있는 디바이스 개체 표를 제공해야 합니다.
TPM2 표 및 TPM 2.0 디바이스 개체는 플랫폼이 고객에게 배송되면 영구적으로 유지해야 합니다. (예: 펌웨어 옵션은 TPM2 표 또는 TPM 2.0 디바이스 개체의 숨기기를 허용하지 않아야 합니다.) 시스템이 TPM 2.0 기능 대신 TPM 1.2 기능을 제공하는 기본이 아닌 옵션과 함께 제공되는 경우는 예외입니다(예: Windows 7과 같은 이전 운영 체제와의 호환성을 위해). 이 경우 TPM2 표 및 TPM 2.0 디바이스 개체는 BIOS 구성 옵션 및 수행된 TPM 1.2의 열거형을 통해 제거될 수 있습니다. 참고: Windows 8용 연결 대기 시스템은 기본적으로 운영 체제에 TPM 2.0이 표시되어 제공되어야 합니다. 하드웨어 플랫폼에서 TPM 2.0과 TPM 1.2 간 전환에 대한 기술 참고 자료는 Microsoft에 문의하세요.
4.3 TPM 2.0 디바이스 개체 ACPI 표
4.3.1 버스 계층 구조
디바이스 개체 표는 ACPI 네임스페이스의 DSDT 표 아래에 있어야 하고, TPM 2.0 디바이스 개체는 "root\_SB"의 시스템 버스 아래에 있어야 합니다.
4.3.2 하드웨어 식별자
TPM 2.0 디바이스 개체에 대한 실제 플러그 앤 플레이 하드웨어 식별자(예: _HID)는 "MSFT0101"이거나 디바이스에 호환되는 "MSFT0101" ID가 있어야 하며 _HID는 공급업체에 따라 다를 수 있습니다.
4.3.3 리소스 설명자
ACPI TPM 2.0 디바이스 개체는 TPM 2.0 디바이스에서 사용하는 모든 리소스를 클레임해야 합니다.
4.3.4 제어 메서드
4.3.4.1 플랫폼 재설정 공격 완화
시스템은 UEFI에 대해 [TCG08]의 모든 ACPI 및 UEFI 관련 파트를 구현해야 합니다. 디바이스 개체는 [TCG08], 섹션 6에 정의된 제어 메서드 인터페이스를 구현해야 합니다. 플랫폼이 모든 부팅 시 메모리를 무조건 지워도 인터페이스는 필요합니다. 메모리 지우기는 TPM 2.0 디바이스 상태에서 조건부가 아니어야 합니다(반면 TPM 1.2가 소유되지 않은 경우 [TCG08]에서는 메모리를 지울 필요가 없음). 또한 [TCG08]의 섹션 3, 5를 구현해야 합니다. _DSM 쿼리 함수는 ACPI 사양에 따라 구현되어야 합니다(함수 인덱스 0). (참고: ACPI 4.0 사양에서 _DSM 메서드의 반환 값에 대한 오류가 있습니다. _DSM 메서드의 반환 값은 0x03을 포함하는 버퍼여야 합니다.) 구현은 순서가 정연한 OS 종료를 자동으로 검색하고 이러한 이벤트에서 ClearMemory 비트를 지워야 합니다.
TPM 2.0이 있는 UEFI 기반 Arm 시스템에 대한 특별 참고 사항: TPM 2.0이 있는 UEFI 기반 Arm 시스템에서 Windows 8은 모든 부팅 시 UEFI 인터페이스를 사용하여 메모리를 무조건 삭제할 것을 요청합니다. ACPI 인터페이스 구현은 여전히 필요하지만 ClearMemory 또는 DisableAutoDetect 플래그의 상태를 변경하지 않도록 인터페이스를 구현할 수 있습니다. (참고: Microsoft는 ACPI 인터페이스가 TCG 사양에 따라 구현되도록 권장하므로 ACPI 인터페이스를 호출하면 ClearMemory 또는 DisableAutoDetect의 상태가 변경됩니다.)
4.3.4.2 물리적 상태 인터페이스
시스템은 아래의 추가 참고 사항에 따라 [TCG11]에 정의된 사양을 구현해야 합니다.
TCG 사양에서 TPM의 사용은 TPM 2.0 디바이스와 동일해야 합니다.
섹션 2에 정의된 제어 메서드는 다음 제한 사항으로 구현되어야 합니다.
_DSM 쿼리 함수는 ACPI 사양에 따라 구현되어야 합니다(함수 인덱스 0). (참고: ACPI 4.0 사양에서 _DSM 메서드의 반환 값에 대한 오류가 있습니다. _DSM 메서드의 반환 값은 0x01FF를 포함하는 버퍼여야 합니다.)
구현은 "플랫폼별 작업을 가져와서 사전 OS 환경으로 전환"하기 위해 "2: 다시 부팅" 값을 반환해야 합니다. PPI 작업은 다시 시작 전환 및 종료 전환을 위해 발생해야 합니다.
다음 제어 방법의 구현은 선택 사항입니다. "TPM 작업 요청을 사전 OS 환경에 제출"("2: 일반적인 오류"를 반환할 수 있음) 및 "기본 사용자 언어 제출"("3: 구현되지 않음"을 반환할 수 있음).
섹션 3의 요구 사항은 다음 수정 버전으로 구현되어야 합니다.
인증하는 작업이 TPM 2.0 디바이스 상태와 관련이 없으므로 BIOS는 NoPPIProvision 플래그에 대한 영구 스토리지를 제공할 필요가 없습니다.
표 2는 다음과 같이 수정됩니다.
표 1: 수정된 PPI 표 2
작업 값
작업 이름
TPM 상태
BIOS TPM 관리 플래그
필수 및 선택 사항
물리적 상태 확인이 필요한 경우
추가 부팅 주기가 필요할 수 있음
0
작업 없음
M
1-4
작업 없음
M
5
TPM2_ClearControl(NO) +
TPM2_Clear
X
M
NoPPIClear가 FALSE임
X
6-11
작업 없음
M
12-13
작업 없음
O
14
TPM2_ClearControl(NO) +
TPM2_Clear
X
M
NoPPIClear가 FALSE임
X
15-16
작업 없음
M
17
SetNoPPIClear_False
X
O1
18
SetNoPPIClear_True
X
O1
항상
19-20
작업 없음
O2
21-22
TPM2_ClearControl(NO) +
TPM2_Clear
X
M
NoPPIClear가 FALSE임
X
23-127
예약됨
>=128
공급업체별
X
X
O
X
중요
SetNoPPIClear_False: BIOS가 "O1" 또는 "O2"로 표시된 항목을 구현하는 경우 해당 항목을 집합으로 구현해야 합니다. SetNoPPIClear_True뒤에 있는 작업 없음의 경우 BIOS가 작업 12를 구현하지 않으면 작업 19 및 20을 구현하지 않아야 합니다.
표 3은 다음과 같이 수정됩니다.
작업
값
작업
이름
작업을 수행하기 위해 BIOS 및 기타 BIOS 작업에서 보낸 TPM 명령
0
작업 없음
작업 없음
1-4, 6-13, 15-16, 19-20
작업 없음
작동하지 않습니다. 그러나 작업 번호를 기억해야 하며 OS에서 쿼리한 경우의 결과를 반환해야 합니다.
5, 14, 21, 22
지우기
TPM2_ClearControl(NO) +
TPM2_Clear
<PLATFORM RESET>* [*필요한 경우 TPM2_CLEAR에서 TPM 변경 내용을 유지합니다. Microsoft는 대부분의 시스템에서 불필요할 것으로 예상합니다.]
17
SetNoPPIClear_False
(명확히 하기 위해 물리적 상태가 필요합니다.)
이 작업은 TPM 상태를 변경하지 않습니다.
BIOS TPM 관리 플래그 NoPPIClear를 FALSE로 지웁니다.
18
SetNoPPIClear_True
(명확히 하기 위해 물리적 상태 확인이 필요하지 않습니다.)
이 작업은 TPM 상태를 변경하지 않습니다.
BIOS TPM 관리 플래그 NoPPIClear를 TRUE로 설정합니다.
23-127
예약됨
예약됨, 구현 안 함 또는 사용 안 함
>=128
공급업체별
공급업체별 작업에 매핑되는 TPM 명령
작업을 수행해야 하지만 실제 메커니즘이 키를 누를 필요가 없는 경우 물리적 상태 사용자로부터 확인을 받으려면 섹션 4의 개념을 유지해야 합니다. 동의를 확인하는 키 또는 기타 메커니즘은 플랫폼 제조업체에 따라 달라집니다.
Op
값
작업
이름
확인
텍스트
5, 14, 21, 22
지우기
이 컴퓨터의 TPM(신뢰할 수 있는 플랫폼 모듈)을 지우기 위해 구성 변경이 요청되었습니다.
경고: 지우면 TPM에 저장된 정보가 지워집니다. 생성된 모든 키가 손실되고 이러한 키로 암호화된 데이터에 액세스할 수 없게 됩니다.
<CAK>를 눌러 TPM 지우기
<RK>를 눌러 이 변경 요청을 거부 및 계속 진행
18
SetNoPPIClear_True
나중에 사용자 확인을 요청하지 않고 운영 체제에서 컴퓨터의 TPM(신뢰할 수 있는 플랫폼 모듈)을 지울 수 있도록 구성 변경이 요청되었습니다.
참고: 이 작업은 TPM을 지우지 않지만 이 구성 변경을 승인하면 나중에 TPM을 지우는 작업에 사용자 확인이 필요하지 않습니다.
경고: 지우면 TPM에 저장된 정보가 지워집니다. 생성된 모든 키가 손실되고 이러한 키로 암호화된 데이터에 액세스할 수 없게 됩니다.
<CAK>를 눌러 향후 운영 체제 요청 승인 및 TPM 지우기
<RK>를 눌러 이 변경 요청을 거부 및 계속 진행
섹션 5는 유익합니다.
연결된 대기 시스템은 NoPPIClear를 TRUE로 하드 코딩할 수 있으며 작업 17 및 18을 구현하지 않습니다. 즉, 물리적 상태 작업에 사용자 확인이 필요하지 않기 때문 물리적 상태 작업에 대한 확인 대화 상자를 구현할 필요가 없습니다.
펌웨어는 Windows 부팅 관리자와 같은 초기 프로그램 로더 코드에 컨트롤을 전달하는 경우 스토리지 및 보증 계층 구조를 사용하도록 설정해야 합니다.
4.3.4.3 선택적 ACPI 시작 메서드
참고: 일부 플랫폼에서는 OS가 TPM 2.0 명령 실행 또는 취소를 펌웨어에 요청할 수 있도록 이 선택적 ACPI 메서드를 구현할 수 있습니다. ACPI 시작 메서드의 사용은 정적 ACPI 표의 StartMethod 필드에 의해 결정됩니다(섹션 4.4 참조). 정적 ACPI 표의 StartMethod 필드가 이 메서드의 사용을 나타내는 경우 ACPI 시작 메서드를 구현해야 합니다. 여기에 정의된 ACPI 함수는 _DSM 제어 메서드 개체에 상주해야 합니다. [참고: TPM2 ACPI 표의 제어 메서드가 아닙니다.] 여기에 정의된 _DSM 메서드는 다음과 같이 구현되어야 합니다.
UUID |
수정 버전 |
Function |
설명 |
6bbf6cab-5463-4714-b7cd-f0203c0368d4 |
0 |
0 |
[ACPI09], 섹션 9.14.1에 설명된 대로 |
0 |
1 |
시작 |
함수 시작
입력 인수:
Arg0 (Buffer): UUID = 6bbf6cab-5463-4714-b7cd-f0203c0368d4
Arg1 (Integer): Revision ID = 0
Arg2 (Integer): Function Index = 1
Arg3 (Package): Arguments = Empty Package
반환 값:
형식: Integer
반환 값에 대한 설명:
0: 성공
1: 일반적인 오류
기능 동작:
이 함수는 TPM 2.0 디바이스 제어 영역에서 상태 레지스터를 검토하고 적절한 조치를 취하여 TPM 2.0 명령을 실행하거나 취소하도록 시스템에 지시합니다.
해당 함수는 비차단입니다. 호출이 즉시 반환됩니다. (ACPI 메서드 내에서 명령 실행을 수행하지 마세요. AML 호출은 짧아야 합니다.) 반환 값 0이 반환되면 제출된 명령이 수락되며, 취소 필드가 이미 설정된 경우 펌웨어에서 실행되거나 취소됩니다. 가능하면 시스템은 이 호출에서 일반적인 오류 대신 TPM 응답을 반환해야 합니다. 예를 들어 명령을 지금 처리할 수 없고 TPM2_RC_RETRY 응답 버퍼를 작성할 수 있으며 시작 필드는 CLEARed일 수 있습니다. 취소 필드가 설정되어 명령이 취소된 경우 이 메서드는 응답 버퍼에 TPM2_RC_Cancelled 반환 코드를 작성하고 시작 필드를 지우며 값 0을 반환할 수 있습니다. 또는 취소 필드가 설정된 경우 메서드는 0 값을 반환할 수 있으며, TPM 2.0 디바이스는 나중에 명령 취소 요구 사항에 따라 명령을 완료하거나 취소할 수 있습니다.
반환 값 1이 반환되면 펌웨어가 요청을 읽거나 작업할 수 없습니다. 반환 값 이외의 요청은 작업 없음과 동일합니다. 예를 들어 (a) 잘못된 OS 드라이버가 이전 명령이 완료되기 전에 추가 명령 실행을 요청하고, (b) 제어 영역이 실제 메모리에 없거나(아마도 메모리 손상으로 인해) (c) 명령 또는 응답 물리적 주소가 존재하지 않는 경우입니다. 반환 값이 1이면 다음 전체 시스템 부팅(최대 절전 모드/다시 시작 주기 제외)까지 Windows TPM 2.0 드라이버가 TPM 2.0 디바이스 사용을 중지할 수 있습니다.
참고: 명령 실행이 시작되면 OS가 현재 실행 중인 명령 취소를 선택하는 경우 이 메서드는 두 번째로 호출되지 않습니다. (그러나 취소 필드가 설정된 동안 제어 메서드를 명령에 대해 처음에 호출할 수 있습니다.)
4.4 TPM2 정적 ACPI 표
"RSDT" ACPI 표에 나열된 "TPM2"라는 ACPI 표는 플랫폼의 TPM 2.0 하드웨어 인터페이스를 설명합니다. Windows TPM 2.0 드라이버는 이 표를 사용하여 TPM 2.0 디바이스와 통신하는 방법을 결정합니다. 이 인터페이스를 지원하는 데 필요한 ACPI 표의 매개 변수가 아래 표에 나와 있습니다.
표 3: TPM2 ACPI 표 레이아웃
필드 |
바이트 길이 |
바이트 오프셋 |
Description |
||||||||||||||
헤더 |
|||||||||||||||||
서명 |
4 |
00h |
'TPM2'. TPM 2.0 디바이스 하드웨어 인터페이스 표에 대한 서명 |
||||||||||||||
길이 |
4 |
04h |
오프셋 0부터 시작하는 헤더를 포함한 표의 길이(바이트)입니다. 이 필드는 전체 표의 크기를 기록하는 데 사용됩니다. |
||||||||||||||
수정 버전 |
1 |
08h |
참조하는 데이터 및 구조 등 이 표의 수정 버전입니다. 이 변경된 구조체(예: 제어 영역)가 있는 경우 이 수정 버전을 변경해야 합니다. 값 03h. |
||||||||||||||
체크섬 |
1 |
09h |
체크섬 필드를 포함한 전체 표가 유효한 것으로 간주되려면 0에 추가해야 합니다. |
||||||||||||||
OEM ID |
6 |
0Ah |
ACPI 사양당 OEM ID입니다. OEM을 식별하는 OEM 제공 문자열입니다(칩셋 공급업체일 수 있음). |
||||||||||||||
OEM 표 ID |
8 |
10h |
OEM 표 ID는 제조업체 모델 ID입니다("OEM ID"로 식별되는 OEM에 의해 할당되며 칩셋 공급업체일 수 있음). |
||||||||||||||
OEM 수정 버전 |
4 |
18h |
지정된 OEM 표 ID에 대한 OEM 수정 버전입니다. ACPI당 "[an] OEM 제공 수정 번호입니다. 숫자가 많을수록 최신 수정 버전으로 간주됩니다." |
||||||||||||||
작성자 ID |
4 |
1Ch |
표를 만든 유틸리티의 공급업체 ID입니다. 정의 블록이 포함된 표의 경우 ASL 컴파일러의 ID입니다. |
||||||||||||||
작성자 수정 |
4 |
20h |
표를 만든 유틸리티의 수정 버전입니다. 정의 블록이 포함된 표의 경우 ASL 컴파일러의 수정 버전입니다. |
||||||||||||||
플래그 |
4 |
24h |
예약됨 은 항상 0이어야 합니다. |
||||||||||||||
제어 영역의 주소 |
8 |
28h |
제어 영역의 실제 주소입니다. TPM 2.0 디바이스 메모리 또는 부팅 중에 시스템에서 예약한 메모리에 있을 수 있습니다. TPM 2.0 드라이버는 최대 절전 모드 및 다시 시작 주기를 포함하여 부팅 주기 전반에 걸쳐 이 주소에 대한 지식을 유지합니다. 시스템에서 제어 영역을 사용하지 않는 경우 이 값은 모두 0이어야 합니다. |
||||||||||||||
Start 메서드 |
4 |
30h |
시작 메서드 선택기는 Windows TPM 2.0 드라이버가 TPM 2.0 명령을 디바이스에 전달하고 TPM 2.0 디바이스에 명령을 처리할 수 있음을 알리는 데 사용하는 메커니즘을 결정합니다. 이 필드에는 다음 값 중 하나가 포함될 수 있습니다.
|
||||||||||||||
플랫폼별 매개 변수 |
변수 |
34h |
플랫폼별 매개 변수의 콘텐츠는 이 시스템의 TPM 2.0 디바이스 인터페이스에서 사용하는 시작 메커니즘에 따라 결정됩니다. 이 필드에는 명령 처리를 시작하는 데 사용할 수 있는 값이 포함되어 있습니다. 이 정보는 공급업체별로 다를 수 있습니다. 시작 메서드 값이 2 또는 6인 경우, 필드는 사용되지 않고 바이트 길이는 0입니다. |
4.4.1 제어 영역 콘텐츠
제어 영역 구조에는 상태 필드뿐만 아니라 다른 컨트롤 비트/필드 및 하나 이상의 주소가 포함됩니다. 제어 영역에는 명령 버퍼의 물리적 주소와 응답 버퍼의 실제 주소가 포함됩니다.
모든 TPM 2.0 인터페이스 구현에서 제어 영역을 사용하는 것은 아닙니다. 예를 들어 시작 메서드 값 6은 제어 영역을 사용하지 않으며 이 섹션의 정보는 플랫폼에 적용되지 않습니다.
제어 영역은 ACPI AddressRangeReserved 메모리에 있어야 합니다.
제어 영역 구조는 아래 표에 표시되며, 지정하지 않으면 컨트롤 영역에 대한 모든 액세스가 리틀 엔디언 형식으로 수행됩니다.
표 4: 제어 영역 레이아웃
필드 |
바이트 길이 |
Offset |
Description |
상태 필드 |
TPM 2.0 상태 필드 |
||
예약됨 |
4 |
00h |
예약되어 있습니다. (0이어야 함) |
Error |
4 |
04h |
오류 조건을 나타내기 위해 TPM 2.0에 의해 설정됨 |
취소 |
4 |
08h |
드라이버에서 명령 처리를 중단하도록 설정 |
시작 |
4 |
0Ch |
명령을 처리할 수 있음을 나타내기 위해 드라이버에서 설정 |
인터럽트 제어 |
8 |
10h |
예약되어 있습니다. (0이어야 함) |
명령 크기 |
4 |
18h |
명령 버퍼의 크기 |
명령 |
8 |
1Ch |
이 필드에는 명령 버퍼의 실제 주소가 포함됩니다. 실제 명령 버퍼(명령 버퍼의 실제 주소가 아님)는 TCG에서 요구하는 대로 빅 엔디언 형식입니다. |
응답 크기 |
4 |
24h |
응답 버퍼의 크기 |
응답 |
8 |
28h |
이 필드에는 응답 버퍼의 실제 주소가 포함됩니다. 실제 응답 버퍼(응답 버퍼의 실제 주소가 아님)는 TCG에서 요구하는 대로 빅 엔디언 형식입니다. |
TPM 2.0 드라이버는 운영 체제를 초기화하는 동안 다음 정보를 한 번 읽습니다.
제어 영역의 물리적 주소
명령 버퍼의 크기
명령 버퍼의 물리적 위치
응답 버퍼의 크기
응답 버퍼의 물리적 위치
제어 영역(즉, 시작 메서드 값이 6이 아님)을 사용하고 최대 절전 모드 및 다시 시작을 지원하는 시스템의 경우 위의 5개 값은 최대 절전 모드 및 다시 시작 주기에서 일정하게 유지되어야 합니다.
4.4.1.1 오류
TPM 2.0 디바이스가 이 상태를 설정할 수 있습니다. 시작이 설정된 경우에만 이 상태를 작성할 수 있습니다. TPM 2.0 디바이스가 이 상태를 설정하면 바로 시작 값이 지워집니다. Windows TPM 2.0 드라이버는 시작 필드가 지워지지 않는 한, 오류 필드를 읽지 않습니다.
오류 필드의 설정 값은 TPM 2.0 디바이스 또는 해당 하드웨어 인터페이스의 일반 오류로 처리됩니다. 설정 값이 있으면 현재 명령이 취소됩니다. 명령을 롤백해야 하므로 TPM 2.0 디바이스는 일관된 상태로 유지됩니다.
ACPI 시작 메서드를 사용하는 디바이스의 경우 응답 코드를 제공할 수 없는 오류에 대해서만 이 필드를 사용해야 합니다. 예를 들어 응답 버퍼가 실제 메모리에 있지 않습니다. Windows TPM 2.0 드라이버는 이 필드가 설정된 경우 TPM 2.0 디바이스 사용을 중지할 수 있습니다.
ExitBootServices 이후의 이 필드의 초기 값은 디바이스 작동 여부를 반영해야 합니다.
4.4.1.2 취소
Windows TPM 2.0 드라이버는 현재 명령의 TPM 2.0 디바이스 처리 종료를 요청하도록 이 필드를 설정할 수 있습니다. Windows TPM 2.0 드라이버는 시작 메서드를 호출하여 취소 요청 처리를 시작하지 않습니다.
Windows TPM 2.0 드라이버에 의해 취소가 설정되고 TPM 2.0 디바이스가 명령을 처리하는 경우 TPM 2.0 디바이스는 가장 편리한 지점에서 현재 명령 처리를 중지합니다. 대부분의 명령에서는 TPM 2.0 디바이스가 명령을 완료하고 정상적인 응답을 제공할 것으로 예상됩니다. 장기 실행 명령(예: RSA 키 생성)의 경우 TPM 2.0 디바이스는 TPM_RC_CANCELLED와 함께 종료할 수 있습니다. TPM 2.0 디바이스는 90초 이내에 명령을 완료하거나 취소해야 합니다. (일반적으로 대부분의 TPM 2.0 명령은 500ms 미만으로 완료되어야 합니다. RSA 키 생성 명령은 시간이 오래 걸릴 수 있으며 명령 취소는 200ms 이내에 발생해야 합니다.)
Windows TPM 2.0 드라이버는 시작 필드가 지워지면 이 값을 지울 수 있습니다. ExitBootServices 이후의 이 필드의 초기 값은 지워져야 합니다.
4.4.1.3 시작
Windows TPM 2.0 드라이버는 새 명령이 명령 버퍼에 배치되었음을 나타내기 위해 이 상태를 설정할 수 있습니다. Windows TPM 2.0 드라이버는 시작 메서드를 호출하여 명령 처리를 시작할 수 있습니다. TPM 2.0 디바이스는 명령 처리를 완료하면 이 상태를 지웁니다.
Windows TPM 2.0 드라이버는 시작 메서드 호출에 실패하면 이 상태를 지울 수 있습니다.
ExitBootServices 이후의 이 필드의 초기 값은 지워져야 합니다.
4.4.1.4 명령
Windows TPM 2.0 드라이버가 실행할 명령을 작성하는 물리적 주소입니다. Windows TPM 2.0 드라이버는 "명령 크기"보다 큰 명령을 작성하지 않습니다.
Windows TPM 2.0 드라이버는 시작 필드가 지워지지 않는 한, 이 메모리 영역에 작성하지 않아야 합니다. 주소는 제어 영역에서 리틀 엔디언 형식으로 지정되지만 실제 명령 버퍼는 TCG에서 요구하는 대로 빅 엔디언 형식입니다.
4.4.1.5 응답
Windows TPM 2.0 드라이버가 명령 응답을 읽을 물리적 주소입니다. Windows TPM 2.0 드라이버는 "응답 크기"보다 큰 응답을 읽지 않습니다.
Windows TPM 2.0 드라이버는 시작 필드가 설정에서 지우기로 변경되고 오류가 지워진 경우에만 응답을 읽습니다. 주소는 제어 영역에서 리틀 엔디언 형식으로 지정되지만 실제 응답 버퍼는 TCG에서 요구하는 대로 빅 엔디언 형식입니다.
4.5 제어 영역 인터페이스 정의
제어 영역을 TPM 2.0 인터페이스로 사용하는 하드웨어 플랫폼의 경우 이 섹션 및 4.4 섹션의 정보는 하드웨어와의 TPM 2.0 드라이버 상호 작용에 대해 설명합니다. 제어 영역을 사용하는 시스템의 예는 TPM2 표에서 시작 메서드 값이 2인 시스템입니다.
4.5.1 상태 조합
표 5에서는 Windows TPM 2.0 드라이버가 변경한 예상 동작에 대해 설명합니다. 일부 조합만 허용됩니다. 허용되는 조합 및 변경 내용만 문서화됩니다. 다른 모든 조합은 유효하지 않습니다. Windows TPM 2.0 드라이버의 작업이 없는 필드 변경은 TPM 2.0 디바이스 또는 ACPI 시작 메서드가 필드를 변경한 것을 의미합니다.
'0'으로 표시된 상태는 이 필드가 지워졌음을 나타냅니다. '1'로 표시된 상태는 이 필드가 설정되었음을 나타냅니다. '?'로 표시된 상태는 이 필드의 값이 지우기 또는 설정일 수 있음을 나타냅니다. 상태 필드는 'ERR' - 오류, 'CCL' - 취소, 'STR' - 시작으로 축약됩니다. 필드는 Windows TPM 2.0 드라이버 또는 TPM 2.0 디바이스 인터페이스에서 작성할 수 있으며, 이는 작업 열에 자세히 설명되어 있습니다.
|--- |
현재 상태 |
---| |
|--- |
필드 작성 |
---| |
|--- |
다음 상태 |
---| |
TPM 2.0 디바이스 인터페이스에서 수행한 작업 |
|
# |
ERR |
CCL |
STR |
ERR |
CCL |
STR |
ERR |
CCL |
STR |
|
1 |
0 |
1 |
0 |
- |
0 |
- |
0 |
0 |
0 |
Windows TPM 2.0 드라이버는 다음 명령에 대한 제어 영역을 준비하기 위해 취소 값을 지웁니다. Windows TPM 2.0 드라이버는 시작이 지워진 경우에만 취소 값을 지울 수 있습니다. (TPM 2.0 디바이스는 취소 필드에 작성하지 않아야 합니다.) |
2 |
0 |
0 |
0 |
- |
- |
1 |
0 |
0 |
1 |
Windows TPM 2.0 드라이버는 명령 영역에 명령이 있음을 나타내기 위해 시작 값을 설정합니다. Windows TPM 2.0 드라이버는 ACPI 시작 메서드를 호출하여 명령 실행을 시작할 수 있습니다. ACPI 시작 메서드가 완료되면 TPM 2.0 디바이스는 명령을 완료하고 90초 이내에 시작 필드를 지워야 합니다. 시간 제한을 초과하면 Windows TPM 2.0 드라이버에서 TPM 2.0 디바이스가 중단된 것으로 가정할 수 있습니다. |
3 |
0 |
? |
1 |
- |
- |
0 |
0 |
? |
0 |
TPM 2.0 디바이스는 명령 처리를 완료하거나 명령을 취소할 때 시작 필드를 지웁니다. 명령이 취소된 경우 반환 코드 TPM_RC_CANCELLED가 있는 응답이 응답 버퍼에 배치되고 시작이 지워집니다. Windows TPM 2.0 드라이버는 시작 필드가 지워지는 동안 응답 버퍼를 읽을 수 있습니다. Windows TPM 2.0 드라이버는 시작 필드가 설정되는 동안 응답 버퍼를 읽지 않아야 합니다. |
4 |
0 |
0 |
1 |
- |
1 |
- |
0 |
1 |
1 |
Windows TPM 2.0 드라이버는 현재 명령을 취소할 TPM 2.0 디바이스를 나타내기 위해 취소를 설정합니다. 일반적으로 장기 실행 명령은 다음으로 편리한 지점에서 취소해야 합니다. 짧은 실행 명령이 완료될 수 있습니다. 특히 TPM 2.0 디바이스는 취소 필드가 설정된 후 90초 이내에 시작 필드를 지워야 합니다. (좋은 성능 목표는 90초가 아닌 200ms입니다.) 참고: 다른 스레드가 ACPI 시작 메서드를 호출하기 전에 OS 내의 한 스레드가 취소 필드를 설정할 수 있으므로 ACPI 시작 메서드가 호출될 때 취소 필드를 설정할 수 있습니다. |
5 |
0 |
? |
1 |
1 |
- |
- |
1 |
? |
1 |
TPM 2.0 디바이스는 디바이스의 오류 조건을 나타냅니다. TPM 2.0 디바이스의 상태는 명령 실행이 시작되지 않은 것처럼 표시됩니다. Windows TPM 2.0 드라이버는 이 값을 TPM 2.0 디바이스의 일반적인 오류로 처리하고 명령 처리를 취소합니다. |
6 |
1 |
? |
1 |
- |
- |
0 |
1 |
? |
0 |
TPM 2.0 디바이스는 오류 필드를 설정한 직후에 시작 필드를 지웁니다. Windows TPM 2.0 드라이버는 시작 필드가 지워지거나 명령 실행 또는 취소가 필요한 기간 내에 발생하지 않는 경우에만 오류 필드를 검사합니다. Windows TPM 2.0 드라이버는 오류 필드가 설정된 경우 TPM 2.0 디바이스 사용을 중지할 수 있습니다. |
4.5.2 ACPI 시작 메서드를 사용하는 경우의 상태 다이어그램
이 상태 다이어그램은 정보를 제공하는 용도로만 사용됩니다. 동작에 대한 규범적 설명은 이전 섹션의 텍스트입니다. 상태 전환이 누락되었거나 모호한 경우 위의 텍스트를 참조하세요.
그림 1: ACPI 시작 메서드를 사용하는 경우의 TPM 2.0 디바이스 상태
참고
(a) 여러 개의 동시 스레드가 제어 영역과 동시에 상호 작용할 수 있습니다. 예를 들어 한 스레드는 시작 필드를 설정한 후 시작 메서드를 실행하여 명령을 시작할 수 있습니다. 다른 스레드는 취소 필드를 병렬로 설정할 수 있습니다. 따라서 시작 필드를 설정한 후 시작 메서드를 실행하기 전에 취소 필드를 설정할 수 있습니다. (b) Windows TPM 2.0 드라이버는 표시된 것과 다르게 오류 조건에 반응할 수 있습니다. 예를 들어 시간 제한에 도달하면 오류 상태로 전환될 수 있습니다.
4.5.3 ACPI 메서드가 없는 상태 다이어그램
이 상태 다이어그램은 정보를 제공하는 용도로만 사용됩니다. 동작에 대한 규범적 설명은 이전 섹션의 텍스트입니다. 상태 전환이 누락되었거나 모호한 경우 위의 텍스트를 참조하세요.
그림 2: ACPI 시작 메서드가 없는 TPM 2.0 디바이스 상태
4.6 메모리 매핑 I/O 인터페이스
메모리 매핑 I/O 인터페이스를 사용하는 하드웨어 플랫폼의 경우 이 섹션 및 섹션 4.4의 정보는 하드웨어와의 TPM 2.0 드라이버 상호 작용에 대해 설명합니다. 메모리 매핑 I/O 인터페이스를 사용하는 시스템의 예는 TPM2 표에서 시작 메서드 값이 6인 시스템입니다.
4.6.1 TCG TPM 인터페이스 사양 요구 사항
시스템은 다음 섹션에 대한 [TCG12]의 TPM 1.2 하드웨어 인터페이스 요구 사항을 준수해야 합니다.
섹션 9.1: TPM 지역 수준
섹션 9.2: 지역 사용
섹션 9.3: 레지스터당 지역 사용량
섹션 10: TPM 레지스터 공간
섹션 11: 시스템 상호 작용 및 흐름
제외: 섹션 11.2.4 오류 모드 전체
섹션 11.2.5: 명령 기간, 규범 항목 2 제외
섹션 11.2.6: 시간 제한 제외
섹션 11.2.8: 자체 테스트 및 초기 플랫폼 초기화 제외
섹션 11.2.9: 입력 버퍼 크기 제외
섹션 11.2.10: 오류, 규범 항목 2c 및 3 제외
섹션 13: TPM 하드웨어 프로토콜
[TCG12]의 향후 초안 사양은 Microsoft에 문의하세요.
4.6.2 명령 취소 지원
Windows는 아래에 설명된 동작을 표시하여 메모리 매핑 I/O 인터페이스를 통해 TPM 2.0 명령의 취소를 허용하기 위해 TPM 2.0 디바이스가 필요합니다.
STS 레지스터의 이전에 사용하지 않은 비트 24는 쓰기 전용으로 정의되며, commandCancel이라고 합니다.
명령 실행 단계 중에 commandCancel에 '1'을 쓰면 현재 실행 중인 명령을 취소할 수 있으며, 응답이 반환되어야 합니다. 응답은 명령이 취소되었는지(TPM 2.0 상태 변경은 없지만 TPM_RC_CANCELLED 취소 응답 코드가 반환됨) 또는 완료되었는지를 나타냅니다(명령의 결과를 나타내는 일반 TPM 2.0 응답이 반환됨). TPM이 명령 실행 상태가 아닌 경우 commandCancel 레지스터에 작성하는 작업은 무시되어야 합니다.
4.6.3 추가 요구 사항
모든 TPM 명령은 최대 90초 이내에 완료되어야 합니다.
TPM 2.0 드라이버가 명령 취소를 요청하는 경우 90초 이내에 완료하거나 취소해야 합니다.
TIMEOUT_A = 1초, TIMEOUT_B = 2초, TIMEOUT_C = 1초, TIMEOUT_D = 1초의 시간 초과 값을 구현해야 합니다.
최소 입력 버퍼 크기는 0x500 이상이어야 합니다.
5.0 참조
[ACPI09] |
"고급 구성 및 전원 인터페이스 사양" 버전 4.0, 2009년 6월 16일. |
[TCG08] |
신뢰할 수 있는 컴퓨팅 그룹, "TCG 플랫폼 재설정 공격 완화 사양" 버전 1.0, 2008년 5월 15일. |
[TCG11] |
신뢰할 수 있는 컴퓨팅 그룹, "TCG 물리적 상태 인터페이스 사양" 버전 1.20, 2011년 2월 10일. |
[TCG12] |
신뢰할 수 있는 컴퓨팅 그룹, "PC 클라이언트 작업 그룹 PC 클라이언트별 TIS(TPM 인터페이스 사양) 버전 1.21, 수정 버전 1.00. |