Аника Рагхуванши, инженер-программист в группе разработки криптографии
При создании ключей для защиты средств клиентов мы принимаем множество мер предосторожности, чтобы ключи не могли быть украдены. Кошельки с криптовалютой связаны с двумя ключами: секретным или частным ключом, известным только держателю кошелька, и открытым ключом, известным world. Для отправки средств из кошелька владелец кошелька создает действительную цифровую подпись, которая требует подписания сообщения (в данном случае транзакции) своим закрытым ключом. Если злоумышленник получит доступ к закрытому ключу, он может украсть средства кошелька. Для большинства клиентов Coinbase несет ответственность за защиту закрытых ключей, чтобы средства оставались в безопасности и были недоступны для злоумышленников.
Ключи многократного использования
Во время генерации ключей мы сегментируем закрытые ключи на разделяет с помощью Shamir Secret Sharing (SSS) и удаляет полный ключ для дополнительной безопасности. Каждая акция принадлежит другой стороне, и ни одна из сторон не имеет полного доступа к закрытому ключу. Долгое время был один способ создать подпись: повторно собрать общие ключи закрытого ключа для подписания транзакции. Поэтому, чтобы наши кошельки поддерживали высочайший уровень безопасности, мы использовали адрес только один раз. Если 1 BTC необходимо вывести из ключа, в котором хранится 100 BTC, оставшиеся 99 BTC будут отправлены на новый закрытый ключ во время вывода, чтобы гарантировать, что мы не храним средства на потенциально уязвимом адресе.
Однако одноразовые адреса имеют ограничения. В дополнение к накладным расходам, необходимым для продолжения генерации ключей, еще более острая потребность в безопасном повторном использовании ключей возникла вместе со ставкой криптовалюты. Как правило, стекинг требует многократного использования одного долгосрочного адреса. Нам нужен был способ генерировать действительные цифровые подписи без восстановления закрытого ключа.
Многостороннее вычисление (MPC) спасло положение. Протоколы MPC позволяют нескольким сторонам вычислять функцию вместе, не раскрывая никакой другой информации, кроме вывода. Пороговое подписание, конкретное использование MPC, позволяет отдельным сторонам сотрудничать и создавать цифровую подпись без восстановления исходного составного закрытого ключа. На практике это означает, что вместо того, чтобы стороны загружали свои общие закрытые ключи, они индивидуально подписывают транзакцию своим общим ключом и загружают частичную подпись. Эти частичные подписи² объединяются для создания действительной подписи, которая публикуется в цепочке блоков. 3 Совместно используемые ключи никогда не выгружаются сторонами и не объединяются, поэтому обеспечивается высочайшая безопасность и возможность повторного использования ключей.
Пороговая подпись. Служба
Мы применили MPC для создания службы пороговой подписи (TSS). Разные криптовалютные активы используют разные алгоритмы цифровой подписи. В оставшейся части статьи мы сосредоточим внимание на протоколе TSS для подписей Ed25519. Этот протокол состоит из пяти этапов:
- Генерация Party Key. Создает долгосрочные открытые и закрытые ключи в доверенной среде для сторон, которые будут участвовать в подписании. Закрытые ключи каждой стороны загружаются в аппаратные модули безопасности (HSM), которые не позволяют никому использовать закрытые ключи без физического доступа к HSM.
- Генерация ключей. Создает набор ключей TSS и разделяет ключи с помощью SSS. Использует открытые ключи, созданные при генерации партийных ключей, для шифрования каждого общего ключа подписи для стороны, которая его получит.
- Генерация одноразового ключа. Раунд 1 из 2 протокола подписания. Участники этого раунда генерируют значения nonce и отправляют их всем остальным сторонам.
- Неполный знак. Раунд 2 из 2 протокола подписания. Участники используют доли nonce, полученные от других сторон, и свой общий ключ подписи для генерации частичных подписей.
- Генерация окончательной подписи. Объедините частичные подписи в окончательный результат.
Первые две фазы происходят редко (один раз за время существования ключа подписи). Последние три фазы повторяются каждый раз, когда подписывается транзакция, которую мы называем сообщением . В следующем разделе мы подробно рассмотрим этапы подписания протокола. Подписи Ed25519
Метод создания цифровой подписи для ключа Ed25519 выглядит следующим образом: Ed25519 — это схема подписи EdDSA, параметризованная для SHA-512 и Curve25519. Для эллиптических кривых G — базовая точка, а q — порядок базовых точек. Для подписываемого сообщения m и закрытого ключа k подпись создается следующим образом:
Наш протокол пороговой подписи является адаптацией пороговая схема подписи Шнорра, разработанная Дженнаро, Ярецки, Кравчик и Рабин.
В протоколе участники генерируют как одноразовый номер r , так и подпись s в распределенный режим без восстановления лежащего в основе закрытого ключа. В первом раунде участники производят и распространяют одноразовые акции rᵢ . Во втором раунде участники вычисляют составной одноразовый номер r из общих ресурсов одноразового номера rᵢ и создают частичные подписи sᵢ , которые сервер объединяет для создания составного подпись s . Окончательная подпись идентична подписи, которая будет создана путем объединения секретных общих ресурсов и подписания исходного сообщения составным закрытым ключом.
Генерация одноразового номера
В первом раунде участники используют сообщение m и общий ключ kᵢ для выполнения следующих действий
После t завершения создания одноразового номера участниками начинается подписание .
Агрегирование одноразовых номеров
После публикации t одноразовых номеров участники выполняют 2 раунд, агрегируя доли одноразовых номеров для получения составного одноразового номера. Каждый участник i выполняет :
Частичные подписи
Участники создают частичные подписи⁴, которые можно комбинировать для создания подписи s .
Каждый участник i выполняет:
Агрегацию подписи
Наконец, сервер объединяет компоненты в подпись, которую можно проверить с помощью открытого ключа. K.
Ниже приведен пример, который объединяет две частичные подписи без совместного использования Shamir:
Пока проблема, c , одинаково для обеих подписей, одноразовый идентификатор и частный ключ ведут себя линейно при добавлении. Благодаря этому свойству мы можем применить стандартную реконструкцию Шамира к значениям sᵢ для построения s:
Этот результат вместе с открытым ключом nonce R — действительная подпись. Сервер проверяет подпись ( R , s ) с помощью сообщения m и открытого ключа K и проверяет значение nonce. R ранее не использовался.
От концепции до производства
Развертывание системы производственного уровня включает в себя решение некоторых реальных проблем. Например, привлечение внимания участников-людей может занять много времени (порядка часов). Поскольку протокол поддерживает участников-людей, мы рискуем слишком долго откладывать одобрение транзакции. Например, у криптовалюты Algorand короткое время проверки: всего несколько часов. Если мы не можем вычислить подпись транзакции в этот период времени, необходимо отбросить частичный прогресс. Два наших проектных решения помогают снизить нагрузку на людей, утверждающих транзакции: 1. Раунды являются асинхронными, что означает, что участники не должны участвовать в одно и то же время, и 2. Каждый раунд требует определенного количества сторон, но оба раунда не требуют один и тот же набор участников для участия.
Другой проблемой является проблема хранения секретной информации, поскольку устройства, используемые для хранения общих ключей и участия в протоколе подписи, могут быть потеряны или сломаны. Это привело к модели, в которой стороны относительно не имеют состояния : единственное состояние, в котором они находятся, — это небольшой объем долгосрочного хранения на HSM, которые являются высоконадежными, портативными и надежными. Участники протокола подписи не взаимодействуют друг с другом: централизованный сервер хранит все артефакты, такие как общие ресурсы nonce и частичные подписи. Возникает естественная проблема: что произойдет, если централизованный сервер скомпрометирован — мы исследуем эту угрозу и другие модели угроз в следующем разделе.
Безопасность
TSS преследует две основные цели безопасности. :
Ниже приведены некоторые рассмотренные нами атаки и средства защиты, созданные для выбранных моделей угроз.
Доверие к серверу. Централизованный сервер передает сообщения между участниками.
- Атака: несанкционированный доступ к данным. Защита: все секретные данные, загруженные на сервер, должны быть зашифрованы для предполагаемого участника. У сервера нет доступа к закрытым ключам, поэтому он не может получить доступ к данным в передаваемых им сообщениях.
- Атака: манипулирование данными. Защита: участники проверяют каждую часть данных, предоставленных сервером, и останавливают протокол, если обнаруживают изменение данных.
- Атака: потеря данных. Защита: данные с церемоний генерации ключей сохраняются в наших процессах аварийного восстановления (здесь подробно не рассматриваются) и могут быть восстановлены в случае потери данных на сервере.
Участник Доверие . Участники хранят ключевые общие ресурсы и участвуют в протоколе подписания.
- Атака: отдельный участник выполняет экзистенциальную подделку. Защита: участники несут критическую ответственность за проверку данных, предоставленных сервером. Любой участник может прервать протокол и инициировать процедуры реагирования на инциденты при обнаружении злонамеренной активности.
- Атака: участники сговариваются для выполнения экзистенциальной подделки. Защита: поскольку любой отдельный участник может остановить протокол, если обнаружит злонамеренную активность, протокол, требующий t участников, остается защищенным с числом злоумышленников до t — 1 . Дополнительной защитой от сговора является поддержка модели гибридного участника: сочетание людей и серверов. Мы используем взвешенное совместное использование секретов, чтобы гарантировать, что каждое подписание требует участия как людей, так и серверов. Это еще больше увеличивает барьер для компрометации t участников.
- Атака: повторное использование одноразового запроса . Хорошо известная атака на сигнатуры в стиле Шнорра заключается в использовании одного и того же одноразового номера несколько раз в разных сообщениях. Это приводит к тривиальному восстановлению закрытых ключей, ставя под угрозу нашу вторую цель безопасности и открывая дверь для немедленной потери средств. Защита: общие ресурсы Nonce кодируют информацию о сообщении, что упрощает обнаружение повторного использования nonce при расшифровке. Наличие двухэтапного протокола позволяет участникам аутентифицировать общие ресурсы одноразового номера во втором раунде и прерывать его, если они обнаруживают повторное использование одноразового номера.
Доверие эмитента ключа . Эмитент ключей генерирует закрытые ключи и распределяет общие ключи.
- Атака: извлечение секретов с церемонии генерации ключей. Защита: процесс генерации ключей — это полностью документированный и проверенный процесс, который требует, чтобы весь открытый текст ключей был уничтожен до кульминации церемонии генерации ключей.
С помощью этого моделирования угроз мы увидеть, что злоумышленник должен скомпрометировать порог участников, чтобы иметь хоть какой-то шанс кражи средств. Помня об этом, мы тщательно калибруем пороговые значения для людей и участников сервера, чтобы гарантировать, что наши средства поддерживают наивысший уровень безопасности.
Резюме
TSS для подписи полезных нагрузок по кривой Ed25519 является элегантный и простой сервис: он принимает в качестве входных данных полезную нагрузку сообщения и создает действительную подпись после того, как ряд подписывающих сторон взаимодействует с двухэтапным протоколом. Эта служба предоставляет решение для повторного использования холодных ключей без их подключения к сети. Путем перевода полного криптографического протокола в реальную службу мы создали TSS, первую существующую службу подписи порогового уровня для защиты активов на миллиарды долларов.
Сноски
Подробнее о криптографии на Coinbase .
Если вас интересует сложность применения пороговой криптографии, Coinbase — это hirin g Cryptographers и Разработчики программного обеспечения.
Этот веб-сайт содержит ссылки на сторонние веб-сайты или другой контент только в информационных целях («Сторонние сайты»). Сторонние сайты не находятся под контролем Coinbase, Inc. и ее дочерних компаний (далее «Coinbase»), и Coinbase не несет ответственности за содержание любых Сторонних сайтов, включая, помимо прочего, любую ссылку, содержащуюся в Сторонних сайтах. Сторонний сайт или любые изменения или обновления Стороннего сайта. Coinbase не несет ответственности за веб-трансляции или любые другие формы передачи, полученные с любых Сторонних сайтов. Coinbase предоставляет вам эти ссылки только для удобства, и включение любой ссылки не означает одобрения, одобрения или рекомендации Coinbase сайта или какой-либо связи с его операторами.
Все изображения в данном документе принадлежат Coinbase.
Служба подписания производственных пороговых значений изначально была опубликована в блоге Coinbase на Medium, где люди продолжают беседу, выделяя эту историю и отвечая на нее.




