Перейти к содержимому
ecdsa.com

Пластичность подписи

Свойство схемы подписи или её кодирования, которое позволяет любому, не зная закрытого ключа, превратить верную подпись в другую верную подпись того же сообщения тем же ключом.
Другие написанияtransaction malleabilitysignature malleation

Подписи ECDSA пластичны по построению, поскольку проверку проходят и (r, s), и (r, n − s), а кодирование DER добавляет новые варианты, если парсеры принимают неминимальную запись длины или целые числа с дополнением (в Bitcoin эту возможность в 2015 году закрыло правило строгого DER из BIP 66). Подписи EdDSA пластичны, если проверяющая сторона не убеждается, что S меньше порядка группы. Пластичность — не подделка: подписать новое сообщение никто не может.

Это важно, когда идентификатором служит подпись или хеш, в который она входит. До SegWit идентификаторы транзакций Bitcoin вычислялись в том числе по подписям, поэтому третьи лица могли изменить идентификатор ещё не подтверждённой транзакции (Mt. Gox ссылалась на это, когда в феврале 2014 года приостановила вывод средств). Смарт-контракты, которые запоминают использованные подписи вместо использованных nonce, и API, которые отсеивают повторные запросы по подписи, ломаются так же.

Защита: канонические кодировки (строгий DER, low-S, S меньше L), идентификаторы, вычисленные по подписанному содержимому, а не по подписи, явные nonce в подписываемой полезной нагрузке и схемы, которые при строгой проверке обладают сильной неподделываемостью, например Ed25519 и BIP-340.

Стандарты и ссылки

Все термины