Казначейство проекта держат на схеме с несколькими подписями, где для операции требуется подтверждение нескольких участников из заранее оговорённого круга — типовая конфигурация «два из трёх» или «три из пяти». Ключи хранятся у разных людей на разных устройствах, операционные средства отделены от резерва, а порядок действий описан документом. Один человек с одним ключом — не казначейство, а точка отказа.
Ниже — как выбрать порог подписей, чем разделять кошельки по назначению, где схема ломается на практике, что писать в регламенте и как готовиться к смене состава участников.
Почему одиночный кошелёк не подходит
Причина не в недоверии к человеку, а в устройстве риска.
Кошелёк с единственным ключом отдаёт средства любому, кто этот ключ получил: через взлом устройства, кражу резервной копии, давление на владельца или его внезапное отсутствие. Промежуточного состояния нет.
Схема с несколькими подписями меняет это свойство.
Компрометация одного ключа перестаёт быть катастрофой, потеря одного ключа перестаёт быть потерей средств, а любая операция становится видимой остальным участникам до её исполнения, а не после.
Формально кошелёк с несколькими подписями — это адрес, распоряжение которым требует подтверждения от заранее заданного числа ключей из общего набора. Формат — «M из N». Скажем, два подтверждения из трёх возможных, и правило это живёт в смарт-контракте, поэтому изменить его в одностороннем порядке не выйдет.
Выбор порога подписей
| Конфигурация | Защита от компрометации | Защита от потери ключа | Кому подходит |
|---|---|---|---|
| 2 из 2 | Хорошая | Отсутствует: потеря любого ключа фатальна | Не рекомендуется |
| 2 из 3 | Хорошая | Выдерживает потерю одного ключа | Небольшой команде, семье, партнёрам |
| 3 из 5 | Высокая | Выдерживает потерю двух ключей | Проекту с несколькими руководителями |
| 4 из 7 | Максимальная | Выдерживает потерю трёх | Крупному казначейству, фонду |
| 1 из 3 | Отсутствует | Высокая | Только для удобства, не для защиты |
Крайности — сверху и снизу. Схема «два из двух» защищает от кражи, но превращает утрату одного носителя в полную потерю средств; схема «один из трёх» удобна и не защищает ни от чего, поскольку достаточно скомпрометировать любой из ключей.
Что важно посчитать до настройки: при конфигурации M из N средства теряются безвозвратно, если утрачено N − M + 1 ключей. Для схемы «два из трёх» это означает потерю двух ключей из трёх. Число участников выбирают нечётным. Ключи размещают на разных устройствах и в разных местах.
Разделение кошельков по назначению
Один адрес для всего неудобен. Любое движение средств требует полной процедуры согласования.
- Операционный кошелёк. Небольшая сумма на текущие расходы, порог подписей ниже, скорость выше. Пополняется из резерва по расписанию.
- Основное казначейство. Резерв проекта, высокий порог, редкие операции, обязательное обсуждение до подписания.
- Кошелёк выплат. Отдельный адрес для регулярных переводов подрядчикам и команде, с известным заранее списком получателей.
- Кошелёк для рискованных операций. Взаимодействие с новыми приложениями и контрактами только отсюда, никогда с казначейского адреса.
Четвёртый пункт спасает. Подключение казначейского кошелька к незнакомому приложению означает выдачу разрешения на распоряжение резервом проекта, и одна неверная подпись обнуляет всю защиту, выстроенную порогами.
⚠ Ключи разносят по людям. Схема «два из трёх», где два ключа лежат на ноутбуке и телефоне одного участника, эквивалентна обычному кошельку: компрометация этого человека даёт злоумышленнику необходимое большинство. Разносить их нужно по людям, а не только по устройствам.
Пример: как проходит операция
Разберу конфигурацию «три из пяти».
| Шаг | Кто делает | Что проверяется |
|---|---|---|
| Предложение операции | Ответственный за направление | Обоснование расхода, согласованность с бюджетом |
| Обсуждение | Все участники | Адрес получателя проверяется независимо, а не берётся из переписки |
| Создание транзакции | Инициатор | Сумма, сеть, комиссия |
| Подписи | Три участника из пяти | Каждый сверяет адрес и сумму на своём устройстве |
| Исполнение | Любой участник | Хеш операции фиксируется в реестре расходов |
Вторая строка важнее прочих. Адрес получателя, взятый из чата, — самое уязвимое место всей цепочки: его подменяют и вредоносной программой в буфере обмена, и сообщением от взломанной учётной записи коллеги.
Правильный порядок — получить адрес по независимому каналу и сверить его хотя бы двумя участниками отдельно друг от друга.
Где схема ломается на практике
- Ключи у одного человека. Формально схема соблюдена, фактически защиты нет
- Резервные копии в одном месте. Пожар или обыск забирают весь набор сразу
- Подписание не глядя. Участники подтверждают операции по просьбе коллеги, не читая содержимое
- Отсутствие процедуры замены. Участник ушёл из проекта, ключ остался у него
- Незадокументированная схема. Никто, кроме основателя, не знает, где ключи и как восстанавливать
- Тестирование на боевом кошельке. Настройку проверяют сразу с крупной суммой
Третий пункт обесценивает всё. Порог подписей защищает лишь тогда, когда каждый подписывающий читает, что именно он подтверждает: адрес получателя, сумму, вызываемую функцию контракта.
Что делать при подозрении на компрометацию ключа
Схема даёт время, которого нет у обычного кошелька.
Владелец одиночного адреса при утечке ключа теряет средства мгновенно, а казначейство с порогом подписей продолжает работать: одного скомпрометированного ключа для операции недостаточно, и у команды остаётся запас на реакцию.
- Сообщите остальным участникам немедленно, до выяснения обстоятельств.
- Приостановите операции до замены подписанта: любая транзакция в этот период требует особого внимания.
- Инициируйте исключение скомпрометированного ключа из набора и добавление нового.
- Проверьте историю операций за период, когда ключ мог быть у постороннего.
- Ревизуйте разрешения, выданные казначейским адресом сторонним контрактам.
- Разберите причину и обновите регламент, если она указывает на пробел в процедуре.
Второй пункт защищает от неочевидного сценария. Злоумышленник с одним ключом может дождаться момента, когда команда торопится, и подписать вместе с двумя ничего не подозревающими коллегами — поэтому пауза важнее скорости.
Регламент казначейства
Документ короткий. Без него схема живёт в голове основателя.
Что зафиксировать
«1. Перечень кошельков с назначением и адресами. 2. Конфигурация подписей по каждому: сколько ключей и у кого. 3. Кто держит ключи, на каких устройствах, где резервные копии. 4. Лимиты: до какой суммы операция проводится операционным кошельком, с какой требует полного согласования. 5. Порядок инициирования операции: кто предлагает, где обсуждается, сколько времени на возражения. 6. Что каждый подписывающий обязан проверить перед подтверждением. 7. Порядок замены участника: как отзывается ключ, как добавляется новый. 8. Действия при утрате ключа и при подозрении на компрометацию. 9. Периодичность проверки: сверка остатков, тестовая операция, ревизия разрешений».
Шестой пункт стоит расписать подробнее прочих. Он превращает подпись в проверку.
Смена состава участников
Момент откладывают до последнего. Потому и проходят его плохо.
Уход человека из проекта означает, что его ключ должен перестать действовать, а это требует изменения самой конфигурации кошелька — операции, которая сама нуждается в подтверждении оставшимися участниками.
Порядок такой.
- Заранее договоритесь, что ключ принадлежит проекту, а не человеку, и зафиксируйте это письменно.
- При уходе участника инициируйте замену подписанта, не откладывая: старый ключ действует, пока его не исключили.
- Проверьте новую конфигурацию тестовой операцией на небольшую сумму.
- Обновите регламент и уведомьте всех оставшихся участников.
- При конфликтном уходе рассмотрите перенос средств на новый адрес с новым набором ключей.
Пятый пункт неприятен, но иногда необходим. Исключение подписанта возможно лишь при согласии достаточного числа остальных, и если ушедший участник входил в это число и отказывается содействовать, перенос средств оказывается единственным путём.
Чек-лист
- ✓ Конфигурация выбрана с запасом на потерю ключа
- ✓ Ключи разнесены по разным людям и устройствам
- ✓ Резервные копии хранятся в разных местах
- ✓ Операционные средства отделены от резерва
- ✓ Взаимодействие с приложениями идёт с отдельного адреса
- ✓ Регламент написан и известен всем участникам
- ✓ Схема проверена тестовой операцией до внесения средств
- ✗ Не держать несколько ключей у одного человека
- ✗ Не подписывать операции не читая
- ✗ Не откладывать замену подписанта после ухода из проекта
Выбор конкретного решения под задачу разобран в материале про выбор кошелька под сценарий использования, а проверка резервных копий — в тексте про проверку резервной копии.
Частые вопросы
Чем схема с подписями отличается от разделения ключа на части
При нескольких подписях каждый участник владеет самостоятельным ключом, и правило подтверждения записано в блокчейне: операции видны публично. При разделении ключа полный ключ собирается заново в момент подписания, что удобнее и дешевле по комиссиям, но не оставляет публичного следа о том, кто и что подтвердил.
Что делать, если один из участников недоступен
Ничего страшного, если конфигурация выбрана с запасом: схема «два из трёх» продолжает работать при недоступности одного подписанта. Именно поэтому вариант «два из двух» не рекомендуется — отпуск, болезнь или потеря устройства одним человеком парализуют казначейство целиком.
Можно ли использовать аппаратные устройства как подписантов
Желательно. Сочетание нескольких подписей с аппаратным хранением ключей даёт две независимые линии защиты, а каждый участник подтверждает операцию на экране своего устройства, что защищает ещё и от подмены адреса получателя вредоносной программой.
Дороже ли обходятся операции с несколькими подписями
Дороже. Смарт-контракт выполняет больше работы, а подтверждений требуется несколько, и хотя для редких операций казначейства это несущественно, повседневные расходы именно поэтому выносят на отдельный операционный кошелёк.
Как проверить настройку перед внесением средств
Пройдите полный цикл. На минимальной сумме внесите средства, инициируйте перевод, соберите подписи и исполните операцию, а отдельно проверьте отказ: что происходит, если один участник не подтверждает. Только после этого переносите основные активы.
Куда идти дальше
Дальше — про смежное. Порядок отражения активов в бухгалтерии компании разобран в материале про учёт криптоактивов в бухгалтерии, а действия при подозрении на компрометацию — в тексте про взлом кошелька.
Первоисточники: разбор настройки кошелька с несколькими подписями и управления ключами и описание рисков схемы, включая расчёт критического числа утраченных ключей.
Вердикт
Порог подписей — половина дела. Вторая половина в том, чтобы ключи лежали у разных людей, операции читались перед подтверждением, а порядок замены участника был описан до того, как кто-то уйдёт.
Моя позиция такая. Выбирайте конфигурацию с запасом на потерю ключа, отделяйте операционные средства от резерва и проверяйте всю схему тестовой операцией до того, как внесёте основные активы.
Разборы решений и инцидентов публикуем в Telegram-канале Cryptium.
Обсуждение
Добавить комментарий