Каждый месяц директор по безопасности MetaMask Лукер публикует отчёт о последних атаках в сфере криптовалют и новых угрозах, о которых вам необходимо знать.
Выпуск за май 2022 года посвящён запуску программы bug bounty MetaMask на HackerOne, реализации в Endo поддержки import.meta и __dirname для повышения совместимости зависимостей MetaMask, а также прототипу snap для распределённой генерации ключей, демонстрирующему подписание с использованием многостороннего вычисления в MetaMask Flask. Подробности — ниже, но сначала...
Выдающийся пионер STEM: Ади Шамир — соавтор RSA и создатель схемы разделения секрета
Ади Шамир — израильский криптограф, который в 1977 году совместно с Роном Ривестом и Леонардом Адлеманом разработал алгоритм RSA — первую практическую криптосистему с открытым ключом. За это достижение трио было удостоено премии Тьюринга в 2002 году. В 1979 году он опубликовал работу «Как поделиться секретом», в которой представил схему разделения секрета Шамира: метод, при котором секрет разбивается на части, и для восстановления исходного значения достаточно лишь порогового количества этих частей. Это свойство лежит в основе работы по распределённой генерации ключей, описанной в данном отчёте.
MetaMask запускает программу bug bounty на HackerOne
В июне 2022 года MetaMask запустил программу bug bounty на платформе HackerOne, открыв официальный канал для исследователей безопасности, через который они могут сообщать об уязвимостях в продуктах MetaMask.
Endo реализует поддержку import.meta и __dirname, повышая совместимость зависимостей MetaMask
По итогам работы над поддержкой CommonJS в Endo в апреле 2022 года сквозное тестирование показало, что главными оставшимися препятствиями для запуска популярных модулей являются отсутствие поддержки import.meta.url и __dirname.
На встрече представителей Agoric, MetaMask и Moddable 3 мая 2022 года было достигнуто соглашение о том, на каком этапе процесса импорта модулей должна обрабатываться конструкция import.meta. В спецификацию Compartment была введена концепция importMetaHook. Хук вызывается только в том случае, если статический анализ показывает, что модуль обращается к import.meta — поскольку Node.js прикрепляет туда функцию resolve, создание которой является ресурсоёмкой операцией, хук целесообразно вызывать лишь тогда, когда его результаты могут быть использованы.
Реализация import.meta завершена (issue в спецификации, PR с реализацией). Остаётся реализовать передачу import.meta.url в модули Endo по умолчанию. Реализация __dirname также завершена (PR) — после нескольких итераций для обеспечения корректности и поддержки путей Windows.
Кроме того, была добавлена поддержка вложенных файлов package.json, изменяющих предполагаемый тип модуля по умолчанию для файлов .js, что позволяет compartment-mapper обрабатывать пакеты со сложной структурой, предназначенные для поддержки как CommonJS, так и спецификации ES-модулей (источник).
Поддержка поведения __esModule приостановлена. Оба варианта реализации привели к ухудшению результатов сквозного тестирования. Третий подход — размещение логики поддержки в ThirdPartyModuleInstance внутри SES — считается спорным. Работа над функцией отслеживается в issue #927.
Прототип snap для распределённой генерации ключей демонстрирует подписание с использованием MPC в MetaMask Flask
Достигнут прогресс в развитии возможностей многостороннего вычисления (MPC). Наша команда взяла ранее созданные экспериментальные привязки WebAssembly (WASM) и разработала прототип snap, доступный в MetaMask Flask, который демонстрирует распределённую генерацию ключей (DKG) и подписание сообщений. Snap поддерживает экспорт и импорт долей ключей, а также генерацию ключей и сохранение доказательств для подписания сообщений.
Под капотом пакет использует реализацию протокола GG2020 (Gennaro и Goldfeder 2020, статья) — протокола, поддерживающего неинтерактивную онлайн-фазу, позволяющую участникам асинхронно взаимодействовать без необходимости одновременного присутствия в сети, а также обеспечивающего эффективное обнаружение прерывающих участников.
Следующие шаги включают добавление поддержки шифрования для snap_manageState с целью устранения необходимости ручного шифрования долей ключей в коде snap, а затем — добавление поддержки подписания транзакций. Прототип отслеживается в репозитории tss-snap (первоначально опубликован под названием ecdsa-wasm).
Отчёт MetaMask о криптобезопасности за май 2022 года охватывает реализацию в Endo поддержки import.meta и __dirname для цепочки совместимости модулей MetaMask, а также прототип snap для распределённой генерации ключей, демонстрирующий подписание с использованием многостороннего вычисления в MetaMask Flask. Просматривайте предыдущие выпуски отчёта MetaMask о криптобезопасности, чтобы быть в курсе угроз, тенденций и советов по безопасности в экосистеме.