Autoren: Prateek, Roshan, Siddhartha & Linguine (Marlin), Krane (Asula) Übersetzung: Shew, GodRealmX
Seit Apple die Einführung von privaten Clouds und NVIDIA die Bereitstellung von vertraulichen Berechnungen in GPUs angekündigt haben, wird die Trusted Execution Environment (TEE) immer beliebter. Die Gewährleistung der Vertraulichkeit trägt dazu bei, Benutzerdaten (einschließlich möglicherweise privater Schlüssel) zu schützen, während die Isolierung sicherstellt, dass die Ausführung der darauf bereitgestellten Programme nicht manipuliert wird - sei es durch Menschen, andere Programme oder Betriebssysteme. Daher ist es nicht überraschend, dass im Bereich Crypto x AI eine Vielzahl von Produkten auf TEE basiert.
Wie bei jeder neuen Technologie durchläuft TEE eine optimistische Experimentierphase. Dieser Artikel soll Entwicklern und allgemeinen Lesern einen grundlegenden Leitfaden bieten, um zu verstehen, was TEE ist, das Sicherheitsmodell von TEE, häufige Schwachstellen und bewährte Sicherheitspraktiken bei der Verwendung von TEE. (Hinweis: Um den Text verständlicher zu machen, haben wir die TEE-Begriffe absichtlich durch einfachere gleichwertige Begriffe ersetzt).
Was ist TEE
TEE ist eine isolierte Umgebung in Prozessoren oder Rechenzentren, in der Programme ausgeführt werden können, ohne von anderen Teilen des Systems beeinträchtigt zu werden. Um sicherzustellen, dass TEE nicht von anderen Teilen beeinträchtigt wird, benötigen wir eine Reihe von Designs, hauptsächlich streng kontrollierten Zugriff, um den Zugriff anderer Teile des Systems auf Programme und Daten in TEE zu kontrollieren. TEE ist derzeit weit verbreitet in Mobiltelefonen, Servern, PCs und Cloud-Umgebungen, daher ist es sehr zugänglich und preiswert.
Der obige Inhalt kann vage und abstrakt klingen, aber die Implementierung von TEE unterscheidet sich tatsächlich je nach Server und Cloud-Anbieter. Das grundlegende Ziel besteht jedoch darin, zu vermeiden, dass TEE von anderen Programmen beeinträchtigt wird.
Die meisten Leser verwenden wahrscheinlich biometrische Informationen, um sich bei Geräten anzumelden, z. B. durch das Entsperren eines Telefons mit dem Fingerabdruck. Aber wie können wir sicherstellen, dass bösartige Anwendungen, Websites oder Jailbreak-Betriebssysteme nicht auf diese biometrischen Informationen zugreifen und sie stehlen können? Tatsächlich erlaubt der Schaltkreis in TEE-Geräten neben der Verschlüsselung der Daten keinen Programmen den Zugriff auf den Speicher- und Prozessorbereich, in dem sensible Daten gespeichert sind.
Die Hardware-Wallet ist ein weiteres Beispiel für Anwendungsszenarien von TEE. Die Hardware-Wallet ist mit dem Computer verbunden und kommuniziert mit ihm in einer Sandbox, aber der Computer kann nicht direkt auf das in der Hardware-Wallet gespeicherte Mnemonic zugreifen. In beiden oben genannten Fällen vertrauen die Benutzer darauf, dass der Gerätehersteller in der Lage ist, den Chip richtig zu entwerfen und angemessene Firmware-Updates bereitzustellen, um zu verhindern, dass vertrauliche Daten in TEE exportiert oder angezeigt werden.
Sicherheitsmodell
Leider gibt es viele verschiedene Arten von TEE-Implementierungen (Intel SGX, Intel TDX, AMD SEV, AWS Nitro Enclaves, ARM TrustZone), die jeweils ein eigenes Sicherheitsmodell erfordern. In diesem Artikel werden wir hauptsächlich über Intel SGX, TDX und AWS Nitro sprechen, da diese TEE-Systeme über eine größere Benutzerbasis und vollständige Entwicklertools verfügen. Diese Systeme sind auch die am häufigsten verwendeten TEE-Systeme in Web3.
Im Allgemeinen sieht der Arbeitsablauf einer in TEE bereitgestellten Anwendung wie folgt aus:
Offensichtlich gibt es hier drei potenzielle Risiken:
Glücklicherweise gibt es jetzt Lösungen für die oben genannten Risiken in TEE, nämlich reproduzierbare Builds(Reproducible Builds) und Remote-Attestationen(Remote Atteststations).
Was ist also Replizierbarkeit? Moderne Softwareentwicklung erfordert oft den Import von vielen Abhängigkeiten wie externen Tools, Bibliotheken oder Frameworks. Diese Abhängigkeitsdateien können auch Sicherheitsrisiken aufweisen. Lösungen wie npm verwenden jetzt den Code-Hash der Abhängigkeitsdateien als eindeutigen Identifikator. Wenn npm feststellt, dass eine Abhängigkeitsdatei nicht mit dem aufgezeichneten Hash-Wert übereinstimmt, kann davon ausgegangen werden, dass die Datei geändert wurde.
Wiederholbare Builds können als eine Gruppe von Standards angesehen werden, deren Ziel es ist, dass bei der Ausführung von beliebigem Code auf beliebigen Geräten nur dann einheitliche Hash-Werte erzeugt werden, wenn der Build gemäß den zuvor festgelegten Prozessen durchgeführt wird. Natürlich können wir in der Praxis auch Produkte außerhalb des Hash als Identifikatoren verwenden, die wir hier als Code-Messung ( bezeichnen.
Nix ist ein gängiges Tool für wiederholbare Builds. Wenn der Quellcode des Programms offengelegt wird, kann jeder den Code überprüfen, um sicherzustellen, dass der Entwickler nichts Ungewöhnliches eingefügt hat, und jeder kann den Code mit Nix erstellen, um zu überprüfen, ob das erstellte Produkt die gleichen Codemetriken/Hash aufweist wie das Produkt, das vom Projektteam in der Produktion bereitgestellt wird. Aber woher kennen wir die Code-Metriken für ein Programm im TEE? Dies bringt uns zu dem Konzept, das als “Remote Proof” bezeichnet wird. **
![])https://img.gateio.im/social/moments-de22e99c8194fa04f29ee5416aebcd03(
Remote Attestation ist eine signierte Nachricht von der TEE-Plattform (vertrauenswürdige Entität), die Informationen wie Code-Metriken und TEE-Plattformversionen enthält. Die Remote Attestation informiert externe Beobachter darüber, dass ein Programm in einer sicheren Umgebung (mit der tatsächlichen TEE-Version xx) ausgeführt wird, auf die niemand zugreifen kann.
![])https://img.gateio.im/social/moments-e4900d340dd1c812355c38739632d2a6(
Durch die Möglichkeit des wiederholten Aufbaus und des Remote-Proofs kann jeder Benutzer den tatsächlichen Code, der in TEE ausgeführt wird, und Informationen zur TEE-Plattformversion kennen, um Entwickler oder Server-Missbrauch zu verhindern.
Aber in dem Fall von TEE ist es immer notwendig, dem Lieferanten zu vertrauen. Wenn der TEE-Lieferant betrügt, kann er direkt Remote-Beweise fälschen. Wenn also der Lieferant als potenzielles Angriffsmedium betrachtet wird, sollte man sich nicht nur auf TEE verlassen, sondern es ist am besten, sie mit ZK oder Konsensprotokollen zu kombinieren.
Die Faszination von TEE
Aus unserer Sicht sind die TEE-Funktionen besonders beliebt, insbesondere für die Bereitstellung von AI-Agenten, aufgrund der folgenden Aspekte:
Gute oder schlechte, es ist derzeit schwer, alternative Lösungen für viele Anwendungsfälle von TEE zu finden. Wir glauben, dass die Einführung von TEE den Entwicklungsraum für On-Chain-Anwendungen weiter ausdehnt und möglicherweise neue Anwendungsszenarien fördert.
TEE is not a silver bullet
Programme, die in TEE ausgeführt werden, sind immer noch anfällig für eine Reihe von Angriffen und Fehlern. Genau wie Smart Contracts sind sie anfällig für eine Reihe von Problemen. Zur Vereinfachung gliedern wir mögliche Schwachstellen wie folgt ein:
Entwickler-Fehler
Ob absichtlich oder unbeabsichtigt, Entwickler können die Sicherheitsgarantien von TEE-Programmen durch absichtlichen oder unbeabsichtigten Code schwächen. Dazu gehören:
Laufzeitfehler
Selbst vorsichtige Entwickler können Opfer von Laufzeitfehlern werden. Entwickler müssen sorgfältig prüfen, ob eine der folgenden Optionen die Sicherheitsgarantien ihres Projekts beeinträchtigt:
Zum Beispiel kann ein Matching-Engine, der in TEE läuft und verschlüsselte Transaktionen verarbeitet, keine faire Bestellgarantie (MEV-Resistenz) bieten, da der Router/Gateways/Host immer noch Pakete basierend auf der IP-Adresse des Absenders verwerfen, verzögern oder priorisieren kann.
Architekturfehler
Die Technologie-Stacks, die von TEE-Anwendungen verwendet werden, sollten sorgfältig betrachtet werden. Bei der Entwicklung von TEE-Anwendungen können folgende Probleme auftreten:
Betriebsproblem
Ein weiterer, aber nicht weniger wichtiger Punkt ist, dass es einige praktische Überlegungen gibt, wie man einen Server betreibt, der ein TEE-Programm tatsächlich ausführt:
Erstellen Sie sichere TEE-Programme
Wir teilen unsere Vorschläge wie folgt auf:
1. Sicherste Option: Keine externen Abhängigkeiten
Das Erstellen von hochsicheren Anwendungen kann das Eliminieren von externen Abhängigkeiten wie externen Eingaben, APIs oder Diensten umfassen, um die Angriffsfläche zu reduzieren. Diese Methode gewährleistet, dass die Anwendung unabhängig betrieben wird und keine externen Interaktionen vorliegen, die ihre Integrität oder Sicherheit beeinträchtigen könnten. Obwohl diese Strategie die Vielfalt der Funktionen der Anwendung einschränken kann, bietet sie ein hohes Maß an Sicherheit.
Wenn das Modell lokal ausgeführt wird, kann für die meisten CryptoxAI-Anwendungsfälle dieses Sicherheitsniveau erreicht werden.
2. Erforderliche Vorsichtsmaßnahmen
Egal ob die Anwendung externe Abhängigkeiten hat oder nicht, folgende Inhalte sind erforderlich!
Betrachten Sie die TEE-Anwendung als Smart Contract, nicht als Backend-Anwendung; halten Sie die Aktualisierungsfrequenz niedrig und führen Sie strenge Tests durch.
Das Erstellen von TEE-Programmen sollte genauso sorgfältig sein wie das Schreiben, Testen und Aktualisieren von Smart Contracts. Ähnlich wie Smart Contracts läuft TEE in einer hochsensiblen und unveränderlichen Umgebung, in der Fehler oder unerwartetes Verhalten schwerwiegende Folgen haben können, einschließlich des vollständigen Verlusts von Geldern. Eine gründliche Prüfung, umfangreiche Tests und minimale, sorgfältig geprüfte Aktualisierungen sind entscheidend, um die Integrität und Zuverlässigkeit von TEE-basierten Anwendungen zu gewährleisten.
Auditieren Sie den Code und überprüfen Sie die Build-Pipeline
Die Sicherheit einer Anwendung hängt nicht nur vom Code selbst ab, sondern auch von den während des Build-Prozesses verwendeten Tools. Ein sicherer Build-Pipeline ist entscheidend, um Schwachstellen zu verhindern. TEE garantiert lediglich, dass der bereitgestellte Code gemäß dem erwarteten Ablauf ausgeführt wird, kann jedoch Mängel, die während des Build-Prozesses eingeführt wurden, nicht beheben.
Um das Risiko zu minimieren, muss der Code streng getestet und überprüft werden, um Fehler zu beseitigen und unnötige Informationslecks zu verhindern. Darüber hinaus spielt die reproduzierbare Erstellung eine entscheidende Rolle, insbesondere wenn der Code von einer Partei entwickelt und von einer anderen Partei verwendet wird. Die reproduzierbare Erstellung ermöglicht es jedem, zu überprüfen, ob das in TEE ausgeführte Programm mit dem ursprünglichen Quellcode übereinstimmt, um Transparenz und Vertrauen zu gewährleisten. Ohne die reproduzierbare Erstellung ist es nahezu unmöglich, den genauen Inhalt des in TEE ausgeführten Programms zu bestimmen, was die Sicherheit der Anwendung gefährdet.
Beispielsweise ist der Quellcode von DeepWorm (ein Projekt, bei dem das Wurm-Gehirn-Simulationsmodell in TEE ausgeführt wird) vollständig offen. Die Ausführung des Programms in TEE erfolgt auf eine reproduzierbare Weise mit Hilfe von Nix-Pipelines.
Verwendung von auditierten oder überprüften Bibliotheken
Bei der Verarbeitung sensibler Daten in TEE-Programmen verwenden Sie bitte nur geprüfte Bibliotheken für das Schlüsselmanagement und die Verarbeitung privater Daten. Nicht geprüfte Bibliotheken können Schlüssel offenzulegen und die Sicherheit der Anwendung beeinträchtigen. Priorisieren Sie sicherheitszentrierte Abhängigkeiten, die gründlich geprüft wurden, um die Vertraulichkeit und Integrität der Daten zu gewährleisten.
Immer die Bestätigung des Nachweises von TEE überprüfen
Benutzer, die mit TEE interagieren, müssen die von TEE generierten Remote-Proofs oder -Verifikationsmechanismen überprüfen, um eine sichere und vertrauenswürdige Interaktion zu gewährleisten. Ohne diese Überprüfungen kann der Server die Antwort manipulieren, und es ist nicht möglich, echte TEE-Ausgaben von manipulierten Daten zu unterscheiden. Remote-Proofs bieten einen wichtigen Nachweis für die Codebibliothek und Konfigurationen, die in TEE ausgeführt werden, damit wir beurteilen können, ob die in TEE ausgeführten Programme den Erwartungen entsprechen.
Die spezifische Zertifizierung kann entweder on-chain (IntelSGX, AWSNitro) verifiziert werden, indem ZK-Beweise (IntelSGX, AWSNitro) off-chain verwendet werden, oder sie kann vom Benutzer selbst oder von einem gehosteten Dienst (wie t16z oder MarlinHub) verifiziert werden.
3. Empfehlungen basierend auf Use Cases
Basierend auf den Anwendungsfall und deren Struktur können die folgenden Hinweise dazu beitragen, Ihre Anwendung sicherer zu machen.
Stellen Sie sicher, dass die Interaktion zwischen Benutzern und TEE immer über einen sicheren Kanal erfolgt
Der Server, auf dem TEE ausgeführt wird, ist im Wesentlichen nicht vertrauenswürdig. Der Server kann die Kommunikation abfangen und ändern. In einigen Fällen ist es akzeptabel, dass der Server Daten lesen, aber nicht ändern kann, während es in anderen Fällen selbst das Lesen von Daten nicht wünschenswert ist. Um diese Risiken zu minimieren, ist es wichtig, einen sicheren end-to-end verschlüsselten Kanal zwischen dem Benutzer und TEE aufzubauen. Stellen Sie sicher, dass die Nachricht zumindest eine Signatur enthält, um ihre Echtheit und Herkunft zu überprüfen. Darüber hinaus muss der Benutzer immer die Remote-Attestation des TEE überprüfen, um sicherzustellen, dass er mit dem richtigen TEE kommuniziert. Dies gewährleistet die Integrität und Vertraulichkeit der Kommunikation.
Oyster kann beispielsweise durch Verwendung von CAA-Einträgen und RFC8657 eine sichere TLS-Ausstellung unterstützen. Darüber hinaus bietet es ein TEE-natives TLS-Protokoll namens Scallop, das nicht von WebPKI abhängt.
Wissen, dass der TEE-Speicher transient ist
TEE-Speicher ist flüchtig, was bedeutet, dass der Inhalt (einschließlich der verschlüsselten Schlüssel) verloren geht, wenn das TEE geschlossen wird. Ohne einen sicheren Mechanismus zur Speicherung dieser Informationen können wichtige Daten dauerhaft unzugänglich werden, was zu finanziellen oder betrieblichen Schwierigkeiten führen kann.
**Multifaktor-Berechnungsnetzwerke (MPC) mit dezentralen Speichersystemen wie IPFS können als Lösung für dieses Problem dienen. Das MPC-Netzwerk teilt den Schlüssel auf mehrere Knoten auf, um sicherzustellen, dass kein einzelner Knoten den vollständigen Schlüssel besitzt, und ermöglicht es dem Netzwerk gleichzeitig, den Schlüssel bei Bedarf wiederherzustellen. Die mit diesem Schlüssel verschlüsselten Daten können sicher auf IPFS gespeichert werden.
Wenn nötig, kann das MPC-Netzwerk einem neuen TEE-Server, der das gleiche Image ausführt, Schlüssel zur Verfügung stellen, vorausgesetzt, bestimmte Bedingungen sind erfüllt. Diese Methode gewährleistet Flexibilität und starke Sicherheit, sodass Daten auch in einer nicht vertrauenswürdigen Umgebung zugänglich und vertraulich bleiben.
![])https://img.gateio.im/social/moments-429ced8c56f3dff6c933327cf8963516(
Es gibt eine andere Lösung, bei der TEE die entsprechenden Transaktionen jeweils verschiedenen MPC-Servern übergibt, die Transaktionen signieren und dann die aggregierte Signatur auf die Kette bringen. Diese Methode ist viel weniger flexibel und kann nicht zur Speicherung von API-Schlüsseln, Passwörtern oder beliebigen Daten (ohne vertrauenswürdigen Drittanbieter-Speicherdienst) verwendet werden.
![])https://img.gateio.im/social/moments-37203038abc830a2f70f702c7eeb0e7b(
Reduzierung der Angriffsfläche
Für sicherheitskritische Anwendungsfälle lohnt es sich, die Entwicklererfahrung zu opfern, um die Abhängigkeiten so weit wie möglich zu reduzieren. Zum Beispiel wird Dstack mit einem auf Yocto basierenden minimalen Kernel geliefert, der nur die Module enthält, die für das Funktionieren von Dstack erforderlich sind. Es könnte sogar lohnenswert sein, veraltete Technologien wie SGX (über TDX hinaus) zu verwenden, da diese Technologien keinen Bootloader oder ein Betriebssystem benötigen, um Teil eines TEE zu sein.
Physische Trennung
Durch die physische Isolierung von TEE vor möglichen menschlichen Eingriffen kann die Sicherheit von TEE weiter verbessert werden. Obwohl wir glauben, dass Data Center physische Sicherheit bieten können, indem wir TEE-Server in Data Centern und Cloud-Providern hosten, erkundet Projekte wie Spacecoin eine ziemlich interessante Alternative - den Weltraum. Das SpaceTEE-Papier stützt sich auf Sicherheitsmaßnahmen wie die Messung des Trägheitsmoments nach dem Start, um zu überprüfen, ob der Satellit während des Eintritts in die Umlaufbahn von der erwarteten Bahn abweicht.
Mehrere Beweiser
Ähnlich wie Ethereum auf mehrere Client-Implementierungen angewiesen ist, um das Risiko von Netzwerkfehlern zu verringern, verwenden multiprovers verschiedene TEE-Implementierungsschemata, um die Sicherheit und Flexibilität zu erhöhen. Durch die Ausführung desselben Berechnungsschritts auf mehreren TEE-Plattformen gewährleistet die Multi-Validation, dass ein Fehler in einer TEE-Implementierung die gesamte Anwendung nicht gefährdet. Obwohl dieser Ansatz erfordert, dass der Berechnungsprozess deterministisch ist oder in nicht deterministischen Fällen Konsens zwischen verschiedenen TEE-Implementierungsschemata definiert ist, bietet er signifikante Vorteile wie Fehlerisolierung, Redundanz und Cross-Validation, was ihn zu einer guten Wahl für Anwendungen macht, die Zuverlässigkeit erfordern.
![])https://img.gateio.im/social/moments-da3100eaa6119891428bb2346de3f57e(
Blick in die Zukunft
TEE hat sich zweifellos zu einem äußerst aufregenden Bereich entwickelt. Wie bereits erwähnt, ist KI allgegenwärtig und der kontinuierliche Zugriff auf sensible Benutzerdaten bedeutet, dass große Technologieunternehmen wie Apple und NVIDIA TEE in ihren Produkten verwenden und TEE als integralen Bestandteil ihrer Produkte anbieten.
Auf der anderen Seite hat die Krypto-Community immer großen Wert auf Sicherheit gelegt. Mit Entwicklern, die versuchen, Anwendungen und Anwendungsfälle auf der Chain zu erweitern, haben wir gesehen, dass TEE als eine Lösung, die ein angemessenes Gleichgewicht zwischen Funktionalität und Vertrauensannahmen bietet, populär geworden ist. Obwohl TEE nicht so vertrauensminimierend ist wie eine vollständige ZK-Lösung, erwarten wir, dass TEE allmählich zu einem Weg wird, um Web3-Unternehmen und Produkte großer Technologieunternehmen zu integrieren.