MSTR Cat

Блокчейн/Уровень II · Механика/2.1 Криптография/Урок 4

Цифровые подписи: ECDSA и Schnorr

Математическое «рукопожатие», которое разрешает трату, не раскрывая ключ

МатериалыОбозреватель блоков, отображающий witness-данныеОдна трата нативного SegWit-выхода и одна трата Taproot по пути ключа для сравнения

Любопытство

  1. Как подпись доказывает контроль над секретным числом, не раскрывая его?
  2. Почему Sony PlayStation 3 и несколько биткоин-кошельков для Android лишились ключей из-за повторно использованных или предсказуемых нонсов?
  3. Что делает подписи Шнорра меньше по размеру, быстрее и способными к агрегации по сравнению с ECDSA?

Исследование

  1. Цифровая подпись доказывает владение приватным ключом, не раскрывая его. Чтобы потратить выход транзакции в Bitcoin, нужно подписать хеш транзакции приватным ключом, соответствующим публичному ключу в запирающем скрипте этого выхода. Любой может проверить подпись с помощью публичного ключа и хеша сообщения. Этот механизм гарантирует, что авторизовать переводы может только владелец ключа, и при этом сохраняет конфиденциальность.
  2. ECDSA, стандартизированная в ANSI X9.62 (1999), с 2009 года является основной схемой подписи Bitcoin. Она формирует пару значений (r, s) из хеша сообщения и секретного нонса k. Значение r — это координата x точки k·G; значение s равно k⁻¹(hash + x·r) mod n, где x — приватный ключ. Поскольку для каждой подписи нужен новый случайный k, его повторное использование или утечка позволяют злоумышленнику напрямую вычислить приватный ключ.
  3. Ключ подписи Sony PlayStation 3 был скомпрометирован в 2010 году, когда группа fail0verflow показала, что Sony использовала один и тот же нонс для всех подписей. В августе 2013 года в Bitcoin произошли похожие кражи из-за уязвимости SecureRandom в Android, которая выдавала предсказуемые нонсы. RFC 6979 (2013) решил эту проблему: k вычисляется детерминированно из приватного ключа и хеша сообщения, что устраняет зависимость от внешних источников случайности.
  4. Подписи ECDSA подвержены изменяемости (malleability): при заданном r существуют два допустимых значения s (s и n−s). Третья сторона может подставить эквивалентную подпись, изменив идентификатор транзакции, но не сделав её недействительной. Правила стандартности Bitcoin требуют нормализации «low-S», ограничивая s нижней половиной порядка кривой. Благодаря этому у каждого сообщения при данном нонсе есть только одна каноническая подпись.
  5. Подписи Шнорра, запатентованные Клаусом-Петером Шнорром (патент США выдан в 1991 году, истёк в 2008-м) и стандартизированные для Bitcoin в BIP340, имеют фиксированный размер 64 байта без накладных расходов на кодирование DER. Они линейны: при аккуратно построенном протоколе несколько публичных ключей можно объединить в один агрегированный ключ, а их подписи — в одну подпись. Это делает возможными мультиподписные схемы MuSig2, которые в блокчейне выглядят как выходы с одним подписантом, что уменьшает размер транзакций и повышает конфиденциальность.
  6. Taproot был активирован в ноябре 2021 года (блок 709,632) и ввел поддержку встроенных подписей Schnorr для выходов типа P2TR. Для траты средств по определенному пути ключей требуется лишь 64-байтовая подпись, в то время как при трате средств по формату P2WPKH необходима 71–72-байтовая подпись ECDSA плюс 33-байтовый общественный ключ. Фиксированный размер упрощает парсинг, а технология Schnorr позволяет выполнять проверку нескольких подписей от разных ключей одновременно, что быстрее, чем поочередно; эта функция пока не используется в Bitcoin Core.

Ключевые факты

  • ECDSA (ANSI X9.62, 1999) создаёт подписи в кодировке DER длиной ~71–72 байта; подписи Шнорра (BIP340) имеют фиксированный размер 64 байта.
  • Повторное использование или утечка нонса k в ECDSA раскрывает приватный ключ: Sony PS3 (2010) и кражи из кошельков на Android (август 2013 года).
  • RFC 6979 детерминированно вычисляет k из приватного ключа и хеша сообщения, устраняя зависимость от генераторов случайных чисел.
  • Подписи ECDSA подвержены изменяемости (malleability); правила стандартности Bitcoin требуют «low-S» для канонической кодировки.
  • Подписи Шнорра линейны: ключи и подписи можно агрегировать (MuSig2) и проверять пакетно для повышения эффективности.
  • Taproot был активирован в ноябре 2021 года (блок 709,632), что позволило добавить поддержку собственных подписей Schnorr для выходов типа P2TR.

Упражнение девять, шесть, три, один

9СобратьПеречислите 9 схем цифровой подписи или типов ключей. Укажите орган стандартизации, год, размер выходных данных и поддержку агрегации.
6СгруппироватьРаспределите 9 вариантов по 6 группам по сложности проверки: линейные фиксированного размера, переменного размера с изменяемостью (malleable), переменного размера канонические, допускающие пакетную проверку, только для одной стороны или гибридные.
3Выделить главноеСведите 6 групп к 3 основным компромиссам между размером подписи, конфиденциальностью и вычислительной эффективностью.
1КристаллизоватьНапишите одно предложение о том, что цифровая подпись гарантирует в отношении контроля над ключом и чего она не раскрывает.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS