Мультиподпись
Мультиподпись (англ. multisignature) — схема реализации электронной подписи, которая для своей достоверности требует T ключей из группы N членов[1] (T < N). По своей сути является вариантом пороговой подписи, но реализована не как единый объект, а как проверка заданных условий, которую осуществляет базовая система скриптов криптовалюты[2].
Мультиподпись в Биткойне
Особенностью Биткойна и многих других криптовалют является необратимость транзакций — нет механизма отмены вошедшей в блокчейн транзакции, а также нет возможности иного действия, игнорирующего волю текущего владельца. Но Биткойн имеет встроенный скриптовый язык, позволяющий указывать разнообразные дополнительные условия для проведения транзакций. Одно из возможных условий, реализуемых через скрипты — создание биткойн-адреса, для управления которым требуется оговоренное количество подписей из заданного списка (принцип T-из-N)[2].
Первым символом созданных с использованием мультиподписи биткойн-адресов является тройка (обычные биткойн-адреса начинаются с единицы).
В августе 2013 года компания BitGo первой реализовала интерфейс, в котором адреса с мультиподписью клиенты компании могли создавать и использовать без прямого обращения к скриптам[3].
Мультиподпись в биткойне является набором подписей различных пользователей, а не одним объектом. Мультиподпись реализована в других криптовалютах разными способами[4][5]. Язык умных контрактов Эфириума обладает гораздо более широкими возможностями, чем скриптовый язык Биткойна.
Широкое распространение получили адреса, для операций с которыми нужны любые два ключа из оговоренных трёх. Чаще всего именно это и подразумевается под термином «Мультиподпись». Они позволяют реализовать обратимые транзакции.
Обратимые транзакции в Биткойне
Необратимость транзакций становится существенной проблемой, если стороны не очень доверяют друг другу или есть иная угроза неисполнения договорённости. Подобные ситуации часто возникают при покупках в интернет-магазинах. При неполучении товара или иных претензиях нет гарантий возврата средств. При оплате через VISA или MasterCard клиент может воспользоваться процедурой возвратного платёжа.
В системе Биткойн подобная процедура реализуется следующим образом.
Стороны договариваются об использовании мультиподписи с привлечением третьей стороны — арбитра. С использованием открытых ключей всех трёх сторон генерируется новый адрес, который связывается со скриптом условий[1], где прописывается, что для создания новой транзакции достаточно двух подписей. Правила (условия для скриптов) указываются при создании адреса, становятся его составной частью и не могут измениться без изменения самого адреса. Покупатель делает перевод на созданный адрес, который в полной мере не принадлежит ни одной из сторон и является транзитным. Продавец видит поступление, отправляет товар и создаёт транзакцию о переводе средств с транзитного адреса на свой. Но средства «повисают», так как ни одна из сторон, в том числе арбитр, не может распорядиться ими самостоятельно[6]. Покупатель получает товар. Если всё в порядке, покупатель накладывает на транзакцию, сформированную продавцом, свою подпись, тем самым выполняя условия для отправки средств в адрес продавца. Если товар не дошёл или покупатель его вернул, то покупатель формирует новую транзакцию с транзитного адреса на свой, подписывает её и предлагает подписать продавцу. При согласии продавца, средства вернутся покупателю. Если согласие не достигнуто, то последнее слово будет за арбитром. Рассмотрев ситуацию, арбитр принимает решение о передаче средств продавцу (и налагает свою подпись на транзакцию, подготовленную продавцом) или о возврате средств покупателю (и налагает свою подпись на транзакцию, подготовленную покупателем). Договор может предусматривать вознаграждение арбитру. Тогда арбитр создаёт ещё одну транзакцию с разделением платежа как в пользу одной из сторон, так и в свою собственную, а затем предлагает соответствующей стороне наложить свою подпись. Неподписанные «лишние» транзакции утратят свою актуальность после отправки средств и не приведут к двойной трате.
Иное применение мультиподписи
Принцип мультиподписи может использоваться для повышения уровня безопасности при платежах криптовалютой. Формула 2-из-3 позволяет создать корпоративный адрес на основе подписей владельца, директора и бухгалтера[1].
При мультиподписи, составленной из членов семьи с небольшим количеством обязательных подписей, утрата секретного ключа не становится катастрофической проблемой. Даже если ключ попадет в чужие руки, злоумышленник вряд ли сможет убедить родственников пострадавшего подписать транзакцию.
Мультиподпись, для которой требуется более половины членов попечительного совета некоего фонда, автоматически будет выполнять роль голосования при рассмотрении решений о направлениях использования средств. Оплачиваться будут только те проекты, которые получат большинство голосов в форме подписей под транзакцией.
Атака «дней рождения»
Мультиподписные адреса Биткойна используют P2SH и защищены с помощью HASH160 (160-битная хеш-функция). Если злоумышленник владеет хотя бы 1 ключом из мультиподписного списка, то с учётом коллизии хеша для подделки чужой подписи он может снизить количество вариантов перебора до 280, что уже осуществимо для современных вычислительных систем[7].
Примечания
- Безопасность Биткоина это не только мультиподписи // coinspot.io 30.08.2016
- Биткойн — это финансовая платформа с разнообразными API // Bit•Новости
- How 2014 Became the Year of Multisig . Дата обращения: 17 июля 2015.
- Bytecoin (BCN) is Now Armed With Multisig . Coinbrief.com. Дата обращения: 16 сентября 2015.
- NXT Teases Voting System, 'Two Phase Transactions' and a Foundation . Cointelegraph.
- Обратимые транзакции в Bitcoin
- Segregated Witness Benefits