Глубина безопасности языка Move: новый стандарт разработки смарт-контрактов

Анализ безопасности языка Move: революционер языка смарт-контрактов

Язык Move является языком смарт-контрактов, который может работать в блокчейн-среде с реализованной MoveVM. При его разработке изначально учитывались многочисленные проблемы безопасности, связанные с блокчейном и смарт-контрактами, и были учтены аспекты безопасности языка RUST. Какова безопасность этого языка как нового поколения смарт-контрактов, основным признаком которого является безопасность? Может ли он избежать распространенных угроз безопасности виртуальных машин контрактов, таких как EVM и WASM, на уровне языка или через соответствующие механизмы? Существуют ли у него собственные уникальные проблемы безопасности?

В данной статье будет рассмотрена проблема безопасности языка Move с трех аспектов: языковые характеристики, механизм работы и инструменты проверки.

Анализ безопасности Move: смарт-контракты как игра в изменениях

1. Безопасные характеристики языка Move

В отличие от многих существующих языков программирования, язык Move был разработан для поддержки как написания программ, которые безопасно взаимодействуют с ненадежным кодом, так и для статической проверки. Move обладает такими характеристиками безопасности, потому что отказывается от нелинейной логики, основанной на соображениях гибкости, не поддерживает динамическое распределение и внешние рекурсивные вызовы, а использует концепции обобщений, глобального хранилища, ресурсов и т.д. для реализации некоторых альтернативных программных моделей. Например, Move опускает динамическое распределение и рекурсивные вызовы, которые в других языках смарт-контрактов приводят к дорогостоящим уязвимостям повторного входа.

Основные функции безопасности Move включают:

  1. Модуль(: Каждый Move модуль состоит из серии определений структур и процессов. Модуль может импортировать определения типов и вызывать процессы, объявленные в других модулях.

  2. Структуры): могут быть определены как тип ресурса, который может храниться в постоянном глобальном хранилище ключ/значение.

3( 过程)Function): определяет бизнес-логику контракта.

4( Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны/записаны программным образом только модулем, которому они принадлежат.

  1. Проверка инварианта: можно определить статическую проверку инварианта, которая указывает на сохранение ресурсов в системе.

  2. Верификатор байт-кода: выполняет безопасную типизацию и линейную проверку байт-кода, принуждая к соблюдению правил создания, уничтожения и доступа к ресурсам.

Благодаря этим характеристикам, Move может гарантировать высокую безопасность на этапе компиляции. Далее мы проанализируем механизм работы Move и посмотрим, как MoveVM обеспечивает безопасность во время выполнения.

![Анализ безопасности Move: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp)

2. Механизм работы Move

Программа Move выполняется в виртуальной машине и не может получить доступ к системной памяти во время выполнения. Это позволяет Move безопасно работать в ненадежной среде, не подвергаясь разрушению или злоупотреблению.

Программа Move выполняется на стеке. Глобальное хранилище делится на память ( кучу ) и глобальные переменные ( стек ) на две части. Память является первичным хранилищем и не может хранить указатели на ячейки памяти. Глобальные переменные используются для хранения указателей на ячейки памяти, но способ индексации отличается от памяти.

Инструкции байт-кода Move выполняются в стековом интерпретаторе. Стековая виртуальная машина легко реализуется и контролируется, требует низких требований к аппаратной среде, что делает ее подходящей для блокчейн-сценариев. В то же время, по сравнению с регистровым интерпретатором, в стековом интерпретаторе легче контролировать и отслеживать копирование и перемещение между переменными.

Состояние выполнения программы Move представлено кортежем ⟨C, M, G, S⟩, который состоит из стека вызовов (C), памяти (M), глобальных переменных (G) и операндов (S). Стек также поддерживает таблицу функций для разбора инструкций, содержащих тела функций.

Стек вызовов содержит всю контекстную информацию и номера инструкций для выполнения процессов. Новый объект стека вызовов создается при выполнении инструкции Call, где хранятся параметры вызова, а затем выполняются инструкции нового контракта. При встрече с инструкциями ветвления происходит статический переход внутри процесса. Такой подход избегает динамической диспетчеризации, усиливает неизменяемость вызовов функций и тем самым предотвращает возможность повторного входа.

MoveVM разделяет хранение данных и логику вызова стека (, что является крупнейшим отличием от EVM. В MoveVM ресурсы ) под адресом учетной записи состояния пользователя ( хранятся независимо, а вызовы программ должны соответствовать обязательным правилам, связанным с правами доступа и ресурсами. Хотя такой дизайн жертвует определенной гибкостью, он значительно повышает безопасность и эффективность выполнения.

![Анализ безопасности Move: смарт-контракты как революция в языке])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(

3. Доказывающий ход

Move Prover — это инструмент формальной верификации, основанный на выводах. Он использует формальный язык для описания поведения программы и применяет алгоритмы вывода для проверки соответствия программы ожидаемым результатам, что помогает разработчикам гарантировать правильность смарт-контрактов и снижает риски транзакций.

Move Prover использует алгоритм дедуктивной проверки для проверки того, соответствует ли программа ожиданиям. Он может выводить поведение программы на основе известных данных и гарантировать его соответствие ожидаемому поведению. Это помогает обеспечить правильность программы и снижает объем ручного тестирования.

Рабочий процесс Move Prover следующий:

  1. Принимать исходный файл Move в качестве входных данных, в котором необходимо задать спецификации входных данных программы.
  2. Move Parser извлекает спецификации из исходного кода.
  3. Move компилятор компилирует исходные файлы в байт-код, совместно с нормативной системой преобразует в модель объекта валидатора.
  4. Эта модель была переведена на промежуточный язык Boogie.
  5. Система проверки Boogie выполняет "генерацию условий проверки" для входных данных.
  6. Передайте условия проверки в решатель Z3 для проверки.
  7. Если спецификация выполнена, проверка пройдена; в противном случае создается диагностический отчет.

Для описания спецификаций системы Move использует язык спецификаций Move, который является подмножеством языка Move и вводит поддержку статического описания корректности поведения программ. Язык спецификаций Move может быть независимо оформлен в специализированные регламенты, что позволяет отделить бизнес-код от кода формальной верификации.

Move Prover - это очень полезный инструмент, который помогает разработчикам гарантировать корректность смарт-контрактов. Он использует формальный язык для описания поведения программы и применяет алгоритмы вывода для проверки соответствия программы ожидаемому. Это помогает снизить риски транзакций и позволяет разработчикам более уверенно разворачивать смарт-контракты в производственной среде.

![Анализ безопасности Move: смарт-контракты как изменяющие игру])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(

4. Итоги

Язык Move отличается отличной безопасностью в дизайне, обеспечивая всестороннее внимание к языковым особенностям, выполнению виртуальной машины и уровню инструментов безопасности. В языковых особенностях была жертва частью гибкости, обязательная проверка типов и линейная логика, что упрощает автоматизацию и обеспечивает безопасность при компиляции и формальной верификации. Дизайн MoveVM разделяет состояние и логику, что более соответствует требованиям безопасного управления активами на блокчейне.

На языковом уровне Move может эффективно избежать распространенных уязвимостей EVM, таких как повторные входы, переполнение, инъекции Call/DeleGateCall и так далее. Однако разработчики все равно должны обращать особое внимание на такие проблемы, как аутентификация, логика кода и переполнение структур больших целых чисел. Хотя Move Prover мощен, он может не сработать в случае общей небрежности.

Несмотря на то, что язык Move учитывает множество аспектов безопасности для программистов, не существует полностью безопасного языка и программы. Рекомендуется разработчикам смарт-контрактов 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.
  • Награда
  • 5
  • Поделиться
комментарий
0/400
Web3Educatorvip
· 20ч назад
Безопасность прежде всего, как всегда.
Посмотреть ОригиналОтветить0
SignatureAnxietyvip
· 07-02 07:12
Движение довольно приятно.
Посмотреть ОригиналОтветить0
RiddleMastervip
· 07-02 07:10
Стоит углубленного изучения и исследования
Посмотреть ОригиналОтветить0
RunWhenCutvip
· 07-02 06:52
Не просто, очень продвинуто.
Посмотреть ОригиналОтветить0
YieldWhisperervip
· 07-02 06:48
Король безопасности Сообщества блокчейна
Посмотреть ОригиналОтветить0
  • Закрепить