Что такое мультиподпись 2-of-2?

·9 мин. чтения·Автор: SSP Editorial Team
Схема кошелька с мультиподписью 2-of-2, на которой два подписанта одобряют одну транзакцию

Если вы когда-либо владели криптовалютой, вы почти наверняка слышали одно и то же предупреждение: «храните свою seed-фразу». Двенадцать или двадцать четыре слова, записанные на бумаге, которые любой нашедший может использовать, чтобы опустошить ваш кошелёк из любой точки мира. Эта единственная цепочка слов — вся модель безопасности большинства некастодиальных кошельков, и в этом её проблема. Потеряйте её — и средств больше нет. Дайте кому-то её скопировать — и средств больше нет. Одна ошибка, одно мгновение невнимательности, один убедительный фишинговый сайт — и результат тот же.

Мультиподпись 2-of-2 — самое доступное решение этой хрупкости. Она разделяет ключи вашего кошелька между двумя устройствами так, что ни одна seed-фраза, экран или подпись по отдельности не могут переместить ваши монеты. В этой статье объясняется, как это работает, почему это важно и какие атаки она останавливает, а какие — нет.

Сценарий отказа единственной seed-фразы

Большинство криптовалютных кошельков — будь то на телефоне, в браузерном расширении или на аппаратном устройстве — построены вокруг одного секрета. Этот секрет — seed-фраза: последовательность слов, сгенерированная при первой настройке кошелька, из которой математически выводится каждый приватный ключ этого кошелька. Любой, у кого есть seed-фраза, получает полный, безотзывный контроль над каждой монетой в этом кошельке, на каждом блокчейне, который он поддерживает.

Это удивительно удобно. И это же — единая точка отказа.

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

В 2022 году ФБР оценило, что только потребители США потеряли более 2,5 миллиардов долларов из-за краж и мошенничества, связанных с криптовалютой, и подавляющее большинство этих потерь восходило к одному скомпрометированному секрету. Mt. Gox, Bitfinex, мост Ronin — каждая громкая криптокатастрофа имеет одну и ту же форму: один секрет, одна утечка, один невозвратный перевод.

Конфигурация 2-of-2 — это способ сказать: мои монеты не должны быть в одном украденном стикере от исчезновения.

Кратко о мультиподписи M-of-N

Мультиподпись (сокращение от «multi-signature», множественной подписи) — это кошелёк, требующий более одной подписи для отправки транзакции. Общая форма называется M-of-N: всего есть N ключей, и любые M из них должны подписать транзакцию, прежде чем монеты можно будет переместить.

<span id="signer"></span>Подписант — это устройство или сторона, владеющая одним из этих N ключей. На практике подписант — это обычно отдельное оборудование или ПО: ваш телефон, аппаратный кошелёк на столе, ноутбук, сервис со-подписания или даже доверенный друг. Важное свойство — подписанты должны быть независимыми: компрометация одного из них не должна давать атакующему доступ к любому из остальных.

<span id="threshold"></span>Порог (M) — это количество подписей, необходимое для траты. Если порог равен 2, то двое из N подписантов должны одобрить и криптографически подписать транзакцию, прежде чем блокчейн примет её как валидную. Кошелёк 2-of-3 имеет трёх подписантов и требует любых двух. Кошелёк 3-of-5 имеет пятерых подписантов и требует любых трёх. Порог фиксируется при создании кошелька и применяется самим блокчейном, а не какой-либо компанией.

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

Конкретно модель 2-of-2

<span id="2-of-2"></span>В мультиподписи 2-of-2 порог равен общему числу подписантов: ровно два ключа, и оба должны подписывать каждую трату. Нет запасного, нет резервного подписанта, нет кворума, на который можно опереться. Либо оба устройства одобряют транзакцию, либо её не будет.

Это самая простая конфигурация мультиподписи, которая всё ещё обеспечивает осмысленную защиту. По сравнению с 2-of-3 её проще настроить — вы управляете только двумя подписантами, а не тремя — и она не требует выбора третьей стороны или места для хранения запасного ключа. Компромисс в том, что у 2-of-2 нет встроенного пути восстановления: если один из двух подписантов будет окончательно утрачен или уничтожен, вы больше не сможете тратить монеты с этого адреса. Восстановление в 2-of-2 обеспечивается отдельным резервным копированием seed-фразы каждого подписанта, обычно в виде запечатанного бумажного или стального бэкапа, хранящегося отдельно от самого устройства.

Для пользователя самокастодиального хранения самая распространённая пара 2-of-2 — это «телефон плюс аппаратный ключ» или «телефон плюс второе запечатанное устройство». Пользователь подписывает на обоих, каждый раз.

Как кошелёк находит свой адрес: BIP48

<span id="bip48"></span>BIP48 — Bitcoin Improvement Proposal 48 — это технический стандарт, описывающий мультиподписным кошелькам, как выводить их публичные ключи и адреса из seed-фразы каждого подписанта переносимым между производителями ПО способом. Именно поэтому кошелёк 2-of-2, созданный в одном приложении, можно повторно открыть, проверить или восстановить в другом совместимом приложении спустя годы.

В упрощённом виде: seed-фраза каждого подписанта превращается в иерархию ключей по детерминированному пути. BIP48 задаёт точный путь для мультиподписных кошельков — включая позицию, фиксирующую, использует ли кошелёк legacy-адреса, SegWit или native SegWit, — и позицию для того, какой «аккаунт» внутри seed используется. Когда двое подписантов выводят каждый свой публичный ключ по одному и тому же BIP48-пути, кошелёк объединяет эти два публичных ключа в один мультиподписной адрес. Монеты, отправленные на этот адрес, могут быть разблокированы только подписями обеих исходных seed-фраз.

Почему этот стандарт важен? Потому что без него мультиподписной кошелёк был бы чёрным ящиком. Если бы производитель исчез, у вас остались бы две seed-фразы и никакого переносимого способа восстановить адрес, который они защищают. BIP48 делает адрес чистой функцией seed-фраз и пути — любой, у кого есть стандарт и seed-фразы, может восстановить кошелёк навсегда, без доверия какой-либо компании.

Ethereum и EVM-цепочки используют другой механизм (смарт-контрактные кошельки и ERC-4337), но видимая пользователю модель та же: два подписанта, один адрес, оба обязательны.

Что 2-of-2 реально останавливает

Самый ясный способ увидеть ценность 2-of-2 — пройтись по конкретным атакам и спросить: что меняется, когда атакующему приходится скомпрометировать два независимых устройства вместо одного?

Фишинг. Пользователь нажимает на убедительную ссылку о «миграции кошелька» и вводит одну из своих seed-фраз на поддельной странице. С кошельком на одной seed-фразе средства исчезают за минуты — атакующий импортирует seed и транслирует перевод. В 2-of-2 атакующий теперь владеет половиной кошелька. Он не может переместить ни одной монеты, не украв также вторую seed-фразу, которая живёт на другом устройстве, на котором пользователь никогда ничего не вводил на фишинговой странице. Фишинговая попытка превратилась из катастрофической в просто тревожную.

Вредоносное ПО на телефоне или ноутбуке. Фрагмент вредоносного ПО, перехватывающего буфер обмена, или инфостилер компрометирует одно подписывающее устройство. В кошельке с одним ключом, как только это устройство попытается совершить любую транзакцию, вредонос может подменить адрес назначения, а пользователь сам её подпишет. В 2-of-2 второе устройство показывает пользователю реальные, неизменённые детали транзакции на экране, который вредонос не контролирует. Пользователь видит несоответствие и отказывается подписывать со своей стороны.

Потерянное устройство. Телефон пользователя украли в поезде. На «горячем» кошельке с одной подписью, защищённом только PIN-кодом, упорный атакующий может извлечь seed за часы. В 2-of-2 потерянный телефон — лишь один подписант из двух, бесполезный сам по себе. У пользователя есть время перевести средства на новый адрес, используя сохранившегося подписанта плюс резервную копию seed-фразы телефона.

Принуждение («атака гаечным ключом за 5 долларов»). Кто-то с физическим доступом требует у пользователя seed-фразу. С одной seed-фразой подчинение означает полную потерю. В 2-of-2, где два подписанта живут в разных физических местах — например, один дома, один в банковской ячейке или один в руках доверенного сервиса со-подписания, — пользователь искренне не может завершить перевод на месте. Атакующий лишён немедленной выгоды, ради которой такие атаки вообще затеваются.

В каждом случае основной принцип один и тот же: две независимые компрометации в одном коротком окне времени — куда более сложная задача, чем одна.

От чего 2-of-2 не защищает

Мультиподпись — не магия. Она не защищает от намеренной подписи вредоносной транзакции: если оба ваших устройства показывают один и тот же неверный адрес назначения, а вы всё равно одобряете, блокчейну неоткуда узнать. Она не защищает от потери обеих резервных копий в одном и том же пожаре или наводнении — поэтому два бэкапа должны жить в физически разделённых местах. Она не защищает от багов в самом ПО кошелька, хотя открытый исходный код и переносимость через BIP48 этих кошельков означают, что такие баги можно аудировать и обходить так, как закрытая кастодиальная система не позволяет. И она не защищает от самого пользователя, добровольно подписывающего отдачу своих монет на обоих устройствах в ответ на достаточно убедительный обман. Порог поднимает планку; он не выводит пользователя из контура.

Попробуйте сами

Самый полезный способ усвоить мультиподпись 2-of-2 — настроить её и увидеть, как реальная транзакция требует двух одобрений перед трансляцией. SSP Wallet с самого начала спроектирован именно вокруг этой модели — ваш телефон и ваш браузер выступают двумя подписантами, и за кулисами не прячется режим единственной seed-фразы.

Настройка вашего первого кошелька SSP шаг за шагом проводит через сопряжение, резервное копирование и первую подписанную транзакцию.

Поделиться статьёй

Похожие статьи