February 19, 2023

Модель аккаунтов Flow предлагает пользователям реальное право собственности

В этой статье использованы материалы Ramtin Mehdizadeh Seraj и Layne Lafrance.

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

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

Блокчейны на основе EVM, такие как Ethereum, используют другой подход с моделью контрактов, которая позволяет разработчикам использовать блокчейн для управления более сложными отношениями между ценностями пользователей, которые могут быть зафиксированы строго в реестре. Это улучшает перспективы реального владения, поскольку расширяет ценность, доступную пользователям; небольшие криптовалюты (как те, что были выпущены во время печально известных ICO 2017 года) способны представлять и отражать конкретные потребности и желания небольшой группы людей и гарантировать, что эта небольшая группа людей сможет обеспечить возможность выкупа между собой, даже если прием более широкого сетевого токена (ETH или BTC в этих примерах) резко упадет. Огромное улучшение!

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

Реальное право собственности в цифровых технологиях сводится к безвозвратному изъятию предмета из вашего владения без вашего явного согласия. Говоря иначе, это право, свобода и возможность доступа к предметам, которыми вы владеете, без разрешения другой стороны (например, приложения, которое вы используете). Безотзывность формально гарантируется системой, которая работает автономно от какого-либо отдельного правительства или учреждения - публичные блокчейны, как правило, заполняют эту нишу. Flow - одна из таких систем, публичная сеть блокчейн (она же платформа), которая поддерживает, обеспечивает и предоставляет безотзывный доступ к цифровым объектам. В чем Flow превосходит другие сети, так это в том, что доступ к этим предметам в конечном итоге полностью находится в ведении и правах пользователя, а не приложений, которые его обслуживают. Flow стремится обеспечить реальное право собственности - безотзывный, автономный доступ к (цифровым) предметам - для всех участников, и в этой статье мы расскажем, как она этого добилась. Но если вы ищете

Tl;dr

Модель аккаунта - это способ определения прав собственности и доступа таким образом, что ценность всегда доступна пользователям, защищена лучшей в своем классе безопасностью в системе и доступна разработчикам - безопасно - то есть они могут использовать аккаунты пользователей для предложения услуг, но они не могут удалить ценность из аккаунта пользователя без его прямого разрешения в процессе предложения продукта или услуги. Модель аккаунтов Flow опирается на важные идеи модели контрактов и по-прежнему в значительной степени сосредоточена вокруг смарт-контрактов, но с некоторыми важными отличиями! Ниже мы подробно расскажем о наблюдениях и мотивах, побудивших Flow пересмотреть отраслевой стандарт, а также о различиях между моделью контрактов Ethereum на основе EVM и моделью аккаунтов Flow на основе FVM.

1. Управление доступом

Одним из преимуществ учетных записей Flow по сравнению с тем, что поддерживают учетные записи на основе EVM в настоящее время (например, учетные записи на Ethereum, Polygon, Avalanche), являются мощные возможности управления доступом. Эти встроенные функции управления учетными записями решают многие проблемы, предусмотренные дизайном, и обеспечивают разработчикам и пользователям доступ к лучшим практикам безопасности по умолчанию. Вот список некоторых свойств:

Поддержка нескольких ключей для каждого аккаунта

Каждый аккаунт Flow может контролироваться несколькими открытыми ключами. Каждому открытому ключу, привязанному к счету, присваивается уникальный компактный идентификатор, используемый при транзакциях (комбинация адреса аккаунта и индекса ключа). Это позволяет повторно использовать один и тот же открытый ключ на разных аккаунтах. Используя действующие ключи на аккаунте Flow, пользователь может добавлять/отзывать ключи в любое время. Это позволяет пользователям чередовать свои ключи и отзывать ключ, если его закрытый ключ может быть подвержен риску.

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

Еще одним преимуществом поддержки нескольких ключей для каждого аккаунта является управление аккаунтом из нескольких мест. В настоящее время единственным способом контролировать аккаунт EVM с нескольких устройств является извлечение семян закрытого ключа из одного устройства и передача их на другие устройства. Это создает ненужные риски, а также может быть не идеальным вариантом в области современных аппаратных модулей подписи на устройстве, таких как защищенные анклавы. Вместо того чтобы копировать ключи с ноутбука на телефон (что подвергает их воздействию многих видов вредоносного ПО), на каждом устройстве ноутбука и телефона генерируются закрытые ключи, которые никогда не нужно оставлять.

Встроенная поддержка веса ключей

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

Наличие различных ключей с разным весом, участвующих в управлении аккаунтом, поддерживает как техническую избыточность (несколько человек, уполномоченных вносить изменения в группе), так и финансовую безопасность (например, требование, чтобы несколько владельцев аккаунта подписывали его перед снятием средств). Это не поддерживается EVM, но оказалось необходимой функцией в современном стеке web3, о чем свидетельствует популярность Gnosis Safe и Argent Vault.

Каждый открытый ключ, прикрепленный к аккаунту Flow, имеет фиксированный вес (диапазон: 1-1000), и аккаунт считается авторизованным в контексте транзакции, если он имеет более 1000 весовых достоверных подписей. Поддержка весов позволяет использовать их во многих приложениях, таких как пороговые подписи (например, аккаунт с 5 ключами, каждый из которых имеет вес 335, может быть распределен между 5 субъектами, что позволяет получить пороговую подпись 3 из 5).

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

Встроенная поддержка стандартных для отрасли алгоритмов и настроек подписи

Аккаунты Flow предназначены для поддержки авторизации с использованием различных алгоритмов криптографической подписи (например, ECDSA, EdDSA, ...) и различных настроек (например, различных кривых).

Как вы могли заметить, наиболее продвинутая защита большинства блокчейнов требует покупки специального аппаратного устройства для управления ключами (Ledger - самый известный пример).

Возможно, в силу исторической случайности, Bitcoin и другие блокчейны решили использовать менее распространенную схему подписания ключей (кривая secp256k1), которая делает их ключи несовместимыми с широко используемыми сегодня алгоритмами подписания (кривая P-256). За годы, прошедшие с момента запуска Bitcoin, исследователи безопасности пришли к выводу, что и "крипто-популярная" кривая, и "стандартная для индустрии" кривая безопасны для использования. Flow решил предоставить пользователям самим решать, какую из них предпочесть.

Таким образом, Flow прекрасно работает с Ledger и другими аппаратными устройствами для шифрования криптовалют, но он также одинаково хорошо работает с аппаратным устройством для шифрования, которое уже есть у вас в кармане! Именно так: Flow позволяет вам использовать аппаратные средства защиты, входящие в состав почти каждого смартфона и даже многих современных ноутбуков. Полная аппаратная безопасность военного класса с помощью устройств, которые у вас уже есть.

Отсутствие встроенной поддержки различных настроек EVM ограничивает пользователей и разработчиков только внутрицепочечной реализацией проверки подписи, что очень дорого и иногда даже невозможно в одной транзакции, так как это может привести к расходу газа до миллиона, а максимальный лимит газа в транзакции намного меньше.

Сообщество Ethereum также движется к этим функциям под общим термином "абстракция счета" и планирует внедрить их через смарт-контракты. Мы с нетерпением ждем, когда это предложение будет доработано и принято, чтобы пользователи Ethereum получили доступ к этой функциональности, хотя дополнительные газовые затраты, связанные с реализацией этой функции на уровне смарт-контрактов, пока не ясны.

2. Распределение адресов

Как упоминалось в предыдущем разделе, учетные записи Flow позволяют иметь несколько ключей для одной учетной записи, и, естественно, в отличие от адресов учетных записей на основе EVM, адреса Flow не выводятся из открытых ключей, а каждой учетной записи Flow присваивается уникальный компактный и проверяемый адрес в момент создания учетной записи. Это дает ряд преимуществ, о которых речь пойдет ниже.

Уникальность, компактность и возможность проверки

Каждый выделенный адрес Flow по своей конструкции имеет надежный способ проверки правильности адреса, заложенный в адрес. Каждый адрес представлен 16-ричным символом (без учета регистра) и внутренней контрольной суммой, которая предотвращает случайные ошибки при вводе аккаунта. Поскольку сеть выделяет эти уникальные адреса, нет необходимости в очень длинных адресах.

Для сравнения, адреса EVM получаются из открытых ключей, и для того, чтобы предотвратить потенциальную возможность столкновения адреса аккаунта, он должен быть представлен в виде очень длинной строки из 40 шестнадцатеричных символов. Хотя существует способ контрольной суммы для адресов счетов, он требует отправки адресов с учетом регистра, что чаще всего либо не известно разработчикам и пользователям, либо платформы, подписывающие транзакции, часто принимают версии в нижнем регистре. Это приводило к тому, что активы переводились на неправильный адрес, ключа к которому ни у кого нет. Если вы проверите этот аккаунт Ethereum, то поймете, как часто кто-то случайно отправляет активы на этот счет, совершая ошибки, когда случайно оставляет место назначения пустым. Многие активы оказались на этом счете, что превращает его в большую лотерею, в которой кто-то может выиграть в один прекрасный день, если успешно сгенерирует закрытый ключ, который может иметь этот публичный адрес. Это невозможно на Flow, поскольку не каждая комбинация шестнадцатеричных букв является недействительным адресом, и если пользователь случайно попытается отправить активы на недействительный адрес, транзакция завершится изящно, и активы не будут заблокированы или потеряны.

Распределение по конкретной сети

Еще одним преимуществом адреса Flow является его привязка к конкретной сети, т.е. адрес, который действителен в сети Flow Mainnet, недействителен в сети Flow Testnet.
Обратите внимание, что это не означает, что вы не можете использовать один и тот же открытый ключ для нескольких сетей, вы все равно можете прикрепить один и тот же ключ к нескольким учетным записям в разных сетях, но это повышает безопасность учетных записей Flow, сохраняя гибкость.

Как уже упоминалось ранее, адреса EVM формируются на основе открытых ключей, и если открытые ключи используются в нескольких сетях, они дадут один и тот же адрес. Мы неоднократно сталкивались с тем, что разработчик или пользователь случайно отправлял транзакцию в Ethereum Mainnet вместо тестовой сети, что приводило к досадной потере средств.

Борьба с созданием поддельных аккаунтов

Многие блокчейн-приложения и их разработчики ежедневно сталкиваются с фальшивыми аккаунтами. Либо проведение сброса токенов в качестве благодарности ранним пользователям приложения, либо обеспечение безопасности DAO путем разнообразного распределения токенов, предполагает, что аккаунты не являются фальшивыми. Но, к сожалению, генерация пары открытый/закрытый ключ не требует никаких затрат, что приводит к созданию огромного количества аккаунтов всеми, кто хочет что-то сделать с этими аккаунтами. Так много аккаунтов было создано без каких-либо активов только для того, чтобы получить выгоду от сброса токенов, что привело к атакам Sybil на dapps.

Эта проблема была решена в модели хранения данных Flow - адреса аккаунтов Flow выделяются в момент создания аккаунта при условии, что вновь созданный аккаунт пополнил минимальный баланс FLOW (собственный токен сети Flow). Этот депозит зависит от объема хранилища, используемого учетной записью, но имеет минимум, что облегчает проблему массового создания учетных записей и соответствующих атак, упомянутых ранее.

3. Хранение контрактов

Модель хранения контрактов Flow резко расширила границы развития смарт-контрактов с точки зрения полезности, безопасности и совместимости. Перечислены некоторые из особенностей:

Хранение нескольких контрактов на одном аккаунте

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

Смарт-контракты с открытым исходным кодом

Каждый контракт на Flow хранится в виде исходного кода в Cadence и является общедоступным для всех желающих. Хранение исходного кода на сети вместо скомпилированных байт-кодов облегчает разработчикам и пользователям проверку содержания контрактов и предотвращает вредоносные действия. Это также открывает возможности для совместимости. В блокчейнах на основе EVM, таких как Ethereum, код контракта не хранится на сети. На сети хранится только скомпилированная программа контракта, что требует от внешних приложений принимать исходный код от сообщества и сверять его с байт-кодом, хранящимся на сети. Это иногда открывает двери для вредоносных действий, так как реальный код остается скрытым от пользователей. Можно утверждать, что это обеспечивает конфиденциальность программ, хотя, исходя из нашего опыта, почти каждый байткод может быть проанализирован и декомпилирован, но с большими усилиями и сложностями, чем вы ожидаете от "публичного, открытого блокчейна".

Возможность модернизации

Обновления для исправления ошибок и патчи для устранения уязвимостей - необходимые действия для поддержания безопасности и жизнеспособности любого программного обеспечения, и web3-приложения не являются исключением. Flow обеспечивает безопасный способ обновления смарт-контрактов, защищая при этом активы пользователя. Смарт-контракт - это набор кода (его функций) и данных (его состояния). В Flow данные хранятся непосредственно под учетными записями пользователей, а не внутри контракта, что позволяет обновлять код, защищая при этом данные. Обновления кода также должны следовать определенному набору правил, что предотвращает случайные ошибки и злонамеренные действия. Поскольку децентрализованный фонд приложений со временем становится более прочным и свободным от ошибок, а сообщество проекта растет, владелец контракта имеет возможность заблокировать контракт для будущих обновлений.

В мире EVM каждый контракт неизменен навсегда и не подлежит обновлению. Единственное возможное изменение контракта - это удаление через вызов `selfdestruct`, что может привести к потере пользовательских активов, и, похоже, это принесло больше вреда, чем пользы.

Продолжение следует...

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