Multisig защищает биткоины, требуя для их траты подписи нескольких заданных ключей. В правиле 2 из 3 достаточно любых двух из трёх разных ключей. Потеря одного поэтому не обязательно означает потерю денег, а вор с одним ключом не сможет их потратить. Для этого нужны правильные резервные копии и реальное разделение ключей.
Алиса не хочет, чтобы все её сбережения зависели от одного устройства. Она создаёт кошелёк по правилу 2 из 3 с независимыми ключами A, B и C. Платёж может одобрить пара A + B, A + C или B + C. Каждая подпись — математически проверяемое разрешение, созданное соответствующим приватным ключом; сам ключ в сеть не отправляется. Потеряв A, Алиса всё ещё может использовать B и C, если у неё также есть необходимые данные кошелька. Тот, кто украдёт только A, не сможет отправить деньги один. Биткоины при этом не делятся на три кучки: общее правило защищает все соответствующие средства. Ключами могут владеть три человека или один человек на отдельных устройствах. Три копии одной Seed Phrase, то есть одного набора слов восстановления, не создают три независимых ключа. [1] [2]
Алиса вводит адрес получателя и сумму в приложении. В роли координатора оно готовит проект транзакции и передаёт его устройствам для подписания. Часто для этого используется PSBT — формат для передачи сведений о платеже и постепенно добавляемых подписей. Поэтому устройствам не обязательно быть подключёнными одновременно или находиться в одном месте, а приватные ключи остаются разделёнными. Перед подписанием Алиса проверяет получателя, сумму и комиссию на доверенном экране каждого используемого устройства. По проверенным правилам кошелька устройство должно также распознать выход, возвращающий ей сдачу. Две подписи под подменённым платежом её не защитят. Координатор не может придумать отсутствующую подпись, но может предложить неверный платёж. Лишь собрав необходимые подписи и завершив транзакцию, приложение передаёт её в сеть. [5]
Каждому независимому ключу нужна собственная безопасная резервная копия. Но для восстановления всего кошелька двух наборов слов не всегда достаточно. Нужна и общая конфигурация: необходимое число подписей, публичные данные всех трёх ключей, их порядок и способ создания адресов. Это можно сохранить как Output Descriptor — точное техническое описание кошелька — или равноценный экспорт конфигурации. Публичный дескриптор без приватных ключей сам не подпишет платёж, но может раскрыть адреса и движение денег, поэтому его тоже следует хранить конфиденциально. Сначала Алиса проверяет получение, отправку и восстановление с небольшой суммой. Если позже она потеряет A или заподозрит утечку, удаление устройства из приложения не изменит старое правило. Оставшимися ключами нужно перевести средства на новые проверенные адреса с новым набором ключей. [4] [6]
Правило 2 из 3 допускает потерю одного ключа; правило 2 из 2 не допускает потери ни одного. Одновременно при первом правиле деньги может потратить любая пара, включая двух людей, договорившихся без третьего. Поэтому подходящая конфигурация зависит от того, чьи деньги она защищает и какие сбои должна выдержать. Если Алиса положит все устройства и копии в один ящик, одна кража или пожар могут перечеркнуть преимущество разделения. Прибавляется и работа по проверке платежей, совместимости кошельков и восстановлению. Условия траты здесь задаёт скрипт — небольшая программа. Обычная скриптовая multisig-транзакция обычно занимает больше места, чем сопоставимая транзакция с одной подписью, и при одинаковой ставке комиссии стоит дороже. Для новичка простой кошелёк, которым он умеет пользоваться, может быть безопаснее сложной непонятной конфигурации. [1] [2]
Общая запись m из n означает, что нужны m действительных подписей от n заданных ключей. В классическом скриптовом Multisig публичные ключи и этот порог входят в условие траты. Выход транзакции задаёт условие напрямую или криптографически связан с соответствующим скриптом. При трате узлы — компьютеры, проверяющие соблюдение правил Bitcoin, — контролируют необходимые подписи и данные скрипта; одного разрешения приложения недостаточно. В дескрипторах multi сохраняет указанный порядок публичных ключей, а sortedmulti сортирует их по точному правилу. Путь выведения определяет, какие именно ключи кошелёк должен вычислить из исходных данных. Неверный порядок или другие пути выведения ключей могут дать другие адреса. Дескриптор позволяет кошельку восстановить эти условия; сам он не записывается в блокчейн как файл конфигурации. Это объяснение относится к обычному скриптовому Multisig. Другие конструкции могут позволять нескольким участникам совместно создавать одну подпись и имеют собственные правила. [3] [4] [7]
Правило 2 из 3
Multisig с тремя разными ключами требует действительных подписей любых двух. Одного украденного ключа недостаточно; после потери одного оставшиеся два позволяют потратить средства, если доступны и нужные данные скрипта. Разделите ключи и их копии и сохраните полный Output Descriptor либо эквивалентное правило кошелька.
Для полной картины прочитайте эту статью вместе с Private Key, Кошелёк, PSBT. На эту статью также ссылаются HD Wallet, Cold Storage, Watch-only Wallet, Change Address.
01Всегда ли Multisig безопаснее одной Hardware Wallet?+
Нет. Правильно разделённые ключи и копии могут уменьшить зависимость от единой точки отказа, но больше участников усложняют работу. Нужны проверенное правило кошелька и испытанное восстановление; взломанный общий координатор может показать всем одинаковый неверный платёж.
02Должны ли все ключи Multisig находиться в одном месте при подписании?+
Нет. PSBT позволяет отдельно передавать данные и подписи, не собирая приватные ключи. Каждый подписант должен проверить получателей, суммы и комиссию. До передачи в сеть необходимо завершить транзакцию нужными действительными подписями и выполнить все прочие условия входов.