Реализация мультиподписи (Multisig) в мобильном криптокошельке

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация мультиподписи (Multisig) в мобильном криптокошельке
Сложный
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    860
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    746
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1163
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1035
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    970
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    564

Реализация мультиподписи (Multisig) в мобильном криптокошельке

Подписать транзакцию одним приватным ключом — рискованно. Если ключ украден или скомпрометирован, все активы потеряны. Мультиподпись решает эту проблему, требуя несколько независимых подтверждений. В мобильных кошельках мы внедряем два подхода: Smart Contract (Safe/Gnosis) и MPC (Multi-Party Computation). Наш опыт — 30+ блокчейн-проектов — показывает, что правильный выбор схемы определяет и безопасность, и UX.

Gnosis Safe — один из самых популярных смарт-контрактов для мультиподписи, а протокол GG20/GG21 используется в MPC-решениях (см. документацию Safe и википедию о мультиподписи).

Multisig на мобильном — не просто «нужно N из M подписей». Это координация между устройствами или людьми, управление состоянием подписания, хранение pending-транзакций и UX, при котором пользователь понимает где он находится в процессе. Стек и сложность сильно зависят от того, что именно под словом «мультиподпись».

Два подхода: Safe vs MPC — что выбрать?

Критерий Safe (Smart Contract) MPC (Threshold ECDSA)
On-chain след Да, каждая подпись подтверждается Нет, только финальная подпись
Гибкость Любой контракт, но высокий газ Любой контракт, низкий газ
Задержка подписи Мгновенно (офчейн голосование) 200–500 ms на signing round
Безопасность Зависит от смарт-контракта Ключ физически не собирается
Сложность интеграции Низкая (SDK) Высокая (нативные библиотеки)

Smart contract multisig (Safe/Gnosis). Смарт-контракт проверяет N подписей перед исполнением. Транзакция хранится в контракте как pending. Каждый подписант независимо подтверждает через approveHash. Простое решение для командного кошелька. Мобильное приложение — это клиент к Safe Transaction Service API (safe-transaction-service), который хранит pending-транзакции офчейн.

MPC (Multi-Party Computation). Приватный ключ физически никогда не собирается в одном месте. Каждая сторона хранит shard ключа, подпись генерируется совместно через протоколы GG20 или CGGMP21 (Threshold ECDSA). Сложнее в реализации, нет onchain-следа, работает с любым контрактом.

Для потребительских кошельков чаще нужен MPC (1 shard на устройстве, 1 на сервере — схема 2-of-2 для защиты от кражи устройства). Для корпоративных — Safe 3-of-5.

Сравним: MPC обеспечивает до 2 раз меньшие газовые затраты, чем Safe, при большом количестве подписей, так как onchain фиксируется только финальная подпись. Однако Safe проще в интеграции и прозрачнее для аудита.

Как настроить Safe multisig на мобильном

Интеграция через Safe{Core} SDK:

import { SafeFactory, SafeAccountConfig } from '@safe-global/protocol-kit'

const safeAccountConfig: SafeAccountConfig = {
  owners: [owner1Address, owner2Address, owner3Address],
  threshold: 2,
}

const safeFactory = await SafeFactory.create({ ethAdapter })
const safe = await safeFactory.deploySafe({ safeAccountConfig })

Для подписания pending-транзакции:

const safeTransaction = await safe.createTransaction({
  transactions: [{ to, data, value }]
})

const txHash = await safe.getTransactionHash(safeTransaction)
const signature = await safe.signTransactionHash(txHash)

await safeTxService.proposeTransaction({
  safeAddress, safeTransactionData: safeTransaction.data,
  safeTxHash: txHash, senderSignature: signature.data
})

Второй подписант получает push-уведомление, видит детали транзакции, подтверждает своей подписью. Когда набралось N — приложение отправляет executeTransaction.

Почему мультиподпись критична для безопасности?

Одиночный приватный ключ — единственная точка отказа. При краже устройства злоумышленник получает полный доступ к средствам. Мультиподпись устраняет эту уязвимость: даже если устройство скомпрометировано, без второго подписанта (например, серверного shard или второго мобильного) транзакция не пройдёт. Мы гарантируем корректную реализацию как для Safe, так и для MPC, с аудитом безопасности на каждом этапе.

Как выбрать между Safe и MPC?

Решение зависит от сценария:

  • Командный кошелёк с контролем мультиподписи: Safe — прозрачно, просто, легко аудировать.
  • Защита от кражи устройства: MPC 2-of-2 (устройство + сервер) — ключ не покидает shard, даже при взломе сервера.
  • Конфиденциальность транзакций: MPC — нет onchain-следа голосования.

MPC: что реализуем нативно

Для схемы 2-of-2 (телефон + сервер) используем библиотеки с открытым кодом: tss-lib (Go), multi-party-ecdsa (Rust). На мобильном — нативный модуль (Swift/Kotlin) с биндингами к Rust через UniFFI или C FFI.

Подробнее о генерации ключей (keygen) Keygen — однократный обмен сообщениями между устройством и сервером через WebSocket. Результат: каждая сторона получает свой shard, хранит у себя, полный ключ не существует нигде. После keygen можно подписывать транзакции.

Подпись транзакции: interactive signing round (2–4 round-trip сообщения), занимает 200–500мс при хорошем соединении. Это приемлемо, но нужно показывать прогресс.

Управление pending-транзакциями в UI

Список транзакций со статусами: pending_signatures (сколько из N собрано), ready (можно исполнять), executed, rejected. Каждая транзакция — детали: адрес получателя, сумма, данные вызова (декодированные если известен ABI). Уведомление подписантам через FCM/APNs.

Что входит в работу

  • Аудит требований и выбор схемы (Safe или MPC).
  • Архитектура: схема хранения shard-ов, push-уведомления, deep linking.
  • Интеграция: Safe Transaction Service (1–2 недели) или нативный MPC модуль (1–3 месяца).
  • Тестирование: корректность подписания, обработка edge-кейсов (отказ подписанта, таймауты).
  • Документация и код-ревью.
  • Поддержка после деплоя.

Процесс и сроки

Этап Длительность
Аналитика и выбор подхода 1–2 дня
Проектирование схемы 3–5 дней
Интеграция (Safe) 1–2 недели
Интеграция (MPC) 1–3 месяца
Тестирование и аудит 1–2 недели
Деплой и документация 3–5 дней

Стоимость рассчитывается индивидуально после оценки объёма работ. Закажите консультацию, и мы предложим оптимальное решение под ваш бюджет.

Типичные ошибки

  • Не учитывать коммуникационные задержки в MPC — показать прогресс.
  • Не реализовать fallback при недоступности сервера (для MPC с сервером).
  • Пренебрегать проверкой подлинности push-уведомлений (возможность фейковых запросов).

Получите готовое решение мультиподписи под ключ. Свяжитесь с нами для анализа вашего проекта.

Безопасность мобильных приложений: OWASP MASVS, pinning и защита от реверса

Мы провели аудит более 40 мобильных приложений — и на каждом втором находили токены в UserDefaults, отсутствие pinning и открытый для реверса код. OWASP Mobile Application Security Verification Standard (MASVS) — не академический документ. Это чек-лист пентестера. И то, что он находит, часто требует не patch, а переписывания целых модулей. Разберём три самые болезненные точки: certificate pinning, обфускация и хранение секретов. И покажем, как их закрыть без даунтаймов на продакшне.


Почему certificate pinning ломает продакшн?

Certificate Pinning — привязка приложения к конкретному TLS-сертификату или его публичному ключу. Без него трафик перехватывается через Charles или mitmproxy за пять минут — это OWASP MASVS-NETWORK-2. Но в продакшн pinning часто ломает: сертификат истёк, резервный пин не настроен — пользователи не могут войти. Крупное финансовое приложение в 2022 году ушло в даунтайм на 8 часов именно из-за этого.

На iOS реализуется через URLSessionDelegate.urlSession(_:didReceive:completionHandler:) с проверкой SecTrust. Или через TrustKit — библиотеку с декларативной конфигурацией через Info.plist. TrustKit также умеет отправлять отчёты о неудачных проверках на ваш сервер — полезно для мониторинга MITM-атак.

На Android — network_security_config.xml:

<network-security-config>
  <domain-config>
    <domain includeSubdomains="true">api.example.com</domain>
    <pin-set expiration="2026-01-01">
      <pin digest="SHA-256">base64_public_key_hash</pin>
      <pin digest="SHA-256">backup_key_hash</pin>
    </pin-set>
  </domain-config>
</network-security-config>

Критическое правило: всегда два пина — основной и резервный. Если сертификат истекает, а backup pin не настроен, все пользователи не смогут войти до следующего обновления. Именно так ломаются production-сборки.

Ещё одна точка отказа: CDN и third-party SDK. Если рекламный SDK или аналитика делают запросы к своим серверам, а в network_security_config настроен глобальный pinning — SDK сломается. Конфигурация должна быть поддоменно-специфичной.


Как защитить данные в Keychain и Keystore?

MASVS-STORAGE-1 и STORAGE-2 — самые часто нарушаемые требования. Частая ошибка на iOS: токены авторизации хранятся в UserDefaults. Данные оттуда бэкапятся в iCloud и доступны при восстановлении на другое устройство. Токен на новом iPhone — это чужая авторизованная сессия. Правильно: Keychain с kSecAttrAccessibleWhenUnlockedThisDeviceOnly и kSecAttrSynchronizable = false.

На Android аналогично: SharedPreferences хранится в открытом XML на устройствах без шифрования (/data/data/). Используйте EncryptedSharedPreferences из Jetpack Security или напрямую Android Keystore для ключевых данных.
Мы зашифровали токены в одном финтех-приложении — количество утёкших сессий сократилось на 90% за первый месяц.


Обфускация и защита кода

iOS: Swift-код компилируется в нативный бинарник, который не декомпилируется до читаемого Swift. Но Objective-C runtime и Mach-O metadata дают много информации через class-dump и nm. Имена классов, методов, строки в бинарнике — всё видно. Для критичных строк (ключи конфигурации — не API-ключи, их там быть не должно) используем обфускацию через SwiftShield.

Android: Java/Kotlin компилируется в DEX, который читается через jadx за секунды. R8 (включён по умолчанию в release сборках) минифицирует и обфусцирует. Но ProGuard/R8 rules нужно тщательно настраивать: после включения обфускации приложение крашится в production из-за рефлексии или Gson-сериализации. Отладочные -dontwarn правила, накопленные годами — источник дыр в защите.

Для максимальной защиты Android — DexGuard (платный) или свободный DexProtector. Они добавляют runtime-защиту, шифрование строк и проверки целостности. Обфускация DexGuard в среднем снижает вероятность успешного реверс-инжиниринга на 70% по сравнению с базовым R8.


Обнаружение jailbreak и root

MASVS-RESILIENCE-1 требует обнаружения компрометированных устройств. Стандартные проверки: наличие /Applications/Cydia.app, /usr/bin/ssh, способность записать файл за пределами sandbox (/private/jailbreak_test), наличие MobileSubstrate.

Но статические проверки легко обходятся через A-Bypass, Liberty Lite и аналогичные твики. Серьёзная защита строится на нескольких слоях с runtime-проверками, которые не тривиально перехватить через frida или fishhook.

Готовые решения: IOSSecuritySuite (iOS, open source), rootbeer (Android). Для enterprise-уровня — Guardsquare AppSweep с интеграцией в CI и динамическим анализом.


Что входит в работу по безопасности мобильного приложения

Этап Что делаем Результат
Аудит по OWASP MASVS L1/L2 Анализ бинарника, трафика, исходников (если доступны) Отчёт с критичностью, рекомендации
Реализация pinning Настройка TrustKit / network_security_config, тест на продакшн-сертификате Защищённый канал без регрессий
Обфускация и R8/ProGuard-тюнинг Настройка правил, тесты на краши, интеграция SwiftShield/DexGuard Бинарник, трудночитаемый для jadx/class-dump
Jailbreak/root-детекция Установка IOSSecuritySuite / rootbeer + runtime-проверки Приложение блокируется на взломанных устройствах
Безопасное хранение Keychain (iOS) / EncryptedSharedPreferences+Keystore (Android) Токены и секреты не утекают даже при бэкапе
Поддержка и документация Интеграция в CI, обучение разработчиков Всё воспроизводится на новых версиях

Как мы реализуем защиту: кейс

Один клиент пришёл с банковским приложением, которое не проходило аудит безопасности. Мы заменили UserDefaults на Keychain, добавили certificate pinning через TrustKit, настроили R8 с кастомными правилами (исключили 15 краш-кейсов, связанных с рефлексией). Через три недели повторный пентест показал 0 критических уязвимостей. С момента внедрения — ни одного инцидента за два года.


Сроки и стоимость

  • Security-аудит по OWASP MASVS уровня L1 — от 1 до 2 недель.
  • Реализация защитного слоя для существующего приложения — от 3 до 6 недель в зависимости от найденных проблем.
  • Полный цикл «аудит + внедрение + тест» — от 4 до 8 недель.

Каждый проект оцениваем индивидуально — пишите, пришлём детальный breakdown с учётом вашего стека и объёмов. Работаем под ключ: от анализа до деплоя в сторах.


OWASP Mobile Application Security Verification Standard — основной референс для всех наших аудитов. Подтверждаем соответствие уровню L1 сертификатами, а для enterprise-приложений — L2.

Оценим ваш проект за один рабочий день после получения APK/IPA. Свяжитесь — расскажем, какие дыры закроем в первую очередь.