개요
https://optee.readthedocs.io 문서를 구글 번역기 + 네이버번역기를 이용하여 번역하였습니다.
즉, 기계가 번역한 내용이므로 대략적인 내용은 확인가능합니다. 제대로 보시려면 원문을 보시길 권유드립니다.
글순서
- [OPTEE 문서번역] OPTEE GettingStarted
- [OPTEE 문서번역] OPTEE Architecture - 1 Core
- [OPTEE 문서번역] OPTEE Architecture - 2 Crypt
- [OPTEE 문서번역] OPTEE Architecture - 3 Device Tree
- [OPTEE 문서번역] OPTEE Architecture - 4 File structure
- [OPTEE 문서번역] OPTEE Architecture - 5 GlobalPlatform API
- [OPTEE 문서번역] OPTEE Architecture - 6 Libraries API
- [OPTEE 문서번역] OPTEE Architecture - 7 Porting Guide
- [OPTEE 문서번역] OPTEE Architecture - 8 Secure Boot
- [OPTEE 문서번역] OPTEE Architecture - 9 Secure storage
- [OPTEE 문서번역] OPTEE Architecture - 10 Trusted Applications
- [OPTEE 문서번역] OPTEE Architecture - 11 Virtualization
10. Trusted Applications
신뢰할 수있는 응용 프로그램 (TA), 의사 TA 및 사용자 모드 TA를 구현하는 데는 두 가지 방법이 있습니다. 사용자 모드 TA는 GlobalPlatform API TEE 사양에 지정된 모든 기능을 갖춘 신뢰할 수있는 응용 프로그램입니다. 이들은 "신뢰할 수있는 응용 프로그램"이라고 말하면 사람들이 말하는 것이며, 대부분의 경우 쓰기 및 쓰기에 선호되는 유형입니다.
10.1. Pseudo Trusted Applications
이들은 core/arch/arm/pta
와 같은 OP-TEE 코어 트리에 직접 구현되며 OP-TEE 코어 BLOB와 함께 구축되고 정적으로 내장됩니다.
OP-TEE에 포함 된 Pseudo Trusted Applications는 이미 "GlobalPlatform TA Client"API 뒤에 숨겨진 OP-TEE 보안 권한 서비스입니다. 이러한 의사 TA는 특정 보안 서비스 또는 내장 테스트 서비스와 같은 다양한 목적으로 사용됩니다.
의사 TA는 GlobalPlatform TEE 스펙에 지정된 GlobalPlatform 핵심 내부 API 지원의 혜택을받지 않습니다. 이러한 API는 TA에 연결될 정적 라이브러리 ("[libutee] (https://optee.readthedocs.io/architecture/libraries.html#libutee)")와 OP-TEE 핵심 서비스를 호출하는 TA로 제공됩니다 시스템 호출을 통해. OP-TEE 코어는 libutee와 연결되지 않으므로 Pseudo TAs는 OP-TEE 코어 내부 API 및 루틴 만 사용할 수 있습니다.
Pseudo TAs는 OP-TEE 코어 코드와 동일한 권한 실행 수준에서 실행되므로 유스 케이스에 따라 바람직하지 않을 수도 있습니다.
대부분의 경우 OP-TEE 코어에 직접 코드를 추가하는 대신 권한이없는 (사용자 모드) TA가 최선의 선택입니다. 그러나 애플리케이션이 OP-TEE 코어에서 직접 처리하는 것이 가장 좋다고 결정한 경우에는 core/arch/arm/pta/stats.c
을 템플릿으로보고이를 기반으로 Pseudo TA를 sub.mk
같은 디렉토리에 있습니다.
10.2. User Mode Trusted Applications
사용자 모드 신뢰할 수있는 응용 프로그램은 REE (Rich Execution Environment)에서 특정 응용 프로그램 UUID와 통신하려고 할 때 Secure World의 OP-TEE 코어에 의해로드 (메모리에 매핑)됩니다. 이들은 OP-TEE 코어 코드보다 낮은 CPU 권한 수준에서 실행됩니다. 이 점에서, 이들은 REE에서 실행되는 일반 응용 프로그램과 매우 유사하지만 Secure World에서 실행된다는 점만 다릅니다.
신뢰할 수있는 응용 프로그램은 GlobalPlatform TEE 사양에 지정된대로 GlobalPlatform TEE Internal Core API의 이점을 누립니다. 사용자 모드 TA는 여러 가지 유형으로 저장되는 방식에 따라 다릅니다.
10.3. TA locations
Plain TA (사용자 모드)는 여러 위치에 상주하여로드 할 수 있습니다. 현재 OP-TEE에서 지원되는 세 가지 방법이 있습니다.
10.3.1. Early TA
소위 early TA는 REE FS TA와 거의 동일하지만, Normal World 파일 시스템에서로드되는 대신 TEE 코어 BLOB의 특수 데이터 섹션에 연결됩니다. 그러므로 tee-supplicant
와 REE의 파일 시스템이 나오기 전에도 사용할 수 있습니다. early TA commit에서 자세한 내용을 찾아보십시오.
10.3.2. REE filesystem TA
T이 파일은 TA의 UUID와 접미사 .ta
를 사용하여 명명 된 일반 텍스트로 서명 된 [ELF] (https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) 파일로 구성됩니다. 이들은 빌드 될 때 동일한 빌드 시스템을 사용하고 원래 OP-TEE 코어 BLOB의 빌드에서 키로 서명되지만 OP-TEE 코어 부트 타임 BLOB와 별도로 빌드됩니다.
TAs는 서명 되었기 때문에 신뢰할 수없는 REE 파일 시스템에 저장 될 수 있으며 tee-supplicant
는 Secure World OP-TEE 코어가 검사하고로드하도록 전달합니다. 이 유형의 TA는 암호화되지 않습니다.
10.3.3. Secure Storage TA
이것들은 안전한 저장소에 저장됩니다. 메타 데이터는 설치된 모든 TA의 데이터베이스에 저장되며 실제 바이너리는 암호화되지 않은 상태로 저장되고 신뢰할 수없는 REE 파일 시스템 (플래시)의 별도 파일로 무결성 보호됩니다. 이러한 TA를 로드하기 전에 먼저 설치해야하며 초기 배포 중이나 나중 단계에서 수행 할 수 있습니다.
테스트를 위해 테스트 프로그램 xtest는 다음 명령을 사용하여 보안 저장소에 TA를 설치할 수 있습니다.
xtest --install-ta
10.4. TA Properties
이 절에서는 TA 속성에 대해 자세히 설명합니다 (Trusted Applications 참조).
10.4.1. GlobalPlatform Properties
표준 TA 속성은 user_ta_header_defines.h
매크로의 TA_FLAGS
매크로에서 속성 플래그를 통해 정의해야합니다.
10.4.1.1. Single Instance
"gpd.ta.singleInstance"
는 TA의 부울 속성입니다. 이 속성은 TA의 한 인스턴스를 만들어야하고 열려있는 모든 세션 요청을 받거나 들어오는 각 열린 세션 요청에 대해 새 TA 인스턴스를 만들어야하는지 여부를 정의합니다. OP-TEE TA 플래그TA_FLAG_SINGLE_INSTANCE
는 이 속성의 설정을 설정합니다. 부울 속성은TA_FLAGS
가 TA_FLAG_SINGLE_INSTANCE
비트를 설정하면 true
로 설정되고, 그렇지 않으면 부울 속성이false
로 설정됩니다.
10.4.1.2. Multi-session
"gpd.ta.multiSession"
은 TA의 부울 속성입니다. 이 속성은 TA 인스턴스가 여러 세션을 처리 할 수 있는지 여부를 정의합니다. 비활성화 된 경우 TA 인스턴스는 하나의 세션 만 지원합니다. 이 경우 TA에 이미 열린 세션이 있으면 열려있는 세션 요청이 사용 중 오류 상태와 함께 반환됩니다.
Note TA가 SingleInstance TA가 아니면이 속성은 의미가 없습니다.
OP-TEE TA 플래그 TA_FLAG_MULTI_SESSION
은 이 속성의 구성으로 설정됩니다. 부울 속성은TA_FLAGS
가TA_FLAG_MULTI_SESSION
비트를 설정하면 true
로 설정되고, 그렇지 않으면 부울 속성이 false
로 설정됩니다.
10.4.1.3. Keep Alive
`gpd.ta.instanceKeepAlive "
는 TA의 부울 속성입니다. 이 속성은 TA쪽으로 열린 모든 세션이 닫힐 때 생성 된 TA 인스턴스를 파괴해야하는지 여부를 정의합니다. 이 속성을 사용하면 TEE 자체가 다시 시작되지 않으면 (부팅 / 재부팅) TA 인스턴스가 일단 만들어지면 (첫 번째 열린 세션 요청시) 제거되지 않습니다.
Note TA가 SingleInstance TA가 아니면이 속성은 의미가 없습니다.
OP-TEE TA 플래그TA_FLAG_INSTANCE_KEEP_ALIVE
는이 속성의 설정을 설정합니다. boolean 속성은TA_FLAGS
가TA_FLAG_INSTANCE_KEEP_ALIVE
비트를 설정하면true
로 설정되고, 그렇지 않으면 boolean
속성이 false
로 설정됩니다.
10.4.1.4. Heap Size
gpd.ta.dataSize
는 TA의 32 비트 정수 속성입니다. 이 속성은 TEE_Malloc ()
과 친구들이 메모리를 할당하는 TA 할당 풀의 크기를 바이트 단위로 정의합니다. 속성의 값은 user_ta_header_defines.h
매크로의 TA_DATA_SIZE
매크로에 의해 정의되어야합니다 (TA Properties 참고).
10.4.1.5. Stack Size
gpd.ta.stackSize
는 TA의 32 비트 정수 속성입니다. 이 속성은 TA 실행에 사용되는 스택의 크기 (바이트)를 정의합니다. 속성의 값은user_ta_header_defines.h
매크로TA_STACK_SIZE
에 의해 정의되어야합니다. (see TA Properties).
10.4.2. Property Extensions
10.4.2.1. Secure Data Path Flag
TA_FLAG_SECURE_DATA_PATH
는TA_FLAGS
에 의해 지원되는 비트 플래그입니다. 이 속성 플래그는 TA 용 OP-TEE OS의 보안 데이터 지원을 요구합니다. 안전한 데이터 경로 지원을 위해서는 OP-TEE OS를 참조하십시오. TA_FLAGS 값에TA_FLAG_SECURE_DATA_PATH
를 설정하지 않은 TA는 보안 데이터 경로 버퍼와 관련된 메모리 참조 호출 매개 변수를 처리 할 수 없습니다.
10.4.2.2. Cache maintenance Flag
TA_FLAG_CACHE_MAINTENANCE
는 TA_FLAGS
에 의해 지원되는 비트 플래그입니다. 이 속성 플래그를 사용하면 Trusted Appliation이 Cache Maintenance Support 에 설명 된 내부 핵심 API의 캐시 유지 관리 API 확장을 사용할 수 있습니다. TA_FLAGS의 값에TA_FLAG_CACHE_MAINTENANCE
를 설정하지 않은 TA는 캐시 유지 API를 호출 할 수 없습니다.
10.4.2.3. Deprecated Property Flags
이전 버전의 OP-TEE는 현재 OP-TEE에서 더 이상 사용되지 않고 의미가없는 확장 속성 플래그를 정의하는 데 사용되었습니다. 이것들은TA_FLAG_USER_MODE
,TA_FLAG_EXEC_DDR
,TA_FLAG_REMAP_SUPPORT
입니다.