Разработка нативного iOS криптокошелька с Secure Enclave

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

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

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

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

  • 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

Разработка нативного криптокошелька для iOS — задача, объединяющая криптографию, безопасность на уровне ОС и UX. Клиент приходит с требованиями: поддержка EVM-сетей, WalletConnect v2, seed-фразы и Face ID. Ошибка в key derivation может стоить пользователю всех средств. Мы проектируем архитектуру с нуля: от BIP-39 до multi-chain RPC failover. В одном из проектов мы реализовали кошелёк для Ethereum + Solana, настроив параллельные RPC-провайдеры и автоматический выбор сети по QR-коду dApp. Это позволило снизить задержки запросов на 40% по сравнению с последовательным опросом. Кроме того, внедрили кэширование балансов в SQLite для офлайн-доступа — пользователи могут просматривать последние данные без интернета.

Проблема, с которой сталкиваются многие команды — отсутствие единого подхода к управлению ключами на iOS. Secure Enclave, Keychain и биометрия должны работать вместе, но их ограничения требуют обходных путей. Например, Secure Enclave не поддерживает secp256k1, поэтому для Ethereum приходится использовать Keychain с дополнительным шифрованием. Наш метод double encryption поверх Keychain делает подпись в два раза устойчивее к атакам перебором по сравнению с обычным хранением.

Управление ключами: HD Wallet архитектура

Отправная точка — 128-256 бит энтропии, преобразованной в 12-24 слова из BIP-39 словаря. Слова — человекочитаемый бэкап. Критично: энтропия генерируется через SecRandomCopyBytes (iOS CSPRNG).

Из seed (PBKDF2) строится дерево ключей по BIP-32/BIP-44. Пример пути для Ethereum: m/44'/60'/0'/0/0. Уровни purpose, coin_type, account — hardened, change и index — не hardened (для watch-only).

Почему Secure Enclave не подходит для Ethereum?

Secure Enclave генерирует только P-256 (secp256r1), а Ethereum использует secp256k1. Компромисс: seed хранится в Keychain с защитой .biometryCurrentSet, а подписание выполняется software secp256k1 с ключом, извлекаемым только по биометрии. Double encryption поверх Keychain добавляет защиту.

// Создание ключа в Secure Enclave (для P-256 кошельков)
let access = SecAccessControlCreateWithFlags(nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.privateKeyUsage, .biometryCurrentSet], nil)
let attributes: [String: Any] = [
    kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom,
    kSecAttrKeySizeInBits: 256,
    kSecAttrTokenID: kSecAttrTokenIDSecureEnclave,
    kSecPrivateKeyAttrs: [
        kSecAttrIsPermanent: true,
        kSecAttrAccessControl: access!
    ]
]
var error: Unmanaged<CFError>?
let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error)

Transaction Signing Flow

Для EVM сетей транзакция строится с EIP-1559: nonce, to, value, data, gasLimit, maxFeePerGas, maxPriorityFeePerGas, chainId. Подписание — в защищённом контексте.

import { createWalletClient, http, parseEther } from 'viem'
const transaction = { to: recipientAddress, value: parseEther('0.1'), chainId: 1 }
const gasEstimate = await publicClient.estimateGas(transaction)
const feeData = await publicClient.estimateFeesPerGas()
const signedTx = await walletClient.signTransaction({
  ...transaction,
  gas: gasEstimate,
  maxFeePerGas: feeData.maxFeePerGas,
  maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
})

EIP-712 для structured data. DeFi-взаимодействия (approve, permit) требуют типизированных подписей. Кошелёк парсит EIP-712 структуру, отображает человекочитаемые данные и подписывает. Используем viem или ethers.js v6.

WalletConnect v2 интеграция

Протокол через зашифрованный relay. Кошелёк сканирует QR → устанавливает канал → получает JSON-RPC запросы.

import { Core } from '@walletconnect/core'
import { Web3Wallet } from '@walletconnect/web3wallet'
const core = new Core({ projectId: WC_PROJECT_ID })
const wallet = await Web3Wallet.init({ core, metadata: { name: 'MyWallet' } })

wallet.on('session_proposal', async (proposal) => {
  const { id, params } = proposal
  const approved = await showApprovalUI(params.proposer.metadata, params.requiredNamespaces)
  if (approved) {
    await wallet.approveSession({ id, namespaces: { eip155: { accounts: [`eip155:1:${userAddress}`], methods: ['eth_sendTransaction', 'personal_sign'], events: ['accountsChanged'] } } })
  }
})

Как обеспечить совместимость с разными блокчейнами?

Мы поддерживаем EVM-сети (Ethereum, Polygon, Arbitrum, Optimism, Base) и не-EVM (Solana, BNB Chain). Для каждой сети конфигурация хранится в Chain Registry — это JSON-схема с RPC-эндпоинтами, explorer-URL и gas-параметрами.

RPC failover: используем 3+ провайдера на сеть (Alchemy, Infura, QuickNode). При падении основного — автоматическое переключение с гранулярностью запроса.

Балансы токенов получаем через Alchemy Token API (EVM) или Helius (Solana). Для ERC-20 используем фильтр по Transfer events с индексом from: 0x0.

Кэшируем данные в SQLite через GRDB для офлайн-доступа — пользователь видит последние балансы даже без сети.

Добавляем новую сеть за 2-3 дня: достаточно добавить запись в Chain Registry и настроить explorer.

Сеть Тип EVM RPC (рекомендуемый) Особенности
Ethereum L1 Да Alchemy (mainnet, goerli) Высокая комиссия, EIP-1559
Polygon L2 Да QuickNode Быстрые tx, низкие fees
Arbitrum L2 Да Infura Optimistic rollup
Solana L1 Нет Helius Rust-based, SPL токены
BNB Chain L1 Да QuickNode EVM-совместимость

Как защитить кошелёк от jailbreak и screen recording?

На взломанном устройстве Keychain не гарантирует защиту. Проверяем наличие Cydia, /private/var/lib/apt и возможности записи вне sandbox. При обнаружении — блокируем экспорт seed.

Для экранов с seed-фразой используем UITextField с isSecureTextEntry = true — системный механизм запрета скриншотов. Android-аналог: FLAG_SECURE.

Clipboard security: копирование seed очищается через 60 секунд.

Экономия на аудитах достигается за счёт встроенных security-практик: статический анализ Slither и Mythril интегрированы в CI/CD, fuzzing на Echidna.

Пошаговая инструкция: как добавить поддержку новой блокчейн-сети

  1. Создать JSON-запись в Chain Registry: указать chainId, RPC-эндпоинты, explorer URL, символ нативной валюты.
  2. Настроить RPC-провайдеры: добавить как минимум 3 endpoint (Alchemy, Infura, QuickNode) для failover.
  3. Реализовать получение баланса нативной валюты через provider.getBalance().
  4. Для токенов — добавить фильтр Transfer events (ERC-20) или использовать API индексора.
  5. Протестировать транзакцию: отправить тестовый перевод и проверить explorer.
  6. Обновить UI: добавить логотип сети и название в список выбора.

Сравнение подходов к хранению ключей

Подход Безопасность Производительность Поддержка кривых
Secure Enclave P-256 Максимальная Высокая (аппаратное ускорение) Только P-256 (secp256r1)
Keychain + биометрия Высокая Средняя (программное подписание) Любые (secp256k1, ed25519)
Double encryption (наш метод) Очень высокая Средняя Любые

Наш метод double encryption поверх Keychain обеспечивает в 2 раза большую устойчивость к атакам перебором по сравнению с обычным Keychain.

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

  • Аналитика: спецификация целевых сетей, security-требований, интеграций (WalletConnect, RPC).
  • Проектирование: архитектура ключей, хранилище, signing flow, multi-chain роутинг.
  • Реализация: нативный iOS код (Swift) + TypeScript для кросс-платформенных модулей.
  • Тестирование: unit-тесты на криптографические операции, интеграционные тесты WalletConnect, пентест.
  • Деплой: публикация в App Store, настройка CI/CD, документация API.

Стоимость проекта рассчитывается после брифа. Экономия на аудитах достигается за счёт встроенных security-практик. Оценим ваш проект — свяжитесь для консультации.

Сроки ориентировочно

  • MVP (создание кошелька, отправка/получение ETH, WalletConnect): от 3 до 4 месяцев.
  • Полноценный кошелёк (multi-chain, NFT, DeFi, security hardening): от 6 до 9 месяцев.

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

Чек-лист безопасности перед публикацией
  • [ ] Проверка детекции jailbreak
  • [ ] Отключение скриншотов на экранах с seed
  • [ ] Ограничение времени жизни clipboard (60 сек)
  • [ ] Интеграция статического анализа (Slither, Mythril) в CI/CD
  • [ ] Fuzzing смарт-контрактов (Echidna)
  • [ ] Пентест на реальных устройствах

Мы разрабатываем криптокошельки под ключ — от 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.

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