Auteurs : prateek, roshan, siddhartha & linguine (Marlin), krane (Asula)Compilation : Shew, 仙壤GodREALM
Depuis l’annonce par Apple de son cloud privé et de l’offre par NVIDIA de calculs confidentiels dans ses GPU, l’environnement d’exécution fiable (TEE) est de plus en plus populaire. Leur garantie de confidentialité contribue à protéger les données des utilisateurs (y compris les clés privées) et leur isolation garantit que l’exécution des programmes déployés dessus ne sera pas altérée, que ce soit par des humains, d’autres programmes ou des systèmes d’exploitation. Il n’est donc pas surprenant que de nombreux produits Crypto x AI utilisent largement le TEE pour leur construction.
Comme toute nouvelle technologie, le TEE traverse une période expérimentale optimiste. Dans cet article, nous espérons fournir aux développeurs et aux lecteurs généraux un guide conceptuel de base pour leur permettre de comprendre ce qu’est le TEE, le modèle de sécurité du TEE, les vulnérabilités courantes et les meilleures pratiques pour une utilisation sécurisée du TEE. * (Remarque *: afin de rendre le texte plus compréhensible, nous avons délibérément remplacé les termes TEE par des mots équivalents plus simples).
Qu’est-ce que TEE
TEE est un environnement isolé dans un processeur ou un centre de données où les programmes peuvent s’exécuter sans aucune interférence du reste du système. Pour éviter les interférences des autres parties avec le TEE, nous avons besoin d’une série de conceptions, notamment un contrôle d’accès strict, qui contrôle l’accès des autres parties du système aux programmes et aux données du TEE. Actuellement, le TEE est omniprésent dans les téléphones, les serveurs, les PC et les environnements cloud, il est donc très accessible et abordable.
Le contenu ci-dessus peut sembler vague et abstrait, mais en réalité, différentes façons de mettre en œuvre TEE sont utilisées par différents serveurs et fournisseurs de cloud, mais l’objectif fondamental est d’éviter les interférences d’autres programmes avec TEE.
La plupart des lecteurs peuvent utiliser des informations de reconnaissance biologique pour se connecter à des appareils, comme déverrouiller un téléphone avec une empreinte digitale. Mais comment pouvons-nous nous assurer que les applications malveillantes, les sites Web ou les systèmes d’exploitation de jailbreak ne peuvent pas accéder et voler ces informations de reconnaissance biologique? En fait, en plus de crypter les données, les circuits dans le TEE empêchent fondamentalement l’accès à la mémoire et à la zone de traitement occupées par les données sensibles par tout programme.
Le portefeuille matériel est un autre exemple de scénario d’application TEE. Le portefeuille matériel est connecté à l’ordinateur et communique avec lui dans un environnement isolé, mais l’ordinateur ne peut pas accéder directement aux mots de passe stockés dans le portefeuille matériel. Dans les deux cas mentionnés ci-dessus, les utilisateurs font confiance au fabricant de l’appareil pour concevoir correctement la puce et fournir des mises à jour logicielles appropriées afin d’empêcher l’exportation ou la visualisation de données confidentielles à l’intérieur de la TEE.
Modèle de sécurité
Malheureusement, il existe de nombreux types d’implémentation TEE, et ces différentes implémentations (IntelSGX, IntelTDX, AMDSEV, AWSNitroEnclaves, ARMTrustZone) nécessitent toutes une modélisation et une analyse de sécurité indépendantes. Dans le reste de cet article, nous discuterons principalement d’IntelSGX, de TDX et d’AWSNitro, car ces systèmes TEE sont largement utilisés et disposent d’outils de développement complets. Ces systèmes susmentionnés sont également les plus couramment utilisés dans le Web3.
En général, le flux de travail des applications déployées dans TEE est le suivant :
Manifestement, il y a 3 risques potentiels ici :
Il est heureux de constater que les TEE actuels disposent d’une solution pour éliminer les risques susmentionnés, à savoir des builds reproductibles(Reproducible Builds) et des attestations à distance(Remote Atteststations).
Qu’est-ce que la construction reproductible ? Le développement de logiciels modernes nécessite souvent l’importation de nombreuses dépendances, telles que des outils externes, des bibliothèques ou des frameworks, etc., et ces fichiers de dépendances peuvent également présenter des risques. Maintenant, des solutions telles que npm utilisent le hachage de code correspondant au fichier de dépendances comme identifiant unique. Lorsque npm découvre qu’un fichier de dépendances ne correspond pas à la valeur de hachage enregistrée, il peut considérer que ce fichier de dépendances a été modifié.
La construction reproductible peut être considérée comme un ensemble de normes visant à obtenir une valeur de hachage cohérente dès que tout code est exécuté sur n’importe quel appareil, à condition de suivre un processus de construction prédéfini. Bien sûr, nous pouvons également utiliser des produits autres que le hachage comme identificateur dans la pratique, que nous appelons ici mesure de code (code measurement).
Nix est un outil courant pour les builds reproductibles. Lorsque le code source du programme est exposé, n’importe qui peut inspecter le code pour s’assurer que le développeur n’a rien inséré d’inhabituel, et n’importe qui peut construire le code à l’aide de Nix pour vérifier si le produit construit a les mêmes métriques/hachage de code que le produit déployé par l’équipe de projet en production. Mais comment connaître les métriques de code d’un programme dans le TEE ? Cela nous amène au concept appelé « preuve à distance ». **
Preuve à distance est un message de signature provenant de la plateforme TEE (partie de confiance), contenant des mesures de code du programme, la version de la plateforme TEE, etc. La preuve à distance permet à un observateur externe de savoir qu’un programme s’exécute dans un endroit sécurisé inaccessible à quiconque (vrai TEE de version xx).
La reproductibilité et la preuve à distance permettent à tous les utilisateurs de connaître le code réel exécuté à l’intérieur de l’Enclave de Confiance (TEE) et les informations sur la version de la plateforme TEE, afin de prévenir les comportements malveillants des développeurs ou des serveurs.
Cependant, dans le cas de TEE, il est toujours nécessaire de faire confiance à son fournisseur. Si le fournisseur de TEE agit de manière malveillante, il peut falsifier directement la preuve à distance. Par conséquent, si le fournisseur est considéré comme un vecteur d’attaque possible, il est préférable de ne pas dépendre uniquement de TEE et de les combiner avec ZK ou un protocole de consensus.
L’attrait de TEE
Selon nous, les caractéristiques particulièrement populaires de TEE, en particulier pour le déploiement des agents d’IA, sont principalement les suivantes :
Qu’il soit bon ou mauvais, il est actuellement difficile de trouver des alternatives à de nombreux cas d’utilisation de TEE. Nous croyons que l’introduction de TEE étend davantage l’espace de développement des applications sur la chaîne, ce qui peut stimuler l’émergence de nouveaux scénarios d’application.
TEE n’est pas une balle en argent
Les programmes exécutés dans un environnement d’exécution sécurisé (TEE) peuvent toujours être soumis à une série d’attaques et d’erreurs. Tout comme les contrats intelligents, ils peuvent rencontrer divers problèmes. Pour simplifier, nous classifions les vulnérabilités potentielles de la manière suivante :
Développeurs négligents
Que ce soit intentionnel ou non, les développeurs peuvent affaiblir les garanties de sécurité des programmes dans le TEE par du code intentionnel ou non intentionnel. Cela inclut :
Vulnérabilité d’exécution
Même les développeurs les plus prudents peuvent devenir des victimes de failles à l’exécution. Les développeurs doivent réfléchir attentivement à tout élément qui pourrait compromettre la sécurité de leur projet :
Par exemple, un moteur de correspondance fonctionnant dans un environnement d’exécution sécurisé (TEE) est capable de traiter des transactions cryptographiques. Cependant, ce moteur ne peut pas garantir un ordre de traitement équitable (résistant aux attaques MEV) car les routeurs, les passerelles ou les hôtes peuvent toujours rejeter, retarder ou traiter en priorité les paquets en fonction de l’adresse IP source.
Défauts d’architecture
La pile technologique utilisée par l’application TEE doit être utilisée avec prudence. Lors de la construction de l’application TEE, les problèmes suivants peuvent survenir :
Problèmes d’exploitation
Enfin, mais non moins important, il y a quelques points pratiques à considérer en ce qui concerne le fonctionnement réel d’un serveur exécutant un programme TEE :
Construire des programmes TEE sécurisés
Nous divisons nos conseils en plusieurs points :
1. La solution la plus sécurisée: sans dépendances externes
La création d’applications hautement sécurisées peut impliquer l’élimination des dépendances externes, telles que les entrées externes, les API ou les services, afin de réduire les surfaces d’attaque. Cette approche garantit que l’application fonctionne de manière autonome, sans interaction externe qui pourrait compromettre son intégrité ou sa sécurité. Bien que cette stratégie puisse limiter la diversité des fonctionnalités du programme, elle peut offrir un niveau élevé de sécurité.
Si le modèle est exécuté localement, pour la plupart des cas d’utilisation de CryptoxAI, ce niveau de sécurité peut être atteint.
2. Mesures de précaution nécessaires
Que l’application ait ou non des dépendances externes, les éléments suivants sont obligatoires !
Considérez l’application TEE comme un smart contract, pas une application backend; maintenez une fréquence de mise à jour plus faible, testez rigoureusement.
La construction d’un programme TEE doit être aussi rigoureuse que l’écriture, le test et la mise à jour de contrats intelligents. Comme les contrats intelligents, le TEE s’exécute dans un environnement hautement sensible et inviolable, où les erreurs ou les comportements inattendus peuvent entraîner des conséquences graves, y compris la perte totale de fonds. Un audit approfondi, des tests approfondis et des mises à jour minimales et soigneusement auditées sont essentiels pour garantir l’intégrité et la fiabilité des applications basées sur le TEE.
Vérifiez le code d’audit et examinez le pipeline de construction
La sécurité d’une application dépend non seulement du code lui-même, mais aussi des outils utilisés dans le processus de construction. Un pipeline de construction sécurisé est crucial pour prévenir les failles. TEE garantit seulement que le code fourni s’exécutera comme prévu, mais ne peut pas corriger les défauts introduits lors du processus de construction.
Pour réduire les risques, il est nécessaire de procéder à des tests et à des audits rigoureux du code afin d’éliminer les erreurs et d’empêcher toute divulgation d’informations inutile. De plus, la reproductibilité joue un rôle crucial, en particulier lorsque le code est développé par une partie et utilisé par une autre. La reproductibilité permet à quiconque de vérifier si le programme exécuté à l’intérieur de l’Enclave d’Exécution Sécurisée correspond au code source d’origine, garantissant ainsi transparence et confiance. Sans reproductibilité, il est presque impossible de déterminer exactement ce que contient le programme exécuté à l’intérieur de l’Enclave d’Exécution Sécurisée, mettant ainsi en péril la sécurité de l’application.
Par exemple, le code source de DeepWorm (un projet qui exécute un modèle de simulation cérébrale de ver dans TEE) est entièrement ouvert. Les programmes exécutés dans TEE sont construits de manière reproductible à l’aide de pipelines Nix.
Utiliser des bibliothèques vérifiées ou vérifiées
Lors du traitement des données sensibles dans les programmes TEE, veuillez n’utiliser que des bibliothèques auditées pour la gestion des clés et le traitement des données privées. Les bibliothèques non auditées pourraient exposer les clés et compromettre la sécurité de l’application. Il est préférable de privilégier les dépendances examinées de manière approfondie et axées sur la sécurité afin de maintenir la confidentialité et l’intégrité des données.
Vérification continue de la preuve provenant de TEE
Les utilisateurs qui interagissent avec TEE doivent valider la preuve à distance ou le mécanisme de vérification généré par TEE pour garantir une interaction sûre et fiable. Sans ces vérifications, le serveur pourrait manipuler les réponses, ce qui rendrait impossible de distinguer les sorties réelles de TEE des données altérées. La preuve à distance fournit une preuve cruciale pour les bibliothèques de code et la configuration exécutées dans TEE, nous permettant ainsi de déterminer si le programme exécuté à l’intérieur de TEE est conforme aux attentes.
La preuve spécifique peut être vérifiée sur la chaîne (IntelSGX, AWSNitro), vérifiée hors chaîne avec une preuve ZK (IntelSGX, AWSNitro), ou vérifiée par l’utilisateur lui-même ou un service de garde (tel que t16z ou MarlinHub).
3. Recommandations basées sur les cas d’utilisation
En fonction du cas d’utilisation et de la structure de l’application, les conseils suivants peuvent vous aider à rendre votre application plus sécurisée.
Assurez-vous d’exécuter toujours les interactions entre l’utilisateur et TEE sur un canal sécurisé
Les serveurs sur lesquels se trouvent les TEE ne sont pas de confiance. Les serveurs peuvent intercepter et modifier les communications. Dans certains cas, il peut être acceptable pour le serveur de lire les données sans les modifier, tandis que dans d’autres cas, même la lecture des données peut être indésirable. Pour réduire ces risques, il est essentiel d’établir un canal de communication sécurisé de bout en bout entre l’utilisateur et le TEE. Au minimum, assurez-vous que les messages contiennent une signature pour vérifier leur authenticité et leur provenance. De plus, il est important que les utilisateurs vérifient toujours la preuve à distance fournie par le TEE pour s’assurer qu’ils communiquent avec le bon TEE. Cela garantit l’intégrité et la confidentialité des communications.
Par exemple, Oyster prend en charge l’émission sécurisée de TLS en utilisant des enregistrements CAA et RFC8657. De plus, il propose un protocole TLS natif appelé Scallop, qui ne dépend pas de WebPKI.
La mémoire TEE est volatile
La mémoire TEE est volatile, ce qui signifie que lorsque le TEE est fermé, son contenu (y compris les clés de chiffrement) est perdu. Sans un mécanisme de sauvegarde sécurisé pour ces informations, les données critiques peuvent être définitivement inaccessibles, ce qui peut entraîner des difficultés financières ou opérationnelles.
Les réseaux de calcul multipartite (MPC) avec des systèmes de stockage décentralisés tels que IPFS peuvent être utilisés comme solution à ce problème. Le réseau MPC divise la clé en plusieurs nœuds, garantissant qu’aucun nœud individuel ne détient la clé complète, tout en permettant au réseau de reconstruire la clé au besoin. Les données cryptées avec cette clé peuvent être stockées en toute sécurité sur IPFS.
Si nécessaire, le réseau MPC peut fournir des clés à un nouveau serveur TEE exécutant la même image, à condition que certaines conditions soient remplies. Cette approche garantit l’élasticité et une sécurité robuste, permettant ainsi l’accessibilité et la confidentialité des données, même dans un environnement non fiable.
Il existe une autre solution, à savoir que TEE envoie les transactions associées à des serveurs MPC différents pour signature, regroupe les signatures des serveurs MPC et publie enfin les transactions. Cette méthode est beaucoup moins flexible et ne peut pas être utilisée pour stocker des clés API, des mots de passe ou des données arbitraires (sans service de stockage tiers de confiance).
Réduire la surface d’attaque
Pour les cas d’utilisation critiques en matière de sécurité, il vaut la peine d’essayer de réduire au minimum les dépendances externes au maximum, même au prix de sacrifier l’expérience des développeurs. Par exemple, Dstack est livré avec un noyau minimal basé sur Yocto, contenant uniquement les modules nécessaires au fonctionnement de Dstack. Il pourrait même être utile d’utiliser des technologies plus anciennes comme SGX (au-delà de TDX), car cette technologie ne nécessite pas de chargeur d’amorçage ou de système d’exploitation pour faire partie d’un TEE.
Isolation physique
La sécurité de TEE peut être renforcée en isolant physiquement TEE des interventions humaines potentielles. Bien que nous puissions croire que les centres de données peuvent offrir une sécurité physique en hébergeant des serveurs TEE, des projets tels que Spacecoin explorent une solution alternative assez intéressante - l’espace. Le document de SpaceTEE s’appuie sur des mesures de sécurité telles que la mesure des moments d’inertie après le lancement pour vérifier si les satellites dévient des attentes lorsqu’ils entrent en orbite.
Les multiples préuves
Tout comme Ethereum s’appuie sur plusieurs implémentations de clients pour réduire les risques de bugs affectant l’ensemble du réseau, multiprovers utilise différentes solutions d’implémentation TEE pour renforcer la sécurité et la résilience. En exécutant les mêmes étapes de calcul sur plusieurs plateformes TEE, la validation multiple garantit qu’une faille dans une implémentation TEE ne compromettra pas l’ensemble de l’application. Bien que cette méthode exige que le processus de calcul soit déterministe, ou qu’un consensus soit défini entre les différentes solutions d’implémentation TEE dans des situations de non-déterminisme, elle offre également des avantages significatifs tels que l’isolation des défaillances, la redondance et la vérification croisée, ce qui en fait un bon choix pour les applications nécessitant une garantie de fiabilité.
Regarder vers l’avenir
TEE has clearly become an exciting field. As mentioned earlier, the ubiquity of AI and its continuous access to user-sensitive data means that large technology companies such as Apple and NVIDIA are using TEE in their products and offering it as part of their offerings.
D’un autre côté, la communauté cryptographique attache une grande importance à la sécurité. Alors que les développeurs cherchent à étendre les applications et les cas d’utilisation sur la chaîne, nous avons vu l’Environnement d’Exécution Fiable (TEE) gagner en popularité en tant que solution offrant un compromis adéquat entre fonctionnalités et hypothèses de confiance. Bien que le TEE ne soit pas aussi minimaliste que la solution ZK complète en termes de confiance minimale, nous nous attendons à ce qu’il devienne progressivement la voie choisie par les entreprises Web3 et les grandes entreprises technologiques pour intégrer leurs produits.