Язык Move как язык смарт-контрактов нового поколения характеризуется безопасностью как основной особенностью. В данной статье будет рассмотрена проблема безопасности языка Move с трех аспектов: характеристики языка, механизмы выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
Язык Move отказался от нелинейной логики, не поддерживает динамическую диспетчеризацию и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д., для реализации альтернативных моделей программирования. Ниже приведен простой пример реализации токенов активов:
движение
модуль 0x1::TestCoin {
используйте 0x1::signer;
const ADMIN: address = @0x1;
структура Coin имеет ключ, хранилище {
значение: u64
}
структура Info имеет ключ {
total_supply: u64
}
// Общая эмиссия равна сумме значений всех монет
инвариант для каждого addr: адрес, где существует(addr):
глобальный(ADMIN).total_supply == сумма(выбрать Coin.value (глобальный(addr)));
a) Проверка неизменяемости: определение сохранения состояния через язык спецификаций.
b) Проверка байт-кода: принудительное выполнение безопасных типов и линейности, предотвращение незаконных операций.
2. Механизм работы Move
Программа Move работает в виртуальной машине и не может напрямую обращаться к системной памяти. Состояние программы состоит из стека вызовов, памяти, глобальных переменных и операционных массивов.
MoveVM отделяет хранение данных и стек вызовов, что повышает безопасность и эффективность выполнения. Независимое хранение ресурсов и строгий контроль доступа эффективно предотвращают некоторые распространенные уязвимости.
3. Переместите Провайдера
Move Prover — это инструмент формальной верификации, который использует алгоритм дедуктивной верификации для проверки корректности программ. Его архитектура представлена ниже:
Получение исходных файлов Move и стандартов
Компиляция в байт-код и модель объекта валидатора
Преобразовать в промежуточный язык Boogie
Генерация условий проверки
Используйте решатель Z3 для проверки
Вывод диагностического отчета
Язык спецификации перемещения используется для описания норм поведения программы и может быть написан независимо от бизнес-кода.
4. Резюме
Язык Move учитывает безопасность на уровне языковых характеристик, выполнения виртуальной машины и средств безопасности. Он может эффективно избежать некоторых распространенных уязвимостей, но все же необходимо обратить внимание на вопросы аутентификации, логики и т.д. Рекомендуется разработчикам использовать сторонний аудит безопасности и передать валидацию стандартов профессиональным компаниям по безопасности.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
22 Лайков
Награда
22
7
Поделиться
комментарий
0/400
FromMinerToFarmer
· 07-08 18:00
Двигайся, убийца пришёл~
Посмотреть ОригиналОтветить0
ProxyCollector
· 07-08 01:41
Серия «Написано слишком долго, никто не читает»
Посмотреть ОригиналОтветить0
TestnetScholar
· 07-06 08:22
Move — это будущее!
Посмотреть ОригиналОтветить0
MetaverseVagabond
· 07-06 08:20
Какова польза от безопасности, если не умеешь зарабатывать?
Обсуждение безопасности языка Move: всесторонний анализ характеристик, механизмов и инструментов верификации
Введение
Язык Move как язык смарт-контрактов нового поколения характеризуется безопасностью как основной особенностью. В данной статье будет рассмотрена проблема безопасности языка Move с трех аспектов: характеристики языка, механизмы выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
Язык Move отказался от нелинейной логики, не поддерживает динамическую диспетчеризацию и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д., для реализации альтернативных моделей программирования. Ниже приведен простой пример реализации токенов активов:
движение модуль 0x1::TestCoin { используйте 0x1::signer;
// Общая эмиссия равна сумме значений всех монет инвариант для каждого addr: адрес, где существует(addr): глобальный(ADMIN).total_supply == сумма(выбрать Coin.value (глобальный(addr)));
}
Два важных механизма безопасности языка Move:
a) Проверка неизменяемости: определение сохранения состояния через язык спецификаций.
b) Проверка байт-кода: принудительное выполнение безопасных типов и линейности, предотвращение незаконных операций.
2. Механизм работы Move
Программа Move работает в виртуальной машине и не может напрямую обращаться к системной памяти. Состояние программы состоит из стека вызовов, памяти, глобальных переменных и операционных массивов.
MoveVM отделяет хранение данных и стек вызовов, что повышает безопасность и эффективность выполнения. Независимое хранение ресурсов и строгий контроль доступа эффективно предотвращают некоторые распространенные уязвимости.
3. Переместите Провайдера
Move Prover — это инструмент формальной верификации, который использует алгоритм дедуктивной верификации для проверки корректности программ. Его архитектура представлена ниже:
Язык спецификации перемещения используется для описания норм поведения программы и может быть написан независимо от бизнес-кода.
4. Резюме
Язык Move учитывает безопасность на уровне языковых характеристик, выполнения виртуальной машины и средств безопасности. Он может эффективно избежать некоторых распространенных уязвимостей, но все же необходимо обратить внимание на вопросы аутентификации, логики и т.д. Рекомендуется разработчикам использовать сторонний аудит безопасности и передать валидацию стандартов профессиональным компаниям по безопасности.