Купить крипто
Рынки
Спот
ФьючерсыBTC
Сбережения
Центр событий
Хаб наград
Еще
Фестиваль с 0 комиссией
ECDSA (алгоритм цифровой подписи на эллиптических кривых): Что такое ECDSA?ECDSA расшифровывается как Elliptic Curve Digital Signature Algorithm — алгоритм цифровой подписи на эллиптических кривых.Это криптографический алгоритм с открытым ключом, который испоECDSA (алгоритм цифровой подписи на эллиптических кривых): Что такое ECDSA?ECDSA расшифровывается как Elliptic Curve Digital Signature Algorithm — алгоритм цифровой подписи на эллиптических кривых.Это криптографический алгоритм с открытым ключом, который испо

ECDSA (алгоритм цифровой подписи на эллиптических кривых)

2026/10/13 15:29
#Intermediate
Humanity
H$0.05603+0.26%
Gravity
G$0.003552-0.36%
Quack AI
Q$0.124324+2.28%
Core DAO
CORE$0.01715+1.00%
Wormhole
W$0.012978+0.21%

Что такое ECDSA?

ECDSA расшифровывается как Elliptic Curve Digital Signature Algorithm — алгоритм цифровой подписи на эллиптических кривых.Это криптографический алгоритм с открытым ключом, который использует математику эллиптических кривых для создания и проверки цифровых подписей.Криптовалютные кошельки используют ECDSA, чтобы подтвердить, что транзакцию авторизовал владелец определенного приватного ключа.Подпись создается приватным ключом, а соответствующий публичный ключ позволяет узлам блокчейна проверить ее.Для проверки не требуется раскрывать приватный ключ.Действительная подпись ECDSA также показывает, что данные подписанной транзакции не менялись с момента создания подписи.

В действующем стандарте цифровых подписей NIST ECDSA включен в перечень утвержденных методов цифровой подписи для соответствующих федеральных криптографических приложений.

ECDSA — это алгоритм, а не блокчейн, кошелек, криптовалюта, метод шифрования или эллиптическая кривая.Для полноценной реализации также необходимо выбрать кривую, параметры области, хеш-функцию, способ генерации приватного ключа, формат подписи и правила форматирования сообщения.

Почему в криптовалютах используют ECDSA

Децентрализованная криптовалютная сеть должна проверять полномочия на расходование средств, не полагаясь на единую централизованную базу аккаунтов.ECDSA позволяет каждому пользователю управлять аккаунтом или доступным для расходования выходом транзакции с помощью секретного приватного ключа.Чтобы перевести криптоактивы, кошелек формирует транзакцию и подписывает необходимые данные транзакции.Другие участники сети проверяют подпись с помощью публичного ключа и правил проверки протокола.При текущих предположениях о классических вычислениях подделать корректно созданную подпись, не имея приватного ключа, чрезвычайно сложно.Это позволяет узлам блокчейна отклонять неавторизованные переводы и пропускать действительные транзакции через общедоступную сеть.По сравнению с некоторыми более старыми системами с открытым ключом ECDSA также создает относительно компактные ключи и подписи при сопоставимом уровне классической безопасности.Компактность подписей важна, поскольку каждый дополнительный байт может увеличивать требования к пропускной способности сети и объему хранения в блокчейне, а также повышать комиссии за транзакции.

ECDSA — алгоритм подписи, а не шифрование

ECDSA подтверждает авторизацию и целостность сообщения, но не скрывает подписанные данные.Большинство публичных транзакций в криптовалютах остаются видимыми участникам блокчейна, даже если в них используются подписи ECDSA.Подпись не шифрует адрес получателя, сумму перевода, комиссию за транзакцию или инструкции для смарт-контракта.При шифровании читаемая информация преобразуется в шифротекст, для расшифровки которого нужен специальный ключ.ECDSA вместо этого создает математическое доказательство того, что приватный ключ авторизовал конкретное сообщение.Для обеспечения приватности нужны отдельные криптографические методы, особенности архитектуры протокола или средства контроля приложений.

Математическая основа на эллиптических кривых

ECDSA работает в математической группе, образованной точками эллиптической кривой над конечным полем.

Одна из распространенных форм уравнения кривой записывается как

y² = x³ + ax + b
; все вычисления координат выполняются с помощью модульной арифметики.

Параметры области кривой задают поле, коэффициенты кривой, точку-генератор, порядок генератора и кофактор.

Точка-генератор обычно обозначается как

G
.

Порядок генератора обычно обозначается как

n
.

В надежных реализациях используют стандартизированные и тщательно проанализированные параметры, а не создают новую кривую для отдельного приложения.

В рекомендациях NIST по параметрам эллиптических кривых описаны кривые, одобренные для охватываемых этим стандартом приложений.

Приватные и публичные ключи

Приватный ключ ECDSA — это секретное целое число, обычно обозначаемое как

d
.

Его значение должно находиться в допустимом диапазоне от 1 до

n - 1
.

Публичный ключ вычисляется с помощью умножения точки эллиптической кривой на скаляр.

Эту зависимость обычно записывают как

Q = d × G
.

Вычислить

Q
по значениям
d
и
G
несложно.

Считается, что для надежной кривой с правильно сгенерированным ключом вычислительно непрактично восстановить

d
по
Q
.

Эта односторонняя зависимость основана на сложности задачи дискретного логарифмирования на эллиптической кривой.Тот, кто получит приватный ключ, сможет создавать действительные подписи и обычно контролировать связанные с ним криптоактивы.

Что такое secp256k1?

secp256k1 — эллиптическая кривая, наиболее тесно связанная с использованием ECDSA в криптовалютах.Она применяется для подписей традиционных транзакций Bitcoin и подписей аккаунтов Ethereum, управляемых внешними ключами.

Уравнение кривой имеет вид

y² = x³ + 7
над большим простым полем.

Размер поля и порядок группы кривой близки к 256 битам.Уровень ее классической безопасности обычно оценивают примерно в 128 бит против общих атак на дискретный логарифм.secp256k1 отличается от NIST P-256, хотя обе кривые обычно описывают как 256-битные эллиптические кривые.Ключи и подписи для одной кривой нельзя просто проверить с помощью другой.

Поддерживаемый проект libsecp256k1 предоставляет оптимизированные функции подписи и проверки ECDSA, генерации и разбора ключей, а также восстановления публичного ключа для secp256k1.

Как создается подпись ECDSA

Процесс подписания начинается с приватного ключа, сообщения, криптографической хеш-функции и выбранных параметров кривой.Сообщение обрабатывается в соответствии с точными правилами сериализации, установленными протоколом криптовалюты.

Сериализованное сообщение хешируется, и получается дайджест, обычно обозначаемый как

z
.

Подписывающая сторона выбирает секретное значение для одной подписи, называемое одноразовым числом (nonce) и обозначаемое как

k
.

Nonce должен быть ненулевым целым числом, меньшим порядка кривой.

Затем подписывающая сторона вычисляет точку кривой

R = k × G
.

Первое значение подписи,

r
, получают из координаты x точки
R
и приводят по модулю
n
.

Если

r
равен нулю, необходимо выбрать другой nonce.

Второе значение подписи вычисляется по формуле

s = k⁻¹ × (z + r × d) mod n
.

Если

s
равен нулю, также необходимо выбрать другой nonce.

В результате получается подпись ECDSA, состоящая из пары

(r, s)
, хотя криптовалюта может добавлять информацию для кодирования или восстановления ключа.

Как проверяется подпись ECDSA

Для проверки нужны сообщение, подпись, публичный ключ, параметры кривой и требуемые правила хеширования.

Подпись отклоняется, если

r
или
s
выходят за пределы допустимого диапазона.

Проверяющая сторона вычисляет

w = s⁻¹ mod n
.

Затем вычисляются

u1 = z × w mod n
и
u2 = r × w mod n
.

Проверяющая сторона вычисляет точку кривой

X = u1 × G + u2 × Q
.

Если

X
— точка на бесконечности, подпись считается недействительной.

Подпись действительна, если координата x точки

X
, приведенная по модулю
n
, равна
r
.

Это соотношение выполняется, поскольку уравнение подписи связывает дайджест сообщения, nonce, приватный и публичный ключи.Проверка не раскрывает приватный ключ или nonce подписания.

Что доказывает подпись ECDSA

Действительная подпись ECDSA доказывает, что указанные данные подписал кто-то, контролирующий соответствующий приватный ключ.Она также позволяет обнаружить изменения подписанного сообщения.Подпись сама по себе не доказывает юридическую личность подписавшего.Связь публичного ключа с физическим или юридическим лицом устанавливается только с помощью дополнительных доказательств, регистрации, переписки или истории транзакций.Подписи, созданные с помощью украденного приватного ключа, математически неотличимы от подписей владельца ключа.Узлы блокчейна проверяют криптографию, а не определяют, действовал ли подписавший добровольно.Если пользователь подписывает вредоносную транзакцию, созданная им подпись все равно будет действительной.

Критически важная роль nonce в ECDSA

Nonce подписания

k
— один из самых важных с точки зрения безопасности элементов ECDSA.

Его нельзя повторно использовать для разных сообщений с одним и тем же приватным ключом.Если в двух подписях используется один nonce, связанные уравнения содержат достаточно информации, чтобы вычислить nonce и восстановить приватный ключ.В таком случае злоумышленнику не требуется решать задачу дискретного логарифмирования на эллиптической кривой.Частично предсказуемые, смещенные или раскрытые nonce также могут позволить получить ключ после наблюдения за достаточным количеством подписей.Ошибки при работе с nonce приводили к реальным компрометациям криптографических ключей, даже когда выбранная эллиптическая кривая оставалась математически надежной.Термин nonce означает значение, используемое один раз, хотя в ECDSA оно должно быть не только уникальным, но и секретным.

Детерминированный ECDSA

Детерминированный ECDSA генерирует nonce подписания на основе приватного ключа и дайджеста сообщения, а не запрашивает новое случайное значение для каждой подписи.

В процедуре детерминированного подписания RFC 6979 описан широко используемый метод на основе конструкции хеш-функции с ключом.

При использовании одной и той же детерминированной процедуры одинаковые приватный ключ и сообщение обычно дают одинаковые nonce и подпись.Это снижает зависимость от качества отдельного генератора случайных чисел при каждой операции подписания.Детерминированное подписывание не делает безопасной генерацию слабого приватного ключа.Для исходного приватного ключа по-прежнему необходима высокая энтропия.Детерминированные реализации также должны быть устойчивы к атакам по времени выполнения, сбоям, побочным каналам, утечкам памяти и некорректной обработке сообщений.Некоторые реализации добавляют случайность при детерминированной генерации nonce для защиты от отдельных атак, основанных на сбоях или побочных каналах.

Почему важно хеширование

ECDSA обычно подписывает криптографический дайджест, а не обрабатывает напрямую сообщение произвольного размера.Протокол блокчейна точно определяет, какие поля транзакции включаются в данные и как они сериализуются перед хешированием.Изменение любого подписанного поля должно приводить к другому дайджесту и делать старую подпись недействительной.В разных криптовалютах могут использоваться различные хеш-функции и правила фиксации данных транзакции при той же кривой ECDSA.Поэтому одно и то же сообщение в привычном для человека виде в разных приложениях может приводить к разным подписям.Разработчикам не следует изобретать неформальные правила сериализации: неоднозначное кодирование может привести к тому, что две системы по-разному интерпретируют одинаковые подписанные байты.Для защиты от использования подписи, созданной с одной целью, в других целях безопасные протоколы также используют разделение доменов.

Форматирование подписи ECDSA

Математическая подпись ECDSA состоит из двух целых чисел:

r
и
s
.

Перед передачей или хранением подписи программное обеспечение должно закодировать эти числа в байты.Один из распространенных способов — Distinguished Encoding Rules, или DER.В формате DER значения представлены как закодированные целые числа внутри структурированной последовательности.Длина итоговой подписи может меняться, поскольку для некоторых положительных целых чисел требуется нулевой байт в начале.

В других криптовалютных системах применяются компактные кодировки фиксированной длины: 32 байта для

r
и 32 байта для
s
.

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

Bitcoin и ECDSA

В традиционных транзакциях Bitcoin для подтверждения права расходования многих выходов используется ECDSA на secp256k1.Кошелек подписывает дайджест, уникальный для транзакции и определяемый применимыми правилами скрипта и хеширования подписи.Узлы Bitcoin проверяют публичный ключ, подпись, условия скрипта и все остальные требования консенсуса.Одна только подпись не доказывает, что во входе достаточно средств или что транзакция соответствует всем правилам протокола.

Спецификация Bitcoin BIP 66 ввела строгую кодировку DER как требование консенсуса для подписей ECDSA, проверяемых охватываемыми этой спецификацией операциями скрипта.

Это изменение уменьшило различия между парсерами и не позволило поведению консенсуса зависеть от меняющихся правил разбора сторонних библиотек.В Taproot для новых транзакций с подписями используются подписи Schnorr, определенные BIP 340, а не ECDSA.Выходы традиционных типов, использующие ECDSA, продолжают существовать и остаются доступными для расходования.

Почему важен строгий разбор подписей

Программное обеспечение консенсуса должно одинаково трактовать не только уравнение подписи, но и последовательности байтов, которые считаются действительной подписью.Если один узел принимает необычную кодировку, а другой отклоняет ее, узлы могут разойтись во мнении о действительности транзакции или блока.Такое расхождение может привести к разделению представлений блокчейна в сети.Строгий разбор исключает альтернативные кодировки, представляющие те же математические значения.В реализации криптовалюты необходимо точно задавать знаки целых чисел, ведущие нули, длину, диапазоны и завершающие данные.Для криптографии, критически важной для консенсуса, необходимо побайтовое соответствие между разными версиями программного обеспечения и языками программирования.

Ethereum и ECDSA

Для авторизации транзакций аккаунты Ethereum, управляемые внешними ключами, используют ECDSA на secp256k1.Отправитель подписывает дайджест транзакции, включающий такие поля, как nonce, адрес назначения, сумма, данные, параметры комиссии и тип транзакции.

Подписи Ethereum включают значения

r
и
s
, а также информацию для восстановления публичного ключа.

В более ранних описаниях значение восстановления часто обозначается как

v
, тогда как в новых типизированных транзакциях оно обычно представлено значением четности y.

Эта информация позволяет программному обеспечению восстановить возможный публичный ключ по подписи и дайджесту сообщения.Затем можно получить адрес аккаунта и сравнить его с указанным отправителем.

В изменении протокола EIP-2 обычные подписи транзакций с

s
, превышающим половину порядка кривой secp256k1, объявляются недействительными.

Защита Ethereum от повторного воспроизведения транзакций

Действительная подпись может стать опасной, если одна и та же подписанная транзакция принимается в нескольких блокчейн-средах.

В схеме защиты от повторного воспроизведения транзакций Ethereum, описанной в EIP-155, в процесс подписания включен идентификатор сети.

Это привязывает разрешение к конкретному контексту сети.Современные типизированные транзакции Ethereum также включают в подпись тип транзакции и специфичные для сети поля.Для подписей вне блокчейна приложениям необходимы собственное разделение доменов, nonce, правила срока действия и идентификаторы контрактов.Не следует считать действительную подпись ECDSA безопасной, не разобравшись, какие именно сообщение и домен она охватывает.

Восстановление публичного ключа

При стандартной проверке ECDSA проверяющая сторона уже должна знать публичный ключ.Восстанавливаемая подпись ECDSA включает небольшое количество дополнительной информации, которая помогает определить связанный с подписью и сообщением публичный ключ.Частично удовлетворять уравнению подписи могут несколько точек-кандидатов на кривой, поэтому идентификатор восстановления указывает на нужный вариант.В некоторых форматах транзакций эта функция позволяет не передавать полный публичный ключ.Восстановление публичного ключа не раскрывает приватный ключ.

Дополнительный модуль восстановления в libsecp256k1 поддерживает восстанавливаемые подписи secp256k1 для подходящих приложений.

При этом приложениям по-прежнему необходимо проверять восстановленный ключ, диапазоны подписи, формат сообщения и домен.

Изменяемость подписи ECDSA

ECDSA обладает присущим этому алгоритму свойством — математической изменяемостью подписи.

Если подпись

(r, s)
действительна для сообщения и публичного ключа, то по базовому уравнению проверки также действительна
(r, n - s)
.

Третья сторона может создать альтернативную подпись, не зная приватного ключа.Это не позволяет злоумышленнику подписать другое сообщение или потратить дополнительные активы.Однако идентификатор транзакции может измениться, если он включает байты подписи.

Протоколы снижают этот риск, принимая только одну каноническую форму — обычно подпись с меньшим значением

s
.

Канонизация также упрощает сравнение и единообразное хранение подписей.

Подписи low-S

Правило low-

s
требует, чтобы
s
не превышало половины порядка кривой.

Если подписывающая сторона получает большее значение, его можно заменить на

n - s
.

Преобразованное значение остается математически корректным и попадает в допустимый диапазон.В Ethereum это правило применяется к обычным подписям транзакций согласно EIP-2.

Программное обеспечение Bitcoin обычно создает нормализованные подписи ECDSA low-

s
, однако точные требования консенсуса и политики зависят от контекста расходования средств.

Разработчикам следует соблюдать точные правила целевого протокола, а не предполагать, что все системы ECDSA принимают один и тот же формат.

ECDSA и подписи Schnorr

ECDSA и Schnorr — разные алгоритмы подписи, которые могут использовать одну и ту же эллиптическую кривую secp256k1.У подписей Schnorr более простая линейная структура, которая поддерживает эффективные схемы мультиподписей и агрегации.Базовый ECDSA не обладает такими же простыми свойствами линейной агрегации.

В спецификации Bitcoin BIP 340 определены подписи Schnorr фиксированной длины 64 байта на secp256k1.

В BIP 340 также описаны присущая ECDSA изменяемость подписи и более сложные предположения безопасности, используемые при формальном анализе ECDSA.Появление Schnorr не означает, что существующие подписи ECDSA стали недействительными или практически подделываемыми.Это еще один вариант алгоритма подписи с полезными свойствами для новых функций протокола.

ECDSA и EdDSA

EdDSA — отдельное семейство алгоритмов подписи, основанных на математике кривых Эдвардса.Ed25519 — распространенный вариант EdDSA.EdDSA создавался с учетом детерминированного подписания и упрощенной реализации.Ключ Ed25519 нельзя использовать как ключ ECDSA на secp256k1 без отдельной схемы преобразования; произвольное преобразование небезопасно.Размеры подписей, форматы публичных ключей, арифметика кривых, процедуры хеширования и правила проверки различаются.В системах, поддерживающих оба алгоритма, необходимо четко указывать, какая схема применяется к каждому ключу и подписи.

ECDSA и подписи BLS

В подписях BLS используются эллиптические кривые, допускающие билинейное спаривание; их математические свойства отличаются от свойств ECDSA.При соблюдении определенных правил безопасности они позволяют компактно объединять множество подписей.Валидаторы Ethereum используют подписи BLS для задач консенсуса Proof of Stake, тогда как обычные аккаунты Ethereum, управляемые внешними ключами, используют ECDSA на secp256k1.Поэтому ключ валидатора нельзя взаимозаменять с ключом аккаунта для выполнения транзакций.Агрегация BLS может сократить объем данных, когда многие участники подписывают связанные сообщения, но требует операций спаривания и иных правил проверки.

ECDSA и кошельки с мультиподписью

Скрипт блокчейна может требовать несколько независимых подписей ECDSA для расходования активов.Это традиционная схема мультиподписи: каждый обязательный подписант создает отдельную подпись.Пороговая ECDSA использует более сложный интерактивный протокол, при котором несколько участников совместно создают одну обычную на вид подпись ECDSA.При корректной работе ни одному участнику не требуется восстанавливать полный приватный ключ.Пороговую ECDSA сложно разработать, поскольку участникам нужно согласовать генерацию nonce и защититься от вредоносного поведения.Ошибка в пороговом протоколе может раскрыть общий приватный ключ, даже если базовый алгоритм ECDSA остается безопасным.В промышленных системах следует использовать проверенные протоколы, а не придумывать собственные уравнения для подписания несколькими участниками.

Аппаратные кошельки и ECDSA

Аппаратный кошелек может генерировать и хранить приватный ключ ECDSA в специальном устройстве.Устройство получает данные транзакции, отображает доступную информацию и после одобрения пользователя создает подпись внутри себя.Предполагается, что приватный ключ остается в защищенной среде устройства.Такая изоляция уменьшает прямой риск воздействия вредоносного ПО на подключенный телефон или компьютер.Аппаратный кошелек не может сделать безопасной вредоносную транзакцию, если пользователь одобряет неверно представленные данные.Важны безопасное отображение транзакции, целостность прошивки, защита фразы восстановления и безопасность цепочки поставок.Также важна защита от побочных каналов и сбоев: физические измерения или искусственно вызванные ошибки могут раскрыть секретные значения, используемые при подписании.

Атаки по побочным каналам

При атаке по побочному каналу злоумышленник получает информацию о реализации ECDSA по физическим особенностям ее работы.Источниками данных могут быть время выполнения, энергопотребление, электромагнитное излучение, обращения к кэшу и шаблоны использования памяти.Ветвления или обращения к таблицам, зависящие от секретных данных, могут раскрыть информацию о приватном ключе или nonce.В реализациях с постоянным временем выполнения наблюдаемые шаблоны операций стараются не связывать с секретными значениями.В действующей документации проекта libsecp256k1 описано постоянное время выполнения и постоянный доступ к памяти для операций подписания и создания публичного ключа.Код с постоянным временем выполнения снижает важные риски, но не защищает от всех атак на физическое устройство, компилятор, оборудование или операционную систему.

Атаки с использованием сбоев

При атаке с использованием сбоев злоумышленник намеренно вызывает ошибку во время создания подписи ECDSA устройством.Он может воздействовать на напряжение, тактовую частоту, температуру, память или ход вычислений.В некоторых реализациях ошибочная подпись может раскрыть достаточно математической информации для восстановления приватного ключа.Устройства для подписания с повышенным уровнем безопасности могут самостоятельно проверять созданную подпись перед ее выдачей.Кроме того, они могут использовать повторные вычисления, датчики сбоев, защищенные микросхемы и ограниченные сообщения об ошибках.Физический доступ к устройству для подписания всегда следует считать значимым событием с точки зрения безопасности.

Недопустимые публичные ключи и точки кривой

Проверяющая ECDSA программа не должна без проверки принимать любую последовательность байтов в качестве публичного ключа.Может потребоваться подтвердить корректность кодировки и принадлежность точки ожидаемой кривой.Необходимо отклонять точку на бесконечности и выполнять требуемые проверки подгруппы.Использование точки, не принадлежащей кривой, под контролем злоумышленника в операциях с секретным ключом может привести к атакам на некорректную кривую или малую подгруппу.Точные требования к проверке зависят от кривой, протокола и выполняемой операции.Проверенные криптографические библиотеки обрабатывают такие нюансы безопаснее, чем самодельные реализации.

Генерация приватного ключа

Приватный ключ ECDSA необходимо генерировать с помощью криптографически стойкого источника энтропии.Небезопасно использовать фразы, выбранные человеком, даты рождения, цитаты, повторяющиеся цифры и обычные функции генерации случайных чисел.Ключ также должен находиться в допустимом диапазоне скаляров для выбранной кривой.Число, которое выглядит как 256-битное, не обязательно является безопасно сгенерированным приватным ключом.Кошельки часто получают множество ключей ECDSA из начального значения мастер-ключа с помощью иерархической детерминированной процедуры.Тот, кто получит это мастер-значение, может восстановить все производные аккаунты.Безопасность ECDSA не защитит от раскрытия или предсказуемости фразы восстановления.

ECDSA и адреса кошельков

Публичный ключ не всегда совпадает с адресом криптовалюты.Адреса Bitcoin обычно содержат хеш или условие скрипта, связанное с информацией публичного ключа.Адреса Ethereum формируются из части хеша несжатого публичного ключа secp256k1.В формат адреса могут добавляться идентификаторы сети и данные для обнаружения ошибок.Кошелек может отображать несколько адресов, полученных из одного мастер-значения с помощью разных путей деривации.Не следует считать, что знание адреса всегда раскрывает полный публичный ключ при любом состоянии протокола.Даже знание публичного ключа не делает классическое восстановление приватного ключа практически осуществимым, если ключ и кривая надежны.

Подписание транзакций и подписание сообщений

Подпись транзакции авторизует операцию в блокчейне в соответствии с правилами протокола.Подпись сообщения может подтвердить контроль над ключом, не отправляя транзакцию в блокчейн напрямую.Для входа в кошелек, разрешений токенов, ордеров, голосования по управлению и сообщений permit могут использоваться подписи ECDSA.Подписи вне блокчейна тоже могут разрешать ценные операции, если позднее смарт-контракт или сервис отправит их в сеть.Запрос, описанный как вход в систему, может быть опасным, если фактически подписываемые данные предоставляют разрешение на перевод активов.По возможности кошельки должны отображать домен подписания, контракт, сеть, nonce, срок действия и понятное пользователю описание действия.Пользователям следует отклонять подписи с необъяснимыми данными или неожиданными разрешениями.

Атаки повторного воспроизведения

Атака повторного воспроизведения предполагает повторное использование действительной подписи в другом контексте, где подписавший не намеревался ее применять.Злоумышленник не подделывает подпись.Он использует неполную привязку сообщения к контексту.В безопасные подписанные сообщения включают идентификатор сети, nonce аккаунта, адрес контракта, домен приложения, тип операции и срок действия.Одноразовый nonce не позволяет повторно использовать одно и то же разрешение в одном приложении.Разработчикам следует проверять, что nonce погашается только после успешного выполнения авторизованной операции.

Ошибки реализации

Сбои ECDSA обычно связаны с ошибками реализации или управления ключами, а не с прямым решением задачи дискретного логарифмирования на эллиптической кривой.К распространенным ошибкам относятся повторное использование nonce, смещенные случайные числа, принятие недопустимых ключей, неправильное хеширование, неоднозначная сериализация, отсутствие проверки диапазонов и небезопасный разбор подписей.Другие проблемы связаны с побочными каналами, атаками с использованием сбоев, раскрытием отладочных журналов, скомпрометированными зависимостями и утечками памяти.Разработчикам следует использовать поддерживаемые библиотеки с обширными тестами и четкой моделью безопасности.Криптографический код должен проходить отдельную проверку, поскольку даже небольшие ошибки могут раскрыть все активы, защищенные ключом.

Чем опасен собственный код ECDSA

Формулы ECDSA могут показаться достаточно простыми для реализации в небольшой программе.Для промышленного уровня безопасности недостаточно просто воспроизвести уравнения подписания и проверки.Реализация должна поддерживать умножение скаляров с постоянным временем выполнения, безопасное вычисление обратных элементов, корректное приведение по модулю, строгий разбор, проверку точек и безопасную работу с памятью.Также нужно правильно обрабатывать редкие случаи, например нулевые значения и недопустимые точки.Программа, успешно прошедшая несколько обычных тестов подписи, все равно может раскрыть приватный ключ из-за анализа времени выполнения или смещения nonce.Разработчикам следует использовать проверенные библиотеки и официальные тестовые векторы, а не адаптировать учебный код для хранения криптовалюты.

Уровень безопасности ECDSA

Безопасность ECDSA зависит от стойкости кривой и хеш-функции, энтропии приватного ключа, генерации nonce и качества реализации.Для безопасной 256-битной эллиптической кривой обычно указывают около 128 бит классической безопасности.Это не означает, что вероятность угадать ключ составляет один шанс из 128.Речь идет о приблизительном объеме вычислений в рамках соответствующих моделей атак.Хеш-функция также должна обеспечивать подходящую стойкость к коллизиям и восстановлению исходных данных для целей безопасности протокола.Слабые операционные меры могут значительно снизить практический уровень безопасности по сравнению с математическим.

ECDSA и квантовые вычисления

ECDSA не считается защищенным от достаточно мощного отказоустойчивого квантового компьютера.Алгоритм Шора позволяет решать задачу дискретного логарифмирования на эллиптической кривой и восстанавливать приватный ключ по публичному.В настоящее время публично известные квантовые компьютеры не способны практически взломать ECDSA на secp256k1 в масштабах, значимых для криптовалют.Долговечным блокчейн-системам все равно необходимы планы миграции: обновления протоколов, кошельков и перевод неактивных средств могут занять годы.Публичные ключи, уже раскрытые в блокчейне, могут стать приоритетной целью после появления криптографически значимого квантового оборудования.К неподтвержденным заявлениям о том, что современный ECDSA уже взломан, следует относиться осторожно.

Альтернативы постквантовых подписей

В постквантовых цифровых подписях используются математические задачи, которые, как считается, устойчивы и к классическим, и к мощным квантовым компьютерам.

В августе 2024 года NIST утвердил FIPS 204 для ML-DSA и FIPS 205 для SLH-DSA.

Эти системы подписи отличаются от ECDSA размером ключей и подписей, вычислительными затратами и требованиями к реализации.Для замены ECDSA в блокчейне недостаточно просто изменить библиотеку кошелька.Миграция может затронуть форматы адресов, размеры транзакций, аппаратные кошельки, смарт-контракты, проверку сети, восстановление аккаунтов и неактивные средства.В переходный период некоторые протоколы могут использовать гибридную авторизацию, требующую и существующую подпись ECDSA, и постквантовую подпись.

Как разработчикам безопасно использовать ECDSA

Разработчикам следует использовать именно те кривую, хеш-функцию, формат сообщения и кодировку подписи, которые требует целевой протокол.Приватные ключи необходимо получать с помощью криптографически стойкой процедуры генерации или деривации.Для nonce подписания следует использовать проверенный детерминированный метод или надежную схему генерации случайных чисел с сопоставимым уровнем защиты.Библиотеки должны обеспечивать строгий разбор подписей, проверку диапазонов скаляров, валидацию публичных ключей и предусмотренную протоколом канонизацию.Операции с секретными ключами должны выполняться с постоянным временем выполнения.В приложениях необходимы разделение доменов, защита от повторного воспроизведения, понятное отображение транзакций и надлежащее управление nonce.

Наборы тестов должны включать недействительные подписи, формы с высоким значением

s
, некорректные кодировки, нулевые значения, измененные сообщения, неправильные сети и попытки повторно использовать разрешение.

Системы, работающие с крупными суммами, должны проходить независимый аудит криптографии и реализации.

Как пользователям криптовалют защитить ключи ECDSA

Пользователям следует создавать кошельки с помощью надежного программного обеспечения или специального устройства для подписания.Фразы восстановления и приватные ключи нужно хранить офлайн и никогда не передавать сотрудникам поддержки или веб-сайтам.Перед подписанием следует проверить данные транзакции на доверенном экране.Необходимо проверить адрес назначения, сеть, сумму, комиссию, контракт и объем запрашиваемых разрешений.Крупные объемы активов можно защитить политиками мультиподписи, распределенными резервными копиями, аппаратной изоляцией и отдельными кошельками для расходов.Не следует импортировать одну и ту же фразу восстановления в ненужные приложения.Во многих блокчейн-системах действительная подпись является необратимым подтверждением авторизации, поэтому предотвращение проблемы надежнее попыток восстановить активы.

Распространенные ошибки при работе с ECDSA

Одна из частых ошибок — считать, что ECDSA шифрует транзакции криптовалюты.Другая — считать публичный ключ и адрес кошелька одним и тем же.Третья — повторно использовать один nonce подписания для двух сообщений.Четвертая — генерировать приватные ключи или nonce с помощью обычной функции случайных чисел.Пятая — принимать неканонические или некорректные подписи без строгого разбора.

Шестая — забывать, что и

s
, и
n - s
могут удовлетворять базовому уравнению ECDSA.

Седьмая — подписывать данные, не проверяя сеть, домен, nonce и срок действия.Восьмая — использовать один приватный ключ в несвязанных приложениях и блокчейнах.Девятая — писать собственный код для эллиптических кривых в кошельках промышленного уровня без экспертной проверки.Десятая — считать, что действительная подпись доказывает безопасность транзакции, ее справедливость или согласие первоначального владельца ключа.

FAQ

Как расшифровывается ECDSA?

ECDSA — это Elliptic Curve Digital Signature Algorithm, алгоритм цифровой подписи на эллиптических кривых.

Для чего ECDSA используют в криптовалютах?

Его применяют для создания и проверки подписей, авторизующих транзакции в блокчейне и другие действия с кошельком.

Шифрует ли ECDSA транзакции?

Нет. ECDSA подтверждает авторизацию и целостность, но не скрывает общедоступные данные обычных транзакций в блокчейне.

Что такое приватный ключ ECDSA?

Это секретное целое число, используемое для создания подписей и получения соответствующего публичного ключа.

Что такое публичный ключ ECDSA?

Это точка эллиптической кривой, полученная из приватного ключа и используемая для проверки подписей.

Какую кривую Bitcoin использует для ECDSA?

В традиционных подписях транзакций ECDSA Bitcoin использует эллиптическую кривую secp256k1.

Какую кривую Ethereum использует для подписей аккаунтов?

Аккаунты Ethereum, управляемые внешними ключами, используют ECDSA на secp256k1.

Что такое r и s в ECDSA?

Это два целочисленных компонента подписи ECDSA.

Что такое nonce ECDSA?

Это секретный скаляр для отдельной подписи, используемый при создании подписи.

Почему нельзя повторно использовать nonce ECDSA?

Повторное использование nonce для разных сообщений может позволить наблюдателю вычислить приватный ключ.

Что такое детерминированный ECDSA?

Это метод подписания, который получает nonce из приватного ключа и дайджеста сообщения по установленной процедуре, например RFC 6979.

Устраняет ли детерминированный ECDSA необходимость в случайных числах?

Нет. Для исходного приватного ключа по-прежнему нужна высокая энтропия, а реализация должна быть защищена от сбоев и атак по побочным каналам.

Что такое изменяемость подписи ECDSA?

Это свойство, при котором и

(r, s)
, и
(r, n - s)
могут быть действительными для одного сообщения и публичного ключа.

Что такое подпись low-s?

Это каноническая подпись ECDSA, значение

s
которой не превышает половины порядка кривой.

Что такое кодировка DER?

DER — это структурированная двоичная кодировка, которая часто используется для представления целых чисел

r
и
s
в подписи ECDSA.

Может ли подпись ECDSA раскрыть приватный ключ?

Правильно созданная подпись не должна его раскрывать, однако повторное использование nonce, смещенные nonce, побочные каналы и ошибки реализации могут привести к утечке ключа.

Можно ли восстановить потерянный приватный ключ с помощью ECDSA?

Нет. Подписи и публичные ключи не дают практически осуществимого способа восстановить безопасно сгенерированный утерянный приватный ключ.

Можно ли подделать подпись ECDSA?

Подделка считается вычислительно непрактичной при использовании надежных параметров, ключей, nonce, хеш-функций и реализаций.

ECDSA и ECC — это одно и то же?

Нет. ECC — это более широкое семейство криптографических методов на эллиптических кривых, а ECDSA — один из алгоритмов цифровой подписи в этом семействе.

ECDSA и Schnorr — это одно и то же?

Нет, это разные алгоритмы подписи, даже если оба используют secp256k1.

Использует ли Taproot ECDSA?

В новом пути подписания Taproot используются подписи Schnorr по BIP 340, а не ECDSA.

Могут ли смарт-контракты проверять подписи ECDSA?

Да. Во многих блокчейн-средах есть встроенные операции или библиотеки для проверки подписей ECDSA на secp256k1.

Доказывает ли действительная подпись ECDSA юридическую личность?

Нет. Она подтверждает контроль над приватным ключом, если только отдельные доказательства не связывают ключ с юридической личностью.

Гарантирует ли действительная подпись безопасность транзакции?

Нет. Пользователь может правомерно подписать вредоносный перевод, неограниченное разрешение, обманный ордер или опасное действие со смарт-контрактом.

Может ли квантовый компьютер взломать ECDSA?

Достаточно мощный отказоустойчивый квантовый компьютер мог бы взломать ECDSA, однако ни одна публично известная система сейчас не способна сделать это в масштабах, значимых для криптовалют.

Остается ли ECDSA безопасным сегодня?

При правильной реализации ECDSA с надежными ключами и nonce устойчив к известным практически осуществимым классическим атакам.

Заключение

ECDSA — базовый алгоритм цифровой подписи, который используется для авторизации транзакций в криптовалютах без раскрытия приватных ключей.

Для создания значений подписи

r
и
s
он объединяет приватный скаляр, публичный ключ на эллиптической кривой, дайджест сообщения и секретный nonce подписания.

Прежде чем принять подписанное действие, узлы блокчейна проверяют эти значения математически.В традиционных транзакциях Bitcoin применяется ECDSA на secp256k1, а аккаунты Ethereum, управляемые внешними ключами, используют ту же кривую и информацию для восстановления подписи.

Строгие правила кодирования, ограничения low-

s
, идентификаторы сети, домены сообщений и защита от повторного воспроизведения повышают безопасность ECDSA в криптовалютных протоколах.

Главная практическая слабость алгоритма — не базовая задача эллиптической кривой, а ошибки реализации и управления ключами.Повторно использованные nonce, слабая генерация случайных чисел, раскрытые фразы восстановления, побочные каналы, неправильная обработка недопустимых точек и неясные запросы на подписание способны свести на нет даже надежную математику.Разработчикам следует использовать проверенные библиотеки, детерминированные процедуры генерации nonce, операции с постоянным временем выполнения, строгую проверку и точные спецификации протоколов.Пользователям необходимо защищать данные для восстановления и проверять каждую транзакцию или сообщение на доверенном устройстве для подписания.При правильной реализации ECDSA остается устойчивым к известным практически осуществимым классическим атакам, хотя долгосрочным криптовалютным системам необходимо готовиться к переходу на постквантовые технологии подписи.
BTC ETFs See $679M in Outflows
BTC ETFs See $679M in OutflowsBTC ETFs See $679M in Outflows
Citi sees BTC at $113K. What do institutions see?

В тренде

Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка

Недавно добавленные

Криптовалюты недавно внесенные в листинг и доступные для торговли