← К новостям
BIP461

В Bitcoin предложили способ замечать подозрительные ECDSA-подписи

BIP461 предлагает единые правила для ECDSA-подписей Bitcoin. Сравнение результатов двух устройств поможет обнаружить отклонение, но не докажет кражу ключа.

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

Документ называется Deterministic ECDSA Signatures. Его автор — Лиам Гиллиган, статус в реестре Bitcoin Improvement Proposals — Draft. Это проект правил для подписывающих программ и устройств, а не активированное обновление сети Bitcoin.

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

BIP461 задаёт воспроизводимую процедуру целиком. Она включает получение nonce по RFC6979, повторные попытки до получения значения r нужного размера и приведение значения s к установленной форме. Новизна предложения — общий алгоритм, результат которого можно сравнить между независимыми реализациями. Детерминированный nonce сам по себе давно известен и уже используется Bitcoin Core.

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

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

Предложение не меняет правила проверки транзакций Bitcoin. Подписи, созданные по BIP461, остаются обычными действительными ECDSA-подписями, поэтому для применения спецификации не нужен ни soft fork, ни hard fork. Дополнительное следствие выбранной процедуры — размер подписи не более 70 байт в DER-кодировке, или 71 байт с однобайтным флагом sighash.

Проблему скрытой передачи секрета через подписи наглядно показали исследователи Dark Skippy. Но их демонстрация использовала подписи Schnorr, тогда как BIP461 описывает ECDSA. Называть проект готовым исправлением именно этой атаки было бы технически неверно.

Пока BIP461 остаётся черновиком. Чтобы сравнение подписей стало практическим инструментом, производителям кошельков и разработчикам библиотек потребуется реализовать одни и те же правила. Само появление документа в реестре BIP не означает, что кошельки уже поддерживают такую проверку.

Источник: BIP461