Атака повтора транзакции — отправка уже подписанной операции второй раз, в другой сети или в другом контексте, где та же подпись остаётся действительной.

Классический случай — форк

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

Как от этого защищаются

Основной приём — идентификатор сети, включённый в подписываемые данные. Подпись, сделанная для одной сети, в другой становится недействительной. В Ethereum это правило появилось после разделения 2016 года; сегодня его поддерживают все кошельки. Второй приём — счётчик операций у адреса: повторная отправка с тем же номером отвергается сетью.

Где риск сохраняется

Проблема возвращается там, где подпись используется вне обычного перевода: разрешения на распоряжение токенами и подписи без комиссии живут по своим правилам, и у них должны быть собственный срок действия и одноразовый номер. Если этого нет, подпись можно предъявить повторно спустя время. Отсюда практическое правило: не подписывать бессрочные разрешения и отзывать выданные, когда сервисом больше не пользуетесь. Смежная тема — уязвимость смарт-контракта, где ошибка в проверке подписи даёт тот же результат.