Nous avons développé EIP7702Proxy, un contrat de proxy ERC-1967 léger conçu pour servir de transfert logique de base délégué EIP-7702 pour EOA... qui répond à certains des défis propres aux comptes délégués EIP-7702. Cet article est tiré d’un article écrit par la communauté Boardlink et est compilé, compilé et contribué par ForesightNews. (Synopsis : Ethereum Pectra met à niveau le « hacker flip », Wintermute met en garde : EIP-7702 automatise le déploiement d’un grand nombre de contrats) (Supplément de contexte : Le « One Trillion Dollar Security Project » de la Fondation Ethereum publie son premier rapport : Trier les contrats intelligents, l’infrastructure et la sécurité du cloud... Six défis écologiques L’EIP-7702 permet aux portefeuilles Ethereum simples (EOA) de passer à des portefeuilles de contrats intelligents, offrant une sécurité accrue, des fonctionnalités avancées, des opportunités de parrainage de gaz et d’autres avantages. Historiquement, les portefeuilles intelligents devaient être construits à partir de zéro, mais avec l’introduction de l’EIP-7702, les portefeuilles traditionnels peuvent être mis à niveau et conserver tous leurs actifs et leur historique sur la chaîne, avec la même adresse de portefeuille. C’est comme passer d’une ligne fixe à un smartphone sans avoir à obtenir un nouveau numéro. L’EOA est mise à niveau en mettant en place une « désignation de délégation », c’est-à-dire un pointeur vers un contrat intelligent délégué, puis en déléguant la logique du contrat intelligent pour gérer l’EOA. Par conséquent, un EOA mis à niveau peut avoir des fonctions, définir le stockage, émettre des événements et effectuer toutes les autres opérations qu’un contrat intelligent peut effectuer. L’EOA peut modifier ou supprimer ce délégué à tout moment avec une nouvelle autorisation EIP-7702 signée. Bien que cela ouvre de nombreuses nouvelles possibilités, cette fonctionnalité puissante introduit également de nouveaux défis de sécurité qui nécessitent une réflexion approfondie et des solutions innovantes. Pour permettre à EOA d’agir comme un portefeuille de contrats intelligents, nous avons développé EIP7702Proxy, un contrat proxy ERC-1967 léger conçu pour servir de délégué EIP-7702 pour EOA. En plus du transfert logique de base effectué par l’agent, EIP7702Proxy inclut des fonctionnalités supplémentaires et des choix de conception qui répondent à certains des défis propres aux comptes délégués EIP-7702. L’un des objectifs de la conception d’EIP7702Proxy est de maintenir autant de peerabilité que possible entre un portefeuille intelligent Coinbase « déployé standard » et un portefeuille intelligent Coinbase délégué EIP-7702, ce qui signifie faire abstraction de la complexité supplémentaire requise pour le mécanisme EIP-7702 dans un proxy dédié et continuer à s’appuyer sur l’implémentation originale de CoinbaseSmartWallet. La solution à ce défi peut être appliquée efficacement à n’importe quelle logique de mise en œuvre, pas seulement à l’implémentation de CoinbaseSmartWallet, tout en aidant EOA à rester en sécurité dans un environnement compatible 7702. Nous présentons ci-dessous des défis spécifiques et des solutions de conception correspondantes qui nous permettent d’adapter en toute sécurité toute implémentation de portefeuille de contrats intelligents existante pour les mises à niveau EIP-7702. Défi #1 : Appliquer l’initialisation sécurisée Le premier obstacle majeur à la mise en œuvre de l’EIP-7702 provient de ses contraintes d’initialisation. Les portefeuilles de contrats intelligents traditionnels, y compris CoinbaseSmartWallet, gèrent généralement l’initialisation sécurisée (établissement de la propriété du compte) de manière atomique lors de leur déploiement, généralement par le biais d’un contrat d’usine distinct. Cette atomicité signifie que de nombreuses implémentations de ce type ont des fonctions d’initialisation non protégées qui ne peuvent être appelées qu’une seule fois. Cependant, la conception de l’EIP-7702 ne permet pas d’effectuer l’initialisation des données d’appel pendant le processus de délégation de code (l’étape équivalente du « déploiement »), donc cela ne peut pas être fait de manière atomique. Cette séparation des étapes crée une fenêtre de vulnérabilité critique. Lorsque le contrat de mise en œuvre est « déployé » sur EOA via EIP-7702, il n’y a aucune garantie que la transaction EVM standard pour ce portefeuille de mise à niveau et d’initialisation 7702 sera exécutée de manière atomique. Techniquement, même s’il est validé en même temps, le code qui définit l’autorisation peut être indépendant de l’application de la transaction d’initialisation, ce qui peut permettre à un attaquant d’exécuter de manière préventive la transaction d’initialisation et de revendiquer la propriété du compte intelligent. Solution : La signature EOA est requise pour configurer atomiquement l’implémentation et l’initialisation Notez que le portefeuille intelligent Coinbase existant est déployé après le proxy ERC-1967 avec l’implémentation UUPSUpgradable (la logique CoinbaseSmartWallet réelle). Le code de l’adresse de compte réelle est un proxy qui utilise un emplacement de stockage standard défini par ERC-1967 pour stocker des pointeurs vers sa logique d’implémentation. Notre solution à la vulnérabilité d’initialisation dans le contexte de 7702 inclut la reconnaissance que toute logique d’implémentation ne devient active (et donc dangereuse) que lorsque l’agent établit effectivement une connexion avec celle-ci. Donc, si nous ne pouvons pas forcer le déploiement et l’initialisation de l’atomicité, nous pouvons forcer la configuration et l’initialisation de l’implémentation de l’atomicité. EIP-7702Structure du contrat CoinbaseSmartWallet et processus de délégation logique Dans le contexte de l’EIP-7702, l’EOA elle-même est l’autorité initiale pour apporter des modifications à son compte, et une signature doit être fournie pour autoriser tout propriétaire qui initialise et établit un nouveau compte Smart. Notre contrat EIP7702Proxy implémente une fonction setImplementation qui configure atomiquement de nouvelles implémentations logiques et initialise les comptes. Fonction setImplementation : vérifie la signature d’EOA, qui inclut des données clés telles que l’adresse du nouveau contrat de mise en œuvre, les données d’appel d’initialisation, l’adresse du contrat de validation qui évaluera la sécurité de l’état final du compte, et la protection de base contre la relecture de signature telle que le nonce et le délai d’expiration. Définissez la valeur du pointeur ERC-1967 sur la nouvelle implémentation et exécutez les données d’appel fournies par rapport à la nouvelle implémentation logique. Appelez la fonction validateAccountState, qui doit être implémentée par le certificateur inclus dans la signature. Un validateur est un contrat spécifique à l’implémentation qui contient une logique permettant d’évaluer s’il considère l’état final du compte comme sécurisé. Par exemple, pour CoinbaseSmartWallet, CoinbaseSmartWalletValidator vérifie si le statut de propriété du compte n’est pas vide et n’est donc plus vulnérable à une initialisation arbitraire. Défi #2 : Stockage partagé délégué à l’EIP-7702 Les défis les plus complexes de l’EIP-7702 peuvent être liés à la gestion du stockage. EOA est libre de redéléguer sa logique à un autre contrat à tout moment, ou de supprimer complètement le délégué. Tous les délégués partagent les allocutions de l’EOA sur...
Le contenu est fourni à titre de référence uniquement, il ne s'agit pas d'une sollicitation ou d'une offre. Aucun conseil en investissement, fiscalité ou juridique n'est fourni. Consultez l'Avertissement pour plus de détails sur les risques.
Garantir la mise à niveau d'Ethereum EIP-7702 : un modèle d'agent pour une transition sécurisée de l'EOA vers le Portefeuille intelligent.
Nous avons développé EIP7702Proxy, un contrat de proxy ERC-1967 léger conçu pour servir de transfert logique de base délégué EIP-7702 pour EOA... qui répond à certains des défis propres aux comptes délégués EIP-7702. Cet article est tiré d’un article écrit par la communauté Boardlink et est compilé, compilé et contribué par ForesightNews. (Synopsis : Ethereum Pectra met à niveau le « hacker flip », Wintermute met en garde : EIP-7702 automatise le déploiement d’un grand nombre de contrats) (Supplément de contexte : Le « One Trillion Dollar Security Project » de la Fondation Ethereum publie son premier rapport : Trier les contrats intelligents, l’infrastructure et la sécurité du cloud... Six défis écologiques L’EIP-7702 permet aux portefeuilles Ethereum simples (EOA) de passer à des portefeuilles de contrats intelligents, offrant une sécurité accrue, des fonctionnalités avancées, des opportunités de parrainage de gaz et d’autres avantages. Historiquement, les portefeuilles intelligents devaient être construits à partir de zéro, mais avec l’introduction de l’EIP-7702, les portefeuilles traditionnels peuvent être mis à niveau et conserver tous leurs actifs et leur historique sur la chaîne, avec la même adresse de portefeuille. C’est comme passer d’une ligne fixe à un smartphone sans avoir à obtenir un nouveau numéro. L’EOA est mise à niveau en mettant en place une « désignation de délégation », c’est-à-dire un pointeur vers un contrat intelligent délégué, puis en déléguant la logique du contrat intelligent pour gérer l’EOA. Par conséquent, un EOA mis à niveau peut avoir des fonctions, définir le stockage, émettre des événements et effectuer toutes les autres opérations qu’un contrat intelligent peut effectuer. L’EOA peut modifier ou supprimer ce délégué à tout moment avec une nouvelle autorisation EIP-7702 signée. Bien que cela ouvre de nombreuses nouvelles possibilités, cette fonctionnalité puissante introduit également de nouveaux défis de sécurité qui nécessitent une réflexion approfondie et des solutions innovantes. Pour permettre à EOA d’agir comme un portefeuille de contrats intelligents, nous avons développé EIP7702Proxy, un contrat proxy ERC-1967 léger conçu pour servir de délégué EIP-7702 pour EOA. En plus du transfert logique de base effectué par l’agent, EIP7702Proxy inclut des fonctionnalités supplémentaires et des choix de conception qui répondent à certains des défis propres aux comptes délégués EIP-7702. L’un des objectifs de la conception d’EIP7702Proxy est de maintenir autant de peerabilité que possible entre un portefeuille intelligent Coinbase « déployé standard » et un portefeuille intelligent Coinbase délégué EIP-7702, ce qui signifie faire abstraction de la complexité supplémentaire requise pour le mécanisme EIP-7702 dans un proxy dédié et continuer à s’appuyer sur l’implémentation originale de CoinbaseSmartWallet. La solution à ce défi peut être appliquée efficacement à n’importe quelle logique de mise en œuvre, pas seulement à l’implémentation de CoinbaseSmartWallet, tout en aidant EOA à rester en sécurité dans un environnement compatible 7702. Nous présentons ci-dessous des défis spécifiques et des solutions de conception correspondantes qui nous permettent d’adapter en toute sécurité toute implémentation de portefeuille de contrats intelligents existante pour les mises à niveau EIP-7702. Défi #1 : Appliquer l’initialisation sécurisée Le premier obstacle majeur à la mise en œuvre de l’EIP-7702 provient de ses contraintes d’initialisation. Les portefeuilles de contrats intelligents traditionnels, y compris CoinbaseSmartWallet, gèrent généralement l’initialisation sécurisée (établissement de la propriété du compte) de manière atomique lors de leur déploiement, généralement par le biais d’un contrat d’usine distinct. Cette atomicité signifie que de nombreuses implémentations de ce type ont des fonctions d’initialisation non protégées qui ne peuvent être appelées qu’une seule fois. Cependant, la conception de l’EIP-7702 ne permet pas d’effectuer l’initialisation des données d’appel pendant le processus de délégation de code (l’étape équivalente du « déploiement »), donc cela ne peut pas être fait de manière atomique. Cette séparation des étapes crée une fenêtre de vulnérabilité critique. Lorsque le contrat de mise en œuvre est « déployé » sur EOA via EIP-7702, il n’y a aucune garantie que la transaction EVM standard pour ce portefeuille de mise à niveau et d’initialisation 7702 sera exécutée de manière atomique. Techniquement, même s’il est validé en même temps, le code qui définit l’autorisation peut être indépendant de l’application de la transaction d’initialisation, ce qui peut permettre à un attaquant d’exécuter de manière préventive la transaction d’initialisation et de revendiquer la propriété du compte intelligent. Solution : La signature EOA est requise pour configurer atomiquement l’implémentation et l’initialisation Notez que le portefeuille intelligent Coinbase existant est déployé après le proxy ERC-1967 avec l’implémentation UUPSUpgradable (la logique CoinbaseSmartWallet réelle). Le code de l’adresse de compte réelle est un proxy qui utilise un emplacement de stockage standard défini par ERC-1967 pour stocker des pointeurs vers sa logique d’implémentation. Notre solution à la vulnérabilité d’initialisation dans le contexte de 7702 inclut la reconnaissance que toute logique d’implémentation ne devient active (et donc dangereuse) que lorsque l’agent établit effectivement une connexion avec celle-ci. Donc, si nous ne pouvons pas forcer le déploiement et l’initialisation de l’atomicité, nous pouvons forcer la configuration et l’initialisation de l’implémentation de l’atomicité. EIP-7702Structure du contrat CoinbaseSmartWallet et processus de délégation logique Dans le contexte de l’EIP-7702, l’EOA elle-même est l’autorité initiale pour apporter des modifications à son compte, et une signature doit être fournie pour autoriser tout propriétaire qui initialise et établit un nouveau compte Smart. Notre contrat EIP7702Proxy implémente une fonction setImplementation qui configure atomiquement de nouvelles implémentations logiques et initialise les comptes. Fonction setImplementation : vérifie la signature d’EOA, qui inclut des données clés telles que l’adresse du nouveau contrat de mise en œuvre, les données d’appel d’initialisation, l’adresse du contrat de validation qui évaluera la sécurité de l’état final du compte, et la protection de base contre la relecture de signature telle que le nonce et le délai d’expiration. Définissez la valeur du pointeur ERC-1967 sur la nouvelle implémentation et exécutez les données d’appel fournies par rapport à la nouvelle implémentation logique. Appelez la fonction validateAccountState, qui doit être implémentée par le certificateur inclus dans la signature. Un validateur est un contrat spécifique à l’implémentation qui contient une logique permettant d’évaluer s’il considère l’état final du compte comme sécurisé. Par exemple, pour CoinbaseSmartWallet, CoinbaseSmartWalletValidator vérifie si le statut de propriété du compte n’est pas vide et n’est donc plus vulnérable à une initialisation arbitraire. Défi #2 : Stockage partagé délégué à l’EIP-7702 Les défis les plus complexes de l’EIP-7702 peuvent être liés à la gestion du stockage. EOA est libre de redéléguer sa logique à un autre contrat à tout moment, ou de supprimer complètement le délégué. Tous les délégués partagent les allocutions de l’EOA sur...