Анализ безопасности языка Move: революционер языка смарт-контрактов
Язык Move является языком смарт-контрактов, который может работать в блокчейн-среде с реализованной MoveVM. При его разработке изначально учитывались многочисленные проблемы безопасности, связанные с блокчейном и смарт-контрактами, и были учтены аспекты безопасности языка RUST. Какова безопасность этого языка как нового поколения смарт-контрактов, основным признаком которого является безопасность? Может ли он избежать распространенных угроз безопасности виртуальных машин контрактов, таких как EVM и WASM, на уровне языка или через соответствующие механизмы? Существуют ли у него собственные уникальные проблемы безопасности?
В данной статье будет рассмотрена проблема безопасности языка Move с трех аспектов: языковые характеристики, механизм работы и инструменты проверки.
1. Безопасные характеристики языка Move
В отличие от многих существующих языков программирования, язык Move был разработан для поддержки как написания программ, которые безопасно взаимодействуют с ненадежным кодом, так и для статической проверки. Move обладает такими характеристиками безопасности, потому что отказывается от нелинейной логики, основанной на соображениях гибкости, не поддерживает динамическое распределение и внешние рекурсивные вызовы, а использует концепции обобщений, глобального хранилища, ресурсов и т.д. для реализации некоторых альтернативных программных моделей. Например, Move опускает динамическое распределение и рекурсивные вызовы, которые в других языках смарт-контрактов приводят к дорогостоящим уязвимостям повторного входа.
Основные функции безопасности Move включают:
Модуль(: Каждый Move модуль состоит из серии определений структур и процессов. Модуль может импортировать определения типов и вызывать процессы, объявленные в других модулях.
Структуры): могут быть определены как тип ресурса, который может храниться в постоянном глобальном хранилище ключ/значение.
3( 过程)Function): определяет бизнес-логику контракта.
4( Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны/записаны программным образом только модулем, которому они принадлежат.
Проверка инварианта: можно определить статическую проверку инварианта, которая указывает на сохранение ресурсов в системе.
Верификатор байт-кода: выполняет безопасную типизацию и линейную проверку байт-кода, принуждая к соблюдению правил создания, уничтожения и доступа к ресурсам.
Благодаря этим характеристикам, 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 следующий:
Принимать исходный файл Move в качестве входных данных, в котором необходимо задать спецификации входных данных программы.
Move Parser извлекает спецификации из исходного кода.
Move компилятор компилирует исходные файлы в байт-код, совместно с нормативной системой преобразует в модель объекта валидатора.
Эта модель была переведена на промежуточный язык Boogie.
Система проверки Boogie выполняет "генерацию условий проверки" для входных данных.
Передайте условия проверки в решатель Z3 для проверки.
Если спецификация выполнена, проверка пройдена; в противном случае создается диагностический отчет.
Для описания спецификаций системы 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.
Глубина безопасности языка Move: новый стандарт разработки смарт-контрактов
Анализ безопасности языка Move: революционер языка смарт-контрактов
Язык Move является языком смарт-контрактов, который может работать в блокчейн-среде с реализованной MoveVM. При его разработке изначально учитывались многочисленные проблемы безопасности, связанные с блокчейном и смарт-контрактами, и были учтены аспекты безопасности языка RUST. Какова безопасность этого языка как нового поколения смарт-контрактов, основным признаком которого является безопасность? Может ли он избежать распространенных угроз безопасности виртуальных машин контрактов, таких как EVM и WASM, на уровне языка или через соответствующие механизмы? Существуют ли у него собственные уникальные проблемы безопасности?
В данной статье будет рассмотрена проблема безопасности языка Move с трех аспектов: языковые характеристики, механизм работы и инструменты проверки.
1. Безопасные характеристики языка Move
В отличие от многих существующих языков программирования, язык Move был разработан для поддержки как написания программ, которые безопасно взаимодействуют с ненадежным кодом, так и для статической проверки. Move обладает такими характеристиками безопасности, потому что отказывается от нелинейной логики, основанной на соображениях гибкости, не поддерживает динамическое распределение и внешние рекурсивные вызовы, а использует концепции обобщений, глобального хранилища, ресурсов и т.д. для реализации некоторых альтернативных программных моделей. Например, Move опускает динамическое распределение и рекурсивные вызовы, которые в других языках смарт-контрактов приводят к дорогостоящим уязвимостям повторного входа.
Основные функции безопасности Move включают:
Модуль(: Каждый Move модуль состоит из серии определений структур и процессов. Модуль может импортировать определения типов и вызывать процессы, объявленные в других модулях.
Структуры): могут быть определены как тип ресурса, который может храниться в постоянном глобальном хранилище ключ/значение.
3( 过程)Function): определяет бизнес-логику контракта.
4( Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны/записаны программным образом только модулем, которому они принадлежат.
Проверка инварианта: можно определить статическую проверку инварианта, которая указывает на сохранение ресурсов в системе.
Верификатор байт-кода: выполняет безопасную типизацию и линейную проверку байт-кода, принуждая к соблюдению правил создания, уничтожения и доступа к ресурсам.
Благодаря этим характеристикам, 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 следующий:
Для описания спецификаций системы 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 использовать услуги аудита сторонних компаний по безопасности и передать написание и проверку части кода спецификации сторонним компаниям по безопасности, чтобы повысить безопасность контрактов.