ОБНОВИТЬ: 0.5.3 был выпущен с поддержкой BIP30
Всем привет,
как некоторые из вас уже знают, уязвимость была обнаружена в пути Bitcoin в настоящее время обрабатывает повторяющиеся операции. Несмотря на то, что мы были в состоянии продемонстрировать потенциальную атаку на testnet, нет причин для беспокойства, потому что такая атака требует значительной мощности хеширования, является довольно сложным, и даже если она проводится не позволяет финансовой выгоды для атакующего. Тем не менее, это уязвимость, которая может вызвать проблемы, и мы хотим, чтобы исправить это как можно скорее.
Но прежде, чем мы раскатать затруднительные мы хотели бы сообщить Вам, сообщество, именно то, что проблема и как мы будем это исправить. По сути, мы хотим, чтобы каждый на той же странице, чтобы исправить откачка так гладко и без осложнений, как это возможно.
Для большинства проблем, это не требуется, так как мы можем просто выпустить обновленный клиент. Тем не менее, характер проблемы диктует исправление, которое будет ввести новое правило строже блок-действия. Это означает, что мы должны фактически изменить правила, по которым блоки считаются действительными или недействительными. Это само по себе представляет опасность, поскольку злоумышленник нарушает это новое правило, в то время как лишь небольшая модернизировал их клиентов может вызвать блок цепи вилку. Это плохо, так как это позволило бы любому выходу транзакции, которая существовала до того, как вилка тратиться дважды: один раз в каждой ветви камертона. Однако, если большинство задастся более строгие правила, мы уверены, что любая вилка будет решена быстро и не быть постоянными. Вот почему нам нужна ваша поддержка.
Исправление, описанное в BIP 30, является noncontroversial. Было долгое обсуждение на список рассылки, и некоторые разработчики выразили свою поддержку. Большинство горных бассейнов (с точки зрения хэширования власти) также подтвердили, что они будут обновлять свои узлы. BIP 30 имеет обратную совместимость: только то, что ранее считалось допустимым блок может стать недействительным, а не наоборот. Это означает, что старое программное обеспечение будет продолжать принимать блоки "заминированный" клиентами после нового правила, и продолжать строить на них.
Чуть более техничный, фактическая ошибка заключается в следующем: программное обеспечение Bitcoin было написано с предположением, что невозможно создать транзакцию с хэш, который идентичен предыдущей сделки. Однако это не совсем верно. Это требует багги программного обеспечения, или злого умысла, но можно создать coinbase транзакции, которая идентична предыдущей coinbase, подразумевая, что имеет тот же хэш. Кроме того, путем воссоздания транзакции, которые используют этот дублированный coinbase (ы), те, могут быть повторены, а также. Теперь вот как в настоящее время программное обеспечение Bitcoin имеет дело с этим: он не проверяет, существует ли уже что предыдущий хэш, а просто переписывает его в индексной базе данных транзакций. Еще хуже, когда блок, который содержал такой дубликат возвращен (при реорганизации), запись индекса удаляются полностью. Если первоначальная сделка еще не израсходована, то сейчас она стала unspendable.
Способ исправить это просто: просто запретите блоки содержат такие дублированные сделки. Для того, чтобы не сделать обрезку невозможным в будущем, добавляется одно исключение: если исходная транзакция была уже израсходован полностью перед блоком, он (пока) еще могут содержать дубликат. Без этого исключения, каждый полный узел в сети необходимо будет сохранить индекс всех операций, когда-либо. Это было реализовано, изменение слито в мастер мерзавца (так он будет включен в релизе 0.6.0), а также в несколько Backports. Он был испытан roconnor (который показал первоначальную атаку на testnet), чтобы предотвратить его нападение, и он был испытан по-прежнему принимает текущую самую длинную цепочку блоков на реальной сети.
В заключении: Мы хотим, чтобы исправить недавно найденную уязвимость, нам нужно большинство шахтеров поддержать исправление, чтобы предотвратить потенциальные постоянные вилы, исправление было тщательно обсуждалось в списке рассылки, разработчики поддерживают его, и это noncontroversial. При поддержке большинства, если все пойдет хорошо, то это изменение будет активирована на 15 марта 2012 года, 0:00 UTC.
PS: благодаря Hazek для корректуры