Разработка кастодиального MPC-кошелька под ключ

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка кастодиального MPC-кошелька под ключ
Средний
~1-2 недели
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1374
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1256
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    965
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1208
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    667
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    954

Мы строим кастодиальные MPC-кошельки, где приватный ключ никогда не существует в полной форме ни на одном устройстве. Вместо этого каждая сторона держит «долю» (share) ключа, и подпись транзакции вычисляется совместно через MPC протокол. Украсть один share бесполезно — для подписи нужны все участники схемы. Такая архитектура устраняет single point of failure и делает кошелек устойчивым к компрометации серверов: даже если злоумышленник получит доступ к серверному share, он не сможет подписать транзакцию без доли пользователя. Наши инженеры имеют 10+ лет опыта в блокчейн-разработке и криптографии. Мы гарантируем, что ваш сервис получит защиту уровня institutional custody без единой точки отказа. Это корпоративное хранение крипты на новом уровне — кошелек без seed phrase, где доступ восстанавливается через backup share.

Это принципиальное отличие от традиционного мультисига (M-of-N on-chain): мультисиг виден в блокчейне, требует N подписей on-chain (газ), и факт использования мультисига публичен. MPC-подпись выглядит как обычная одиночная подпись — ни блокчейн, ни наблюдатель не видит, что за ней стоит совместное вычисление. Fireblocks, ZenGo, Coinbase WaaS, Web3Auth — MPC-based продукты. Банковский и institutional сектор переходит на MPC именно из-за отсутствия single point of failure при хранении ключей. Экономия на газе достигает 50% по сравнению с on-chain мультисигом.

Как работает MPC-кошелек?

Threshold Signature Scheme (TSS)

Для Ethereum (secp256k1) наиболее распространён GG20 протокол (Genaro-Goldfeder 2020) или его улучшение CGGMP21. Схема t-of-n: любые t из n участников могут вычислить подпись, без t — невозможно.

Процесс состоит из двух фаз:

  • Keygen (distributed key generation): участники интерактивно генерируют shares, не раскрывая финальный ключ. По окончании каждый имеет share_i, а публичный ключ P = G * privateKey известен всем. Приватный ключ privateKey не существует нигде.
  • Signing: для подписи транзакции t участников запускают MPC протокол, каждый вводит свой share_i, на выходе — валидная ECDSA подпись. Ни один участник не узнал ключи других.

Реальные MPC библиотеки

Production-готовые реализации:

  • tss-lib (Binance): Go библиотека, реализует GG18/GG20. Используется в Binance Chain, Thorchain. Открытый исходный код.
  • multi-party-ecdsa (ZenGo): Rust, реализует GG20. Более актуальная, активная поддержка.
  • @sodot/sodot-node-sdk: коммерческое SDK для MPC-as-a-service. Быстрый старт, не нужно реализовывать протокол самостоятельно.
  • Silence Laboratories SDK: академически верифицированная реализация, используется в Web3Auth для MPC as a service.

Самостоятельная реализация MPC протокола — это месяцы работы криптографа и высокий риск ошибок. Для большинства проектов правильный выбор — готовая библиотека или MPC-as-a-service.

Выбор MPC-библиотеки

Библиотека Язык Протокол Лицензия Особенности
tss-lib (Binance) Go GG18/GG20 Open source Проверена в Binance Chain, Thorchain
multi-party-ecdsa (ZenGo) Rust GG20 Open source Активная поддержка, аудит
Sodot SDK TypeScript CGGMP21 Коммерческая Fast integration, MPC-as-a-service
Silence Laboratories SDK Rust/Python Академический Коммерческая Формальная верификация

Почему MPC-кошелек лучше мультисига?

Критерий MPC Wallet On-chain Multisig
Видимость в блокчейне Обычная подпись N подписей публично
Газ за транзакцию Обычный +20-50% (дополнительные подписи)
Single point of failure Отсутствует Зависит от конфигурации
Recovery при утере устройства Через backup share Через другие подписанты
Совместимость Любой EVM кошелёк Требует multisig aware dApp
Сложность реализации Высокая Низкая (Gnosis Safe)

MPC оправдан для: institutional custody, wallets-as-a-service, кошельков без seed phrase (mobile-first), встроенных кошельков в приложения. Gnosis Safe (on-chain multisig) оправдан для: DAO treasury, team wallets, случаев где нужна максимальная прозрачность on-chain.

Архитектура 2-of-2 MPC кошелька

Типичная схема для consumer кошелька: одна доля на устройстве пользователя, одна на сервере. Транзакция требует участия обеих сторон.

Сервер не знает полного ключа. Устройство не знает полного ключа. Без сервера пользователь не может подписать (защита от кражи устройства). Без устройства сервер не может подписать (сервер не может украсть средства).

Keygen flow

// Упрощённая иллюстрация flow (не production-ready код)
import { MpcSigner } from '@sodot/sodot-node-sdk';

class MPCWallet {
  private deviceSdk: MpcSigner;
  private serverSdk: MpcSigner;

  async generateKey(): Promise<string> {
    const keygenId = crypto.randomUUID();
    const [deviceShare, serverShare] = await Promise.all([
      this.deviceSdk.initKeygen(keygenId, { threshold: 2, parties: 2, partyIndex: 1 }),
      this.serverSdk.initKeygen(keygenId, { threshold: 2, parties: 2, partyIndex: 2 }),
    ]);
    await this.runKeygenRounds(keygenId, deviceShare, serverShare);
    const publicKey = await this.deviceSdk.getPublicKey(keygenId);
    const address = ethers.computeAddress('0x' + publicKey);
    await this.deviceSdk.storeShare(keygenId, deviceShare);
    await this.serverSdk.storeShare(keygenId, serverShare);
    return address;
  }

  async signTransaction(address: string, transaction: ethers.TransactionRequest): Promise<string> {
    await this.authenticateUser();
    const txHash = ethers.keccak256(ethers.Transaction.from(transaction).unsignedSerialized);
    const signingId = crypto.randomUUID();
    const signature = await this.runSigningProtocol(signingId, txHash, address);
    const signedTx = ethers.Transaction.from({ ...transaction, signature });
    return signedTx.serialized;
  }
}

Share refresh (proactive security)

Share refresh решает проблему компрометации серверного share: участники периодически обновляют свои shares без изменения итогового ключа. Украденный share год назад сегодня бесполезен.

async function refreshShares(walletId: string): Promise<void> {
  await Promise.all([
    deviceSdk.refreshShare(walletId),
    serverSdk.refreshShare(walletId),
  ]);
}

setInterval(() => {
  for (const walletId of activeWallets) {
    refreshShares(walletId).catch(console.error);
  }
}, 7 * 24 * 60 * 60 * 1000);

Восстановление доступа при потере устройства

Схема 2-of-2 имеет слабое место: если сервер недоступен, пользователь не может подписать транзакции. Схема 2-of-3 решает это:

  • Share 1: устройство пользователя
  • Share 2: сервер (онлайн signing)
  • Share 3: backup (зашифрован паролем пользователя, хранится в облаке или распечатан)

При нормальной работе: Device + Server = подпись. Если сервер недоступен: Device + Backup = подпись (аварийный recovery). Если устройство потеряно: Server + Backup = восстановление на новое устройство.

Схема Порог Участники Recovery Использование
2-of-2 2 Device + Server Через backup share Consumer wallets
2-of-3 2 Device + Server + Backup Device lost: Server+Backup Enterprise custody
async function recoverToNewDevice(
  backupShare: CloudEncryptedShare,
  backupPassword: string
): Promise<string> {
  const decryptedBackup = await decryptBackupShare(backupShare, backupPassword);
  await verifyUserIdentity();
  const newDeviceShare = await sdk.refreshWithParties([serverShare, decryptedBackup]);
  await secureStore.save(newDeviceShare);
  return 'Recovery complete';
}

Коммуникационный канал между сторонами: MPC протокол требует нескольких раундов обмена сообщениями между участниками. Для 2-of-2 (устройство + сервер) оптимален WebSocket — минимальная латентность. REST polling проще, но добавляет 0.5-2.5 секунды к подписи. Типичное время подписи через MPC: 0.5-2 секунды при хорошей сети. Показываем прогресс в UI.

Серверная инфраструктура

Серверный share должен храниться в Hardware Security Module (HSM) — физическом устройстве, из которого невозможно извлечь ключ программно. Варианты: AWS CloudHSM (FIPS 140-2 Level 3), AWS KMS (софт), HashiCorp Vault (self-hosted). Для стартапа достаточно AWS KMS + encryption at rest. HSM — при росте до institutional клиентов.

Аутентификация перед signing

Сервер проверяет, что запрос на подпись инициирован авторизованным пользователем (JWT после биометрии). Дополнительно применяются политики транзакций: лимиты, whitelist адресов, требование дополнительной верификации для крупных сумм.

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

При заказе разработки кастодиального MPC-кошелька вы получаете:

  • Архитектурный дизайн и выбор MPC протокола (t-of-n схема)
  • Интеграцию MPC библиотеки (tss-lib / multi-party-ecdsa / Sodot SDK)
  • Реализацию keygen и signing flow с share storage
  • Разработку мобильного/веб-приложения с UX для onboarding, транзакций и recovery
  • Серверную часть: auth service, signing API, policy engine, HSM интеграцию
  • Security review и pentest (MPC протокол + инфраструктура) — полный аудит безопасности кошелька
  • Документацию, обучение команды, поддержку на этапе запуска

Процесс работы

  1. Архитектурный дизайн (1-2 недели): выбор MPC протокола, share distribution, backup/recovery flows, серверная инфраструктура.
  2. Keygen и signing реализация (3-4 недели): интеграция MPC библиотеки, коммуникационный канал, share storage.
  3. Мобильное/веб приложение (2-3 недели): UX onboarding, transaction flow, progress indicators, recovery UI.
  4. Серверная часть (2-3 недели): auth, signing API, policy engine, HSM интеграция.
  5. Security review (2 недели): протокол security analysis, pentest, share storage review.
  6. Тестирование и launch (1-2 недели): end-to-end тесты, нагрузочное тестирование.

Полный цикл MPC кошелька: 4-6 месяцев. Это сложнее обычного кошелька из-за MPC протокола и необходимости криптографической экспертизы. Стоимость рассчитывается после детализации схемы и выбора MPC библиотеки.

Оценим ваш проект бесплатно — свяжитесь с нами, чтобы обсудить архитектуру. Также изучите Secure multi-party computation для общего понимания технологии. Получите консультацию по вашему проекту — наши инженеры ответят на технические вопросы.

Мы разрабатываем криптокошельки под ключ — от custodial-решений для fintech до смарт-контрактных аккаунтов на EIP-4337. 5+ лет на рынке блокчейн-разработки, 40+ реализованных проектов. Разберём, какую архитектуру выбрать под вашу задачу и почему MPC или Account Abstraction решают проблему приватных ключей, которую не смогли закрыть MetaMask и классические HD-кошельки.

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

Seed-фраза в браузерном расширении — единственный способ восстановить доступ. Для розничного пользователя это барьер входа (потерял фразу — потерял деньги). Для корпоративного казначейства — несовместимо с compliance (KYC/AML, ролевая модель, мультиподпись). Любая утечка одного ключа компрометирует все средства. Эти риски заложены в архитектуру, а не в плохой UX.

Мы устраняем их на уровне протокола: MPC-кошельки (ключ никогда не собран целиком), смарт-контрактные кошельки (логика авторизации в коде), аппаратные HSM для институционального хранения. Ниже — детали.

Custodial vs Non-custodial: в чём реальная разница

Custodial — провайдер хранит приватный ключ. Пользователь аутентифицируется через email/password/OAuth. Восстановление тривиально, KYC/AML встроены. Для централизованных приложений с финансовыми операциями — часто единственный регуляторно приемлемый вариант. Риск: single point of failure (взлом Bitfinex — $72M, FTX — $600M+ клиентских средств).

Non-custodial — ключи у пользователя. Провайдер не имеет доступа к средствам. Ответственность за хранение ложится на пользователя. Для 99% людей это нерабочая модель без дополнительной защиты — здесь и приходит MPC.

MPC-кошельки: ключ, которого нет

Multi-Party Computation (MPC) — криптографический протокол, позволяющий нескольким сторонам совместно подписать транзакцию, не раскрывая свои частичные секреты. Приватный ключ никогда не существует в собранном виде.

Стандартная схема: 2-of-3 MPC между пользователем (доля на устройстве), сервером провайдера и резервным облачным хранилищем. Транзакция подписывается двумя любыми из трёх сторон. Телефон потерян — восстановление через сервер + облако. Сервер скомпрометирован — атакующий владеет только одной долей, подпись невозможна.

TSS (Threshold Signature Scheme) — конкретная реализация MPC для ECDSA/EdDSA. Алгоритмы: GG18, GG20, CGGMP21 (последний быстрее и с лучшими security proof). Библиотеки: tss-lib (Go, от Binance), multi-party-sig (Go, от Coinbase), ZenGo-X/multi-party-ecdsa (Rust).

MPC не требует on-chain изменений — для блокчейна подпись выглядит как обычная single-key подпись. Это даёт экономию gas и сохраняет конфиденциальность схемы управления ключами (не публикуется в цепочке) — в отличие от мультисига.

Account Abstraction (EIP-4337): смарт-контракт как кошелёк

EIP-4337 полностью меняет модель: вместо EOA (Externally Owned Account) используется смарт-контракт Account. Логика авторизации — в коде контракта, не в криптографии протокола. Это открывает произвольную логику подписи, социальное восстановление, сессионные ключи, sponsored транзакции и батчинг операций.

Как работает стек EIP-4337:

User → UserOperation → Bundler → EntryPoint contract → Account contract
                                          ↑
                                    Paymaster (optional, pays gas)

UserOperation — новый тип объекта (не L1-транзакция). Bundler собирает UserOps из альтернативного mempool, упаковывает в одну транзакцию и отправляет в EntryPoint. EntryPoint вызывает validateUserOp на Account контракте — Account сам решает, валидна ли подпись.

Практические возможности:

Социальное восстановление. Контракт хранит список guardian'ов (другие адреса или сервис). Потеря ключа — guardians голосуют за замену. Argent использует схему с 2020 года.

Сессионные ключи. Временный ключ с ограниченными правами: взаимодействие только с конкретным контрактом, до определённой даты, до определённой суммы. Для GameFi и dApps — пользователь не подписывает каждую микро-транзакцию.

Paymaster. Сторонний контракт платит газ за пользователя. Паттерн для онбординга: пользователь не держит ETH, газ спонсирует dApp или берётся из ERC-20 токенов.

Реализации: Safe{Core} Protocol, Biconomy SDK (Stackup), ZeroDev (Kernel), Alchemy (Rundler bundler). На Ethereum mainnet, Polygon, Arbitrum, Optimism EntryPoint v0.6/v0.7 задеплоен и активен. Гарантируем совместимость с последними версиями контрактов.

Hardware Security Module для корпоративных кошельков

Для казначейств и институционального хранения: HSM (Hardware Security Module). Ключ генерируется и никогда не покидает защищённый чип. Подпись — внутри HSM. Поддерживается аппаратная аттестация. Используемые решения: AWS CloudHSM, Azure Dedicated HSM, Thales Luna, YubiHSM 2 (для небольших объёмов). Интеграция через PKCS#11 или cloud-specific API.

Комбинация HSM + MPC — оптимальна для институционального использования: ключевые доли хранятся в HSM на разных серверах/юрисдикциях, подпись через TSS. Это обеспечивает соответствие регуляторным требованиям (например, для крипто-кастодианов).

Интеграция с dApps: WalletConnect и стандарты

Любой кошелёк должен уметь взаимодействовать с dApps. Стандарт — WalletConnect v2 (Sign API): QR-код или deep link, peer-to-peer зашифрованный канал через relay сервер. Для браузерных расширений — EIP-1193 (Ethereum Provider API).

На фронтенде используем wagmi + viem — один интерфейс для MetaMask, WalletConnect, Coinbase Wallet, injected providers. Для Account Abstraction — EIP-5792 (wallet capabilities) и EIP-7677 (paymaster service).

Процесс разработки

  1. Threat model — кто пользователь (B2C, B2B, institutional), какие операции, каков допустимый risk model. От этого зависит архитектура.
  2. Выбор и проектирование схемы хранения ключей — MPC, HSM, мультисиг или их комбинация.
  3. Разработка Account контракта (если EIP-4337) или интеграция MPC-библиотеки.
  4. Backend — MPC-координация, управление сессиями, paymaster-сервис (если нужен).
  5. Мобильное/браузерное приложение — UI с интеграцией WalletConnect, биометрии, QR.
  6. Интеграция с dApps — EIP-1193, WalletConnect v2.
  7. Аудит контрактов и криптографических реализаций — обязательный этап. MPC-библиотеки имеют известные уязвимости (GG18 подвержен атаке при malicious participant без abort protocol). Используем библиотеки с актуальными security review (CGGMP21). Опыт прохождения аудитов у Certik, Hacken, Trail of Bits — подтверждаем сертификатами.

Что входит в работу (deliverables)

  • Исходные коды смарт-контрактов (Solidity/Rust) с документацией
  • Backend-сервис MPC-координации (на Go или Rust) с API
  • Мобильное приложение (iOS/Android) или браузерное расширение
  • Интеграция с WalletConnect, Ledger/Trezor (по необходимости)
  • Подготовка к аудиту безопасности (отчёт со списком уязвимостей)
  • Документация администратора и пользователя
  • Доступ к репозиторию, CI/CD, мониторинг (Tenderly, Etherscan API)
  • Обучение вашей команды (2-3 сессии)
  • Поддержка после запуска — 1 месяц

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

Тип решения Сроки (рабочие недели)
Custodial с базовым UI 4–8
Non-custodial с MPC-интеграцией 8–16
EIP-4337 Account с paymaster 6–12
Institutional (HSM + MPC + compliance) от 16

Стоимость рассчитывается индивидуально под ваш проект. Оценим за 1 день — напишите на почту или в Telegram. Предоставляем гарантию на код и timeline.

Типичные ошибки при разработке криптокошельков (и как их избежать)

  • Использование устаревших MPC-библиотек — GG18 без abort protocol. Выбираем CGGMP21 или tss-lib с актуальными audit report.
  • Жёсткая привязка к одному блокчейну — не закладывают абстракцию под L2/сайдчейны. Используем viem/wagmi для кросс-чейн.
  • Игнорирование MEV-атак — при использовании мультисига без таймлоков. Добавляем tx simulation (Tenderly) и sandwitching protection.
  • Отсутствие fallback-механизма восстановления — для Account Abstraction не настраивают social recovery. Закладываем с первого релиза.

Устраняем эти грабли на этапе проектирования — под каждый проект составляем threat model и security checklist.

Нужен надёжный кошелёк без компромиссов? Получите консультацию нашего архитектора — разберём вашу задачу и предложим архитектуру с точной сметой. Оставляйте заявку — ответим в течение дня.