Web3 생태계의 신뢰 실행 환경(TEE): 심층 분석
1. TEE 기술 개요
정의 및 아키텍처: **신뢰 실행 환경(Trusted Execution Environment, TEE)**은 프로세서의 보안 영역으로, 내부에 로드된 코드와 데이터의 기밀성과 무결성을 보호합니다. 실제적으로 TEE는 CPU 내의 격리된 "엔클레이브(enclave)" 역할을 합니다. 이는 민감한 연산이 시스템의 나머지 부분으로부터 보호된 채 실행될 수 있는 일종의 블랙박스입니다. TEE 엔클레이브 내에서 실행되는 코드는 손상된 운영 체제나 하이퍼바이저조차도 엔클레이브의 데이터나 코드를 읽거나 조작할 수 없도록 보호됩니다. TEE가 제공하는 주요 보안 속성은 다음과 같습니다.
- 격리(Isolation): 엔클레이브의 메모리는 다른 프로세스 및 OS 커널로부터 격리됩니다. 공격자가 시스템에서 전체 관리자 권한을 획득하더라도 엔클레이브 메모리를 직접 검사하거나 수정할 수 없습니다.
- 무결성(Integrity): 하드웨어는 TEE에서 실행되는 코드가 외부 공격에 의해 변경될 수 없도록 보장합니다. 엔클레이브 코드나 런타임 상태에 대한 모든 조작은 감지되어 손상된 결과를 방지합니다.
- 기밀성(Confidentiality): 엔클레이브 내부의 데이터는 메모리에서 암호화된 상태로 유지되며 CPU 내에서 사용될 때만 해독되므로, 비밀 데이터가 외부 세계에 일반 텍스트로 노출되지 않습니다.
- 원격 증명(Remote Attestation): TEE는 원격 당사자에게 자신이 정품이며 특정 신뢰할 수 있는 코드가 내부에 실행 중임을 확신시키는 암호화 증명(증명서)을 생성할 수 있습니다. 이는 사용자가 비밀 데이터를 제공하기 전에 엔클레이브가 신뢰할 수 있는 상태(예: 정품 하드웨어에서 예상 코드를 실행 중)인지 확인할 수 있음을 의미합니다.
스마트 계약 실행을 위한 보안 엔클레이브 "블랙박스"로서의 신뢰 실행 환경 개념도. 암호화된 입력(데이터 및 계약 코드)은 보안 엔클레이브 내부에서 해독 및 처리되며, 암호화된 결과만 엔클레이브를 떠납니다. 이는 민감한 계약 데이터가 TEE 외부의 모든 사람에게 기밀로 유지되도록 보장합니다.
내부적으로 TEE는 CPU의 하드웨어 기반 메모리 암호화 및 접근 제어를 통해 활성화됩니다. 예를 들어, TEE 엔클레이브가 생성될 때 CPU는 보호된 메모리 영역을 할당하고 전용 키(하드웨어에 내장되거나 보안 보조 프로세서에 의해 관리됨)를 사용하여 데이터를 즉시 암호화/해독합니다. 외부 소프트웨어가 엔클레이브 메모리를 읽으려는 모든 시도는 암호화된 바이트만 얻게 됩니다. 이 독특한 CPU 수준의 보호는 사용자 수준 코드조차도 권한 있는 악성 코드나 악의적인 시스템 관리자가 염탐하거나 수정할 수 없는 개인 메모리 영역(엔클레이브)을 정의할 수 있게 합니다. 본질적으로 TEE는 일반적인 운영 환경보다 애플리케이션에 더 높은 수준의 보안을 제공하면서도 전용 보안 요소나 하드웨어 보안 모듈보다 더 유연합니다.
주요 하드웨어 구현: 여러 하드웨어 TEE 기술이 존재하며, 각각 다른 아키텍처를 가지고 있지만 시스템 내에 보안 엔클레이브를 생성한다는 비슷한 목표를 공유합니다.
-
인텔 SGX (Software Guard Extensions): 인텔 SGX는 가장 널리 사용되는 TEE 구현 중 하나입니다. 애플리케이션이 프로세스 수준에서 엔클레이브를 생성할 수 있게 하며, 메모리 암호 화 및 접근 제어는 CPU에 의해 강제됩니다. 개발자는 코드를 "신뢰할 수 있는" 코드(엔클레이브 내부)와 "신뢰할 수 없는" 코드(일반 세계)로 분할하고, 특수 명령어(ECALL/OCALL)를 사용하여 엔클레이브 안팎으로 데이터를 전송해야 합니다. SGX는 엔클레이브에 대한 강력한 격리를 제공하며 인텔의 증명 서비스(IAS)를 통해 원격 증명을 지원합니다. 시크릿 네트워크(Secret Network)와 오아시스 네트워크(Oasis Network)와 같은 많은 블록체인 프로젝트는 SGX 엔클레이브를 기반으로 개인정보 보호 스마트 계약 기능을 구축했습니다. 그러나 복잡한 x86 아키텍처에서의 SGX 설계는 일부 취약점을 낳았으며(§4 참조), 인텔의 증명은 중앙 집중식 신뢰 의존성을 도입합니다.
-
ARM TrustZone: TrustZone은 프로세서의 전체 실행 환경을 **보안 세계(Secure World)**와 **일반 세계(Normal World)**라는 두 개의 세계로 나누는 다른 접근 방식을 취합니다. 민감한 코드는 특정 보호된 메모리 및 주변 장치에 접근할 수 있는 보안 세계에서 실행되며, 일반 세계는 일반 OS와 애플리케이션을 실행합니다. 세계 간의 전환은 CPU에 의해 제어됩니다. TrustZone은 모바일 및 IoT 장치에서 보안 UI, 결제 처리 또는 디지털 권리 관리와 같은 용도로 일반적으로 사용됩니다. 블록체인 맥락에서 TrustZone은 개인 키나 민감한 로직이 휴대폰의 보안 엔클레이브에서 실행되도록 허용함으로써 모바일 우선 Web3 애플리케이션을 가능하게 할 수 있습니다. 그러나 TrustZone 엔클레이브는 일반적으로 더 큰 단위(OS 또는 VM 수준)이며 현재 Web3 프로젝트에서는 SGX만큼 널리 채택되지 않았습니다.
-
AMD SEV (Secure Encrypted Virtualization): AMD의 SEV 기술은 가상화 환경을 대상으로 합니다. 애플리케이션 수준의 엔클레이브를 요구하는 대신, SEV는 전체 가상 머신의 메모리를 암호화할 수 있습니다. 내장된 보안 프로세서를 사용하여 암호화 키를 관리하고 메모리 암호화를 수행하여 VM의 메모리가 호스팅 하이퍼바이저에게도 기밀로 유지되도록 합니다. 이로 인해 SEV는 클라우드 또는 서버 사용 사례에 매우 적합합니다. 예를 들어, 블록체인 노드나 오프체인 워커는 완전히 암호화된 VM 내에서 실행되어 악의적인 클라우드 제공업체로부터 데이터를 보호할 수 있습니다. SEV의 설계는 개발자가 코드를 분할하는 노력을 줄여줍니다(기존 애플리케E이션이나 전체 OS를 보호된 VM에서 실행할 수 있음). SEV-SNP와 같은 최신 버전은 변조 감지와 같은 기능을 추가하고 VM 소유자가 중앙 집중식 서비스에 의존하지 않고 VM을 증명할 수 있도록 합니다. SEV는 클라우드 기반 블록체인 인프라에서 TEE 사용에 매우 관련이 있습니다.
기타 신흥 또는 틈새 TEE 구현으로는 인텔 TDX (Trust Domain Extensions, 최신 인텔 칩에서 VM에 엔클레이브와 유사한 보호 제공), **키스톤(Keystone, RISC-V)**과 같은 오픈 소스 TEE, 그리고 모바일의 보안 엔클레이브 칩(예: 애플의 Secure Enclave, 임의 코드 실행에는 일반적으로 개방되지 않음)이 있습니다. 각 TEE는 고유한 개발 모델과 신뢰 가정을 가지고 있지만, 모두 하드웨어 격리 보안 실행이라는 핵심 아이디어를 공유합니다.
2. Web3에서의 TEE 애플리케이션
신뢰 실행 환경은 Web3의 가장 어려운 과제 중 일부를 해결하는 강력한 도구가 되었습니다. 안전하고 개인적인 연산 계층을 제공함으로써 TEE는 개인정보보호, 확장성, 오라클 보안 및 무결성 분야에서 블록체인 애플리케이션에 새로운 가능성을 열어줍니다. 아래에서는 주요 애플리케이션 영역을 탐색합니다.
개인정보 보호 스마트 계약
Web3에서 TEE의 가장 두드러진 용도 중 하나는 기밀 스마트 계약을 가능하게 하는 것입니다. 이는 블록체인에서 실행되지만 개인 데이터를 안전하게 처리할 수 있는 프로그램입니다. 이더리움과 같은 블록체인은 기본적으로 투명합니다. 모든 트랜잭션 데이터와 계약 상태는 공개됩니다. 이러한 투명성은 기밀성이 요구되는 사용 사례(예: 비공개 금융 거래, 비밀 투표, 개인 데이터 처리)에 문제가 됩니다. TEE는 블록체인에 연결된 개인정보 보호 컴퓨팅 엔클레이브 역할을 하여 해결책을 제공합니다.
TEE 기반 스마트 계약 시스템에서는 트랜잭션 입력이 검증인 또는 워커 노드의 보안 엔클레이브로 전송되어 외부 세계에 암호화된 상태로 처리된 후, 엔클레이브가 암호화되거나 해시된 결과를 체인에 다시 출력할 수 있습니다. 해독 키를 가진 승인된 당사자(또는 계약 로직 자체)만이 일반 텍스트 결과에 접근할 수 있습니다. 예를 들어, **시크릿 네트워크(Secret Network)**는 컨센서스 노드에서 인텔 SGX를 사 용하여 암호화된 입력에 대해 CosmWasm 스마트 계약을 실행하므로, 계정 잔액, 트랜잭션 금액 또는 계약 상태와 같은 것들이 계산에 사용될 수 있으면서도 공개적으로 숨겨질 수 있습니다. 이는 비밀 DeFi 애플리케이션을 가능하게 했습니다. 예를 들어, 금액이 기밀인 비공개 토큰 스왑이나 입찰이 암호화되어 경매 종료 후에만 공개되는 비밀 경매가 있습니다. 또 다른 예는 오아시스 네트워크의 **파슬(Parcel)**과 기밀 파라타임(ParaTime)으로, 데이터가 토큰화되어 기밀성 제약 하에 스마트 계약에서 사용될 수 있게 하여, 개인정보보호 규정을 준수하며 블록체인에서 신용 점수 평가나 의료 데이터와 같은 사용 사례를 가능하게 합니다.
TEE를 통한 개인정보 보호 스마트 계약은 기업 및 기관의 블록체인 채택에 매력적입니다. 조직은 민감한 비즈니스 로직과 데이터를 기밀로 유지하면서 스마트 계약을 활용할 수 있습니다. 예를 들어, 은행은 TEE 지원 계약을 사용하여 고객 데이터를 온체인에 노출하지 않고 대출 신청이나 거래 결제를 처리하면서도 블록체인 검증의 투명성과 무결성의 이점을 누릴 수 있습니다. 이 기능은 GDPR이나 HIPAA와 같은 규제적 개인정보보호 요구 사항을 직접적으로 해결하여, 의료, 금융 및 기타 민감한 산업에서 블록체인을 규정 준수 하에 사용할 수 있게 합니다. 실제로, TEE는 데이터 보호법 준수를 용이하게 합니다. 개인 데이터가 엔클레이브 내에서 처리되고 암호화된 출력만 남겨지도록 보장함으로써, 규제 당국이 데이터가 보호되고 있음을 만족시킬 수 있습니다.
기밀성 외에도 TEE는 스마트 계약의 _공정성_을 강화하는 데 도움이 됩니다. 예를 들어, 탈중앙화 거래소는 채굴자나 검증 인이 보류 중인 주문을 보고 부당하게 선행 매매하는 것을 방지하기 위해 매칭 엔진을 TEE 내에서 실행할 수 있습니다. 요약하자면, TEE는 Web3에 절실히 필요한 개인정보보호 계층을 제공하여, 기밀 DeFi, 비공개 투표/거버넌스, 그리고 이전에는 공개 원장에서 불가능했던 기업 계약과 같은 애플리케이션을 가능하게 합니다.
확장성 및 오프체인 연산
TEE의 또 다른 중요한 역할은 무거운 연산을 오프체인의 안전한 환경으로 오프로드하여 블록체인 확장성을 개선하는 것입니다. 블록체인은 성능 한계와 온체인 실행 비용 때문에 복잡하거나 계산 집약적인 작업에 어려움을 겪습니다. TEE 지원 오프체인 연산은 이러한 작업이 메인 체인 외부에서 수행되도록 하여(따라서 블록 가스를 소비하거나 온체인 처리량을 늦추지 않음) 결과의 정확성에 대한 신뢰 보증을 유지할 수 있게 합니다. 사실상, TEE는 Web3를 위한 검증 가능한 오프체인 컴퓨팅 가속기 역할을 할 수 있습니다.
예를 들어, 아이젝(iExec) 플랫폼은 TEE를 사용하여 개발자가 오프체인에서 연산을 실행하고 블록체인에서 신뢰할 수 있는 결과를 얻을 수 있는 탈중앙화 클라우드 컴퓨팅 마켓플레이스를 만듭니다. dApp은 아이젝 워커 노드에 의해 수행될 연산(예: 복잡한 AI 모델 추론 또는 빅데이터 분석)을 요청할 수 있습니다. 이 워커 노드들은 SGX 엔클레이브 내에서 작업을 실행하여, 올바른 코드가 정품 엔클레 이브에서 실행되었다는 증명과 함께 결과를 생성합니다. 결과는 온체인으로 반환되며, 스마트 계약은 출력을 수락하기 전에 엔클레이브의 증명을 확인할 수 있습니다. 이 아키텍처는 신뢰를 희생하지 않고 무거운 워크로드를 오프체인에서 처리할 수 있게 하여 효과적으로 처리량을 높입니다. **아이젝 오케스트레이터(iExec Orchestrator)**와 체인링크의 통합이 이를 보여줍니다. 체인링크 오라클이 외부 데이터를 가져온 다음, 아이젝의 TEE 워커에게 복잡한 연산(예: 데이터 집계 또는 점수 매기기)을 넘겨주고, 마지막으로 안전한 결과가 온체인으로 전달됩니다. 사용 사례로는 아이젝이 시연한 탈중앙화 보험 계산과 같은 것들이 있으며, 많은 데이터 처리를 오프체인에서 저렴하게 수행하고 최종 결과만 블록체인에 올릴 수 있습니다.
TEE 기반 오프체인 연산은 일부 레이어 2 확장 솔루션의 기반이 되기도 합니다. 오아시스 랩스의 초기 프로토타입 에키덴(Ekiden)(오아시스 네트워크의 전신)은 SGX 엔클레이브를 사용하여 트랜잭션 실행을 오프체인에서 병렬로 실행한 다음, 상태 루트만 메인 체인에 커밋하여, 사실상 롤업 아이디어와 유사하지만 하드웨어 신뢰를 사용했습니다. TEE에서 계약 실행을 수행함으로써, 그들은 엔클레이브에 의존하여 보안을 유지하면서 높은 처리량을 달성했습니다. 또 다른 예는 **샌더스 네트워크(Sanders Network)**의 곧 출시될 Op-Succinct L2로, TEE와 zkSNARK를 결합합니다. TEE는 트랜잭션을 비공개로 신속하게 실행하고, 그 실행의 정확성을 이더리움에 증명하기 위해 zk-증명이 생성됩니다. 이 하이브리드 접근 방식은 확장 가능하고 개인적인 L2 솔루션을 위해 TEE의 속도와 ZK의 검증 가 능성을 활용합니다.
일반적으로 TEE는 거의 네이티브 성능의 연산을 실행할 수 있으므로(격리된 상태에서 실제 CPU 명령어를 사용하기 때문에), 동형 암호나 영지식 증명과 같은 순수 암호화 대안보다 복잡한 로직에 대해 수십 배 빠릅니다. 작업을 엔클레이브로 오프로드함으로써 블록체인은 온체인에서 비실용적이었을 더 복잡한 애플리케이션(기계 학습, 이미지/오디오 처리, 대규모 분석 등)을 처리할 수 있습니다. 결과는 증명과 함께 반환되며, 온체인 계약이나 사용자는 이를 신뢰할 수 있는 엔클레이브에서 비롯된 것으로 확인하여 데이터 무결성과 정확성을 보존할 수 있습니다. 이 모델은 종종 **"검증 가능한 오프체인 연산"**이라고 불리며, TEE는 인텔, 아이젝 등이 개발한 하이퍼레저 아발론의 신뢰 컴퓨팅 프레임워크와 같이 많은 설계의 초석이 됩니다. 이 프레임워크는 TEE를 사용하여 EVM 바이트코드를 오프체인에서 실행하고 정확성 증명을 온체인에 게시합니다.
보안 오라클 및 데이터 무결성
오라클은 블록체인을 실제 세계 데이터와 연결하지만, 신뢰 문제를 야기합니다. 스마트 계약이 오프체인 데이터 피드가 정확하고 조작되지 않았다고 어떻게 신뢰할 수 있을까요? TEE는 오라클 노드를 위한 안전한 샌드박스 역할을 하여 해결책을 제공합니다. TEE 기반 오라클 노드는 외부 소스(API, 웹 서비스)에서 데이터를 가져와 노드 운 영자나 노드의 악성 코드에 의해 데이터가 조작되지 않았음을 보장하는 엔클레이브 내에서 처리할 수 있습니다. 그런 다음 엔클레이브는 제공하는 데이터의 진실성을 서명하거나 증명할 수 있습니다. 이는 오라클 데이터 무결성과 신뢰성을 크게 향상시킵니다. 오라클 운영자가 악의적이더라도, 그들은 블록체인이 감지할 엔클레이브의 증명을 깨뜨리지 않고는 데이터를 변경할 수 없습니다.
주목할 만한 예는 코넬에서 개발된 오라클 시스템인 **타운 크라이어(Town Crier)**로, 인텔 SGX 엔클레이브를 사용하여 이더리움 계약에 인증된 데이터를 제공한 최초의 시스템 중 하나였습니다. 타운 크라이어는 SGX 엔클레이브 내에서 데이터(예: HTTPS 웹사이트에서)를 검색하고, 데이터가 소스에서 직접 왔으며 위조되지 않았다는 증거(엔클레이브 서명)와 함께 계약에 전달했습니다. 체인링크는 이 가치를 인식하고 2018년에 타운 크라이어를 인수하여 TEE 기반 오라클을 탈중앙화 네트워크에 통합했습니다. 오늘날 체인링크 및 기타 오라클 제공업체는 TEE 이니셔티브를 가지고 있습니다. 예를 들어, 체인링크의 DECO 및 _공정 시퀀싱 서비스(Fair Sequencing Services)_는 데이터 기밀성과 공정한 순서를 보장하기 위해 TEE를 포함합니다. 한 분석에서 언급했듯이, "TEE는 데이터 처리를 위한 변조 방지 환경을 제공함으로써 오라클 보안을 혁신했습니다... 노드 운영자 자신조차도 데이터가 처리되는 동안 조작할 수 없습니다". 이는 고가치 금융 데이터 피드(DeFi용 가격 오라클 등)에 특히 중요합니다. TEE는 큰 익스플로잇으로 이어질 수 있는 미묘한 조작조차도 방지할 수 있습니다.
TEE는 또한 오라클이 블록체인에 일반 텍 스트로 게시할 수 없었던 민감하거나 독점적인 데이터를 처리할 수 있게 합니다. 예를 들어, 오라클 네트워크는 엔클레이브를 사용하여 비공개 데이터(기밀 주식 주문서나 개인 건강 데이터 등)를 집계하고, 원시 민감한 입력을 노출하지 않고 파생된 결과나 검증된 증명만을 블록체인에 제공할 수 있습니다. 이런 식으로 TEE는 스마트 계약에 안전하게 통합될 수 있는 데이터의 범위를 넓혀, _실물 자산(RWA) 토큰화, 신용 점수 평가, 보험 및 기타 데이터 집약적인 온체인 서비스_에 매우 중요합니다.
크로스체인 브리지에 관해서도 TEE는 유사하게 무결성을 향상시킵니다. 브리지는 종종 자산을 보관하고 체인 간 전송을 검증하기 위해 일련의 검증인이나 다중 서명에 의존하므로, 공격의 주요 대상이 됩니다. 브리지 검증인 로직을 TEE 내에서 실행함으로써, 브리지의 개인 키와 검증 프로세스를 조작으로부터 보호할 수 있습니다. 검증인의 OS가 손상되더라도 공격자는 엔클레이브 내부에서 개인 키를 추출하거나 메시지를 위조할 수 없습니다. TEE는 브리지 트랜잭션이 프로토콜 규칙에 따라 정확하게 처리되도록 강제하여, 사람 운영자나 악성 코드가 사기성 전송을 주입할 위험을 줄입니다. 또한 TEE는 아토믹 스왑과 크로스체인 트랜잭션이 양쪽을 완료하거나 깨끗하게 중단하는 보안 엔클레이브에서 처리되도록 하여, 간섭으로 인해 자금이 묶이는 시나리오를 방지할 수 있습니다. 여러 브리지 프로젝트와 컨소시엄은 최근 몇 년간 발생한 브리지 해킹의 재앙을 완화하기 위해 TEE 기반 보안을 탐색해 왔습니다.
데이터 무결성 및 오프체인 검증 가능성
위의 모든 시나리오에서 반복되는 주제는 TEE가 블록체인 외부에서도 _데이터 무결성_을 유지하는 데 도움이 된다는 것입니다. TEE는 어떤 코드를 실행하고 있는지 증명할 수 있고(증명을 통해) 코드가 간섭 없이 실행되도록 보장할 수 있기 때문에, 일종의 검증 가능한 컴퓨팅을 제공합니다. 사용자와 스마트 계약은 증명이 확인되는 한, TEE에서 나오는 결과를 마치 온체인에서 계산된 것처럼 신뢰할 수 있습니다. 이 무결성 보증은 TEE가 때때로 오프체인 데이터 및 연산에 "신뢰 앵커"를 제공한다고 불리는 이유입니다.
그러나 이 신뢰 모델은 일부 가정을 하드웨어로 옮긴다는 점을 주목할 가치가 있습니다(§4 참조). 데이터 무결성은 TEE의 보안만큼만 강력합니다. 엔클레이브가 손상되거나 증명이 위조되면 무결성이 실패할 수 있습니다. 그럼에도 불구하고, 실제로 TEE는 (최신 상태로 유지될 때) 특정 공격을 상당히 어렵게 만듭니다. 예를 들어, DeFi 대출 플랫폼은 TEE를 사용하여 사용자의 개인 데이터로부터 오프체인에서 신용 점수를 계산할 수 있으며, 스마트 계약은 유효한 엔클레이브 증명이 동반될 경우에만 점수를 수락합니다. 이런 식으로 계약은 점수가 사용자나 오라클을 맹목적으로 신뢰하는 대신, 승인된 알고리즘에 의해 실제 데이터로 계산되었음을 알 수 있습니다.
TEE는 또한 신흥 탈중앙화 신원증명(DID) 및 인증 시스템에서 역할을 합니다. 사용자의 민감한 정보가 블록체인이나 dApp 제공업체에 노출되지 않도록 개인 키, 개인 데이터 및 인증 프로세스를 안전하게 관리할 수 있습니다. 예를 들어, 모바일 장치의 TEE는 생체 인증을 처리하고 생체 확인이 통과되면 블록체인 트랜잭션에 서명할 수 있으며, 이 모든 과정에서 사용자의 생체 정보를 공개하지 않습니다. 이는 신원 관리에서 보안과 개인정보보호를 모두 제공하며, Web3가 여권, 인증서 또는 KYC 데이터와 같은 것을 사용자 주권 방식으로 처리하려면 필수적인 구성 요소입니다.
요약하자면, TEE는 Web3에서 다재다능한 도구 역할을 합니다. 온체인 로직에 대한 기밀성을 가능하게 하고, 오프체인 보안 컴퓨팅을 통해 확장을 허용하며, 오라클과 브리지의 무결성을 보호하고, 새로운 용도(비공개 신원부터 규정 준수 데이터 공유까지)를 열어줍니다. 다음으로, 이러한 기능을 활용하는 특정 프로젝트를 살펴보겠습니다.
3. TEE를 활용하는 주목할 만한 Web3 프로젝트
다수의 선도적인 블록체인 프로젝트들이 신뢰 실행 환경을 중심으로 핵심 서비스를 구축했습니다. 아래에서는 몇 가지 주목할 만한 프로젝트를 심층적으로 살펴보고, 각 프로젝트가 TEE 기술을 어떻게 사용하며 어떤 독특한 가치를 더하는지 검토합니다.