Как можно предотвратить атаку искажения времени?

jarpian объясняет, что такое атака искажения времени (атака духа времени):

Это атака 51%, когда злоумышленник искусственно устанавливает метки времени блока, чтобы снизить сложность, что позволяет ему получить больше монет, чем может гарантировать его скорость хэширования. Это работает, потому что формула регулировки сложности основана исключительно на временных метках, которые злоумышленник может выбрать совершенно свободно. В частности, временные метки не обязательно должны располагаться в порядке возрастания . ArtForz подробно объясняет атаку здесь .

Эта атака была использована против новой цепочки блоков Geist Geld. Сложность Geist Geld меняется каждые 16 блоков, что делает цепочку особенно уязвимой для этой атаки. Злоумышленник, нацеленный на Биткойн, должен будет добыть полный набор из 2016 блоков с текущей сложностью, прежде чем начать получать какое-либо преимущество по сравнению с «обычной» атакой 51%.

Очевидно, что выполнение этой атаки будет ужасно дорогим. (На момент написания Coinometrics оценивает стоимость примерно в 463 миллиона долларов .)

Однако, если вы добились успеха, вы могли бы снизить сложность и увеличить скорость блокировки в 4 раза каждые 2 недели, что позволит вам чеканить монеты чаще, чем каждые 10 минут.

Очевидный способ исправить это — изменение периода перенацеливания блока с (2016*n, 2016*n + 2015) на (2016*n, 2016*n + 2016 ) проблематично. Блоки, созданные новой реализацией, будут недействительны в старой реализации, и наоборот. (Источник)

Итак, как можно предотвратить атаку с искажением времени без нарушения работы?

Я нахожу этот вопрос ценным и предпочитаю открытое обсуждение страху перед страхом. Если есть какое-либо интересное обсуждение этого в другом месте, пожалуйста, укажите его в ответе для потомков.
Я не знал, что существует такая вещь, как неразрушающая деформация времени?

Ответы (2)

Простое решение — софтфорк, требующий, чтобы время каждого блока было равно или больше, чем время предыдущего блока в цепочке блоков. То есть время в цепочке блоков не может идти вспять.

Если время не может вернуться вспять, то злоумышленник не может искусственно снизить сложность, кроме как путем майнинга блоков со временем в будущем, а сеть уже отклоняет блоки более чем на 120 минут вперед.

Это предложение представляет собой софтфорк, потому что майнеры, не прошедшие апгрейд, примут более сложную цепочку, время которой только увеличивается или остается прежним. Если реализовать так же, как BIP34 , подавляющее большинство скорости хеширования будет обновлено до применения нового правила, что сведет к минимуму нарушения.

Недостатка можно избежать, немного изменив правило: измените его так, чтобы метки времени дочерних блоков были больше или равны меткам времени их родителей. Если узел считает, что временная метка конца цепочки находится слишком далеко в будущем (но не настолько далеко, чтобы его отвергнуть), он может установить временную метку своего блока, равную временной метке своего родителя. Любой узел, который отклонит свой блок как находящийся слишком далеко в будущем, также отклонит родительский блок. Таким образом, правило не изменит этот случай.
@NickODell Вы говорите, что для цепочки блоков A->B->Cвремя C может быть> = время A? Фактически это ничем не отличается от того, что время C равно == времени B, потому что любой узел, который отвергает B, также отвергает C. Если это не то, что вы говорите, то, возможно, я неправильно понял: под >= the previous block's timeя имел в виду предыдущий блок в цепочке блоков, в частности тот, который указан в поле заголовка блока prevHeaderHash. Таким образом, время блока A <= время блока B <= время блока C. Если есть устаревший блок B′, его время не влияет на время блока C. Я отредактирую пост, чтобы было понятнее.
Хм. Я думаю, что сегодня верно то, что любой узел, который отвергает B (из-за того, что у него слишком далекое будущее), также отвергает C, так что я не могу придумать никаких новых недостатков. Я удалю эту часть своего поста.

Следите за такими сетями, как Myriad, Digibyte, Digitalcoin, Unitus и другими, которые используют доказательство работы Multi-Algo. Как некоторые из вас, возможно, знают, Myriadcoin подверглась атаке Timewarp в конце прошлого года и успешно положила конец усилиям злоумышленников. Я, например, не знаю, где находятся пороги для % хешрейта, чтобы иметь возможность осуществить такую ​​атаку. Глубокий анализ Myriad Blockchain (временные метки и все остальное, сетевой трафик от атаки тоже было бы неплохо, но он должен быть захвачен в реальном времени) и просмотр https://github.com/myriadcoin/myriadcoin был бы хорошей идеей. для всех, кто заинтересован в решении проблем с искривлением времени.

Итак, каково было их решение?
Извините, нет времени писать. Пожалуйста, проверьте github для самых последних коммитов.