Существует ли система доказательства работы, для генерации которой требуется значительно больше памяти, чем для проверки?

Litecoin сопротивляется ускорению графического процессора, используя функцию хэширования на основе скрипта, которая требует некоторого объема памяти для генерации и проверки. Проблема заключается в том, что этот rпараметр должен быть установлен достаточно высоким, чтобы было трудно использовать графический процессор, но достаточно низким, чтобы клиенты с малым объемом памяти (например, смартфоны) могли по-прежнему эффективно проверять блоки.

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

Я слышал о двух возможных подходах: компромисс времени и памяти с помощью scrypt и алгоритм хеширования на основе теории графов, который требует много памяти для поиска решений.

Что вы подразумеваете под «проверкой» хеш-функции? Перегенерировать и сравнить?
@amaclin Вроде? Я сузил свой вопрос. Это более ясно?
Нет такого понятия, как «проверить хеш-функцию». PoW проверяет, что результат меньше целевого. Но чтобы проверить это, мы должны вычислить значение
@amaclin There is no such thing as "verify hash function" Конечно, есть. But to verify it we should calculate the valueВ качестве примера я привел компромисс времени и памяти со scrypt, так что это вполне возможно.
Litecoin не «сопротивляется» GPU. Даже не ASIC. «Пытался сопротивляться…» может быть, но ходят слухи, что создатель уже использовал GPU при представлении. Также: поиск и проверка хэша — это одно и то же, разница только в том, что при проверке вам нужно выполнить вычисление только один раз, а не миллиарды раз.
@Jannes Litecoin doesn't 'resist' GPU. Not even ASICs.По крайней мере, это лучше, чем Биткойн. Если у вас есть альтернативная формулировка, не стесняйтесь редактировать мой вопрос. Also: finding and verifying a hash are the same thing, only difference is that when verifying you only need to do the calculation once instead of billions of times.Я знаю, что SHA256 такой. Может ли быть какая-то система доказательства работы, не основанная на SHA256 или не основанная на хэш-кэше, которая удовлетворяет изложенным мной требованиям?
@NickODell В этом нет абсолютно ничего «лучшего» ... весь смысл доказательства работы должен быть максимально простым, потому что это снижает входной барьер для новых игроков (производителей ASIC). Это означает, что меньше людей находятся в привилегированном положении и имеют несправедливое преимущество перед другими (например, сами создатели монеты). Нет смысла искусственно усложнять PoW. Конечно, создатели мошеннических монет пытаются представить это преимуществом, но на самом деле все наоборот.
@Jannes Барьер для входа на ASIC-майнинг не снижен, учитывая, что китайские майнинг-фермы не будут разглашать свое оборудование (и с учетом проблем с поставками с BFL), я склонен думать, что существует чрезвычайно несопоставимый барьер для входа. к асик-майнингу
@Jannes Вы вступаете в сферу спекуляций о мотивах создателей альткойнов, что невероятно оффтоп.
@WizardOfOzzie ЕСЛИ существует разрозненный барьер для входа, он станет только хуже, если вы сделаете дизайн и чипы более сложными. Если вы это сделаете, вам понадобятся более умные люди для их разработки, более дорогие машины для их изготовления и т. д.
Связано: lists.randombit.net/pipermail/cryptography/2013-January/… но, вероятно, не подходит для использования в альткоинах.

Ответы (3)

Я думаю, что процесс майнинга, использующий стохастическую выборку большого набора данных, удовлетворит изложенным вами требованиям. Блокчейн даже предоставляет для этого отличный набор данных. Например, предположим, что каждый одноразовый номер требует от вас случайной выборки цепочки блоков, чтобы выбрать несколько байтов. Поскольку вы используете много одноразовых номеров во время майнинга и не можете предсказать, какие данные вам потребуются из цепочки блоков, вам в основном потребуется, чтобы вся цепочка блоков (на самом деле, любой публично согласованный набор данных) была доступна во время майнинга. Затем решение можно проверить с помощью небольшой выборки этого набора данных и некоторого доказательства того, что данные находятся в наборе. При использовании примера с блокчейном вам, вероятно, понадобится цепочка заголовков блоков и ветвь merkle для выбранных данных транзакции.

Другой способ сделать это — использовать большое случайное дерево Меркла . Допустим, кто-то создал дерево Меркла из 2^31 случайных 32-байтовых значений. Принимая во внимание, что ветки merkle также должны храниться, это (1 + 2 + 2^2 + 2^3 + ... + 2^31) * 32 bytesили (2^32-1)*32 ~= 137.4 GBданные в целом. Эти данные очень общедоступны для всех, кто действительно хотел их загрузить и проверить корень merkle. Корень меркла будет известен как корень меркла для добычи полезных ископаемых, и это хорошо известная и согласованная константа. Майнинг включает в себя выборку этого случайного дерева Меркла и хэширование, и при нахождении успешного решения предоставляется ветвь дерева Меркла, доказывающая, что данные, которые были выбраны, действительно находятся в публично согласованном дереве Меркла.

В этой схеме для майнинга требуется ~ 137,4 ГБ памяти, но только ~ 1 КБ данных для проверки решения относительно публично согласованного корня merkle для майнинга.

И цифры, очевидно, могут быть изменены, чтобы люди могли майнить, не отказываясь от 137,4 ГБ своего жесткого диска. Нужно было бы достичь баланса.

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


Редактировать: с помощью быстрого поиска я нашел эту статью, которая решает по существу ту же проблему с другим методом стохастической выборки, включающим парадокс дня рождения. Их решение интересно тем, что оно включает в себя каждый раз создание собственного большого набора данных. Но на самом деле это может быть не очень хорошо, поскольку препятствует перестроению блоков при поступлении новых транзакций.

http://www.hashcash.org/papers/momentum.pdf

Соответствующее обсуждение bitcointalk алгоритма Momentum:

https://bitcointalk.org/index.php?topic=313479.0

Я думаю, это забавно, как аспект «импульса» (невозможность обновить merkle после его первого создания) рекламируется как определяющая характеристика алгоритма, хотя на самом деле это довольно существенный недостаток, задержка подтверждения всех транзакций на 1 блок. . Это также может усугубить проблему, когда майнеры не хотят добывать большие блоки, потому что их распространение занимает много времени. т.е. может быть более выгодно продолжать добычу с помощью вашего крошечного блока даже после того, как вы услышали о новом блоке в сети, потому что импульс, который у вас уже есть, облегчает его. Я думаю, что тот факт, что биткойн-алгоритм PoW не имеет импульса, на самом деле является отличной функцией, позволяющей быстро подтверждать транзакции.

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

Если бы майнинг основывался на данных в цепочке блоков, кто-то мог бы вставить данные, которые выглядели бы случайными, но на самом деле были бы легко сжимаемыми, если бы вы знали какой-то секретный ключ. Однако второй подход кажется разумным.
@NickODell, спасибо. Я отредактировал свой пост, вас также может заинтересовать алгоритм Momentum.
Использование блокчейна для данных, по крайней мере, вынуждает майнеров быть полным узлом, я думаю, это по крайней мере некоторое преимущество. Использование 137 ГБ случайных данных означает, что вы просто ждете, пока кто-то создаст ASIC со 137 ГБ ОЗУ, а все остальные облажались (вот вам сопротивление...).
@Jannes Если вы создаете ASIC со 137 ГБ ОЗУ, почему бы не сделать ОЗУ внешней, чтобы вы могли получить ее дешевле? И если алгоритм во многом зависит от оперативной памяти, то почему бы не заменить ASIC процессором?
@NickODell, потому что локальная оперативная память всегда быстрее внешней, а ASIC всегда быстрее процессора? В этом весь смысл. Нет смысла делать PoW CPU/GPU устойчивым, потому что, если оно того стоит, кто-нибудь сделает для него ASIC. Потому что ASIC — это, по сути, просто процессор + оперативная память, из которых вырезаны все ненужные (общего назначения) вещи. Чтобы сделать это быстрее. В конце концов, вы сжигаете Ватты... в этом весь смысл. Абсолютная скорость не имеет значения (те же ватты), но важна скорость относительно других! Если вам нужно быть богатым, чтобы инвестировать в завод ASIC, вы получаете несправедливое преимущество -> централизация.
@NickODell, алгоритм ziftrCOIN также использует алгоритм, который требует больше памяти для вычислений, чем для проверки, за счет использования дерева Меркла прямо в блоке в качестве дерева Меркла, которое я описал в своем ответе. Преимущество заключается в том, что вы можете доказать знание всех данных, которые вы извлекаете, при этом требуется только одна из транзакций, чтобы доказать, что заголовок действителен для узла SPV.
@NickODell, мой ответ показал 3 разных способа сделать это, они не соответствуют вашим требованиям?
@StephenM347 У всех троих разные проблемы 1) Кто-то может вставлять случайно выглядящие данные 2) Кто-то может запускать несколько майнеров параллельно с одним и тем же набором данных, 3) Имеет проблемы, которые вы отметили. Все они хороши для решения проблемы, но по той или иной причине терпят неудачу.
Разве простой поиск цикла или поиск столкновений на основе выдающихся точек не уменьшит затраты памяти на импульс, при этом увеличивая вычислительные затраты лишь на небольшой коэффициент?

Для создания Dagger требуется много памяти, но мало для проверки.

Мой «Cuckoo Cycle» https://github.com/tromp/cuckoo — это теоретико-графовое Proof-of-Work с привязкой к памяти, которое тривиально проверить, и AFAIK — единственный, в котором во время выполнения преобладает задержка памяти.

Я думал, что этот алгоритм устарел? github.com/tromp/кукушка/issues/2
Нет; только оригинальный алгоритм майнинга устарел. Новый, который использует обрезку краев, предложенную Дейвом Андерсеном, до сих пор сопротивлялся нападкам. Все подробности, включая сравнение с Momentum, см. в README и техническом документе.