Le langage Move, en tant que nouveau langage de contrat intelligent de génération, a dès le début de sa conception pris pleinement en compte les problèmes de sécurité liés à la blockchain et aux contrats intelligents. Cet article analysera la sécurité du langage Move sous trois aspects : les caractéristiques du langage, le mécanisme d'exécution et les outils de vérification.
1. Les caractéristiques de sécurité du langage Move
Le langage Move possède les principales caractéristiques de sécurité suivantes :
Abandonner la répartition dynamique, les appels externes récursifs et autres logiques non linéaires, éviter les failles de réentrance, etc.
Utiliser les types de ressources et le mécanisme de stockage global pour réaliser la gestion sécurisée du stockage et des ressources.
Effectuer une double vérification de sécurité à la compilation à l'aide de la réduction par invariants et du vérificateur de bytecode
const ADMIN: adresse = @0x1;
struct Coin a une clé {
valeur: u64
}
struct Info a une clé {
total_supply: u64
}
invariant pour tout addr: adresse où existe<coin>(addr):
global\u003cinfo\u003e(ADMIN).total_supply \u003e= global\u003ccoin\u003e(addr).value;
public fun initialize(account: &signer) {
assert!(signer::address_of(account) == ADMIN, 1);
move_to(compte, Info { total_supply: 0 });
}
fun publique mint(compte: &signataire, montant: u64): Pièce {
assert!(signer::address_of(compte) == ADMIN, 1);
let supply = borrow_global_mut\u003cinfo\u003e(ADMIN);
supply.total_supply = supply.total_supply + amount;
Pièce { valeur : montant }
}
fun publique valeur_mut(coin: &mut Coin): &mut u64 {
&mut coin.value
}
}
Move garantit la sécurité du code par la réduction des invariants et le vérificateur de bytecode :
Règle d'invariant : utilisée pour vérifier que la somme des valeurs de tous les objets Coin dans le système doit être égale à total_supply dans Info.
Vérificateur de bytecode : vérification de type stricte et logique linéaire, empêchant la création, la copie ou la destruction illégale de ressources.
2. Mécanisme de fonctionnement de Move
Le programme Move s'exécute dans une machine virtuelle et possède les caractéristiques suivantes :
L'accès à la mémoire système n'est pas possible en cours d'exécution, garantissant un fonctionnement sécurisé dans un environnement non fiable.
Utiliser un interpréteur basé sur une pile pour exécuter des instructions de bytecode, facile à mettre en œuvre et à contrôler.
Séparer le stockage des données et la pile d'appels pour améliorer la sécurité et l'efficacité d'exécution
Les ressources ne peuvent être déplacées que de manière destructive, et ne peuvent pas être copiées.
L'état d'exécution du programme Move est composé d'un quadruplet ⟨C, M, G, S⟩ :
C: pile d'appels
M : mémoire ( tas )
G: variables globales ( pile )
S: opérande
Ce design sépare l'état de l'utilisateur et la logique du programme, améliorant ainsi la sécurité et l'efficacité de l'exécution concurrente.
3. Déplacer le Prover
Move Prover est un outil de vérification formelle utilisé pour garantir la correctitude des contrats intelligents. Son flux de travail est le suivant :
Recevoir le fichier source Move et les spécifications comme entrée
Extraire la spécification et compiler en bytecode
Convertir en modèle d'objet de validateur
Traduire en langue intermédiaire Boogie
Générer des conditions de vérification
Utiliser le solveur Z3 pour vérifier la formule
Générer un rapport de diagnostic
Move Prover utilise le Move Specification Language pour décrire les spécifications des programmes. Ce langage est un sous-ensemble de Move, permettant d'écrire des spécifications de manière indépendante du code métier.
Résumé
Le langage Move a pris en compte la sécurité de manière exhaustive en ce qui concerne les caractéristiques du langage, l'exécution de la machine virtuelle et les outils de sécurité. Il peut efficacement éviter des vulnérabilités communes telles que les attaques par réentrance et les débordements, mais il est toujours nécessaire de faire attention aux problèmes d'authentification et de logique. Il est conseillé aux développeurs d'utiliser des services d'audit tiers et de confier la rédaction des spécifications à des entreprises de sécurité afin d'améliorer davantage la sécurité des contrats.
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.
10 J'aime
Récompense
10
6
Reposter
Partager
Commentaire
0/400
gaslight_gasfeez
· 08-19 03:55
move a été soufflé vers le ciel, mais finalement, cela dépendait toujours des tests.
Voir l'originalRépondre0
GhostChainLoyalist
· 08-18 16:10
Ce Move est vraiment solide !
Voir l'originalRépondre0
LiquidityNinja
· 08-16 06:53
Le mécanisme des types de ressources a vraiment quelque chose d'intéressant !
Voir l'originalRépondre0
ProofOfNothing
· 08-16 06:50
Les vieux joueurs de move sont-ils morts ?
Voir l'originalRépondre0
JustAnotherWallet
· 08-16 06:49
Move est plutôt pas mal.
Voir l'originalRépondre0
rekt_but_not_broke
· 08-16 06:44
Encore un tas de paroles creuses, avez-vous testé les performances réelles ?
Analyse de la sécurité de Move : caractéristiques, mécanismes et outils de validation en profondeur
Analyse de la sécurité du langage Move
Le langage Move, en tant que nouveau langage de contrat intelligent de génération, a dès le début de sa conception pris pleinement en compte les problèmes de sécurité liés à la blockchain et aux contrats intelligents. Cet article analysera la sécurité du langage Move sous trois aspects : les caractéristiques du langage, le mécanisme d'exécution et les outils de vérification.
1. Les caractéristiques de sécurité du langage Move
Le langage Move possède les principales caractéristiques de sécurité suivantes :
Voici un exemple simple de contrat Move :
déplacer module 0x1::TestCoin { utiliser 0x1::signer;
}
Move garantit la sécurité du code par la réduction des invariants et le vérificateur de bytecode :
Règle d'invariant : utilisée pour vérifier que la somme des valeurs de tous les objets Coin dans le système doit être égale à total_supply dans Info.
Vérificateur de bytecode : vérification de type stricte et logique linéaire, empêchant la création, la copie ou la destruction illégale de ressources.
2. Mécanisme de fonctionnement de Move
Le programme Move s'exécute dans une machine virtuelle et possède les caractéristiques suivantes :
L'état d'exécution du programme Move est composé d'un quadruplet ⟨C, M, G, S⟩ :
Ce design sépare l'état de l'utilisateur et la logique du programme, améliorant ainsi la sécurité et l'efficacité de l'exécution concurrente.
3. Déplacer le Prover
Move Prover est un outil de vérification formelle utilisé pour garantir la correctitude des contrats intelligents. Son flux de travail est le suivant :
Move Prover utilise le Move Specification Language pour décrire les spécifications des programmes. Ce langage est un sous-ensemble de Move, permettant d'écrire des spécifications de manière indépendante du code métier.
Résumé
Le langage Move a pris en compte la sécurité de manière exhaustive en ce qui concerne les caractéristiques du langage, l'exécution de la machine virtuelle et les outils de sécurité. Il peut efficacement éviter des vulnérabilités communes telles que les attaques par réentrance et les débordements, mais il est toujours nécessaire de faire attention aux problèmes d'authentification et de logique. Il est conseillé aux développeurs d'utiliser des services d'audit tiers et de confier la rédaction des spécifications à des entreprises de sécurité afin d'améliorer davantage la sécurité des contrats.