16 апреля главный инженер Rootstock Серхио Демиан Лернер (Sergio Demian Lerner) рассказал в своем блоге, что он обнаружил ранее неизвестные квадратичные задержки в скриптах Биткоина во время исследования протокола Segregated Witness (Segwit).
В своем сообщении Лернер объясняет, что он начал исследовать возможности масштабирования Segwit на прошлой неделе, начав изучать код, «в особенности функцию EvalScript()». Именно тогда он обнаружил две квадратичные петли сложности в протоколе Bitcoin Core. По словам Лернера, результаты этого тестирования не должны ни у кого вызывать беспокойства, так как он считает, что существуют «гораздо более серьезные проблемы в области проверки блоков Биткоина». При этом, в своей статье он подробно описывает один из возможных сценариев атаки злоумышленников с использованием этой уязвимости.
«Майнер-злоумышленник может создать блок Segwit, для проверки которого потребуется примерно 10 секунд», - объясняет Лернер. «Примеры, представленные в моей записи, требуют меньше 10 секунд».
«Я не считаю, что обнаружил уязвимость. Однако, если размер блока будет увеличен в будущем, то выявленная проблема должна быть решена до этого момента. Скрипты, которые я привожу в качестве примера, не оставляют стек значений пустым, но протокол Биткоина этого и не требует. Для Биткоина необходимо, чтобы только верхнее значение было истинным для принятия скрипта».
«Оптимизация необходима для предотвращения будущих проблем»
Лернер углубляется в описание проблемы, которую он называет отклонением OP_IF, а также проблемы «Rock-and-Roll», обнаруженной в коде операции OP_ROLL. Он также объясняет, что уже было много сделано для оптимизации процесса обработки блоков, но отмечает, что «есть несколько частей старого кода, которые по-прежнему требуют незначительной оптимизации для предотвращения сюрпризов в процессе масштабирования в будущем».
Исследование Лернера привлекло внимание пользователей форумов и социальных сетей, где большинство участников сообщества остались довольны сделанным открытием. Один из пользователей Reddit сказал - «Очень важно, чтобы подобные эксплойты были вовремя обнаружены и пропатчены». Кроме того, эксперт по безопасности в области Биткоина Кристов Атлас (Kristov Atlas) поддержал открытие Лернера, заявив в своем Твиттере:
«Еще одна замечательная находка в области DoS. Спасибо за исследование и распространение информации».
Метод параллельной проверки
Еще одна идея, появившаяся в блоге Лернера, была предложена одним из комментаторов, который спросил: «У вас уже есть мнение по поводу BUIP033: Параллельная проверка?».
BUIP033 - это концепция, предложенная разработчиком Bitcoin Unlimited Питером Чиппером (Peter Tschippe) в октябре 2016 года, подразумевающая создание отдельной последовательности команд для проверки блока. По сути, этот метод противоположен тому способу проверки каждого блока через основной поток обработки, который применяется сейчас.
«Я думаю, что это очень важно для масштабируемости», - так ответил на комментарий Лернер. «Это уменьшает влияние всех проблем, связанных с размером блока».
Участие Лернера в дебатах по масштабированию
Инженер Rootstock довольно часто высказывал свое мнение о решении проблемы масштабирования Биткоина. Недавно Лернер опубликовал предложение, касающееся размера блока, включающее в себя Segwit и одновременное увеличение размера блока до 2Мб. Его план масштабирования «Segwit, размер блока 2Мб – совмещенный хардфорк и софтфорк» получил противоречивые отзывы разработчиков Биткоина в прошлом месяце.
Лернер также является одним из соавторов технологии оптимизации майнинга ASICboost, ставшей причиной недавнего скандала в сообществе Биткоина.