Analyse de la sécurité du langage Move : Les innovateurs des smart contracts
Le langage Move est un langage de contrat intelligent qui peut s'exécuter dans un environnement blockchain mettant en œuvre MoveVM. Dès le départ, il a été conçu en tenant compte de nombreux problèmes de sécurité liés à la blockchain et aux contrats intelligents, tout en s'inspirant de certaines idées de conception sécuritaire du langage Rust. En tant que nouveau langage de contrat intelligent caractérisé principalement par la sécurité, quelle est la sécurité de Move ? Peut-il éviter, au niveau du langage ou par le biais de mécanismes associés, les menaces de sécurité courantes des machines virtuelles de contrat telles que EVM et WASM ? Le langage Move présente-t-il des vulnérabilités de sécurité uniques ?
Cet article abordera la question de la sécurité du langage Move sous trois aspects : les caractéristiques linguistiques, le mécanisme d'exécution et les outils de validation.
1. Les caractéristiques de sécurité du langage Move
Contrairement à de nombreux langages de programmation existants, le langage Move a pour objectif de prendre en charge l'écriture de programmes capables d'interagir en toute sécurité avec du code non fiable, tout en prenant en charge la validation statique. Move atteint cet objectif en renonçant à toute logique non linéaire basée sur la flexibilité, en ne prenant pas en charge le dispatch dynamique, ni les appels externes récursifs, mais en utilisant des concepts tels que les génériques, le stockage global, les ressources, etc., pour mettre en œuvre certains modèles de programmation alternatifs.
Voici quelques caractéristiques de sécurité clés du langage Move :
Modularité : chaque module Move est composé d'une série de types de structures et de définitions de processus. Les modules peuvent importer des types déclarés dans d'autres modules et appeler leurs processus.
Type de ressource : le type de ressource défini par une structure utilisant la syntaxe has key peut être stocké dans un stockage clé-valeur global persistant.
Stockage global : permet aux programmes Move de stocker des données persistantes, ces données ne peuvent être lues ou écrites par programmation que par le module qui les possède, mais elles peuvent être consultées par d'autres modules sur le grand livre public.
Système de type statique : Move dispose d'un puissant système de type statique qui peut capturer de nombreuses erreurs lors de la compilation.
Types linéaires : le type de ressource par défaut est de type linéaire, empêchant la copie ou la destruction implicite.
Récurrence d'invariance : Il est possible de définir des invariants de conservation d'état, utilisés pour la vérification formelle.
Vérificateur de bytecode : impose le système de types au niveau du bytecode, empêchant les comportements malveillants.
Ces caractéristiques constituent ensemble la base de sécurité du langage Move, lui permettant d'éviter de nombreuses vulnérabilités courantes des smart contracts.
2. Mécanisme de fonctionnement de Move
Le programme Move s'exécute dans une machine virtuelle, et il n'est pas possible d'accéder à la mémoire système pendant l'exécution, ce qui garantit une exécution sécurisée dans un environnement non fiable.
Move utilise un interpréteur basé sur une pile pour exécuter les instructions de bytecode. Son état est composé de la pile d'appels, de la mémoire, des variables globales et de la pile des opérandes. Cette conception facilite le contrôle et la détection des copies et des mouvements entre les variables.
MoveVM sépare le stockage des données et la pile d'appels, ce qui constitue la plus grande différence avec l'EVM. Les ressources sous l'adresse du compte d'état utilisateur ( sont stockées de manière indépendante, et les appels de programme doivent respecter des règles coercitives liées aux autorisations et aux ressources. Ce design sacrifie une certaine flexibilité, mais améliore considérablement la sécurité et l'efficacité d'exécution.
![Analyse de la sécurité de Move : le changeur de jeu des langages de smart contracts])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
3. Move Prover
Move Prover est un outil de vérification formelle du langage Move, utilisant des algorithmes de vérification déductive pour vérifier si le programme se conforme au comportement attendu. Il peut inférer le comportement du programme en fonction des informations connues, garantissant qu'il correspond aux attentes, ce qui aide à assurer la correction du programme et à réduire la charge de travail des tests manuels.
Le flux de travail de Move Prover est le suivant :
Recevoir le fichier source Move comme entrée, ce fichier doit contenir les spécifications du programme.
Extraire les spécifications et compiler les fichiers sources en bytecode.
Convertir les spécifications et le bytecode en modèle d'objet de validateur.
Traduire le modèle en langage intermédiaire Boogie.
Le système de vérification Boogie génère des conditions de vérification.
Le solveur Z3 vérifie si les conditions de validation sont satisfaites.
Générer un rapport de diagnostic et le convertir en erreur au niveau du code source.
Le Move Specification Language est utilisé pour décrire les spécifications des programmes, c'est un sous-ensemble du langage Move. Il supporte la description statique du comportement correct des programmes, sans affecter le code de production. Les spécifications peuvent être écrites de manière indépendante, facilitant la séparation du code métier et du code de validation.
![Analyse de la sécurité de Move : un changement de jeu pour le langage des smart contracts])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(
4. Résumé
Le langage Move est conçu de manière exceptionnelle en matière de sécurité, prenant en compte de manière exhaustive les caractéristiques du langage, l'exécution de la machine virtuelle et les outils de sécurité. Il sacrifie une certaine flexibilité pour renforcer la vérification des types et la logique linéaire, facilitant ainsi l'automatisation de la vérification des compilations et de la validation formelle. La conception de MoveVM sépare l'état de la logique, ce qui répond mieux aux besoins de gestion de la sécurité des actifs blockchain.
Le langage Move permet d'éviter efficacement les vulnérabilités courantes dans l'EVM telles que la réentrance, le débordement, et les injections Call/DeleGateCall. Cependant, les problèmes d'authentification, de logique de code et de débordement de structures de grands entiers nécessitent toujours une attention particulière de la part des développeurs. Bien que Move prenne en compte la sécurité pour les programmeurs, il n'existe pas de langage ou de programme totalement sécurisé. Il est conseillé aux développeurs de contrats intelligents Move d'utiliser les services d'audit d'entreprises de sécurité tierces et de confier la rédaction et la validation de code conforme à des équipes de sécurité professionnelles.
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
17 J'aime
Récompense
17
5
Reposter
Partager
Commentaire
0/400
OptionWhisperer
· 07-15 10:34
Accélérez jusqu'à la Floor Price pour voir le move.
Voir l'originalRépondre0
NftCollectors
· 07-14 08:08
Move ce piège de mécanisme de sécurité n'est pas inférieur au rapport de la section dorée de l'art byzantin, c'est un véritable jalon du point de vue de l'histoire de l'art Blockchain.
Voir l'originalRépondre0
BearMarketSurvivor
· 07-14 03:19
La sécurité est un bon discours.
Voir l'originalRépondre0
ForkTongue
· 07-14 03:08
Il y a de nouveaux jouets pour écrire des contrats ?
Voir l'originalRépondre0
FancyResearchLab
· 07-14 03:05
Encore un nouveau trou que Lu Ban aime. Théoriquement, c'est plutôt sûr.
Analyse de la sécurité du langage Move : nouvelle norme pour le développement de smart contracts
Analyse de la sécurité du langage Move : Les innovateurs des smart contracts
Le langage Move est un langage de contrat intelligent qui peut s'exécuter dans un environnement blockchain mettant en œuvre MoveVM. Dès le départ, il a été conçu en tenant compte de nombreux problèmes de sécurité liés à la blockchain et aux contrats intelligents, tout en s'inspirant de certaines idées de conception sécuritaire du langage Rust. En tant que nouveau langage de contrat intelligent caractérisé principalement par la sécurité, quelle est la sécurité de Move ? Peut-il éviter, au niveau du langage ou par le biais de mécanismes associés, les menaces de sécurité courantes des machines virtuelles de contrat telles que EVM et WASM ? Le langage Move présente-t-il des vulnérabilités de sécurité uniques ?
Cet article abordera la question de la sécurité du langage Move sous trois aspects : les caractéristiques linguistiques, le mécanisme d'exécution et les outils de validation.
1. Les caractéristiques de sécurité du langage Move
Contrairement à de nombreux langages de programmation existants, le langage Move a pour objectif de prendre en charge l'écriture de programmes capables d'interagir en toute sécurité avec du code non fiable, tout en prenant en charge la validation statique. Move atteint cet objectif en renonçant à toute logique non linéaire basée sur la flexibilité, en ne prenant pas en charge le dispatch dynamique, ni les appels externes récursifs, mais en utilisant des concepts tels que les génériques, le stockage global, les ressources, etc., pour mettre en œuvre certains modèles de programmation alternatifs.
Voici quelques caractéristiques de sécurité clés du langage Move :
Modularité : chaque module Move est composé d'une série de types de structures et de définitions de processus. Les modules peuvent importer des types déclarés dans d'autres modules et appeler leurs processus.
Type de ressource : le type de ressource défini par une structure utilisant la syntaxe has key peut être stocké dans un stockage clé-valeur global persistant.
Stockage global : permet aux programmes Move de stocker des données persistantes, ces données ne peuvent être lues ou écrites par programmation que par le module qui les possède, mais elles peuvent être consultées par d'autres modules sur le grand livre public.
Système de type statique : Move dispose d'un puissant système de type statique qui peut capturer de nombreuses erreurs lors de la compilation.
Types linéaires : le type de ressource par défaut est de type linéaire, empêchant la copie ou la destruction implicite.
Récurrence d'invariance : Il est possible de définir des invariants de conservation d'état, utilisés pour la vérification formelle.
Vérificateur de bytecode : impose le système de types au niveau du bytecode, empêchant les comportements malveillants.
Ces caractéristiques constituent ensemble la base de sécurité du langage Move, lui permettant d'éviter de nombreuses vulnérabilités courantes des smart contracts.
2. Mécanisme de fonctionnement de Move
Le programme Move s'exécute dans une machine virtuelle, et il n'est pas possible d'accéder à la mémoire système pendant l'exécution, ce qui garantit une exécution sécurisée dans un environnement non fiable.
Move utilise un interpréteur basé sur une pile pour exécuter les instructions de bytecode. Son état est composé de la pile d'appels, de la mémoire, des variables globales et de la pile des opérandes. Cette conception facilite le contrôle et la détection des copies et des mouvements entre les variables.
MoveVM sépare le stockage des données et la pile d'appels, ce qui constitue la plus grande différence avec l'EVM. Les ressources sous l'adresse du compte d'état utilisateur ( sont stockées de manière indépendante, et les appels de programme doivent respecter des règles coercitives liées aux autorisations et aux ressources. Ce design sacrifie une certaine flexibilité, mais améliore considérablement la sécurité et l'efficacité d'exécution.
![Analyse de la sécurité de Move : le changeur de jeu des langages de smart contracts])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
3. Move Prover
Move Prover est un outil de vérification formelle du langage Move, utilisant des algorithmes de vérification déductive pour vérifier si le programme se conforme au comportement attendu. Il peut inférer le comportement du programme en fonction des informations connues, garantissant qu'il correspond aux attentes, ce qui aide à assurer la correction du programme et à réduire la charge de travail des tests manuels.
Le flux de travail de Move Prover est le suivant :
Le Move Specification Language est utilisé pour décrire les spécifications des programmes, c'est un sous-ensemble du langage Move. Il supporte la description statique du comportement correct des programmes, sans affecter le code de production. Les spécifications peuvent être écrites de manière indépendante, facilitant la séparation du code métier et du code de validation.
![Analyse de la sécurité de Move : un changement de jeu pour le langage des smart contracts])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(
4. Résumé
Le langage Move est conçu de manière exceptionnelle en matière de sécurité, prenant en compte de manière exhaustive les caractéristiques du langage, l'exécution de la machine virtuelle et les outils de sécurité. Il sacrifie une certaine flexibilité pour renforcer la vérification des types et la logique linéaire, facilitant ainsi l'automatisation de la vérification des compilations et de la validation formelle. La conception de MoveVM sépare l'état de la logique, ce qui répond mieux aux besoins de gestion de la sécurité des actifs blockchain.
Le langage Move permet d'éviter efficacement les vulnérabilités courantes dans l'EVM telles que la réentrance, le débordement, et les injections Call/DeleGateCall. Cependant, les problèmes d'authentification, de logique de code et de débordement de structures de grands entiers nécessitent toujours une attention particulière de la part des développeurs. Bien que Move prenne en compte la sécurité pour les programmeurs, il n'existe pas de langage ou de programme totalement sécurisé. Il est conseillé aux développeurs de contrats intelligents Move d'utiliser les services d'audit d'entreprises de sécurité tierces et de confier la rédaction et la validation de code conforme à des équipes de sécurité professionnelles.