Аналіз безпеки Move: революціонери смартконтрактів
Мова Move є мовою смартконтрактів, яка може компілюватись і виконуватись в блокчейн-середовищі, що реалізує MoveVM. Як нове покоління мов смартконтрактів з основною характеристикою безпеки, яка її безпека? Чи може вона уникнути поширених загроз безпеці, що виникають у віртуальних машинах контрактів, таких як EVM, WASM тощо? У цій статті буде розглянуто питання безпеки мови Move з трьох аспектів: особливості мови, механізм виконання та інструменти верифікації.
1. Безпекові характеристики мови Move
На відміну від багатьох існуючих мов програмування, мова Move була спроектована так, щоб підтримувати безпечну взаємодію з ненадійним кодом, а також підтримувати статичну верифікацію. Move відмовилася від нелінійної логіки, що спирається на гнучкість, не підтримує динамічну диспетчеризацію та рекурсивні зовнішні виклики, а натомість використовує такі концепції, як узагальнення, глобальне зберігання, ресурси тощо, для реалізації альтернативних моделей програмування.
Ось приклад реалізації токенізованого активу на мові Move:
const ADMIN: адреса = @0x1;
структура Coin має ключ, магазин {
Вартість: U64
}
структура Info має ключ {
total_supply: U64
}
модуль spec {
інваріант для всіх addr: адреса, де існує<coin>(addr):
<info>глобальний (ADMIN).total_supply >= глобальний<coin>(addr).value;
}
Публічні веселощі initialize(account: &signer) {
assert!(signer::address_of(account) == ADMIN, 1);
move_to(account, info { total_supply: 0 })
}
публічні веселощі mint(account: &підписувач, кількість: u64): Coin {
assert!(signer::address_of(account) == ADMIN, 1);
let coin = Coin { значення: сума };
let info = borrow_global_mut<info>(ADMIN);
info.total_supply = info.total_supply + сума;
монета
}
Публічні веселощі value(coin: &Coin): U64 {
Значення монети
}
}
Цей приклад демонструє деякі ключові безпекові особливості мови Move:
Модульність: кожен модуль Move складається з визначення типу структури та процесу, може імпортувати визначення типів з інших модулів і викликати процеси з інших модулів.
Тип ресурсу: структури, визначені за допомогою ключа has або маркера store, визначаються як тип ресурсу, який може зберігатися в постійній глобальній ключовій парі.
Глобальне зберігання: дозволяє програмам Move зберігати постійні дані, які можуть бути прочитані та записані програмно лише власниками модуля, але зберігаються в публічному реєстрі і можуть бути переглянуті іншими модулями.
Контроль доступу: можна реалізувати контроль доступу до ключових операцій за допомогою асерцій тощо.
Невизначеність: можна визначити статичні перевірки невизначеностей для формальної верифікації.
Верифікація байт-коду: включає безпечні типи та лініаризацію верифікації, щоб запобігти незаконним операціям з типами ресурсів.
Ці характеристики спільно забезпечують безпеку мови Move під час компіляції.
2. Механізм роботи Move
Програма Move працює у віртуальній машині, не має доступу до системної пам'яті та може безпечно працювати в ненадійних середовищах.
Програма Move виконується на стеку, глобальне сховище ділиться на пам'ять ( стек ) і глобальні змінні (. Пам'ять не може зберігати вказівники на елементи пам'яті, глобальні змінні використовуються для зберігання вказівників на елементи пам'яті.
Байтові команди Move виконуються у стековому інтерпретаторі, що полегшує реалізацію та контроль, що підходить для сценаріїв блокчейну. Значення типів ресурсів можуть бути лише знищені при переміщенні.
Статус виконання програми Move представляється чотиривимірним кортежем ⟨C, M, G, S⟩, що включає стек викликів, пам'ять, глобальні змінні та операнди. Під час виконання виклики функцій створюють нові об'єкти стека викликів, а інструкції розгалуження здійснюють статичний перехід, що уникає динамічної диспетчеризації.
MoveVM розділяє зберігання даних та стек викликів, що відрізняється від дизайну EVM. Хоча цей дизайн жертвує гнучкістю, він підвищує безпеку та ефективність виконання.
![Аналіз безпеки Move: зміна правил гри в мовах смартконтрактів])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Рух Ровер
Move Prover є інструментом формальної верифікації на основі міркувань, який використовує формальну мову для опису поведінки програми та алгоритми міркування для перевірки того, чи відповідає програма очікуванням.
Архітектура Move Prover така:
Отримання вхідного файлу Move, що містить специфікацію програми.
Парсер витягує специфікацію, компілятор перетворює вихідний код на байт-код.
Перетворення на модель об'єкта валідатора.
Перекладіть на проміжну мову Boogie.
Система верифікації Boogie генерує умови верифікації.
Z3-решувач перевіряє, чи SMT-формула є незадовільною.
Генерувати діагностичний звіт та відновити до рівня виходу коду.
Move використовує Move Specification Language для опису специфікацій, є підмножиною мови Move.
Move Prover є корисним інструментом, який допомагає розробникам забезпечити правильність смартконтрактів та зменшити ризики транзакцій.
![Аналіз безпеки Move: зміна правил гри в мовах смартконтрактів])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Підсумок
Мова Move відзначається відмінним дизайном безпеки, який враховує різні аспекти, такі як характеристики мови, виконання віртуальної машини та інструменти безпеки. Вона жертвує частиною гнучкості, зміцнюючи перевірку типів і лінійну логіку, що полегшує компіляцію та формальну верифікацію. MoveVM відокремлює стан від логіки, що краще відповідає потребам безпеки управління активами в блокчейні.
Мова Move може ефективно уникати поширених вразливостей EVM, таких як повторні виклики, переповнення, ін'єкції тощо, але проблеми з авторизацією, логікою та переповненням великих чисел все ще потребують уваги розробників. Хоча Move враховує безпеку, все ж рекомендується використовувати послуги аудиту третьої сторони, а написання та перевірку коду доручити професійним командам безпеки.
![Move безпекове дослідження: смартконтракти як зміна правил гри])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(\u003c/info\u003e\u003c/coin\u003e\u003c/info\u003e\u003c/coin\u003e
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
13 лайків
Нагородити
13
6
Поділіться
Прокоментувати
0/400
NotGonnaMakeIt
· 07-27 10:27
переміщення це просто
Переглянути оригіналвідповісти на0
DaoGovernanceOfficer
· 07-27 10:23
*с sigh* ще одна презентація безпеки, яка не має емпіричних метрик валідації...
Повний аналіз безпеки мови Move: охоронець смартконтрактів наступного покоління
Аналіз безпеки Move: революціонери смартконтрактів
Мова Move є мовою смартконтрактів, яка може компілюватись і виконуватись в блокчейн-середовищі, що реалізує MoveVM. Як нове покоління мов смартконтрактів з основною характеристикою безпеки, яка її безпека? Чи може вона уникнути поширених загроз безпеці, що виникають у віртуальних машинах контрактів, таких як EVM, WASM тощо? У цій статті буде розглянуто питання безпеки мови Move з трьох аспектів: особливості мови, механізм виконання та інструменти верифікації.
1. Безпекові характеристики мови Move
На відміну від багатьох існуючих мов програмування, мова Move була спроектована так, щоб підтримувати безпечну взаємодію з ненадійним кодом, а також підтримувати статичну верифікацію. Move відмовилася від нелінійної логіки, що спирається на гнучкість, не підтримує динамічну диспетчеризацію та рекурсивні зовнішні виклики, а натомість використовує такі концепції, як узагальнення, глобальне зберігання, ресурси тощо, для реалізації альтернативних моделей програмування.
Ось приклад реалізації токенізованого активу на мові Move:
перемістити модуль 0x1::TestCoin { використовуйте 0x1::signer;
}
Цей приклад демонструє деякі ключові безпекові особливості мови Move:
Модульність: кожен модуль Move складається з визначення типу структури та процесу, може імпортувати визначення типів з інших модулів і викликати процеси з інших модулів.
Тип ресурсу: структури, визначені за допомогою ключа has або маркера store, визначаються як тип ресурсу, який може зберігатися в постійній глобальній ключовій парі.
Глобальне зберігання: дозволяє програмам Move зберігати постійні дані, які можуть бути прочитані та записані програмно лише власниками модуля, але зберігаються в публічному реєстрі і можуть бути переглянуті іншими модулями.
Контроль доступу: можна реалізувати контроль доступу до ключових операцій за допомогою асерцій тощо.
Невизначеність: можна визначити статичні перевірки невизначеностей для формальної верифікації.
Верифікація байт-коду: включає безпечні типи та лініаризацію верифікації, щоб запобігти незаконним операціям з типами ресурсів.
Ці характеристики спільно забезпечують безпеку мови Move під час компіляції.
2. Механізм роботи Move
Програма Move працює у віртуальній машині, не має доступу до системної пам'яті та може безпечно працювати в ненадійних середовищах.
Програма Move виконується на стеку, глобальне сховище ділиться на пам'ять ( стек ) і глобальні змінні (. Пам'ять не може зберігати вказівники на елементи пам'яті, глобальні змінні використовуються для зберігання вказівників на елементи пам'яті.
Байтові команди Move виконуються у стековому інтерпретаторі, що полегшує реалізацію та контроль, що підходить для сценаріїв блокчейну. Значення типів ресурсів можуть бути лише знищені при переміщенні.
Статус виконання програми Move представляється чотиривимірним кортежем ⟨C, M, G, S⟩, що включає стек викликів, пам'ять, глобальні змінні та операнди. Під час виконання виклики функцій створюють нові об'єкти стека викликів, а інструкції розгалуження здійснюють статичний перехід, що уникає динамічної диспетчеризації.
MoveVM розділяє зберігання даних та стек викликів, що відрізняється від дизайну EVM. Хоча цей дизайн жертвує гнучкістю, він підвищує безпеку та ефективність виконання.
![Аналіз безпеки Move: зміна правил гри в мовах смартконтрактів])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Рух Ровер
Move Prover є інструментом формальної верифікації на основі міркувань, який використовує формальну мову для опису поведінки програми та алгоритми міркування для перевірки того, чи відповідає програма очікуванням.
Архітектура Move Prover така:
Move використовує Move Specification Language для опису специфікацій, є підмножиною мови Move.
Move Prover є корисним інструментом, який допомагає розробникам забезпечити правильність смартконтрактів та зменшити ризики транзакцій.
![Аналіз безпеки Move: зміна правил гри в мовах смартконтрактів])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Підсумок
Мова Move відзначається відмінним дизайном безпеки, який враховує різні аспекти, такі як характеристики мови, виконання віртуальної машини та інструменти безпеки. Вона жертвує частиною гнучкості, зміцнюючи перевірку типів і лінійну логіку, що полегшує компіляцію та формальну верифікацію. MoveVM відокремлює стан від логіки, що краще відповідає потребам безпеки управління активами в блокчейні.
Мова Move може ефективно уникати поширених вразливостей EVM, таких як повторні виклики, переповнення, ін'єкції тощо, але проблеми з авторизацією, логікою та переповненням великих чисел все ще потребують уваги розробників. Хоча Move враховує безпеку, все ж рекомендується використовувати послуги аудиту третьої сторони, а написання та перевірку коду доручити професійним командам безпеки.
![Move безпекове дослідження: смартконтракти як зміна правил гри])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(\u003c/info\u003e\u003c/coin\u003e\u003c/info\u003e\u003c/coin\u003e