Author

Topic: Алгоритм с защитой от GPU-майнинга (TeraHash) (Read 954 times)

full member
Activity: 411
Merit: 135
Награду получил. Поделишься подробностями про алгоритм миллиона TPS?

Ну там не миллион, верхняя граница производительности открыта.

По моему мнению блокчейн   должен основываться на следующих принципах:
1. Жестко синхронное время формирование блоков (новый блок начинается в строго заданное время, в классических pow блокчейнах это не так - там время плавающее, пока не найдется блок с заданной сложностью).
2. Алгоритм расчета хэша должен уметь быстро "подписывать" блок (быстро находить требуемый хэш из ранее накаченной памяти). Именно такой алгоритм (TERAHASH) описывается в этой ветке.
3. Быстрый и безопасный сетевой протокол доставки данных (транзакции и блок-лидер). Как вариант такого протокола - это jinn (https://terafoundation.org/files/JINN_RUS.pdf) Он обеспечивает примерно 1000 tps
4. Шардинг. Так как здесь тонкий момент - это не потерять надежность, подробные размышления на эту тему я описал вот здесь: https://terafoundation.org/files/TeraSharding-3-RUS.pdf
Quote
Центральный блокчейн наизнанку
Такое название происходит из того, что логика передачи кросс-транзакций похожа на схему с центральным блокчейном, но с отличиями:
  • допустимо несколько таких “центральных” блокчейнов
  • в нем нет собственных счетов для хранения монет или состояний
  • это чистый лог/журнал кросс-шардинговых транзакций
Сеть представляет собой неограниченный набор блокчейнов. Каждая нода поддерживает два чейна:
  • Shard-chain  - основная цепочка с собственными внутренними транзакциями (т.е. это обычный блокчейн шарда)
  • Middle-chain (платежный канал) - промежуточный блокчейн состоящий из кросс-транзакций. Он предназначен для связи шардов с друг другом. Количество нод/майнеров равно сумме нод блокчейна A и блокчейна B

Под термином шардинга у меня понимается независмый блокчейн (в том числе с другими разработчиками), но с наличием надсети в виде единого протокола обмена кросс-блокчейновыми транзакциями.


Пункт 4 я только начал реализовывать, поэтому это все пока теория, как на самом деле будет - покажет время...

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Атака
Quote
Какую бы функцию ты не применил, атакующему ничего не помешает 1 раз заполнить память своего GPU хешами, а после намного быстрее чем на CPU искать подходящее значение в этом "небольшом" массиве банально меняя хеш блока левыми транзакциями. Терабайты памяти не нужны, можно обойтись даже мегабайтами.

~
fxpc - награда 100К Тера за найденный вариант атаки

Награду получил. Поделишься подробностями про алгоритм миллиона TPS?
legendary
Activity: 2422
Merit: 2166
Похоже, что Ваша монета уже торгуется на бирже QBTC за USDT, но на CoinMarketCap её ещё нет. Скорее всего, эта биржа пока недостаточно ликвидна для листинга на ресурсе и, соответственно, не отправляет данные о котировках монет и объёме торгов.

 Wink проект развивается. Посмотри на новшества

Да, вижу прогресс и движение вперёд. В новостях пишут, что несколько дней назад с 63510000 блока введена новая спецификация алгоритма с протоколом JINN Core.

Судя по CoinMarketCap, TERA уже торгуется на многих криптовалютных биржах, в том числе на более-менее известных MXC и Hotbit. Хотя цена монеты с июля 2019 года по март 2020 года постоянно медленно падала с $0.023 до $0.002, в последний месяц, вероятно, в связи с апгрейдом консенсуса блокчейна, на торговых рынках наблюдается небольшой рост до $0.003.

В целом, на мой взгляд, VTools - толковый разработчик на NodeJS и знающий предприниматель. Желаю успехов и возвращения цены монеты TERA к бывшим хаям! Cool
newbie
Activity: 37
Merit: 0
Вижу, что Ваш проект развивается. Заодно и мериты Вам прилетели тремя большими транзакциями. Наверно, многие пользователи вдохновились Вашим проектом. Cool

Похоже, что Ваша монета уже торгуется на бирже QBTC за USDT, но на CoinMarketCap её ещё нет. Скорее всего, эта биржа пока недостаточно ликвидна для листинга на ресурсе и, соответственно, не отправляет данные о котировках монет и объёме торгов.

 Wink проект развивается. Посмотри на новшества
full member
Activity: 411
Merit: 135
У меня одного вечная паранойя, по-поводу gpu-майнера ?

В чем она выражается?
newbie
Activity: 7
Merit: 0
У меня одного вечная паранойя, по-поводу gpu-майнера ?
full member
Activity: 411
Merit: 135
Вижу, что Ваш проект развивается. Заодно и мериты Вам прилетели тремя большими транзакциями. Наверно, многие пользователи вдохновились Вашим проектом. Cool

Похоже, что Ваша монета уже торгуется на бирже QBTC за USDT, но на CoinMarketCap её ещё нет. Скорее всего, эта биржа пока недостаточно ликвидна для листинга на ресурсе и, соответственно, не отправляет данные о котировках монет и объёме торгов.

Да, верно, развиваемся - прямо сейчас статистика на сайте показывает 2000 нод распределенных по всему миру. Сейчас внедряю возможность загрузки блокчейна не с начала, а с конца цепочки. Для этого в сети будут находиться несколько таблиц с остатками состояний на некоторые даты, так чтобы всегда были таблицы позволяющие загрузиться за последние тысячу блоков, несколько сот тысяч или несколько миллионов - в зависимости от степени доверия к сети. Это даст возможность быстро выполнить начальный запуск блокчейна для работы Дапп или майнинга.
Фактически высокая скорость транзакций создает новую проблему - хранение большого объема данных. Загрузка цепочки с конца решит эту проблему...


Извиняюсь что я про свое - техническое, я программист и мне интересны технологии...

P.S.
Для CoinMarketCap нам нужна еще одна биржа зарегистрированная там же (сейчас есть только одна биржа - CHAOEX).
legendary
Activity: 2422
Merit: 2166
Вижу, что Ваш проект развивается. Заодно и мериты Вам прилетели тремя большими транзакциями. Наверно, многие пользователи вдохновились Вашим проектом. Cool

Похоже, что Ваша монета уже торгуется на бирже QBTC за USDT, но на CoinMarketCap её ещё нет. Скорее всего, эта биржа пока недостаточно ликвидна для листинга на ресурсе и, соответственно, не отправляет данные о котировках монет и объёме торгов.
member
Activity: 280
Merit: 26
С пулом тоже лотерея
Ну а я, собственно, про что.
Quote
У 15% пользователей сети внешний ip колхозный. Шлём их нахуй?
А в чём проблема-то? Асики вон тоже не всем желающим за просто так нахаляву раздают. А "белый" IP-шник всяко дешевле асика.
Quote
Фиксированная ставка и размер выигрыша в зависимости от ставки это снова PoS.
Да это уже просто натягивание buzzword-ов куда ни поподя. Вроде той поломойки, которая "клининг-менеджер".
Quote
Задача не о том кому дозволено играть, а про условного слона, которого без централизованного оракула нужно разыграть среди нищебродов.
Слон на то и условный, что появляется из ниоткуда. А разыграть вообще не проблема. Ну, если принять, например, что хэш-функция даёт (достаточно) случайный результат - считаем, например, хэш от предыдущего блока транзакций участнегов спецолимпиады лотереи, (вместе со всеми подписями).
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Поиск хэша это внешняя возня, поэтому не столько важно кто и каким онанизмом занят в данном случае.
Онанизм - не важен, а результат при условии достаточного кол-ва отдельных (т.е., не объединённых каким-либо образом в пул) участнегов - та же лотерея.
Quote
Что ты предлагаешь? Давать награду тем, у кого есть адрес с балансом? Получится PoS. А если размер баланса не важен, то адепты зафлудят всю сеть и консенсуса не будет. В централизованных системах упорство хоть и даёт результат, но отличным его назвать трудно, в децентрализованных и того хуже. Каким образом дистанционно вычислить, что 1000 хомяков на самом деле есть 1, если ему не требуется тратить значительных ресурсов чтобы плодить аккаунты и тп?
Не ну зачем сложности-то. Обычный внешний ip-шниг сильно ограничивает возможность "плодить эккаунты". Но гораздо лучше ввести фиксированную "ставку" - всё как во взрослой лотерее. Хочешь бОльший шанс выиграть - плати бОльше денег в фонд выигрыша. Ну, и размер выигрыша в таком случае будет обратно пропорционален шансу, конечно.

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

У 15% пользователей сети внешний ip колхозный. Шлём их нахуй? Пачка внешних ip не является проблемой для админа ботнета. Фиксированная ставка и размер выигрыша в зависимости от ставки это снова PoS. Задача не о том кому дозволено играть, а про условного слона, которого без централизованного оракула нужно разыграть среди нищебродов.
member
Activity: 280
Merit: 26
Поиск хэша это внешняя возня, поэтому не столько важно кто и каким онанизмом занят в данном случае.
Онанизм - не важен, а результат при условии достаточного кол-ва отдельных (т.е., не объединённых каким-либо образом в пул) участнегов - та же лотерея.
Quote
Что ты предлагаешь? Давать награду тем, у кого есть адрес с балансом? Получится PoS. А если размер баланса не важен, то адепты зафлудят всю сеть и консенсуса не будет. В централизованных системах упорство хоть и даёт результат, но отличным его назвать трудно, в децентрализованных и того хуже. Каким образом дистанционно вычислить, что 1000 хомяков на самом деле есть 1, если ему не требуется тратить значительных ресурсов чтобы плодить аккаунты и тп?
Не ну зачем сложности-то. Обычный внешний ip-шниг сильно ограничивает возможность "плодить эккаунты". Но гораздо лучше ввести фиксированную "ставку" - всё как во взрослой лотерее. Хочешь бОльший шанс выиграть - плати бОльше денег в фонд выигрыша. Ну, и размер выигрыша в таком случае будет обратно пропорционален шансу, конечно.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Случайным образом это лотерея.
Дык, а "поиск красивого хэша целевой сложности" это что?
Одна лишь разница: "больше хэшрейта" == "больше лотерейных билетиков купил".
Quote
Лудоманы зафлудят всю сеть, если выигрыш больше нуля. Как защищаться без централизации?
Есть конечно чисто технические сложности: типа, пускать в интернет по паспорту как ограничить участнега лотереи одним "билетиком". Но я думаю, при достаточном упорстве можно решить эту проблему и без централизации.

Поиск хэша это внешняя возня, поэтому не столько важно кто и каким онанизмом занят в данном случае. Что ты предлагаешь? Давать награду тем, у кого есть адрес с балансом? Получится PoS. А если размер баланса не важен, то адепты зафлудят всю сеть и консенсуса не будет. В централизованных системах упорство хоть и даёт результат, но отличным его назвать трудно, в децентрализованных и того хуже. Каким образом дистанционно вычислить, что 1000 хомяков на самом деле есть 1, если ему не требуется тратить значительных ресурсов чтобы плодить аккаунты и тп?
member
Activity: 280
Merit: 26
Случайным образом это лотерея.
Дык, а "поиск красивого хэша целевой сложности" это что?
Одна лишь разница: "больше хэшрейта" == "больше лотерейных билетиков купил".
Quote
Лудоманы зафлудят всю сеть, если выигрыш больше нуля. Как защищаться без централизации?
Есть конечно чисто технические сложности: типа, пускать в интернет по паспорту как ограничить участнега лотереи одним "билетиком". Но я думаю, при достаточном упорстве можно решить эту проблему и без централизации.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Как я уже не раз говорил, самая надёжная защита от gpu-asic-шмасик и пр. хэшрейт-гонки "майнинга" - сделать все эти анаболические вычисления нах. не нужными.
А награду за блок раздавать случайным образом.
Правда, это сразу делает МММ-скую сущность "шиткоинства" слишком очевидной.

Случайным образом это лотерея. Лудоманы зафлудят всю сеть, если выигрыш больше нуля. Как защищаться без централизации? В остальном, хешрейт не нужен в PoS, но нищим там не подают. Сущность шиткоинов в данном контексте не столь важна, никто не заставляет раздавать именно их.
member
Activity: 280
Merit: 26
Как я уже не раз говорил, самая надёжная защита от gpu-asic-шмасик и пр. хэшрейт-гонки "майнинга" - сделать все эти анаболические вычисления нах. не нужными.
А награду за блок раздавать случайным образом.
Правда, это сразу делает МММ-скую сущность "шиткоинства" слишком очевидной.
full member
Activity: 411
Merit: 135
После оптимизации с памятью хешрейт слабого ноутбука с 4Гб оперативки стал примерно 60Mh/s (до этого был 200Kh/s)

Это значительная оптимизация. Наверно, раньше код был написан некорректно.

Тут в моем тексте идет упор на то, что если использовать память, то алгоритм работает в тысячи раз быстрее. А вычислительные ядра GPU больше не являются конкурентным преимуществом. Майнить на видеокарте по прежнему можно, но без значительного эффекта.

Вариации алгоритма улучшающие защиту от изменения базы и тем самым улучшающие вероятность полного перебора:
-Ввести более двух хешей (ухудшается вероятность поиска в одном интервале для GPU-майнера)

Я так понимаю, что для снижения вероятности нахождения в одном интервале можно использовать одновременно не два, а три и более хешей. Каково оптимальное значение количества используемых хешей для получения значительной форы CPU перед GPU?

Мы применили вариант 2:
Quote
-Использовать предыдущий хеш (его не изменить он уже в блокчейне)


legendary
Activity: 2422
Merit: 2166
После оптимизации с памятью хешрейт слабого ноутбука с 4Гб оперативки стал примерно 60Mh/s (до этого был 200Kh/s)

Это значительная оптимизация. Наверно, раньше код был написан некорректно.


Вариации алгоритма улучшающие защиту от изменения базы и тем самым улучшающие вероятность полного перебора:
-Ввести более двух хешей (ухудшается вероятность поиска в одном интервале для GPU-майнера)

Я так понимаю, что для снижения вероятности нахождения в одном интервале можно использовать одновременно не два, а три и более хешей. Каково оптимальное значение количества используемых хешей для получения значительной форы CPU перед GPU?
full member
Activity: 411
Merit: 135
Неделю назад мы зарелизились в Тере со следующей формулой:


Code:
Hash = XOR(DataHash, HNonce1)
Hash2 = XOR(PrevHash,HNonce2)
Power=min(Power(Hash),Power(Hash2))

Функция на JS:

Code:
function GetHash(PrevHash,BlockHash,Miner,BlockNum, Nonce0,Nonce1,Nonce2,DeltaNum1,DeltaNum2)
{
    if(DeltaNum1>DELTA_LONG_MINING || DeltaNum2>DELTA_LONG_MINING)
        return undefined;

    //calculate the hashes, which will look similar HashNonce
    var HashBase=sha3(PrevHash);
    var HashCurrent=GetHashFromNum2(BlockHash,Miner,Nonce0);

    //Hash-Nonce
    var HashNonce1=GetHashFromNum3(BlockNum-DeltaNum1,Miner,Nonce1);
    var HashNonce2=GetHashFromNum3(BlockNum-DeltaNum2,Miner,Nonce2);

    //XOR
    var Hash1=XORArr(HashBase,HashNonce1);
    var Hash2=XORArr(HashCurrent,HashNonce2);

    //choose the least POW
    var Ret={Hash:Hash2};
    if(CompareArr(Ret.Hash1,Ret.Hash2)>0)
    {
        Ret.PowHash=Hash1;
    }
    else
    {
        Ret.PowHash=Hash2;
    }

    return Ret;
}


После оптимизации с памятью хешрейт слабого ноутбука с 4Гб оперативки стал примерно 60Mh/s (до этого был 200Kh/s)


sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Это то о чём я выше написал - борьба со спамом. Давай удалим оффтоп.
hero member
Activity: 784
Merit: 814
я конечно извинюсь, но если это подойдет под п. 15 правил, это чревато баном. прочитайте правила, может конечно я ошибаюсь. пункт непростой для понимания.
начиная отсюда -
https://bitcointalksearch.org/topic/m.45092615
и до конца.

Не надо притягивать правила за уши. Этот пункт действует с 2014 года. Сколько с тех пор баунти и раздач было на форуме, кого забанили? В данном топике и вовсе никаких раздач нет. Скорее всего этот пункт введён для борьбы с топиками предлагающими отметится и получить награду, причина борьбы вполне очевидна - такие раздачи захламляют форум и позволяли набивать активность.
странно что люди рассуждая о программных кодах, не способны переварить один абзац текста. я ничего не утверждал и следовательно не притягивал. потому что сам не до конца уверен, а лишь предупредил. тера это альткоин или нет?судя по этой теме https://bitcointalksearch.org/topic/m.45381046 да. хотя я может ошибаюсь.

п.п. 15
Most giveaway threads are no longer allowed in the Alternate cryptocurrencies sections. From now on, posting or replying to such threads could result in being banned. Existing threads will be locked.

Specifically, you are not allowed to give people any incentive to post insubstantial posts in your threads. You can't offer to pay people who post their addresses, usernames, etc. You can do giveaways off-site and link to the giveaway page in a thread, but you can't give people any bonus for replying to your thread.

Similar threads are already restricted to Games and Rounds in the non-altcoin sections, but the giveaway-related post volume is so high in the altcoin sections that I've decided to just ban them entirely here.

------------------------------------------------------------------------------------------

вот здесь три больших поста разбора этого правила
https://bitcointalksearch.org/topic/m.45583710
full member
Activity: 411
Merit: 135
hero member
Activity: 784
Merit: 814
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
-Костыльно
-Предыдущий хеш не связан с текущим и поэтому не связан с coinbase транзакцией майнера

Слышал бы тебя бог Smiley Все в этом мире костыльно

Слышал бы, если был, а его нет. Grin
full member
Activity: 411
Merit: 135
-Костыльно
-Предыдущий хеш не связан с текущим и поэтому не связан с coinbase транзакцией майнера

Слышал бы тебя бог Smiley Все в этом мире костыльно
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
-Костыльно
-Предыдущий хеш не связан с текущим и поэтому не связан с coinbase транзакцией майнера
full member
Activity: 411
Merit: 135
Вариации алгоритма улучшающие защиту от изменения базы и тем самым улучшающие вероятность полного перебора:
-Ввести более двух хешей (ухудшается вероятность поиска в одном интервале для GPU-майнера)
-Использовать предыдущий хеш (его не изменить он уже в блокчейне)

full member
Activity: 411
Merit: 135
Практические примеры:
Компьютер: используя память DDR4-2133 будет иметь иметь скорость канала равную 17Гб/с и поэтому сможет сравнить порядка 500 млн хешей
GPU GTX 1060 имеет память 6Гб, скорость работы памяти 192 Гб/с. Таким образом в память видеокарты может поместиться 180 млн хешей, которую она в может вызывать 32 раза.
Подставим параметры:
CPU: 500тысяч
GPU: 180 тысяч в 32 раунда
запустим программу:
Code:
MiningCPU(BlockHash,500000);
MiningGPU(BlockHash,180000,32);

Результаты:
Code:
CPU Hash1: 28968  nonce1:3366
GPU Hash2: 44720  nonce2:59637
GPU показал даже немного худший результат.
full member
Activity: 411
Merit: 135
Ты не врубаешься в рандом. Вероятность найти 2 хеша за X попыток одинаковая независимо от интервала, пусть он хоть всего из 2 HNonce состоит. Кто быстрее перебирает, у того и выше вероятность, а перебирает быстрее GPU.


Вот код программы сравнения стратегии  CPU-майнера и GPU-майнера:

Code:
var MAX_NUM=0x1000000000;

function hash(Rand)
{
    return (1664525*Rand+1013904223) % MAX_NUM;
}


function MiningCPU(Hблока,CountIteration)
{
    var Hблока2=hash(Hблока);

    var HashLider1=MAX_NUM,Nonce1;
    var HashLider2=MAX_NUM,Nonce2;
    for(var nonce=0;nonce    {
        var Test1=hash(Hблока+nonce);
        if(Test1        {
            HashLider1=Test1;
            Nonce1=nonce;
        }

        var Test2=hash(Hблока2+nonce);
        if(Test2        {
            HashLider2=Test2;
            Nonce2=nonce;
        }
    }

    
    if(HashLider1>HashLider2)
        console.log("CPU Hash1: "+HashLider1+"  nonce1:"+Nonce1)
    else
        console.log("CPU Hash2: "+HashLider2+"  nonce2:"+Nonce2)
}

function MiningGPU(Hблока,CountIteration,CountInterval)
{
    var HashLider1=MAX_NUM,Nonce1;
    var HashLider2=MAX_NUM,Nonce2;
    for(var k=0;k    {
        Hблока=hash(Hблока+k);
        var Hблока2=hash(Hблока);

        var LocHashLider1=MAX_NUM,LocNonce1;
        var LocHashLider2=MAX_NUM,LocNonce2;


        for(var nonce=0;nonce        {
            var Test1=hash(Hблока+nonce);
            if(Test1            {
                LocHashLider1=Test1;
                LocNonce1=nonce;
            }

            var Test2=hash(Hблока2+nonce);
            if(Test2            {
                LocHashLider2=Test2;
                LocNonce2=nonce;
            }
        }

        //save lider
        var Lider=Math.max(HashLider1,HashLider2);
        var LocLider=Math.max(LocHashLider1,LocHashLider2);

        if(LocLider        {
            HashLider1=LocHashLider1;
            Nonce1=LocNonce1;
            HashLider2=LocHashLider2;
            Nonce2=LocNonce2;
        }

    }
    
    if(HashLider1>HashLider2)
        console.log("GPU Hash1: "+HashLider1+"  nonce1:"+Nonce1)
    else
        console.log("GPU Hash2: "+HashLider2+"  nonce2:"+Nonce2)
}

var BlockHash=1234567;

MiningCPU(BlockHash,10000000);

console.log("------------------------");

MiningGPU(BlockHash,100000,10000);



Сравниваем 10 млн итераций на CPU и 100 тыс итераций умноженных на 10 тыс интервалов на GPU, т.е. когда GPU вычислительнее мощнее в 100 раз.
Смотрим хеши, чем меньше тем лучше:
Code:
CPU Hash2: 2384  nonce2:6491628
------------------------
GPU Hash1: 12016  nonce1:64021

Как видим CPU нашел более сильный хеш.

Это доказывает правильность такого подхода при создании GPU-устойчивых алгоритмов. Осталось только аккуратно подобрать параметры...

full member
Activity: 411
Merit: 135
Я сейчас напишу простенькую программу для проверки гипотезы (раз ты не согласен с доказательством, значит это все еще гипотеза)...
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Ты не врубаешься в рандом. Вероятность найти 2 хеша за X попыток одинаковая независимо от интервала, пусть он хоть всего из 2 HNonce состоит. Кто быстрее перебирает, у того и выше вероятность, а перебирает быстрее GPU.
full member
Activity: 411
Merit: 135
Не понял откуда ты взял HNonce1 и HNonce2, видимо формула такая:
Hash = Mesh(Hблока,HNonce1)
Hash2 = Mesh(H2блока,HNonce2)
Power=min(Power(Hash),Power(Hash2))

Да, верно, когда писал мысль была сырая еще. В гуглдоке записал конечную версию, а тут не подправил. Должно быть так:

Так всё равно выгоднее менять хеш блока и перебирать один и тот же массив. Вероятность нахождения зависит от количества попыток, а не от количества интервалов. Нахождение в одном интервале и в разных - равновероятностно, потому что рандом.

Это верно, для поиска одного хеша. Если мы хотим чтобы два хеша нашлись в одном интервале - то это же умножение вероятностей.
Допустим у нас 2 интервала.  Переберем все комбинации (1-первый хеш, 2- второй хеш, квадратные скобки это интервалы):
1) [1,2] [0,0]
2) [1,0] [0,2]
3) [0,2] [1,0]
4) [0,0] [1,2]

Нам не подходят хеши найденные в разных интервалах, ибо нам нужно чтобы хешбаза была одинаковая. Поэтому выигрышные комбинации для майнера 1 и 4 (а не все 4), в итоге его сила уменьшилась в 2 раза


Пары nonce подойдут из разных интервалов, но важно чтобы они были в одном.
Поэтому формула вероятности при K>>1 будет примерно такая:

P=K*(1/2)^k

(сложение вероятностей полученной от умножения вероятностей)
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Не понял откуда ты взял HNonce1 и HNonce2, видимо формула должна быть такой:
Hash = Mesh(Hблока,HNonce1)
Hash2 = Mesh(H2блока,HNonce2)
Power=min(Power(Hash),Power(Hash2))

Так всё равно выгоднее менять хеш блока и перебирать один и тот же массив. Вероятность нахождения зависит от количества попыток, а не от интервала. Нахождение в одном интервале и в разных - равновероятностно, потому что рандом.
full member
Activity: 411
Merit: 135
Quote
Раз так, то нужно ввести в алгоритм сложности на смену базы. А что если используемый хеш nonce должен обладать определенными дополнительными условиями, например при применении его в формулу предыдущего хеша блока он тоже должен давать красивый хеш. Предыдущий хеш блока майнер поменять не может он уже зафиксирован другими участниками сети. Т.е. получается, что нужно действительно осуществить большой перебор HashNonce, чтобы найти подходящее значение.
В общем виде формула будет такова:
Hash = Mesh(Hблока,HNonce)
Hash2 = Mesh(Hблока-1,HNonce)
Power=min(Power(Hash),Power(Hash2))

Атака
GPU-майнер может найти HNonce для функции Hash2, а потом начать менять текущий блок, так чтобы его хеш подходил к этому Nonce. Например, сделет 1 млн переборов найдет nonce с силой = 20 бит, а потом изменяя хеш текущего блока сделает еще в среднем 1 млн переборов и найдет подходящий хеш.


Анализ
Что имеем:
Майнер все так же может менять базу.

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

В общем виде формула будет такова:
Hash = Mesh(Hблока,HNonce)
Hash2 = Mesh(H2блока,HNonce)
Power=min(Power(Hash),Power(Hash2))

Майнер делает перебор 1 млн вариантов находит HNonce1 и HNonce2, с реднем он получит по 20 бит силы pow. Майнер дальше продолжает перебирать варианты, если он меняет базовый хеш, то ему придется заново искать HNonce1 и HNonce2. И вот почему:
Поиск это процесс случайный, события нахождения хешей независимы. В среднем за миллион переборов он найдет 20 бит. Повторяя 1000 раз он может улучшить результат для каждого хеша на 10 бит, но только если не менялась база, если меняется база, то эти события (приход хеша с 30 битами силы) высоковероятно произойдут в разных итерациях.

Если майнер разбивает поиск хеша на k+1 интервалов в которых меняет базовый хеш, то вероятность нахождения двух хешей с максимальным pow в одном интервале составляет:
P=(1/2)^k


Таким образом зависимости от того во сколько у GPU-майнера меньше памяти во столько в экспоненциальной зависимости уменьшается его мощность вычислений по сравнению с CPU-майнером.

full member
Activity: 411
Merit: 135
Атака
Quote
Какую бы функцию ты не применил, атакующему ничего не помешает 1 раз заполнить память своего GPU хешами, а после намного быстрее чем на CPU искать подходящее значение в этом "небольшом" массиве банально меняя хеш блока левыми транзакциями. Терабайты памяти не нужны, можно обойтись даже мегабайтами.

Анализ
Что имеем:
В качестве базы используется хеш блока, а итерация выполняется по nonce в классическом случае и по HashNonce в предлагаемом алгоритме. Т.е. по формулу Hash=h(Hблока,Nonce)
В алгоритме узкое место - это возможность майнера изменить базу, т.е. хеш-блока и начать заново итерации, т.е. в итоге  обойтись меньшим количеством памяти.

Пути преодоления:
Раз так, то нужно ввести в алгоритм сложности на смену базы. А что если используемый хеш nonce должен обладать определенными дополнительными условиями, например при применении его в формулу предыдущего хеша блока он тоже должен давать красивый хеш. Предыдущий хеш блока майнер поменять не может он уже зафиксирован другими участниками сети. Т.е. получается, что нужно действительно осуществить большой перебор HashNonce, чтобы найти подходящее значение.

В общем виде формула будет такова:
Hash = Mesh(Hблока,HNonce)
Hash2 = Mesh(Hблока-1,HNonce)
Power=min(Power(Hash),Power(Hash2))

где:
Power() - это число первых нулевых бит
Mesh() - простая функция перемешивания, в данном случае подойдет простой XOR

Кстати с применением нового расчета Power как min значение числа нулевых битов двух хешей, получается что:
Майнеры будут оптимизировать поиск, так чтобы Power двух значений совпадал
Число переборов вырастает квадратически, например если раньше 1 млн переборов давал 20 бит, то теперь будет давать 10 (все также нужно найти 20 бит, но по 10 в каждом хеше)

P.S.
fxpc - награда 100К Тера за найденный вариант атаки


full member
Activity: 411
Merit: 135
Quote
Какую бы функцию ты не применил, атакующему ничего не помешает 1 раз заполнить память своего GPU хешами, а после намного быстрее чем на CPU искать подходящее значение в этом "небольшом" массиве банально меняя хеш блока левыми транзакциями. Терабайты памяти не нужны, можно обойтись даже мегабайтами.

Да, ты прав. Можно менять содержимое блока и обойтись мегабайтами. Это изъян алгоритма. Надо думать.
Извини, невнимательно прочитал....
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Вообще скорость GPU нам не важна пусть будет быстрые расчеты и пусть имеет быструю память. Например для GTX 1060 расчет sha3 keccak = 480 Mh/s

Идея русским языком - мы ускоряем ЦПУ!

В чём тогда заключается защита от GPU-майнинга и о каком ускорении речь, если GPU на порядок быстрее? У тебя раз в 10 000 блоков генерируется HashTemp массив и ты отталкиваешься от того что для майнинга он нужен целиком, а теория вероятности говорит о том, что массива из 1 хеша достаточно, но оптимальнее по производительности массив равный объёму памяти GPU. Причём здесь терабайты памяти и скорость расчёта SHA-3? Уйма памяти и хешрейт не нужны, нужна высокая пропускная способность памяти и по этому параметру GPU уделывает CPU, не говоря уже про несколько GPU.
full member
Activity: 411
Merit: 135
Насколько мне известно такой карты не существует. Есть GTX 1060, у которой в зависимости от модели пропускная способность памяти 160-216 GB/s.
Ок, за замечания по названию спс, подправлю.


Quote
Какую бы функцию ты не применил, атакующему ничего не помешает 1 раз заполнить память своего GPU хешами, а после намного быстрее чем на CPU искать подходящее значение в этом "небольшом" массиве банально меняя хеш блока левыми транзакциями. Терабайты памяти не нужны, можно обойтись даже мегабайтами.

Вообще скорость GPU нам не важна пусть будет быстрые расчеты и пусть имеет быструю память. Например для GTX 1060 расчет sha3 keccak = 480 Mh/s

Идея русским языком - мы ускоряем ЦПУ!

см:

Введение

Цель данного алгоритма уравнять между собой людей майнящих на CPU и на GPU. Для достижения этого мы предлагаем использовать память, но в отличие от других похожих алгоритмов (например Ethash) в нашем алгоритме память не тормозит работу  GPU, а ускоряет работу CPU. Это можно осуществить тем, что при подборе хеша использовать не целое число nonce, а определенное значение, которое трудоемкое для вычисления - например вычисленное по алгоритму sha3 и допустить применение этого значения для перебора в широком диапазоне вычисления хеша блоков. Таким образом будет выгоднее сохранять эти значения в памяти для подбора, чем вычислять заново. Такая выгода должна сохраняться даже если скорость вычислительных ресурсов увеличится в 1000 раз.

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Давайте прикинем:
GPU: GTS 1060 за 1 секунду создаст и сравнит порядка 0.5 млрд хешей.
Компьютер: используя память DDR4-2133 будет иметь иметь скорость канала равную 17Гб/с и поэтому сможет сравнить тоже порядка 0.5 млрд хешей
Что очень хорошо.

Насколько мне известно такой карты не существует. Есть GTX 1060, у которой в зависимости от модели пропускная способность памяти 160-216 GB/s.

Кстати шаг 2 основного алгоритма надо изменить, я нашел слабое место:

Атака:
Если для заданного блока нет подходящего (т.е. с высоким уровнем pow) значения во временной таблице, можно изменять содержимое блока, так чтобы хеш  изменился. Времени много - целая секунда. В итоге будут левые транзакции в блоке, блоки станут уникальными и будут долго распространяться в сети.

Защита:
Вместо операции XOR применять лучше перемешиваемую функцию, но обязательно быструю (не обязательно криптографическую) - главное защита от упорядоченного хранения расчетов и невозможности быстрого поиска - ибо он для нас вреден

Какую бы функцию ты не применил, атакующему ничего не помешает 1 раз заполнить память своего GPU хешами, а после намного быстрее чем на CPU искать подходящее значение в этом "небольшом" массиве банально меняя хеш блока левыми транзакциями. Терабайты памяти не нужны, можно обойтись даже мегабайтами.
full member
Activity: 411
Merit: 135

Объявлена награда за вклад в развитие этого алгоритма в размере 500К Тера
https://bitcointalksearch.org/topic/m.45381046
full member
Activity: 411
Merit: 135
При общении с одним товарищем выяснилось что требуется пояснение...


1. Тут как бы два нонса. Первый - это просто число Nonce,  оно нужно для создания второго нонса HashTemp (хеша) и именно второй нонс используются в финальном хеше SimpleMesh (который очень быстро должен считаться, почти как XOR)
2. В этом алгоритме мы не GPU тормозим за счет использования памяти, а мы ускоряем CPU (примерно в 1000 раз).
full member
Activity: 411
Merit: 135
Алгоритм с защитой от GPU-майнинга

Порядок расчета:
1. Вычисляется HashTemp = sha3(PrevHashXXX , Nonce)
2. Получаем Hash = HashTemp XOR CurrentDataHash

Нелегко мне вас понять, но я попробую.

В вашем алгоритме осуществляется перебор по двум параметрам: Nonce и PrevHashN.
То есть, берётся хеш последнего блока и производится перебор Nonce.
Если перебор Nonce не дал нужный Hash, значит
берётся хеш следующего блока (высота_блока = высота_блока - 1) и снова перебирается Nonce.
и т. д.

Получается, что у вас на одно вычисление PrevHashN приходится 232 итераций Nonce. То есть, у вас преобладают вычислительные операции, не требующие больших объёмов памяти.

А PrevHashN можно вычислять на лету, это тяжёлая операция, требующая обращения к БД блоков, но она выполняется очень редко. CPU вычисляет PrevHashN и CurrentDataHash, даёт их GPU, а GPU итерирует Nonce (от 0 до 232) и проверяет хеш на соответствие сложности, что не требует больших объёмов памяти.  

Привет, спасибо за ответ.


1. Перебор Nonce допускается гораздо больше, например 264 что овердофига и поэтому переход на предыдущие блоки уже не требуется (ну т.е. суть не в этом).
2. Сами вычисления sha3 медленные, поэтому выгоднее их сохранять в памяти. Для того чтобы подставлять в формулу на шаге 2.
3. Алгоритмом допускается использовать старые значения но не более например 10000 блоков.

Давайте прикинем:
GPU: GTS 1060 за 1 секунду создаст и сравнит порядка 0.5 млрд хешей.
Компьютер: используя память DDR4-2133 будет иметь иметь скорость канала равную 17Гб/с и поэтому сможет сравнить тоже порядка 0.5 млрд хешей
Что очень хорошо.



Кстати шаг 2 основного алгоритма надо изменить, я нашел слабое место:

Атака:
Если для заданного блока нет подходящего (т.е. с высоким уровнем pow) значения во временной таблице, можно изменять содержимое блока, так чтобы хеш  изменился. Времени много - целая секунда. В итоге будут левые транзакции в блоке, блоки станут уникальными и будут долго распространяться в сети.

Защита:
Вместо операции XOR применять лучше перемешиваемую функцию, но обязательно быструю (не обязательно криптографическую) - главное защита от упорядоченного хранения расчетов и невозможности быстрого поиска - ибо он для нас вреден.





legendary
Activity: 2314
Merit: 2300
Алгоритм с защитой от GPU-майнинга

Порядок расчета:
1. Вычисляется HashTemp = sha3(PrevHashXXX , Nonce)
2. Получаем Hash = HashTemp XOR CurrentDataHash

Нелегко мне вас понять, но я попробую.

В вашем алгоритме осуществляется перебор по двум параметрам: Nonce и PrevHashN.
То есть, берётся хеш последнего блока и производится перебор Nonce.
Если перебор Nonce не дал нужный Hash, значит
берётся хеш следующего блока (высота_блока = высота_блока - 1) и снова перебирается Nonce.
и т. д.

Получается, что у вас на одно вычисление PrevHashN приходится 232 итераций Nonce. То есть, у вас преобладают вычислительные операции, не требующие больших объёмов памяти.

А PrevHashN можно вычислять на лету, это тяжёлая операция, требующая обращения к БД блоков, но она выполняется очень редко. CPU вычисляет PrevHashN и CurrentDataHash, даёт их GPU, а GPU итерирует Nonce (от 0 до 232) и проверяет хеш на соответствие сложности, что не требует больших объёмов памяти.   
full member
Activity: 411
Merit: 135

Небольшие расчеты:

Современный, но доступный всем компьютер рассчитывает хеш sha3 со скоростью порядка 1Mh/s, размер хеша 32 байта, т.е. 32Мбайта данных в секунду. Если использовать MaxN = 1000, то размер таблицы составит максимум 32Гбайта.

Сейчас максимальный размер памяти видеокарт в свободной продаже 16Гбайт и 24Гб не в свободной продаже, но теоретически доступные.
Скорость заполнения примерно в 1000 раз быстрее, т.е. 32Гбайта в секунду. Таким образом скорость поиска хеша будет практически равная. Но видеокарты выгодно использовать для ускорения заполнения памяти и заполнять не 32Гб, а например 1Терабайт.. Для частичной защиты от этого можно для построения предрассчитанных HashTemp  применить более быстрый вариант sha3 - с меньшим числом раундов перемешивания (например уменьшить в 2 раза). В итоге для данного примера скорость будет отличаться не более чем в 16 раз.
full member
Activity: 411
Merit: 135
Алгоритм с защитой от GPU-майнинга TeraHash

Назовем его именем TeraHash

Версия 0.1.1

На вход подается 32-байтный хеш данных текущего блока CurrentDataHash, нужно найти такой Nonce (целое число), чтобы в результате получился подходящий для нас хеш (с максимальным значением начальных нулей).
Ограничение:
1. Поиск должен быть оптимизирован на использование памяти - для защиты от GPU-майнинга
2. Проверка должна осуществлять при минимальном количестве памяти и выполняться быстро - примерно со скоростью вычисления sha3


Порядок расчета:
1. Вычисляется HashTemp = sha3(PrevHashXXX , Nonce)
2. Получаем Hash = HashTemp XOR CurrentDataHash

PrevHashXXX - 32-байтный хеш предыдущего блока, отстающий на N блоков от текущего (максимальная глубина ограничена определенным числом, например 10000 блоков)
Nonce - число для перебора значений от 0 до макс целого числа

Таким образом в блокчейн записывается:
CurrentDataHash,Nonce, N  - по которым быстро восстанавливается хеш блока

Т.е. здесь основная идея один раз рассчитать различные значения HashTemp с разными Nonce, а потом 10000 блоков просто подставлять значения через операцию XOR для лучшего подходящего хеша.

Особенность: из-за операции XOR можно так упорядочено расположить предрассчитанные значения HashTemp в памяти, что вообще не будет перебора Nonce - поиск будет вестись за логарифм времени. Соответственно при поиске CPU нагружаться не будет. Большое значение в алгоритме будет иметь размер памяти. Компьютеры с Терабайтом памяти будут 100 раз быстрее чем 10Гбайт. Но если ограничить максимальный размер N, то можно уменьшить эту разницу. Но это делать нужно осторожно, чтобы GPU-карты продолжали оставаться неконкурентными.

Jump to: