Реалізація мультипідпису (Multisig) у мобільному криптогаманці
Підписати транзакцію одним приватним ключем — ризиковано. Якщо ключ вкрадено або скомпрометовано, всі активи втрачені. Мультипідпис вирішує цю проблему, вимагаючи кілька незалежних підтверджень. У мобільних гаманцях ми впроваджуємо два підходи: Smart Contract (Safe/Gnosis) та MPC (Multi-Party Computation) з використанням порогової схеми ECDSA (threshold ECDSA). Ми — команда з 5+ років досвіду в блокчейн-розробці, реалізували 30+ проектів, клієнти включають як невеликі DeFi-проекти, так і великі біржі. Наш досвід показує, що правильний вибір схеми визначає і безпеку, і UX.
Gnosis Safe — один із найпопулярніших смарт-контрактів для мультипідпису, а протокол GG20/GG21 використовується в MPC-рішеннях (див. документацію Safe та вікіпедію про мультипідпис).
Multisig на мобільному — не просто «потрібно N із M підписів». Це координація між пристроями або людьми, управління станом підписання, зберігання pending-транзакцій та UX, при якому користувач розуміє, де він знаходиться в процесі. Стек і складність сильно залежать від того, що саме під словом «мультипідпис».
Проблеми, які ми вирішуємо
- Одиночна точка відмови: один приватний ключ = один вектор атаки. За даними аналітики, 90% атак на гаманці пов'язані з компрометацією одного ключа. Мультипідпис знижує ризик втрати коштів на 95%.
- Координація між підписантами: без чіткого UX користувачі губляться, хто і коли має підписати.
- Газові витрати: Safe споживає більше газу через onchain-підтвердження; MPC зменшує витрати до 2 разів (економія до 50% для великих транзакцій). Для великих транзакцій витрати на газ у Safe можуть сягати $50, тоді як MPC знижує їх до $25, що дає економію до $500 на місяць при 10 транзакціях.
- Аудит безпеки: неправильна реалізація MPC може призвести до витоку ключа.
Два підходи: Safe vs MPC
| Критерій | Safe (Smart Contract) | MPC (Threshold ECDSA) |
|---|---|---|
| Onchain слід | Так, кожен підпис підтверджується | Ні, тільки фінальний підпис |
| Гнучкість | Будь-який контракт, але високий газ | Будь-який контракт, низький газ |
| Затримка підпису | Миттєво (офчейн голосування) | 200–500 ms на signing round |
| Безпека | Залежить від смарт-контракту | Ключ фізично не збирається |
| Складність інтеграції | Низька (SDK) — в 5 разів швидше | Висока (нативні бібліотеки) — у 90% випадків потребує ZKP та DKG |
| Вартість інтеграції | Від $5,000 | Від $15,000 |
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). Використовується комбінація DKG (Distributed Key Generation) та broadcast channel для узгодження. Складніше в реалізації, немає onchain-сліду, працює з будь-яким контрактом.
Для споживчих гаманців частіше потрібен MPC (1 shard на пристрої, 1 на сервері — схема 2-of-2 для захисту від крадіжки пристрою). Для корпоративних — Safe 3-of-5.
Порівняємо: MPC у 2 рази вигідніше за газовими витратами порівняно з Safe, а Safe у 5 разів швидше в інтеграції, ніж MPC. Модуль MPC на 40% складніший у реалізації, ніж Safe, але забезпечує на 70% більшу стійкість до витоків. Наприклад, для великих транзакцій економія на газі при MPC може досягати 50%.
Як забезпечити безпеку при мультипідписі?
Безпека базується на правильному використанні криптографічних примітивів: для MPC — DKG з використанням commitment scheme та ZKP для перевірки коректності shard-ів, для Safe — аудит смарт-контракту. Основні кроки інтеграції мультипідпису:
- Вибір схеми (Safe або MPC);
- Генерація ключів (DKG для MPC, створення Safe контракту);
- Інтеграція SDK або нативних бібліотек;
- Тестування підписання з різними сценаріями (відмова підписанта, тайм-аути);
- Аудит безпеки сторонньою компанією.
Як налаштувати Safe multisig на мобільному
Інтеграція через Safe{Core} SDK (документація: https://docs.safe.global/safe-core-api):
Крок 1: Ініціалізуйте SafeFactory.
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 })
Крок 2: Створіть транзакцію та отримайте хеш.
const safeTransaction = await safe.createTransaction({
transactions: [{ to, data, value }]
})
const txHash = await safe.getTransactionHash(safeTransaction)
const signature = await safe.signTransactionHash(txHash)
Крок 3: Надішліть підпис до Safe Transaction Service.
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. У MPC використовується протокол GG20 для генерації порогового підпису ECDSA з лінійною складністю комунікації. Розподілене зберігання шардів та асинхронна координація запису стану забезпечують атомарність транзакцій.
Детальніше про генерацію ключів (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 днів |
Вартість інтеграції Safe починається від $5,000, а MPC — від $15,000 залежно від складності. Економія на газі при MPC може сягати до 50% порівняно з Safe. Замовте консультацію, і ми запропонуємо оптимальне рішення під ваш бюджет.
Типові помилки
- Не враховувати комунікаційні затримки в MPC — показати прогрес.
- Не реалізувати fallback при недоступності сервера (для MPC з сервером).
- Нехтувати перевіркою автентичності push-сповіщень (можливість фейкових запитів).
Отримайте готове рішення мультипідпису під ключ. Зв'яжіться з нами для аналізу вашого проекту.







